Мысли вслух о развитии языков программирования
20 июля 2011
Не могу удержаться от соблазна выразить еще немного экспрессии в отношении сегодняшней ситуации с языками программирования. Как обычно, я не претендую на знание истины, а просто хочу поделиться своими мыслями/наблюдениями. Соглашаться с ними или нет — дело ваше.
Какую обувь купить для занятия спортом? Кроссовки, вроде, рекомендуют везде, но мне в ластах плавать удобнее! © 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), а программисты определяют приспособленность особей. Хорошие языки живут и развиваются, плохие — вымирают. И нам с вами остается только наблюдать за эволюцией языков. Природа сама все сделает, как надо.
***
Вот только интересно, нет ли способа ее поторопить?
Метки: Философия, Языки программирования.
Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.