Сегодня будет серия заметок в полном смысле “размышлизмы” – думал, думал, ничего не придумал. Но ведь думал же, размышлял… :)
Что может помочь языкам вроде Ada и Eiffel?
На RSDN дали ссылочку на материалы конференции BoostCon 2009. Просмотрел бегло первую презентацию C++0x overview and Compiler support. С++0x обещает много вкусного, но жалко, что процесс его выхода откладывается до 2010/11 годов. Я уж, грешным делом, надеялся, что C++0x ратифицируют в этом году. Ну да ладно, зато есть надежда, что к моменту ратификации стандарта нужные мне вкусности языка (лямбды, Rvalue refernces, atomic-операции, поддержка многопоточности в стандартной библиотеке, вывод типов) уже будут реализованы в компиляторах GCC и VC++.
Но суть не в этом. Язык C++ после выхода C++0x станет еще сложнее. Да, в чем-то он упроститься, но все-таки в общем он станет больше и сложнее. Я уже не представляю, как можно будет обучать C++ новичков. Мне еще, можно сказать, повезло – новые возможности языка я мог осваивать постепенно, по мере выхода новых версий компиляторов. А если кто-нибудь берется изучать C++ сейчас… И что будет лет через пять?
Наверное, в том, что язык программирования становится очень сложным, нет ничего удивительного. Сложные задачи требуют сложных инструментов. И усложнения происходят не только в C++, но и в гораздо более простых, по началу, Java и C#. И данный процесс будет продолжаться.
Тезис о том, что язык становится все более и более переусложненным, и что его уже нужно будет как-то урезать, всплыл в RSDN-овском обсуждении. На что я сказал, что смысла нарушать совместимость версий C++ нет. Мол, если кто-то хочет несовместимый с C++ язык, то уже сейчас можно брать Ada 2005 или Eiffel. Поскольку они одного поля ягоды и, в общем-то, предназначены для одних и тех же задач (Java и C# здесь не будем рассматривать, т.к. это managed платформы, у них своя ориентация).
Так вот, сказал я про Ada 2005 и Eiffel и подумал: “Ведь сейчас это, фактически, нишевые языки. И даже если пока они еще не находятся в глубокой ж…, то совсем скоро рискуют там оказаться. И что может помочь им из этой ж… выбраться?”
Прежде, чем идти дальше, нужно пояснить, почему я думаю, что Ada с Eiffel находятся именно там, где они сейчас находятся. Просто потому, что они не на слуху. Мне не встречается информация о каких-то OpenSource проектах, которые делают на этих языках. Я не слышал, чтобы кто-то написал на Ada или Eiffel какую-нибудь freeware или shareware приблуду. Я не видел, чтобы где-нибудь в форумах встречался человек, который бы регулярно делился опытом выполнения проектов на Ada/Eiffel. Даже книги по этим языкам нужно целеустремленно искать. В общем, вроде как языки и есть, и даже используются в очень серьезных секторах (та же Ada до сих пор, насколько мне известно, основной язык для разработки разнообразного ПО для авиации и военных в США). Но их не видно, они не на слуху. А раз язык не на слуху, очень невыгодно брать его для реализации “обычных” проектов, в обычных условиях. Потому, что готовых специалистов для него нет, инструменты либо очень дорогие, либо их не найти, микроскопическое community.
Итак, если поставить цель сделать языки Ada и Eiffel на порядок более привлекательными для массового использования, то что дня этого нужно?
А вот и не знаю, что именно. Боюсь, что они уже достигли той точки, после который обычному разработчику они, что называется, “даром не нужны”. Т.е., даже если средства разработки и фреймворки для Ada/Eiffel будет раздаваться совершенно бесплатно для любых проектов (сейчас, AFAIK, есть GPL версии GNAT Pro и Eiffel Studio, которые бесплатны для OpenSource разработок), то они все равно окажутся невостребованными. Ну не верится мне, что, например, армия разработчиков shareware-программ вдруг откажется от C++ в пользу Eiffel (хотя с практической точки зрения это вполне могло бы иметь смысл). Т.е. для создания программ класса “быстро-написал-и-быстро-выбросил” эти языки точно не подходят. Их вотчина – солидные, большие, длительные проекты. Где они уже, собственно говоря, и присутствуют. И еще будут присутствовать какое-то время. Поскольку мегатонны кода уже написаны. Вот так Ada с Eiffel-ем, вероятно, и будут продолжать сидеть в уже занятых нишах. Откуда их потихонечку, помаленечку, будут выживать. Тот же C++ с одной стороны. Те же Java/C# с другой. Просто потому, что одно за одним подрастают поколения программистов, которые о Ada и Eiffel даже не слышали. Не говоря уже о том, чтобы попробовать. И когда на этих программистов ляжет ответственность за развитие унаследованных Ada/Eiffel проектов, то очень многие из них не откажутся от соблазна перейти на что-нибудь более привычное. Пусть не сразу, но постепенно, со временем выбрасывая старый код и заменяя его новым.
Что во всем этом мне кажется ненормальным, так это то, что с технической точки зрения у того же C++ совсем не много преимуществ над Ada/Eiffel. Правильнее было бы сказать, что где-то лучше C++, где-то хуже. А в общем, тоже самое, вид сбоку. Только С++ популярный и раскрученный, а Ada/Eiffel – нет. Хотя у Ada и Eiffel, на мой взгляд, “коэффициент спокойного сна” гораздо выше, чем у С++. Я бы и сам, наверное, сейчас предпочел бы программировать на Eiffel, а не на C++. Как раз из-за того, что в своем Eiffel-евском коде я бы был более уверен, чем в C++ном. Но, слишком много всяких нетехнических факторов против Eiffel. Это-то и обидно. Ну да ладно я, у меня ситуация такая, что слишком уж много чего от имеющегося C++ кода зависит. Но обидно, что какой-нибудь юный разработчик не сможет взять для реализации какой-нибудь своей идеи Ada или Eiffel по тем же самым нетехническим соображениям.
По большому счету, тут можно задать вопрос: “А зачем вообще нужно пробовать пропагандировать Ada и Eiffel? Чем их использование будет лучше использования C++?” Но это уже совсем другая история…