Шаблон:Языки программирования

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Принципы организации данного шаблона

Приоритетным параметром при размещении языков в одной строке следует выбирать их семантические и/или генеалогические связи. Сперва семантическая близость (здесь хорошо использовать вложение в скобках), затем хронология, и в последнюю очередь алфавитный порядок для никак не связанных друг с другом языков. Например, Delphi идёт в ряду потомков паскаля последним (а не первым, как было бы по алфавиту), а Dylan и Logo неотрывно следуют за Лиспом как прямые потомки.

Cледует по возможности учитывать горизонтальную компактность. Управлять переносами навигационных меток (посредством шаблона «{{nobr|}}» и принудительного разрыва строки «<br />») следует таким образом, чтобы переносились не отдельные языки по одиночке, а в первую очередь смысловые группы языков, затем просто крупные блоки (по схеме «заранее»), таким образом, чтобы число «прыжков» было как можно меньше. Следует добиваться того, чтобы позиции языков сохранялись примерно одинаковыми при незначительных различиях в ширине окна, и переключение происходило ступенчато, по возможности во всех строках одновременно. Всё это — для того, чтобы шаблон был именно навигационным (эргономичным), а не просто перечисляющим.

Гибридные или неоднозначно категорируемые языки дублируются в своих семействах (например, Mercury = Prolog + ML; Planer = Lisp + Prolog; Erlang с одной стороны, высокоуровнево-академический, с другой — предметно-специфичный)

Поскольку данный шаблон касается языков, а не трансляторов, не следует путать диалект языка с реализацией. Например, TurboProlog - это реализация языка Prolog, и не должна присутствовать в данном шаблоне; но VisualProlog - это гибридный язык, представляющий собой Prolog, обрамлённый в оковы из Delphi, и присутствовать должен. В случае же с Бейсиком, и TurboBasic, и VisualBasic являются разными диалектами, и должны присутствовать оба.

Правила именования в рамках данного шаблона

Названия языков используем только родные, но при том компактные, не обращая внимания на названия самих статей.

Научно-значимые

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

Спорными в этом отношении являются «пара Fotran или Algol», SGML, APL, Си. Fotran представил миру БНФ, а также ЯВУ как понятие, а Algol воплотил основные идеи фон-Неймана и основал весь мейнстрим, так что пусть будут оба. Симула не входит в этот список, т.к. представляет собой семантику Алгола с расширенным синтаксисом - "Алгол с классами" (АИ: Alan Kay, Andrew Appel, Lawrence Paulson). SGML удобно сопровождать его наследниками, и он уже размещён в строке DSL/data, поэтому загромождать навигатор ради спорной инновационности не стоит, хотя он и мог бы здесь быть. APL-семейство по факту ничем особо не выделяется среди прочих ФЯ (кроме синтаксиса), однако АИ его выделяют (например, Appel — «Critique of SML»). Спорными в этом отношении являются «пара Fotran или Algol», SGML, APL, Си. Fotran представил миру БНФ, а также ЯВУ как понятие, а Algol воплотил основные идеи фон-Неймана и основал весь мейнстрим, так что пусть будут оба. Симула не входит в этот список, т.к. представляет собой семантику Алгола с расширенным синтаксисом - "Алгол с классами" (АИ: Alan Kay, Andrew Appel, Lawrence Paulson). SGML удобно сопровождать его наследниками, и он уже размещён в строке DSL/data, поэтому загромождать навигатор ради спорной инновационности не стоит, хотя он и мог бы здесь быть. APL-семейство по факту ничем особо не выделяется среди прочих ФЯ (кроме синтаксиса), однако АИ его выделяют (например, Appel — «Critique of SML»).

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

Преведены в хронологическом порядке.

Высокоуровневые, исследовательские, академические

Семейства Lisp, ML, Prolog и другие (Рефал, Joy) сами по себе имеют высокий порог вхождения, из-за чего зачастую целиком стереотипно записываются в «академические». Однако, они имеют развитые до промышленного уровня диалекты, используемые для прикладных задач, так что грань между «исследовательскими» и «используемыми» весьма относительна. Например, OCaml традиционно был «самым мейнстримовым из академических», и на его основе построена уже вполне академичная Coq. Standard ML долгое время был в тени, но в 2010-х начал применяться в продакшене. Все эти спорные моменты, а также разнесение языков вдаль друг от друга по навигационному шаблону только затрудняют их поиск и вызывают споры. Собрать эти три группы в одну намного удобнее.

«не лямбда» — это группа функциональных языков, основанных не на лямбда-исчислении, а на различных других мат.моделях (не стратегиях вычислений или компиляции, а лежащих в основе семантик теорий). Яркими представителями являются Рефал и APL. Поскольку оба ярких представителя по возрасту уступают лишь Лиспу, но старше Пролога и ML, то эта группа идёт сразу за Лисп-семейством.

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

Традиционные

Larry Paulson написал так: традиционные языки претендуют на то, чтобы называться высокоуровневыми, но на деле содержат лишь те высокоуровневые конструкции, которые могут однозначно транслироваться в машинный код архитектуры фон-Неймана. Paul Hudak также использует термин «традиционные» (conventional languages). Andrew Appel описал свойства языка, которые предоставляют потенциальную возможность применения агрессивных техник оптимизации, и указал, почему эти техники не применимы к потомкам Алгола. Luca Cardelli даёт характеристику «практичному языку», которой не соответствует ни один из традиционных языков, и подробно описывает, почему большинство языков «недостаточно типизированы».

К данной группе относятся потомки Алгола и Кобола, в том числе и интерпретируемые.