РАЗВИТИЕ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ

УДК 004.43

Информационные технологии

Алексеева В. П., студентка, МИРЭА - Российский технологический

университет

Ковалиева Е. Р., студентка, МИРЭА - Российский технологический

университет

РАЗВИТИЕ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ

Аннотация: В работе рассматривается процесс появления и развития программирования на ключевых и/или интересных языках, хронология их разработки. Результатом работы является схема развития, подобная генеалогическому дереву, с отображением дат и наследования. По полученной схеме можно наглядно судить о происхождении и важности для индустрии тех или иных языков, сориентироваться в их множестве в случае неопределенности.

Ключевые слова: языки программирования, хронология, схема развития.

Abstract: The paper examines the process of emergence and development of programming in key and / or interesting languages, the chronology of their development. The result of the work is a development scheme similar to a family tree, using dates and inheritance. Using the resulting scheme, you can clearly understand the origin and importance of certain languages for the industry, navigate in their set in case of uncertainty.

Keywords: programming languages, chronology, development scheme.

Введение

Программирование стало неотъемлемой частью жизни человечества, важной составляющей технологического развития. Любая новая технология держится, в первую очередь, на коде, составленном на выбранном языке. Но

что собой представляют языки программирования? Как создавался и где использовался каждый из них? Зачастую выбор языков для работы делают, ориентируясь на советы или краткие статьи-ответы в интернете. Но для того, чтобы понимать программирование, знать, какие средства оптимальны для той или иной задачи, необходимо хорошо разбираться в программировании в целом. Каждый новый язык вдохновлен каким-либо предыдущим, но дополнен, изменен и преобразован в нечто новое. Важно рассмотреть, когда появился каждый язык, его функциональность, причины создания и ключевые отличия от прочих, если таковые имеются. Тогда будет сложена наиболее полная картина о каждом языке и о получившейся схеме в целом. В данной работе рассматривается сам процесс появления и развития программирования на ключевых и/или интересных языках и составлено их «генеалогическое» дерево, привязанное к датам для большей информативности.

История

Первой попыткой создать программируемый вычислитель была работа Чарльза Бэббиджа [11]. Аналитическая машина напоминала механизм сложной музыкальной шкатулки и применялась исключительно для математических выражений. Она использовала первый в мире компьютерный язык - язык программирования, который назывался «Коды операций аналитической машины». Создан он был примерно в 1837 году. Сам алгоритм написала Ада Лавлейс, которая считается первым программистом во всем мире [22].

Конрад Цузе - немецкий инженер - успешно работал в 1942-1946 гг. над первым в мире языком программирования высокого уровня (ЯВПУ) под названием «Планкалкюль» (Р1апка1ки1). 74 - его обрабатывающая машина -являлась абсолютно механической, язык не имел ни компиляторов, ни интерпретаторов. Тем не менее, Цузе на этом языке написал программу, анализирующую ситуацию на шахматной доске [17].

Джон Мокли предложил проект электронной вычислительной машины (ЭВМ), работающей на вакуумных лампах. Инженеры начали с простейших алгоритмов, всего через год ЭВМ была полностью создана. В 1945 году данная

ЭВМ, получившая название ENIAC (Электронный числовой интегратор и вычислитель) была перемещена в институт баллистических исследований Армии США, с ее помощью исследовали различные военные задачи [9]. Над проектом также работали Джон фон Нейман и Преспер Эккерт .

В 1957 году Джон Бэкус предложил язык для ЭВМ, являющийся высокоуровневым, понятным, компилируемым языком. Таковым стал Fortran, первый ЯПВУ для ЭВМ, получивший в дальнейшем развитие и ставший прародителем многих языков [13]. На его основе позднее разработали Algol, ответ на недостатки Fortran. на Algol в большей степени основываются языки ветви, содержащей С, однако это лишь промежуточное звено, Fortran в целом оказался более используем, поэтому не будем включать Algol в схему как незначительный [10].

Программирование развивалось, но каждый язык требовал больших затрат времени для обучении специалистов. Джон Кемени и Томас Курц в 1964 году на основе Fortran создали язык, предназначенный для популяризации программирования - Basic [1]. Язык прекрасно справлялся со своей задачей, о чем говорят небывалые успехи в использовании языка для обучения студентов, а в дальнейшем школьников, на протяжении 50-ти лет.

