Будет ли возможен облачный компилятор?
Будет ли какой-либо практической выгодой писать облачный компилятор, который будет распределять скомпилированные блоки кода на разных машинах в облаке? Может ли быть полезным получение архитектуры "программное обеспечение как услуга" прямо в приложении сразу после компиляции, или внутренняя задержка сделает такой подход неосуществимым?
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 время компиляции значительно быстрее, поэтому это может быть не так важно.