ТЕМА НОМЕРА: История, порезанная тонкими ломтиками: Языки программирования. Вдоль и поперек
ТЕМА НОМЕРА: История, порезанная тонкими ломтиками: Языки программирования. Вдоль и поперек
Автор: Виктор Шепелев
Всю историю компьютерной индустрии и компьютерных наук с определенной точки зрения можно представить как историю развития языков программирования. Меняются времена, усложняются задачи, то, что раньше требовало человеко-лет, нынче энтузиасты делают на коленке за несколько недель; накоплена огромная масса типовых решений, типовых библиотек и типовых программистов. А создание, развитие и изменение языков программирования идет полным ходом.
Если бы «язык программирования» был всего лишь инструментом, вроде столярного, то очевидно, что за столь долгий срок (история развития языков программирования, если считать, к примеру, от первого Fortran’а, насчитывает больше полувека) должны бы возникнуть какие-то устоявшиеся «формы инструментов на каждый день» - по одной-две для каждой задачи (молоток, пила, отвертка), и дальнейшее развитие было бы лишь непринципиальным осовремениванием этих инструментов (бензопила, электропила, отвертка с моторчиком).
Но программисты - люди странные. Как правило, язык программирования они воспринимают именно как язык - в первую очередь средство для мышления и выражения мыслей, а потом уже все остальное [Классическая работа на эту тему - «Notation as a Tool of Thought» («Нотация как способ мышления», 1979) - лекция, прочитанная автором языков APL и J Кеннетом Айверсоном при получении Тьюринговской премии]. Отсюда - великое множество языков, «языковые войны», любовь и ненависть, страх и отвращение…
И все же, несмотря на то что существуют тысячи [Если кому-то оценка «тысячи» покажется преувеличенной, порекомендуем ему посетить сайт «Энциклопедии языков программирования» http://hopl.murdoch.edu.au, где на момент написания статьи любовно каталогизированы 8512 языков программирования] языков программирования, и десятки, если не сотни из них активно использовались и используются для написания софта и обучения, - в любой период времени существует всего несколько (три-пять) языков «общеизвестных» и «используемых буквально всеми»; эту группу принято называть мэйнстримом, основным направлением и главной тенденцией индустрии. В разное время и в разных отраслях мэйнстримом считались (считаются) Fortran, C, C++, Java, C#, PHP…
Интересное свойство всех или почти всех мэйнстримовых языков - они находятся в русле одной традиции, которую можно проследить вплоть до ассемблера и машинных кодов (выполнение инструкций по порядку, оперирование с именованными ячейками памяти - то, что называется императивным программированием). Такой способ написания программ естественным образом вытекает из самой фон-неймановской архитектуры - как литературный классицизм, построенный на «стройности и логичности самого мироздания», строго блюдущий традиции, зародившиеся еще в античности.
В оппозиции к «классицистическим» языкам всегда находились языки программирования, авторы которых основывались на собственных концепциях, не желая ограничиваться «естественными для компьютера» условиями; зачастую (но не всегда) идеологическая стройность ставилась выше практичности и вообще применимости к реальным задачам. Такие, условно говоря, «модернистские» языки (Smalltalk, Lisp, Haskell, Prolog) выглядят непривычно для «традиционного» программиста, их изучение требует определенных усилий [Интересно, кстати, что существует довольно распространенное среди программистов мнение: «профессиональный программист легко и быстро освоит любой новый язык, потому что все языки, в общем-то, похожи». Как правило, к этому мнению склонны именно программисты «классицистической» школы, и в ее рамках оно действительно верно; в противоположность этому изучение совершенно незнакомого модернистского языка обычно требует немалых усилий и времени], но и значительно расширяет кругозор и заставляет изменить взгляд на программирование как таковое. «Модернистский» подход предлагает «взгляд на программирование с другой стороны» - который, как предполагается, дает программисту возможности совершенно иного уровня. Благодаря своей непривычности и концептуальной новизне, «модернистские» языки участвуют в «общем прогрессе индустрии» опосредованно: в мэйнстрим, как правило, проникают не сами языки, а их отдельные концепции и подходы.
Диффузия идей модернистских языков в программистское сообщество происходит с двух направлений - через постепенное изменение «классицистических» языков и через появление языков абсолютно новых, которые можно назвать постмодернистскими [Мы не станем дальше углубляться в искусствоведческую метафору: определения программистского рококо, романтизма, экспрессионизма, кубизма и абстракционизма оставим в качестве развлечения для читателя] (OCaml, Python, Ruby, Scala). «Постмодернистские» языки выходят за рамки стилей и парадигм, смешивая старые и новые идеи в разных пропорциях; зачастую жертвуют концептуальной целостностью ради выразительности и поливариантности возможностей. На уровне отдельных «фраз» многие из постмодернистских языков выглядят просто и понятно любому программисту, отчего их проникновение в мэйнстрим идет куда легче, чем у «более идейных» предшественников. А тем временем и сами мэйнстримовые языки стремительно впитывают новые идеи: подобно миру искусства, в мире программирования широкое наступление постмодернизма характеризуется смешением стилей и парадигм до их полной неразделимости.
Объект исследования темы этого номера - языки программирования, которые в разное время и в разных условиях предлагались и предлагаются как альтернатива привычному, мэйнстримовому, и общепринятому; их судьба, свойства и шансы. В первой обзорной статье вкратце описывается история самого мэйнстрима - без понимания перипетий смены одного языка другим рассмотрение «альтернативы» бессмысленно. Вторая статья посвящена языкам модернистским, а третья - постмодернистским. Каждая из трех частей отслеживает развитие соответствующей ветки истории; таким образом, должна получиться некая общая картина сегодняшнего состояния дел (возможно, несколько перекошенная, и наверняка неполная).
И последнее. В соответствии с главным принципом киберпанка «будущее уже здесь, просто оно неравномерно распределено» - разные течения в программировании очень трудно разделить хронологически; первый модернистский язык программирования - Lisp - один из старейших (1958 год, из общеизвестных старше только Fortran), да и очевидно постмодернистский Perl скоро справит двадцатилетний юбилей. Поэтому деление языков программирования (и темы номера) на «классицизм», «модернизм» и «постмодернизм» происходит скорее «вдоль» истории, нежели «поперек».
С этим и начнем.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Приложение: Объектно-ориентированные языки программирования
Приложение: Объектно-ориентированные языки программирования Использование объектно-ориентированной методологии не ограничено каким-либо одним языком программирования - она применима к широкому спектру объектных и объектно-ориентированных языков. Наряду с анализом и
А.8. Другие объектно-ориентированные языки программирования
А.8. Другие объектно-ориентированные языки программирования На рис. А-2 вы найдете названия многих важных объектных и объектно-ориентированных языков, в библиографии есть ссылки на информацию о большинстве из них. <рисунок пропущен>
14 Языки программирования: С или не С?
14 Языки программирования: С или не С? Границы моего языка — границы моего мира. Логико-философский трактат (Tractatus Logico-Philosophicus 5.6,1918) —Людвиг Виттгенштейн (Ludwig Wittgenstein). 14.1. Многообразие языков в Unix В Unix поддерживается более широкий по сравнению с любой другой операционной
14 Языки программирования: С или не С?
14 Языки программирования: С или не С? Границы моего языка — границы моего мира. Логико-философский трактат (Tractatus Logico-Philosophicus 5.6, 1918) —Людвиг Виттгенштейн (Ludwig Wittgenstein). 14.1. Многообразие языков в Unix В Unix поддерживается более широкий по сравнению с любой другой операционной
Другие языки программирования с поддержкой .NET
Другие языки программирования с поддержкой .NET Вы должны понимать, что C# является не единственным языком, ориентированным на платформу .NET. Когда платформа .NET была впервые представлена общественности на Профессиональной конференции разработчиков Microsoft в 2000 году, ряд
Среды и языки программирования для Pocket PC
Среды и языки программирования для Pocket PC Basic4PPCЭто как раз тот самый случай, когда трудно найти сайт производителя хорошей программы. Автору не удалось найти сайт фирмы Anywhere Software. Но саму программу можно загрузить с сайта www.pocketgear.com.Программа Basic4PPC совмещает возможности
ТЕМА НОМЕРА: 9:45 P.M.
ТЕМА НОМЕРА: 9:45 P.M. Автор: Владимир ГуриевИнформационное цунами, вызванное объявлением Origami [Я поэт, зовусь я Цветик, извините, если кого обидел], отодвинуло ноутбуки на второй план. На выставке их было довольно много, однако посетителя трудно удивить лэптопом, и даже
ТЕМА НОМЕРА:
ТЕМА НОМЕРА: Авторы: Константин Курбатов, Дмитрий ЖмурковМногие слышали словосочетание — баннерная сеть. В самом простом (классическом) виде она функционирует следующим образом: веб-мастер добавляет в базу баннерообменной [Специалисты разделяют термины «баннерная
ТЕМА НОМЕРА: ООО «Гугл»
ТЕМА НОМЕРА: ООО «Гугл» Автор: Михаил Левин levinmike@gmail.comПоследние полгода Google пользовался повышенным вниманием российской прессы, из которой можно было узнать, что Google примет участие в строительстве технопарка в Санкт-Петербурге, а по окончании строительства наймет три
Компьютерра №33 (605) Тема номера: Выставки ТЕМА НОМЕРА SIGGRAPH 2005
Компьютерра №33 (605) Тема номера: Выставки ТЕМА НОМЕРА SIGGRAPH 2005 В начале августа в Лос-Анджелесе прошла выставка SIGGRAPH 2005. Полное название этого мероприятия звучит следующим образом: 32-я Международная конференция по компьютерной графике и интерактивным технологиям
8.2. Языки программирования Виды программирований
8.2. Языки программирования Виды программирований Прогресс компьютерных технологий определил процесс появления новых разнообразных знаковых систем для записи алгоритмов – языков программирования. Смысл появления такого языка – оснащенный набор вычислительных формул
8.1. ИСТОРИЯ СОЗДАНИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ
8.1. ИСТОРИЯ СОЗДАНИЯ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ Практически сразу после появления языков третьего поколения (1967) ведущие специалисты в области программирования выдвинули идею преобразования постулата фон Неймана: "данные и программы неразличимы в
ТЕМА НОМЕРА: Как родилась эта тема
ТЕМА НОМЕРА: Как родилась эта тема Автор: Владимир ГуриевОбычно мы стараемся придумать на первое апреля что-нибудь веселое, но последние несколько лет редакции и без первого апреля живется все лучше и веселее, так что настроения шутить у нас не было, и в тематическом