Будет ли возможен облачный компилятор?

Будет ли какой-либо практической выгодой писать облачный компилятор, который будет распределять скомпилированные блоки кода на разных машинах в облаке? Может ли быть полезным получение архитектуры "программное обеспечение как услуга" прямо в приложении сразу после компиляции, или внутренняя задержка сделает такой подход неосуществимым?

9 ответов

Решение

Я не уверен, правильно ли я понял вашу точку зрения или есть другие ответы. Вы говорите о какой-то задаче автоматического распараллеливания? Ответы, приведенные до сих пор, говорят о распределенной компиляции - то есть об использовании облака для ускорения времени компиляции. Я предположил, что вместо этого вы говорите о компиляторе, предназначенном для ресурсов облачных вычислений.

Если вы на самом деле говорили о распределенной компиляции, то очевидно, что такие вещи, как distcc, будут делать то, что вам нужно.

Если бы вы задавали гораздо более интересный (IMHO) вопрос о том, будет ли полезен компилятор, предназначенный для распределенных архитектур, мой ответ - громкое "да". Тем не менее, выполнимость лежит в основе проблемы. Задержка не является проблемой как таковой, однако согласованность (т. Е. Обеспечение правильных версий всех модулей) и наличие достойной эвристики будут проблемой.

Лучшим местом для поиска, вероятно, был бы язык программирования Occam - он предназначался для транспьютера, который не был полностью отличен от типов архитектур распределенных систем, которые нам интересны в наши дни. Я полагаю, что есть некоторые работы, которые следуют из Оккама, которые могут предоставить полезные подсказки относительно того, каков уровень техники.

Ты можешь использовать distcc а также make -j для распределенной компиляции наиболее типичного кода Unix. Если вы регулярно компилируете большие куски кода, это может привести к значительному ускорению... afaik samba (бесплатная реализация smb) использует его для этого. distcc выполняет только фазу компиляции в распределенном режиме, оставляя предварительную обработку и связь с главной машиной.

Взаимодействие с "облаком" может вызвать задержку, но я все еще думаю, что с более сложным кодом на C++ это может быть очень полезно. Я думаю, если у вас есть более 100 модулей компиляции (например, файлы.cpp), вы можете получить заметное ускорение.

Я использовал такую ​​систему, но она работала на локальном кластере, а не на облаке. Но принцип был бы точно таким же. К сожалению, я не могу вспомнить, как это называлось - но это было здорово, смотреть, как ваши исходные файлы передаются на другие компьютеры в вашем отделе.

Изменить: он назывался IncrediBuild.

Я считаю, что это будет нецелесообразно. Современное оборудование может выполнить любую компиляцию небольших и средних проектов в разумные сроки; тем более с многоядерными процессорами.

Единственным исключением является сборка всей операционной системы (например, Debian) из исходных текстов; для такого применения широко используются фермы сборки. Однако пользователи, нуждающиеся в фермах сборки, обычно могут создавать их сами, и им не нужно переходить в облако.

В XCode есть функция распределенной сборки, которая позволяет вам это делать, но я думаю, что в любом другом месте, кроме локальной сети, большую часть времени это будет происходить очень медленно.

Да, спасибо, что спросил, я также исследую в этой области. на самом деле это имеет большой смысл и существует, http://www.cloudcompiling.com/, но, как я вижу, это еще далеко, чтобы быть 10 лучших услуг.

Задержка заключается только в загрузке кода, поэтому, если разработчики работают с хорошим соединением и не слишком далеко (с точки зрения сетевых скачков и с "хорошими" скачками), это не будет проблемой.

Задержка в облаке - это проблема провайдера облачных вычислений, если вы облачный провайдер, то вам нужна хорошая стратегия балансировки.

Я видел хорошую демонстрацию запуска тестов JUnit поверх GridGain, и GridGain можно запускать в облаке.

Я не вижу особой ценности компилятора в облаке.

Я думаю, что это может быть полезно, если бы это был какой-то инструмент непрерывной интеграции. Для некоторых сред разработки получить правильную настройку сложно. Например, однажды я работал над проектом, в котором команда скомпилировала SWF-файлы, используя FlashDevelop и Adobe Flex SDK. Иногда было неудобно настраивать компьютер индивидуума. Если служба может отслеживать каталог проекта или git/SVN/etc. Репозиторий и сборка последней версии SWF, однако, я думаю, это было бы полезно.

Я думаю, что это будет полезно и для кроссплатформенных проектов. Или эта служба может поддерживать IDE в браузере, например, Mozilla Bespin.

Это зависит. У нас были старые компиляции на основе C++, которые занимали 3-4 часа. Для чего-то подобного было бы очень полезно разгрузить компиляцию. Но в проектах C++ это часто даже менее возможно.

В C# или Java время компиляции значительно быстрее, поэтому это может быть не так важно.

Другие вопросы по тегам