Следующие три языка стоит рассматривать как связку. Первый из них CPL - язык, предназначенный для написания компиляторов к другим языкам [21]. Он являлся низкокачественным, и стал черновиком для BCPL, разработанного в Кембриджском университете Мартином Ричардсом. Мартин просто убрал из CPL все лишнее и весной 1967 подготовил компилятор своего языка. BCPL был прост в портируемости, отчего стал популярен в те годы. Из BCPL развился язык B, созданный Кеном Томпсоном в сотрудничестве с Денисом Ритчи в 1969 [10]. Он больше подходил для реализации простых подсистем, однако был недостаточно эффективным для написания чего-то большего. Что интересно, классическая программа «Hello, world!» была впервые написана на языке B.

Николос Вирт и Кэтлин Йенсен стремились к комбинации производительности и простоты. И в 1970 году им удалось создать язык, подходящий под эти параметры - Pascal. Язык был предназначен изначально для обучения программированию, был создан так, что код понимался интуитивно, а составить на нем можно было любые алгоритмы [21]. Позднее Pascal получил популярность даже за рамками преподавательской деятельности.

Отсутствие типизации в то время невероятно усложняло работу с символами и адресацией, именно поэтому Денис Ритчи в 1972 представил язык C миру [10]. Однако, C имел множество недостатков. Одним из них было отсутствие понятия контрактности, вследствие чего работы плохих программистов превращались в настоящий хаос.

MATLAB был создан в 1978 году Клевом Моллером в университете Нью-Мексико для матричных расчетов [11]. Язык крайне активно дополнялся и на 2012 год учебники по MATLAB, составляли около 700 страниц. В 1988 году на основе MATLAB профессором химии Октавом Левеншпиллем как программное пособие для проектирования химического реактора был создан Octave, который должен был полноценно заменить студентам весьма сложный в отладке для их конкретных целей Fortran [5].

Министерству обороны США в 1983 необходим был язык для сложных вычислительных систем. Под требования не подходил ни один существующий язык, поэтому был создан новый - Ada [19].

В том же 1983 году Бьёрн Страуструп добавил к языку Си возможность работать с классами и объектами, виртуальные функции, константы, ссылки и многое другое, и через два года язык С++ впервые увидел свет [21].

LabWIEW является графическим языком, предназначенным для лабораторных исследований. Разработали его инженеры компании National Instruments в 1986 году, стремясь создать кроссплатформенную среду для разработки приложений, больших проектов или обработки изображений в новом формате [4].

Eiffel - язык Бертрана Мейера, 1986 года создания, преобразуется в код на языке C, а уже после этого - в машинный код [11]. Данная особенность делает его абсолютно кроссплатформенным. впервые именно в Eiffel задействован термин контрактного программирования. Такой подход способствовал тому, что Eiffel используется в финансовой и аэрокосмической отраслях.

Через год, в 1987, лингвист Ларри Уолт создал еще один язык - Perl. Он собрал в нем самые разные преимущества предшественников, но самая главная его особенность - направленность синтаксиса в русло «очеловечивания» [11]. Perl быстро развивался благодаря высокому отклику и обратной связи со стороны аудитории, превратился в мощную универсальную среду программирования. Позднее перл развился в PDL (Perl Data Language), который добавил к языку возможность манипулировать огромными объемами данных и компактно их хранить [6].

Следующий язык - J. Кеннет Айверсон, преподаватель в Гарварде на вычислительной математике, специально для своей учебной деятельности создал диалект, который стал предшественником языка J, но использовал совершенно иные символы. J появился непосредственно как перевод языка Кеннета [27]. Этот высокопроизводительный язык эффективнее большинства других, но научиться на нем писать - задача, с которой справится не каждый. J занял свою нишу в финансовой сфере и в прочих сферах обработки данных.

в 1991 году Гвидо Ван Россум за пару дней написал первую версию языка Python. Его принцип - максимум автоматизации. Это значительно уменьшает возможности оптимизации, но преимуществом при этом является одна из самых высоких читаемостей кода [18].

