Не могу удержаться от соблазна выразить еще немного экспрессии в отношении сегодняшней ситуации с языками программирования. Как обычно, я не претендую на знание истины, а просто хочу поделиться своими мыслями/наблюдениями. Соглашаться с ними или нет — дело ваше.
Какую обувь купить для занятия спортом? Кроссовки, вроде, рекомендуют везде, но мне в ластах плавать удобнее! © developes.org.ua
Довольно трудно представить себе гипотетический язык, который будет одинаково хорошо подходить как для создания десктоп-приложений, так и для веб-разработки, составления запросов к БД или разметки в стиле XML.
***
Можно представить себе json-структуру, аналогичную структуре веб-страницы, или запрос к БД, написанный на Haskell . Но тут есть две проблемы. Во-первых, заниматься версткой «страниц на json» я бы и врагу не пожелал. Во-вторых, помимо языков разметки и запросов к БД, существуют еще множество других языков — регулярные выражения , языки комментирования а-ля Doxygen (хотя в Haskell это тоже предусмотрено ) и тп.
***
Сомнительно, что когда-нибудь программисты будут использовать в своей работе один-единственный язык . Но ведь ничто не мешает создать язык, который можно будет использовать в 95% случаев. Или 2-3 языка, таких, чтобы для 100% случаев подходил хотя бы один из них.
***
А нужен ли кому-нибудь универсальный язык программирования? Вряд ли один программист единовременно занимается созданием веб-приложений, написанием драйверов под FreeBSD и разработкой мобильного Jabber-клиента. Так может, пусть веб-программисты пишут на PHP, системщики — на Си, а программисты под Android — на Java?
***
С другой стороны, разве плохо иметь одну большую кодовую базу на все случаи жизни? Или иметь одно больше сообщество программистов, пишущих на одном универсальном языке? А чем плоха возможность уйти из веб-разработки в разработку компьютерных игр без необходимости учить еще один язык программирования? И самое главное — что, собственно, мешает созданию такого универсального языка?
***
С помощью Java можно писать приложения и для десктопа, и для мобильных устройств, и для веб. Даже JavaScript можно рассматривать, как диалект Java. И жизнь была бы прекрасна и удивительна, если бы одна компания не сделала свой форк Джавы, а еще одна не использовала для своей мобильной платформы Obj-C.
***
Иногда я утешаю себя тем, что большинство языков программирования в какой-то степени являются диалектами языка Си. Или тем, что все языки можно рассматривать как один очень-очень сложный язык программирования, используемый жителями планеты Земля.
***
А еще можно рассматривать C++ как очень высокоуровневый язык ассемблера. Особенно если вспомнить, что в нем действительно можно использовать ассемблерные вставки. Также мне нравиться думать о Perl 6 , как об обычном Perl (который Perl 5 ) с прагмой «use v6».
***
Хороший язык программирования должен иметь широкою область применения, приемлемую производительность, исчерпывающую документацию, большое сообщество пользователей, развитый инструментарий (IDE, отладчики, профайлеры), большую кодовую базу и быть кроссплатформенным.
***
Сборщик мусора — не такая уж плохая штука. Беда в том, что иногда он создает больше проблем , чем решает. А решает он по сути только проблему циклических ссылок, ибо со всем остальным прекрасно справляются обычные счетчики ссылок.
***
Платформы .NET и JVM совсем неплохи. Проблема в том, что не у каждого пользователя Windows установлена JVM и не у каждого пользователя Linux установлен Mono. Бизнес такой бизнес .
***
Конечно, к языку программирования это имеет посредственное отношение, но мне кажется, что хороший язык должен иметь один большой репозиторий исходных кодов, как CPAN или Hackage . Такие репозитории существенно упрощают поиск нужной библиотеки или слежение за обновлениями. Кто работал с одним из них, тот понимает.
***
Хороший язык должен изменяться, чтобы успевать подстраиваться под современные реалии. А реалии меняются довольно часто. Например, в Intel и AMD отказались от увеличения тактовой частоты процессоров в пользу увеличения числа ядер, благодаря чему сразу возрос интерес к функциональным языкам программирования . Мы можем написать программу на C++, работающую под Windows, Linux и MacOS, но как написать кроссплатформенное мобильное приложение, работающее под Windows Phone, Android и iOS?
***
Хороший язык должен быть высокоуровневым. Например, такие вещи, как unicode строки, умные указатели и динамические массивы должны «идти из коробки». При этом нам не хотелось бы потерять какие-нибудь низкоуровневые вещи — например, возможность вызывать системные API.
***
Наконец, без наличия соответствующих вакансий, мало кто будет писать даже на хорошем языке .
***
Некоторые проекты внушают надежду. Например, Haskell, Scala , в меньше степени — D и Shedskin . И не только они. Также существует интересное мнение, что в скором времени C++ вернется и жестоко нас покарает .
***
Есть подозрения, что языки программирования развиваются подобно особям в генетическом алгоритме . То есть, они мутируют ( Perl 5 → Perl 6 ) и скрещиваются (Scala = Java + Haskell), а программисты определяют приспособленность особей. Хорошие языки живут и развиваются, плохие — вымирают. И нам с вами остается только наблюдать за эволюцией языков. Природа сама все сделает, как надо.
***
Вот только интересно, нет ли способа ее поторопить?