Энциклопедия
Языков
Программирования

Предисловие
редакторов

ЭНЦИКЛОПЕДИЯ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ — справочное издание по языкам программирования всех типов. Основу энциклопедии составляют обзорные статьи для кажого из существующих языков (по-возможности). Главное требование к статьям этой энциклопедии — краткое и лаконичное, желательно формальное, описание основных технических характеристик: 1) синтаксиса или грамматики, представленной в виде BNF-нотации; 2) внутреннего синтаксического дерева в виде типа-суммы; 3) семантики или внутренней логики языка, его вычислителя, типовыводителя, компилятора, экстрактора или валидатора моделей [представлено будет только для простых языков существующих в открытом доступе]. Также статьи содержат краткое нефорамальное описания языка, его мотивации, раскрытие контекстной информации, авторский комментарий от пользователя языка, достоинства и недостатки. Статьи классифицируются по размеру на три группы: краткие заметки, комментарии пользователей и исторические справки. Последние используются для языков с большим количеством реализаций и/или многими версиями синтаксисов.

Индекс первого уровня — главный каталог энциклопедии формировался на основании удобности ее чтения с мобильных устройств, поэтому количество языковых категорий кратно 2, 3 и 6 колонкам. Всего, в зависимости от выбранного набора категорий, директория энциклопедии содержит от 18 до 24 категорий. Принцип расположения статей энциклопедии — категорийный, внутри категории — алфавитный.

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

  • Александр Темерев
  • Максим Сохацкий

Выпуск 1: BSV, ARM, Rust

Поскольку, создание энциклопедии — это тяжёлый и долгий путь, статьи будут появляться последовательно, но в качестве исключения первый выпуск будет содержать сразу три языка из разных категорий: BSV, ARM и Rust. Объединяет их то, что все эти языки являются функциональными языками программирования, и их трех достаточно для полного цикла вывода микропроцессорной архитектуры на рынок: 1) Языка BSV для описания логических элементов, регистров, счетчиков, АЛУ и т.д; 2) Языка ассемблера для конкретной архитектуры команд — ARM. Существует работа 2018 года Пекридиса Георгиоса из Технического Университета Крита, посвящённая реализации архитектуры ARM посредством языка BSV; 3) Высокоуровневого языка для системного программирования Rust с продвинутыми гарантиями безопасности (который благодаря LLVM компилирует в том числе и в ARM).

Выпуск 2: Julia, Erlang, Mathematica

Этот выпуск немного академический, Математика тут выступает как исследовательский фронтэнд рисерчера, а Джулия и Эрланг как квантовая дуальность Стрим Процессинга и Пи калкулуса соединяет в себе и динамическую природу окрестратора (Эрланга) и статическую (LLVM) природу векторных кроссплатформенных оптимизаций (Джулия). Хотя Математика во многом противоречивый продукт (и язык) но ее главное достоинство в том, что она четко обозначивает направление языка который идеально подходит для блокнотов типа Jupyter, в которых удобно запускать сниппеты, делать визуализацию многомерных функций и проводить анализ данныз. В тоже время Mathematica и серия APL-подобных языков типа K разделяет родство по M-expressions [], второму типу скобочек в дополнение к лисповым S-expressions ().

Выпуск 3: Lisp, Standard ML, Erlang

Многие задают вопросы себе или другим какие языки учить, так чтобы можно было взять стандарт на язык, он был вменяем, имплементация первоклассная, наличие зрелых проектов разработанных по разным методологиям, быстродействие, скорость прототипирования. Так, чтобы можно было взять и занимаясь, сфокусировавшишсь исключительно на них, достичь если не гарантированного просветления, то хотя бы инженерной реализации. Эта тройка содержит: LISP, Standard ML и Erlang. 1) МакКарти придумал синтансис LISP специально для средств дебага Чёрч-кодировки, а язык ядра и его примитивы eval, apply, let, lambda, cons, nil, cond составляют основные интро и элиминаторы теории типов. Хотя язык достаточно прост, существует множество промышленных и зрелых реализаций с развитыми средствами отладки и профилирования. Язык LISP — это то, чем мы занимаемся когда пишем AST парсеры, он всегда невидим и присутствует в программировании. Кто его не видит, советую провести пару лет изучая LISP. 2) Standard ML — это язык с мощной системой модулей для обеспечения полиморфного лямбда исчисления не только в виде System F, но с функторами на модулях. Standard ML примечателен тем, что это один их немногих языков на которого существует не только формальная спецификация по которой построено множество имплементаций, но и была построена формальная метатеория на логическом фреймворке Twelf и доказаны звучание и полнота вычислительной семантики. Этот тот уровень качества, которым могут похвастаться очень немногие языки, особенно такие мощные как SML. 3) Эрланг развивает другу область мышления — более модальную, более симметричную, более многопроцессорную. Эрланг как и лисп предлагает нетипизированные примитивы языка ядра spawn, receive, send, которые встраиваются в свою модальную теорию типов — язык исчисления процессов. Линейная теория типов, которая содержит неотвратимость времени для коиндуктивных потоков управления является прямой языковой моделью также и для квантовой схемотехники. Нельзя получить опыт Эрланга за пределами Эрланга, этот тот фреймворк оркестрации, про который вы мечтали в OSGi и легковесных контейнерах, это и система хранения и система доставки сообщение — единственный язык, который реально нужен на предприятии.