в 1993 году Tecgraf создали Lua как язык программирования баз данных. Авторы так же выбрали путь постепенного развития, т.е. сначала создали скелет языка, а после, на обратной связи пользователей и на своих собственных дополнительных требованиях развивали язык до быстрого, мощного, удобного, работающего на скриптах и самого производительного среди таковых [21]. При этом Lua является довольно простым языком.

Для того, чтобы рассказать о следующем языке, следует начать с его прародителя, языка Lisp [15]. Он является низкоуровневым, наряду с ассемблером, но нацелен непосредственно на обработку списков, в связи с чем неэффективен для цифровых вычислений. В дальнейшем он получил множество расширений и диалектов, нас интересует последний - ANSI Common Lisp, разработанный Гаем Стилом в 1994 году. Данный язык является объединением положительных черт не только различных диалектов самого себя, но и других языков, имеет встроенные средства расширения и практически полностью снимает ограничения по быстродействию и затратам памяти [2].

Язык 1995 года Java, созданный Джеймсом Гослингом в Sun Microsystems, предназначался для бытовой техники, был кроссплатформенным, компактным, не зависящим от установки приложений и имел при этом встроенную поддержку безопасности. Сейчас Java распространился почти во все сферы использования кода [14].

PHP был выпущен в том же году, Расмус Лердорф создал первую версию языка за один день и увлекся его развитием. Потом его так же переписали Энди Гутманс и Зеев Сураски, сделав упор на модульность и быстродействие [21]. Далее развитие понеслось: ускорение производительности, сессии, буферизация, объектно-ориентированность, новые движки, множество встроенных функций и свободно добавляемые в язык модули - все это сделало PHP одним из самых популярных и распространенных языков для веб-программирования.

В 1995 году Юкихиро Мацумото создал Ruby, который используется для веб-разработок, но предназначен, в первую очередь, для создания небольших приложений. В этом языке первостепенной стала не скорость работы программы, а быстрота и простота ее разработки, интуитивная понятность синтаксиса [24].

Game Maker Language (GML) - язык для написания игр, созданный в 1999 году Марком Овермарсом. В нем есть поддержка звуковой системы, 3D и внешних библиотек на других языках, система, схожая с объектно-ориентированным программированием, наследование [21]. На нем можно писать спрайты, объекты, пути, скрипты, константы, словом - все, что необходимо для создания игры.

В 2000 году Андерс Хейлсберг в Microsoft закончил работу над C#. В то время необходим был язык, который будет совместим со свежими на тот момент проектами компании, в последствии с появившейся кроссплатформенной средой исполнения приложений .NET, множеством интернет-приложений. Microsoft поняли, что невозможно больше расширять и дополнять и так перегруженные продукты в попытке сделать что-то универсальное. Разработанный в связи с этим C# имел хорошо отлаженную библиотеку, доступ к ресурсам .NET, возможность создания в нем динамических веб-страниц и получения прямого доступа к памяти, автоматическое ее распределение и поддержку документации, а также полную поддержку классов и объектно-ориентированного метода [26]. Язык предназначен для создания программ, в которых крайне критичны скорость и производительность, количество циклов, немедленное освобождение ресурсов.

Io был придумал Стивом Декорте в 2002 году, он поддерживает параллелизм, расширяем, кроме того, объекты внутри кода можно изменять прямо во время его выполнения [3]. Благодаря этому он используется на спутниках, маршрутизаторах и в играх, популярен как язык управления настройками или сценариями.

Созданный в 2002 году в Guidewire Software язык Gosu разработан для виртуальной машины, на которой работает Java, полностью совместим с этим

языком, обладает расширяемой системой типов и возможностью модификации уже существующих, поддержкой статической типизации, возможностью взаимодействия с внешними веб-сервисами и улучшенным синтаксисом [21]. С Gosu уже работает более 35 различных развитых компаний.

Язык, созданный в 2003 году тремя аспирантами Вроцлавского университета, Nemerle, снова вернулся к комбинированию методов. В Nemerle совмещаются объектно-ориентированное, функциональное и

метапрограммирование. Большое внимание уделено стройности языка. Логика языка максимально приближена к человеческой, в связи с чем язык хорошо подходит для описания сложной логики [7]. В нем проработана совместимость, удобство ввода-вывода, система написания и чтения кода, метапрограммирования, что позволяет, например, автоматизировать процессы написания кода в создаваемых проектах.

