Итак, последние несколько месяцев я был занятым человеком, работающим над сторонними проектами. Летом мы со старшим сыном начали работать над системой ролевых игр под названием Тело и мозг. Не компьютерная ролевая система как таковая, а общая как для настольных игр, так и для программного обеспечения.

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

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

Итак, будучи опытным разработчиком, я решил начать писать исходный код, чтобы понять, как я хочу, чтобы язык выглядел и функционировал. Я был в этом некоторое время и видел несколько хороших языков и много плохих языков. Программисты — забавная компания, и иногда часть плевел поднимается наверх, а иногда часть пшеницы теряется по пути.

Когда я только начинал свою профессиональную карьеру, можно было по пальцам одной руки пересчитать языки, которые имели значение: C/C++, Pascal, COBOL, Visual Basic и Java. Из них COBOL, пожалуй, лучше всех справляется с работой по написанию программного обеспечения. Это выразительно. Этому легко научиться. Многие умные люди сделали блестящую карьеру в программировании. К сожалению, COBOL стал рыжим пасынком компьютерных языков после гибели и мрака 2000 года. К тому времени, когда Y2K действительно наступил, вы не могли найти нового разработчика, который хотел бы его использовать; в конце концов, CNN сказал, что это, по сути, Сатана на жестком диске, потому что все программное обеспечение, управляющее американской инфраструктурой, умрет ужасной смертью из-за COBOL.

Конечно, на Y2K сдохло очень и очень мало систем. В основном потому, что программисты на COBOL — настоящие профессионалы и очень серьезно взялись за обновление своего кода. Но ущерб был нанесен. Недальновидные разработчики из 60-х и 70-х годов обрекли COBOL на смерть 1 января 2000 года. Когда Y2K прошел с хныканьем, COBOL как путь карьеры исчез.

Другой замечательный язык в этом списке — Visual Basic. Правда, он живет в Visual Basic.Net, и это прекрасный язык. Но в него вкралось много C#, и он действительно не работает так, как раньше. В.Б. всегда был странным; если вы знали BASIC, вы знали достаточно, чтобы написать простое приложение для Windows. Это сделало порог для входа очень низким, особенно для детей 80-х, которые выросли, написав BASIC на системах Commodore 64 и Apple II. Я из этого винтажа, и в 90-х годах VB очень хорошо служил мне, когда я профессионально расправлял крылья. Я даже написал всю инфраструктуру провайдера на VB5 и VB6 в конце 90-х. На самом деле не было ничего, что я не мог бы с ним сделать, если бы вы дали мне нужные библиотеки ActiveX для работы.

Но с появлением Java Visual Basic утратил свою популярность в моем поколении. Java была блестящей новинкой, созданной для создания реальных приложений для веб-сайтов. Не говоря уже о том, что он был ужасно медленным, а реальные пользовательские интерфейсы, созданные с его помощью, были просто ужасны, даже по стандартам того времени. Тем не менее, Java дал моему поколению возможность заглянуть в «настоящее программирование», где безраздельно господствуют C и C++.

Microsoft сделала очень плохое деловое решение из очень хорошего технического решения. Microsoft хотела заполучить кусок пирога с Java. Java был создан специально для замены VB Script в браузерах и консолидации (как казалось в то время) фрагментированной среды разработки. Microsoft реализовала свою собственную виртуальную машину Java и создала расширение стандартного языка Java под названием Visual J++, которое включало возможность использования COM-объектов непосредственно в JVM. В то время Sun была гориллой, стоящей за Java, а Microsoft пошла наперекосяк, запятнав свой любимый новый язык. Видите ли, у Microsoft не было соответствующих лицензий на Java, чтобы на самом деле развивать язык, Sun просто хотела, чтобы Microsoft установила его на каждый рабочий стол и позволила Sun заняться «разработкой». Мы все знаем, как это было для Microsoft.

Довольно новый парень в Microsoft, который раньше работал в Delphi (он создал язык Delphi, так что он вроде как умный), нашел решение. Он разрабатывал язык и управляемую среду выполнения, которую Microsoft могла бы назвать своим собственным именем C#. Как только о Visual J++ стало известно, Microsoft дала C# зеленый свет. Опасаясь, что толпы разработчиков Visual Basic уйдут, если их заставят отказаться от VB, они также создали VB.Net, который был довольно хорошим языком и очень отличался от C#, несмотря на общую структуру и среду выполнения.

