Hatred's Log Place

DON'T PANIC!

Sep 19, 2013 - 4 minute read - programming c++

Онлайн компиляторы C/C++ и не только

Иногда нужно быстро проверить работоспособность какой-то идеи или алгоритма. Хорошо, когда у вас Linux и какая-то система из семейства Unix с установленным компилятором (имхо, в 90% случаев это будет правдой), вам просто нужно открыть консоль вызвать vim/emacs/joe/mcedit/etc набросать программку и вызвать компилятор. Но иногда вы в гостях/командировке/интернет-кафе, в общем тогда, когда компилятора нет под рукой, но есть доступ в интернет. Тут помогут онлайн-компиляторы.

Отправной точкой можно взять ресурсы:

Из перечисленных там, мне понравились нижеперечисленные.

Лидеры

Лидеры моего внутреннего рейтинга. На основе развития за все годы существования этой заметки.

  • https://wandbox.org/
    • Мой фаворит Не совсем. Работает как-то медленно. Чаще https://cpp.sh запускаю (см ниже)
    • Плюсы:
      • Самые свежие версии компиляторов (см. ниже) и, соответственно, самые свежие версии стандартов.
      • Gcc/Clang/Zapcc на выбор и много вариантов версий
      • Удобный выбор версий стандарта (C++)
      • Доступен Boost разных версий и дополнительные библиотеки типа Sprout и MessagePack
      • Можно задать дополнительные опции компилятору (“Compiler options”)
      • Уже можно задать опции командной строки для приложения (“Runtime options”)
      • Можно передать программе STDIN
      • Можно создавать дополнительные текстовые файлы (например для программ, читающих из файлов). При этом, можно хитро извернуться и использовать WandBox как IDE: эти файлы могут быть исходниками, проосто печислите их в параметрах компилятора ;-)
      • Несколько языков
      • Можно шарить код
      • Автоматически сохраняет код между запусками браузера
      • Быстрый запуск по Ctrl+Enter
    • Минусы
      • Нет студийного компилятора
      • На момент “конец октября 2024”: интерфейс стал очень тормозным
  • http://coliru.stacked-crooked.com
    • Плюсы:
      • C++20, можно поиграться с параметром -std=XXX

      • Последняя версия компилятора

      • Можно выбрать компилятор: см минусы

        • А выбрать только так, вместо команды билда указать: ls /usr/local/bin/*g++* /usr/bin/*g++*
        • Итого, на август 2023:
          • g++ - актуальная версия (13)
          • g++-4.7
          • g++-4.8
          • g++-4.9
          • g++-5.1
          • g++-5.2
          • g++-5
          • clang++ - 5 версия
          • clang++-5
      • Можно задать параметры сборки

      • Автоматически сохраняет код между запусками браузера

      • Можно использовать для шаринга кода (внизу кропка Share)

      • Можно передать параметры программе через аргументы командной строки

      • Можно передать программе STDIN используя трюк Shell:

        g++ -std=c++20 -O2 -Wall -pedantic -pthread main.cpp && ./a.out << EOF
        Hey! I am stdin!
        EOF
        
      • Много шоркатов

    • Минусы:
      • Небольшой выбор компиляторов и версий и хакерский путь поиска оных
      • У меня пару раз не работал.
      • Язык только (?) C/C++
  • http://gcc.godbolt.org/ - тут укажу один минус сразу: он только компилирует, но не выполняет код и отображает ассемблерный листинг, что удобно для анализа всяких оптимизаций.
    • Плюсы:
      • Много разных компиляторов и их версий: gcc (4.4-4.8), arm-gcc (4.5-4.6), avr-gcc (4.5), mps430-gcc (4.5), clang (3.0), icc (13.0.1)
      • Показывает ассемблерный выход
      • Можно задать параметры компиляции
      • Можно шарить код
      • Мегатулза для анализа сгенерированного кода
      • На момент “август 2023” уже умеет выполнять код (не для всех компиляторов), для этого нужно нажать в окне ассемблерного выхлопа иконку с “+” и выбрать пункт “Executor From This”. Далее можно задать как параметры коммандной строки, так и данные на STDIN.
    • Минусы:
      • Для меня - больше нет :)
    • Субъективно: выполнение кода появилось, но всё же удобнее использовать его как инструмент анализа и оптимизации.
  • https://cppinsights.io/ - ещё один сервис уровня godbolt, но! Он показывает во что могут разворачиваться синтаксические конструкции, типа лябдб и, к примеру, идиомы “overload”
    • Плюсы:
      • Все актуальные стандарты
      • Помогает разбираться в тонкостях и нюансах
    • Минусы:
      • Не вижу, но смотреть особенности
    • Особенности:
      • Это не компилятор в прямом смысле слова. Он не запускает программу, не читает файлы, аргументы и т.п. Он нужен что бы развернуть синтаксические конструкции в простые, примитивные конструкции языка, более доступные для понимания.

Прочие

Которыми раньше пользовался, но которые по каким-то причинам ушли из моих фаворитов.

  • http://cpp.sh/
    • Особенности (ни плюс, ни минус, а данность):
      • Код собирается на сервере через emscripten в WebAssemply code, который уже выполняется непосредственно в браузере
    • Плюсы:
      • Короткое и лаконичное имя :-)
      • C++98, C++11, C++14, C++17, C++20, C++23 - по выбору (GCC 4.9.2)
      • Различные уровни оптимизации: O0, O1, O2, O3
      • Поддержка предупреждений: Wall, Wextra, Wpedantic
      • Boost 1.55 (больше никто не предоставляет)
      • Можно шарить код
      • Ввод через стандартный ввод: интерактивный (этого нет ни у кого больше) и текст см минусы
      • Сразу большое окно редактора
    • Минусы
      • Только C++
      • Нет работы с файлами
      • Не понимает завершения процесса по сигналу
      • Больше нет возможности передать параметры коммандной строки
      • Больше нет возможности передать STDIN
  • http://ideone.com
    • Август 2023: не открывается
    • Плюсы:
      • C++14 стандарт (компилятор gcc 8.2 и clang 8.0)
      • Можно шарить код + оставить аннотацию к нему (нажать “More options”)
      • Можно задать данные которые отошлются на STDIN программы
    • Минусы:
      • Нельзя задать параметры сборки
      • Нельзя передать параметры командной строки
      • Других стандартов C++ нет (С++98/03, C++11, C++17, C++20)

Tags: c c++ compiler programming web

Забавный баг Logitech Unifying и Linux

comments powered by Disqus