Язык Boo 2004 года разработки является итогом смеси двух в корне разных языков - Python и C#, но в большей степени основывается именно на Python. Его написал Родриго Оливейр [21]. Во многих деталях язык имеет еще более компактный код, меньшие затраты памяти, нежели Python, при этом совместим с платформой .NET, обладает расширяемостью, проверкой ошибок времени компиляции. Возможно, структура его слишком фиксирована, но это быстрый компактный и удобный язык на платформе с огромными библиотеками и возможностями.

Apex предназначен для быстрого, простого написания веб-приложений для баз данных, которые в итоге совмещают в себе скорость и безопасность. Создан он в 2007 году компанией Salesforce.com и целиком существует как веб-приложение [20].

Язык Go прост, удобен и понятен, легок в обучении, высокопроизводителен. Go создан компанией Google в 2009 году. Разработчики постарались ограничиться исключительно императивной парадигмой [23]. Изначально он был предназначен для написания высокоуровневых программ, но в итоге стало ясно, что наиболее удобен для веб-разработки.

В 2010 году Mozilla создает Rust, предназначенный для веб-разработок и простых задач: универсальный, быстродейственный, безопасный язык с алгебраическим типом данных, понятной человеку логикой, поддержкой параллелизма. Однако, Rust требует четкого прописывания параметров для компиляции, а сам синтаксис довольно сложен для понимания и изучения. Наиболее популярен у создателей игр, графики и операционных систем [25].

Ранее существовал язык Rebol. Он для исследования не представляет интереса, давно не развиваем, код его закрыт, но в 2011 году Ненад Ракоцевич создал на его основе новый язык - Red, который предназначен для работы с мета-данными. Это универсальный, мощный, позволяющий решать комплексные задачи современности язык, который имеет доступ к звуковым и графическим возможностям, к работе с низкоуровневым кодом, что позволило использовать Red для программ робототехники и драйверов [8].

Хронологически исследование завершает Hack - язык 2014 года, созданный разработчиками Facebook. PHP перестал справляться с нагрузкой, стал необходим новый аналогичный язык [21], обладающий большей производительностью. Разработчики убрали одно звено из компиляци, сделав связь напрямую с машинным кодом, что заметно ускорило работу. Так же к динамической типизации добавили более безопасную - статическую.

Не стоит забывать о корнях, о самом машинном коде. Ассемблер языки остаются актуальными всегда. Они уникальны для каждой архитектуры, в них крайне сложно работать, но ассемблер-код позволяет добиваться высокой эффективности программ, максимальной возможной производительности [21]. Ассемблер используется непосредственно в создании операционных систем, микроконтроллеров, драйверов, антивирусов и т.п.

Наглядная схема развития языков

Теперь, исходя из полученной информации, можно составить схему, отражающую связи между языками. В схеме в качестве родителя каждого языка представлен оказавший наибольшее влияние предок, если таковой имеется. По полученным связям можно судить, что Fortran - наиболее яркий предок, и,

переходя к более популярным языкам, оказавшими наибольшее влияние на индустрию можно назвать C и Java. Можем также пронаблюдать языки, которые развивались независимо или же принадлежат к собственной, небольшой структуре. Из схемы исключена часть дат, т.к. в те годы не было существенных разработок в данной сфере. Схема представлена на Рисунке 1 ниже.

Рисунок 1. Наглядная схема развития языков

Заключение

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

мало. Причины такому логичны: сложно убедить покупателей, что неизвестный новый продукт лучше всем известного старого, так же как сложно всю систему организации разом перевести на что-то новое и не пострадать от снижения качества работы. В спутанные социально-технические системы, как и в чисто-социальные системы очень сложно внедрить что-то новое без потерь эффективности.

Библиографический список:

1. BASIC. Кроссплатформенное ПО тогда и сейчас [Электронный ресурс] URL: https://habr.com/ru/company/ruvds/blog/543672/ (дата обращения: 03.04.2017).

2. Common Lisp [Электронный ресурс] URL: https://ru.wikipedia.org/wiki/Common_Lisp (дата обращения: 03.04.2017).

3. Io programming language [Электронный ресурс] URL: https://habr.com/ru/post/28041/ (дата обращения: 04.04.2017).

