НовостиОбзорыСобытияIT@WorkРеклама
Идеи и практики автоматизации:

Блог

На чем разрабатывать боевые системы

Инструментарий для создания всевозможных "корпоративных систем" хорошо известен. Это визуальные среды программирования, ориентированные на быстрое формирование приложений с типовым клиентским (desktop или web) пользовательским интерфейсом и стыковку с базами данных (C#, C++, Delphi, PHP, ...). Но ведь эта "корпоративность" -- буквально капля в море, рядом вокруг нас -- невероятно огромный рынок систем, требующих высокой производительности и в то же время надежности кода: это ядра ОС и тех же корпоративных систем, системные утилиты и драйверы, всевозможные движки (аналитические, графические, СУБД...), АСУ ТП, низкоуровневый софт, работающий во всевозможном железе -- телефонах и автомобилях, телекомовской аппаратуре и АЭС, танках и космических станциях. Десятилетиями такой софт пишется на Си и С++ (и еще немножечко на Аде) -- но сегодня появляются более качественные альтернативы.

[spoiler]Две из таких альтернатив -- это языки D и Go, которые в октябре, причем независимо друг от друга, получили одобрение Фонда GNU на включение в состав компиляторов GCC. Надо отметить, что это очень большая честь: до сего дня в GCC входили Си, Си++, Objective-C, Фортран, Java и Ada. Вопросы по этому перечню могут возникнуть в принципе лишь к Аде (но на этом языке написано огромное число военных приложений) и к Objective-C (но это стандартный язык для разработки в Mac OS X).

За что же такой чести удостоились D и Go? Ведь более-менее известных языков программирования насчитывается сейчас наверное тысяч под десять, активно применяемых в больших проектах тоже не мало, тысяча точно наберется, и среди них множество весьма неплохих. Создавать их сегодня несложно, технологии генерации компиляторов развиты очень хорошо, достаточно описать соответствующую грамматику. Поэтому новый язык практически не имеет шансов хоть на какую-то популярность, новичку, тем более в промышленных масштабах, вообще немыслимо конкурировать с С++ -- и тем более интересно, почему сегодня весьма крупные проекты переводятся с С++ на D и Go.

Заслуга в популярности языка D целиком принадлежит его автору -- Уолтеру Брайтону, автору первого кросс-платформного компилятора С++ (Zortech C++). Он задумал D с целью объединить производительность классического Си с гибкостью новых языков наподобие Ruby и Python. D представляет собой упрощенный (в плане надежности и наглядности кода) вариант С++, дополненный рядом расширений -- автоматической сборкой мусора, защитой от ошибок, типичных для Си, включает полезные фишки, характерные для функциональных языков. При этом код на D компактнее С++ на треть, быстрее компилируется и выполняется. А главное, он кросс-платформный -- Брайтон воплотил в этой реализации свой огромный профильный опыт.

Пока Digital Mars улаживает с GNU имущественные права (все согласовано, остались мелкие формальности), а вот язык Go уже в GCC включен. История создания Go от D отличается очень сильно -- это язык, созданный корпорацией (Google); в этом процессе принимал участие Кен Томпсон, один из авторов языка Си.

Но во многом в нем воплощены идеи по принципу, схожему со случаем D -- прежде всего упрощенно-надежный синтаксис. Только ориентация сделана не на кросс-платформность, а на параллельные вычислениях. Кроме того, Google постарался реализовать в Go важный нюанс для современных agile-методик разработки (частые релизы) -- быструю сборку продукта. Так, компиляция миллионов строк кода на Go выполняется за считанные секунды! Крупные программы на Go характеризуются меньшей запутанностью (за счет, например, отказа от заголовочных файлов).
Ну и по достаточно очевидным причинам пока не существует официальной версии Go для Windows :) хотя есть самодельные переделки, Windows-версию можно также собрать с помощью библиотеки cygwin.

Итак, на чем же лучше создавать сегодня "боевые" системы -- когда проект потенциально может быть огромным, в работающей системе крайне нежелательно допускать баги, типовые для Си/С++ (например, выход за границы массивов, адресация внешних разделов памяти), но использовать скриптоподобные языки нежелательно из-за излишней "свободы", заторможенности, так как требуется максимальная эффективность уровня Си или C++, да и отладка желательна удобная?

Если платформой избрана Windows (практически любая, от настолок и мобилок до серверов, и от XP до Windows 8 и далее) -- это все же C#.
Если создаются масштабные сетевые, веб- и многоядерные/многопоточные системы -- это Go.
Если создается "тяжелый" кросс-платформный проект с ориентацией на системный уровень, встраиваемые устройства, работу на различном железе -- это D.