Подборка онлайн компиляторов: запускаем и тестируем код прямо в браузере. Бесплатные компиляторы PHP для составления скриптов native code,.NET или Java байт-кода
Почти все разработчики рано или поздно сталкиваются с необходимостью запустить или быстро проверить какой-то код, но не все знают, что для такой простой задачи совсем не обязательно запускать тяжёлые десктопные IDE или прикладные компиляторы. Достаточно воспользоваться онлайн-инструментами, которые позволяют всё сделать намного быстрее: Ctrl+C, Ctrl+V, Run, вжух - и вывод программы уже перед вашими красноватыми глазами.
Мы отобрали лучшие онлайн-компиляторы: некоторые из них довольно универсальны, другие заточены под строго определённые задачи. В любом случае лишними они не будут.
Koding
Koding.com не является онлайн-компилятором в привычном смысле. Каждый пользователь сервиса может создать в облаке несколько полноценных виртуальных машин под управлением Ubuntu 14.04, на которых может сделать всё, что пожелает, в том числе - скомпилировать код. Все популярные языки поддерживаются по умолчанию, но вы с лёгкостью сможете добавить свои.
Кроме панели управления своим сервером, в интерфейсе доступна удобная IDE и окошко терминала. Koding является самым универсальным средством, далее мы рассмотрим более простые и специализированные варианты.
IdeOne
IdeOne - это онлайн компилятор, а также инструмент отладки, который позволяет прямо в браузере выполнять код на более чем 60 языках программирования и их конкретных версиях.
Для тех, у кого нет девушки, создатели предусмотрели компиляцию кода на языке Brainfuck.
JDoodle
Ещё один онлайн-компилятор, который поддерживает множество языков, в том числе и тех, которые вы не найдете во многих других онлайн-компиляторах. Приятной особенностью JDoodle является возможность совместной работы - просто отправьте ссылку на вашу текущую сессию и плодите баги с двойной скоростью!
jsFiddle
Пусть название вас не обманывает - jsFiddle создан не только для JavaScript. Этот онлайн-редактор для фронтенда позволяет проверить любое сочетание JavaScript, HTML и CSS. Разумеется, есть поддержка разных фреймворков, например, jQuery, Vue, React, TypeScript, а также CSS-препроцессоров вроде SCSS. Для удобства вы можете выбрать привязку клавиш из любимого редактора. Правда, только в том случае, если ваш любимый редактор - Vim, Emacs или Sublime Text.
CodePad
CodePad - минималистичный сервис, в котором можно хранить код, делиться им и запускать с последующим выводом результатов его выполнения. На выбор предоставляется несколько наиболее распространённых языков, но, к сожалению, без выбора конкретных версий интерпретаторов или компиляторов.
Главным его достоинством является простота и лёгкость: сайт будет быстро работать даже при медленном интернете. Предусмотрено автоподключение стандартных заголовков, а также интеграция с Vim или Emacs.
Из минусов можно назвать полное отсутствие подсветки синтаксиса при вводе кода в форму. Впрочем, при просмотре уже сохранённой записи подсветка присутствует.
GCC GodBolt
GCC GodBolt - интерактивный компилятор языка С++. Попал в эту подборку по той причине, что имеет простой интерфейс, а также большое количество настроек, в том числе для опций, регулируемых с помощью ключей.
Выбирать можно из множества версий компиляторов, включая самые последние. Из интересных особенностей можно отметить моментальный перевод кода программы на язык ассемблера.
PHP - интерпретируемый язык программирования, при каждом запросе происходит анализ и "выполнение" исходного кода. Такой подход, конечно, очень удобен на стадии разработки проекта, но вносит лишний шаг в процесс выполнения продакшен кода. Таким образом интерпретация, на первый взгляд сильная сторона PHP, стоит лишнего процесорного времени и ресурсов.
Ниже речь пойдет о компиляторах, позволяющих компилировать php код в C++, а его в исполняемый. Таким образом PHP приложения выполняются непосредсвенно процессором, минуя интерпретатор.
Проверим все ли так хорошо на практике.
Как работает интерпретатор
Интерпретация PHP кода проходит в два этапа:
- Парсинг кода и генерация опкодов (Zend opcodes) - инструкций, понятных интерпретатору.
- Выполнение опкодов.
Тогда как первая фаза хорошо поддается оптимизации (использование кеша опкодов), вторая довольно закрытая - интерпретатор всегда является посредником между набором команд и процессором, выполняющим их. Без интерпретатора, процессору не понять, чего делать с опкодами.
Чтобы избавиться от звена-интерпретатора придумали компиляторы, наиболее популярный и свежий из них HipHop от Facebook. Пощупаем его поближе.
HipHop PHP
HipHop написан разработчиками Facebook и представляет собой приложение, которое:- оптимизирует PHP код
- конвертирует в С++
- генерирует из вашего приложения многопоточный веб-сервер исполняющий его
- компилирует в исполняемый код при помощи g++
Таким образом на входе PHP код, на выходе сервер, частью которого является написаный функционал.
Проверим, как справится HipHop с компилированием приложения написаного с использованием фреймворка, например Wordpress.
Компилируем Wordpress
После установки HipHop в папке src/hphp/ получим файл hphp, который и является компилятором. Перед началом компиляции, устанавливаем переменные среды:
Cd .. # переходим в папку с hiphop export HPHP_HOME=`pwd` export HPHP_LIB=`pwd`/bin export CMAKE_PREFIX_PATH=`/bin/pwd`/../
и вперед!
Скачиваем Wordpress и разархивируем архив:
Wget http://wordpress.org/latest.tar.gz tar zxvf latest.tar.gz
Копируем wp-config-sample.php в wp-config.php и указываем настройки соединения с базой (в настройках хоста указываем 127.0.0.1, а не localhost).
Для удачной компиляции нужно немного пропатчить Wordpress:
- Открываем wp-includes/js/tinymce/plugins/spellchecker/classes/SpellChecker.php и заменяем: function &loopback(/* args.. */) { return func_get_args(); } на function &loopback(/* args.. */) { $ret = func_get_args(); return $ret; }
- В wp-includes/query.php, вместо if (!isset($q["suppress_filters"])) $q["suppress_filters"] = false; вставляем $q["suppress_filters"] = true;
Wordpress готов.
Hiphop"у нужно указать список файлов, которые будем компилировать - получим его и сохраним в files.list:
Find . -name "*.php" > files.list
Все готово к компиляции, приступим:
$HPHP_HOME/src/hphp/hphp --input-list=files.list -k 1 --log=3 --force=1 --cluster-count=50
После завершения выполнения команды, во временной папке (в начале компиляции hphp покажет ее путь, что то типа "/tmp/hphp_ptRgV1") получим скомпилированный веб-сервер. Запустим его (если на 80 порту, что-то висит, например apache или nginx - нужно сначала остановить, чтобы освободить порт):
Sudo /tmp/hphp_6s0pzd/program -m server -v "Server.SourceRoot=`pwd`" -v "Server.DefaultDocument=index.php" -c $HPHP_HOME/bin/mime.hdf
Вуаля! Перейдя на http://localost увидим рабочий Wordpress блог.
Производительность
Посмотрим, будет ли прирост производительности, по сравнению с нескомпилированой версией Вордпреса, бегающей на apache2. Ниже графики зависимости скорости генерации страниц от количества параллельных пользователей.
Как видите результаты получились шокирующие: скомпилированый блог работает в среднем в 6 раз быстрее! Среднее количество обработанных запросов за секунду в нескомпилированом 9, а в скомпилированом 50! Не знаю как вас, а меня эти результаты поразили, такого сильного прироста производительности не ожидал.
Подведем итог
После таких ошеломляющих результатов можно сказать только одно - ребята из Facebook поработали на славу. Компилятор действительно делает из приложения ракету и хотя перед компилированием приложение нужно подготавливать - результат того стоит.
В тему:
Если пост понравился - нажмите на гугловский +1 - мне будет больше мотивации писать ещё и просто приятно.