4. LabVIEW - первое знакомство [Электронный ресурс] URL: https://habr.com/ru/post/57859/ (дата обращения: 03.04.2017).

5. MATLAB: инструмент будущего или дорогая игрушка [Электронный ресурс] URL: https://gb.ru/posts/how_to_matlab (дата обращения: 03.04.2017).

6. Perl Data LanguageВикипедия [Электронный ресурс] URL: https://wikichi.ru/wiki/Perl_Data_Language (дата обращения: 04.04.2017).

7. Болезнь, Nemerle [Электронный ресурс] URL: https://habr.com/ru/post/46993/ (дата обращения: 03.04.2017).

8. Интервью с Nenad Rakocevic о языке Red, преемнике Rebol [Электронный ресурс] URL: https://habr.com/ru/post/265685/ (дата обращения: 10.04.2017).

9. История электронных компьютеров, часть 3: ENIAC [Электронный ресурс] URL: https://habr.com/ru/post/408597/ (дата обращения: 04.04.2017).

10. История языка Си [Электронный ресурс] URL: https://habr.eom/ru/post/114588/ (дата обращения: 10.04.2017).

11. История языков программирования [Электронный ресурс] URL: https://wikichi.ru/wiki/History_of_programming_languages (дата обращения: 06.04.2017).

12. История языков программирования: Perl - необычный язык, созданный лингвистом для программистов [Электронный ресурс] URL: https://habr.com/ru/post/305402/ (дата обращения: 07.04.2017).

13. История языков программирования: как Fortran позволил пользователям общаться с ЭВМ на «ты» [Электронный ресурс] URL: https://habr.com/ru/post/309914/ (дата обращения: 04.04.2017).

14. История языков программирования: что помогло языку Java «войти в каждый дом» [Электронный ресурс] URL: https://habr.com/ru/post/306476/ (дата обращения: 15.04.2017).

15. Как Lisp стал языком программирования для Бога [Электронный ресурс] URL: https://habr.com/ru/post/428229/ (дата обращения: 12.04.2017).

17. Первый язык программирования высокого уровня - Планкалкюль [Электронный ресурс] URL: https://habr.com/ru/post/133887/ (дата обращения: 02.04.2017).

18. Питон, пожирающий мир: как побочный проект одного разработчика стал популярнейшим языком программирования [Электронный ресурс] URL: https://habr.com/ru/post/466807/ (дата обращения: 12.04.2017).

19. Почему вам стоит использовать язык Ада для программирования вашей системы [Электронный ресурс] URL: https://habr.com/ru/post/469671/ (дата обращения: 09.04.2017).

20. Хочу все знать. Язык Apex [Электронный ресурс] URL: https://gb.ru/posts/apex_lang (дата обращения: 11.04.2017).

21. Хронология языков программирования [Электронный ресурс]

URL:

https://ru.wikipedia.org/wiki/%D0%A5%D1%80%D0%BE%D0%BD%D0%BE%D0 %BB%D0%BE%D0%B3%D0%B8%D 1 %8F_%D 1 %8F%D0%B7%D 1 %8B%D0% BA%D0%BE%D0%B2_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0 %D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD% D0%B8%D 1 %8F (дата обращения: 02.04.2017).

22. Чарльз Бэббидж, математик и изобретатель первого в мире компьютера: 224 года со дня рождения [Электронный ресурс] URL: https://habr.com/ru/post/388517/ (дата обращения: 02.04.2017).

23. Эволюция Go [Электронный ресурс] URL: https://habr.com/ru/post/262295/ (дата обращения: 09.04.2017).

24. Язык Ruby: история становления и перспективы развития [Электронный ресурс] URL: https://habr.com/ru/post/131661/ (дата обращения: 12.04.2017).

25. Язык Rust и почему его надо съесть [Электронный ресурс] URL: https://gb.ru/posts/why_rust (дата обращения: 11.04.2017).

26. Язык программирования С#: история, специфика, место на рынке [Электронный ресурс] URL: https://gb.ru/posts/yazyk-programmirovamya-c-sharp-istoriya-specifika-mesto-na-rynke (дата обращения: 17.04.2017).

27. Язык программирования J. За что любить? [Электронный ресурс] URL: https://habr.com/ru/post/201470/ (дата обращения: 09.04.2017).