Но C# стал горячее петарды 4 июля (национальный праздник в США). Microsoft предоставила идеальный язык перехода для перевода разработчиков и кода с VB на C#. Честно говоря, я думал, что VB.Net умер бы на корню много лет назад, но очень активная группа преданных поддерживала его в курсе всех последних исправлений. Несмотря на это, VB.Net, вероятно, не будет долго оставаться основным языком.

Итак, вернемся к моим проектам. Я видел множество языков, которые появлялись и исчезали, и одной тенденцией, начавшейся с Java, была идея о том, что язык должен быть хорош (но не велик) во всем и как можно больше походить на C. Помните, что в то время COBOL был в основном персоной нон-грата, и все, включая Microsoft, отказались от него. Костяк Visual Basic ненамного моложе, чем у COBOL, и поэтому он тоже считался уходящим в прошлое. Школы перестали преподавать эти выразительные языки и сосредоточились на C/C++ и Java.

Мне нравится Visual Basic и COBOL. В 1998 году, имея двойную специальность в области компьютерных наук и бухгалтерского учета, я разработал и написал бухгалтерское программное обеспечение для вымышленной некоммерческой организации в рамках своего годичного курса системного анализа. Это приложение было написано на языке COBOL для Alpha с VMS. У него была главная бухгалтерская книга и кредиторская задолженность, и она была надежной. Сколько бы Dr. Брюс Майерс стучал, что программа его не сломает.

В то же время я работал с вышеупомянутым интернет-провайдером со всем его повседневным администрированием, включая подготовку учетной записи и настройку FTP, написанным мной на Visual Basic 6. Я баловался Java в браузере с сервлетами, но, честно говоря, это было отстойно. .

Поскольку моя карьера привела меня на путь C#, я вскоре оставил VB позади и буквально не писал ни строчки кода VB более 10 лет, пока пару месяцев назад я не работал над игровой системой Body and Brain, и мне понадобился некоторые макросы Excel для автоматизации проверки листа символов. Я снова был в седле и был продуктивным примерно через 30 минут. Все время, пока я работал над этими макросами, я помнил, насколько производителен Visual Basic. Код, находящийся в текстовом редакторе, просто имеет смысл. Здесь нет пунктуационной гимнастики, синтаксис описателен, а система набора текста имеет большой смысл.

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

Введите шаблон.

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

Это фундаментальный сдвиг в том, как сегодня работает большинство языков. Паттерн (названный так потому, что он ориентирован на шаблоны проектирования) предназначен для того, чтобы быть реальным инструментом для решения очень реальных проблем, с которыми профессиональные программисты сталкиваются ежедневно.

Особенности шаблона включают в себя:

  1. Выразительный синтаксис снижает нагрузку на мозг при чтении кода, написанного кем-то другим.
  2. Чрезвычайно упрощенная система типов не содержит 8/16/32/64-битных махинаций. В IEEE нет чисел с плавающей запятой, потому что в них нет необходимости. Все числа в Pattern являются действительными числами, выраженными парой 64-битных целых чисел.
  3. Примитивы, предназначенные для решения реальных задач, например даты и локали, с которыми легко работать.
  4. Структуры данных, которые отражают данные реального мира.
  5. Встроенные лучшие в своем классе шаблоны проектирования: Adapter, Singleton, Facade и Model-View-Controller.
  6. Никаких интерфейсов. Полиморфизм применяется строго через наследование. Лошадь остается лошадью, а не интерфейсом единорога, примененным к лошади.
  7. Перечисления должны иметь реальные значения.
  8. Слабая связь, сильная связь (спасибо шаблону адаптера!).

Почитайте Веб-сайт Pattern. На данный момент это всего лишь несколько страниц уценки GitHub, так как я трачу большую часть своего времени на настоящий компилятор.

Я жду отзывов, предложений, метаний в меня и т. д. Следующая статья будет о разработке синтаксиса, системы типизации и изучении ANTLR4.