Про компиляторы
Я давно написал краткие тезисы про всяческие языки программирования и
стратегии компиляции. Все недосуг было выложить. Вот решил "покласть" как есть
читайте, просвещайтесь..
Языки, диалекты, реализации
В настоящий момент существуют тысячи, если не десятки и сотни тысяч
языков, диалектов и их реализаций. Более того, каждодневно рождаются новые
или появляются диалект существующего.
Почти любой язык можно рассматривать как улучшенную версию какого-нибудь
другого языка. Иногда очень трудно провести разграничительную линию, где
кончается один язык и начинаетс другой. Возьмем, к примеру, LISP, который
начинался как отдельный язык и привел в итоге к целому семейству языков. Его
диалекты (такие как Scheme или Common Lisp) имеют большие отличия и могут
рассматриваться пользователями как “другие” языки. Его варианты (такие как
Kyoto Common Lisp или Allegro CL) по большому счету одинаковы, но могут иметь
некоторые черты, которые делают их несовместимыми.
Реализации создаются для запуска на конкретной машине с конкретной
операционной системой и могут иметь дополнительные свойства. Несколько
последовательных невидимых изменений в реализации могут привести к небольшим
изменениям в языке.
Не всегда имя языка может однозначно идентифицировать его. Иногда язык
может претерпеть значительные изменения в языке без смены названия. Иногда
меняется только имя, а язык остается тем же (IAL в ALGOL, а затем в ALGOL
58). А бывает, что одно имя используется для нескольких разных языков.
Обычно трудно бывает различить, что принадлежит к характеристике языка, а
что к его окружению. Например, SML описывается в несколько этапов, сначала
“синтаксис ядра” а потом его расширения. Что технически определяет два
различных языка. Описания некоторых языков могут опускать такие важные черты,
как файловый ввод/вывод т.к. их не предполагается использовать без
стандартной библиотеки (в случае Си, например) или без среды разработки в
целом (SmallTalk-80), или потому что это составляет командный язык
какой-нибудь операционной системы или коммерческого продукта.
В то же время некоторые языки настолько по своей природе расширяемы (как
Форт), и/или для них существует такое большое количество таких расширений
(как для TeX, например) что каждое такое расширение можно считать отдельным
зыком.
Часто известный производитель вносит расширения в базовый язык в своей
реализации (например, Turbo Pascal или Delphi в реализациях фирмы Borland
сильно отличается от устаревшего стндарта ANSI). Эту же тенденцию особенно
видно в различных реализациях BASIC или Prolog. Часто реализации Basic одной
фирмы могут сильно отличаться друг от друга, например Microsoft следующий
список отличных друг от друга (в большей или меньшей степени) вариантов
Бейсика: Visual Basic, Visual Basic for Applications, Access Basic,
WordBasic, TestBasic, Basic PDS.
Даже разные реализации такого хорошо стандартизованного языка как Си могут
сильно отличаться друг от друга и, строго говоря, Turbo C и Microsoft C можно
рассматривать как отдельные языки.
Часто бывают так, что язык является неотъемлемой частью какой-нибудь
коммерческой системы. Некоторые из них могут быть интересны и будут
рассмотрены здесь.
При классификации языков мы можем выделить следующие типы языков:
Императивные языки программирования — языки, оперирующие командами,
изменяющими значение элементов данных. Характеризуются наличием операций
присвоения и циклами.
Декларативные языки — языки, оперирующие с помощью задания инструкций
о данных и отношений между данными. Алгоритм скрывается семантикой языка. Данная
категория включает аппликативные и языки логики. Примеры декларативных свойств -
сложные множества и инструкции поиска по шаблону.
Процедурные языки — языки, определяющие как вычислять результат для
какой-нибудь проблемы. Включает в себя императивные и функциональные языки.
Аппликативные языки — языки, в которых функции применяются к значениям
без побочного эффекта. Функциональные языки в широком смысле.
Функциональные языки — языки, оперирующие с помощью функций
высокого порядка, операции в них манипулируют напрямую функциями, а не
данными. Пример, FP.
Определяющие (Definitional????) языки —- аппликативные языки, содержащие
присвоения, интерпретируемые как определения. Пример, Lucid.
Языки одного присвоения — аппликативные языки с соглашением, что
переменная может появляться в левой части присвоения только раз в одной активной
порции программы.
Языки потоков данных — языки, которые можно применять в архитектуре
потоков данных. Обязательно характеризуются свободой от побочных эффектов.
Примеры: Val, Id, SISAL, Lucid.
Языки логики — языки, оперирующие предикатами и отношениями p(x, Y).
Программы состоят из набора заключений (clause???) Хорна, которые могут быть:
- фактами - p(X,Y) есть истина;
- правилами - p истинно, если q1, q2 и qn
истинны;
- запросами - Верны ли q1, g2 и gn? Где gi - цель.
Дальнейшие заключения делаются с помощью механизма нахождения
решения. Одно p выбираетс как предположение, другое, содержащее p как
следствие, и убирается p между ними. Если два p имеют разный набор аргументов
они должны объединиться с помощью подстановки.
Языки логики рассматривают альтернативы для каждого решения, с откатами и
поиском общего решения. OR-параллельные языки рассматривают альтернативные
решения параллельно, тогда как AND-параллельные пытаются удовлетворить
несколько целей в одной параллели. (ТС: Что за глупость????)
Объектно-ориентированные языки — языки, в которых данные и функции,
имеющие доступ к ним рассматриваютс как один модуль.
Параллельные языки — языки, описывающие программы, которые можно
исполнять параллельно. Они могут быть:
- многопрограммными - разделяющими один процессор;
- мультипроцессорными - отдельные процессоры разделяют одну
распределенную память.
Параллельные языки различаются способом организации процессов:
- сопрограммы - управление программой организуется отдельно в коде
программы. Примеры, Simula I, SL5, BLISS, Modula-2;
- вилки (fork) / объединения (join) - PL/I, Mesa;
- cobegin/coend - ALGOL 68, CSP, Edison, Argus;
- объявления процессов - DP, SR, Concurrent Pascal, Modula, PLITS, Ada.
И способом взаимодействия процессов:
- семафоры - Algol 68;
- условные критические области - Edison, DP, Argus;
- мониторы - Concurrent Pascal, Modula;
- передача сообщений - CSP, PLITS, Gypsy, Actors;
- удаленный вызов процедур - DP, Mod;
- рандеву - Ada, SR;
- атомные транзакции - Argus.
Языки четвертого поколения (4GL) — языки очень высокого уровня.
Может использоваться естественный английский язык или визуальные конструкции.
Алгоритмы или структуры данных могут выбираться компилятором.
Языки запросов — обеспечивают интерфейс к базам данных.
Языки спецификаций — определяют формализм для описания программных
или аппаратных конструкций.
Ассемблерные языки — являются символьным представлением машинных
языков конкретного компьютера.
Промежуточные языки — языки, используемые на промежуточной стадии
компиляции. Могут быть как текстовыми, так и бинарными.
Метаязыки — языки, используемые для формального описания других
языков.
Классификация языков программирования по семействам
Приведенные выше типы языков дают излишне строгое деление. Обычно (на
практике) языки делят по следующим большим группам. Некоторые группы, строго
говоря, являются подклассами процедурных или объектно-ориентированных языков,
но в силу своей многочисленности их выделяют в отдельные группы (Например,
варианты Си или языки скриптов).
Языки сценариев (скриптовые языки)
Существует огромное множество языков сценариев. В Unix все они могут
запускаться посредством стандартного механизма #!.
AWK
реализация |
mawk |
версия |
1.2beta |
описание |
Язык шаблонов для манипулирования текстовыми файлами. Является
надмножеством старого awk (V7). |
ОС |
sun3,sun4:sunos4.0.3 vax:bsd4.3,ultrix4.1
stardent3000:sysVR3 decstation:ultrix4.1 msdos:turboC++ &npsp; |
реализация |
GNU awk (gawk) |
версия |
2.15.6 |
описание |
Язык шаблонов для манипулирования текстовыми файлами.
Является надмножеством старого awk (V7), включает возможности Plan 9. |
ОС |
unix, msdos:msc5.1 |
Basic
реализация |
bwBASIC (Bywater BASIC interpreter) |
версия |
2.10 |
описание |
bwBASIC реализует надмножество ANSI стандарта минимального
Бейсика (X3.60-1978). Язык реализации ANSIљC, предлагается простая интерактивная
среда. Интерпретатор успешно компилируется большим множеством ANSI C
компиляторов. |
ОС |
unix, msdos:msc5.1 &npsp; |
реализация |
ACE - AmigaBASIC compiler
with extras |
версия |
2.3 |
описание |
ACE является свободно доступным компилятором AmigaBASIC,
который при использовании ассемблера A68K и линкера Blink может производить
исполняемые файлы.
Является надмножеством AmigaBASIC, включает черепашью графику, рекурсию,
подпрограммы SUB с возвращаемыми значениями и аргументами, включением файлов,
улучшенная поддержка WAVE файлов, ссылки на внешние переменные и т.д. |
ОС |
unix, msdos:msc5.1 |
Варианты UNIX Shell
реализация |
C Shell (tcsh) |
версия |
6.06 |
описание |
модифицированный C-Shell с возможностями редактирования
истории. |
ОС |
unix, VMS_POSIX, OS/2 EMX. &npsp; |
реализация |
Bourne Shell: Bash (Bourne
Again SHell) |
версия |
1.14.5 |
описание |
Yacc анализатор. Bash является Posix-совместимой реализацией
синтаксиса Bourne shell с некоторыми встроенными командами C-shell. Поддерживает
команды редактирования в стиле emacs, управление задачами, функции. |
ОС |
posix &npsp; |
реализация |
Korn Shell (SKsh) |
версия |
2.1 |
описание |
SKsh является Unix утилитой запускаемой под AmigaDos.
Обеспечивает Unix подобную среду c возможностями AmigaDos, например
резидентныее команды, ARexx, и т.п.
Обеспечиваются многие Unix команды: xargs, grep, find, и т.д.
|
ОС |
Amiga &npsp; |
реализация |
Korn Shell (pdksh) |
версия |
5.1.3 |
описание |
pdksh является общедоступной реализацией ksh88. pdksh был начат
Эриком Гисиным (Eric Gisin) на основе версии sh Чарльза Форсайта (Charles
Forsyth). Не поддерживается @(patter1|pattern2|..) поиск по шаблону. Также
отсутствует команда DEBUG. |
ОС |
Большинство unix, OS2 |
Perl
реализация |
Perl5 (Practical Extraction
and Report Language) |
версия |
5.002 |
описание |
Perl5 - полностью переписанная, расширенная реализация perl4.
Добавлены реальные структуры данных (посредством механизма ссылок), un-adorned
вызовы процедур, наследование методов. Существует множество расширений
загружаемых при исполнении.
Характеризуется::
- очень высокой семантической плотностью из-за мощного механизма подстановки регулярных выражений
- теоретически не имеет ограничений по длине обрабатываемых данных
- обработка исключений
- прямой доступ ко всем системным вызовам
- возможность манипуляций бинарными данными
- много полезных идиом для общих задач
- 8-битная очистка, включая null
- динамическая подгрузка расширений
- конструкторы, деструкторы, множественное наследование и перегрузка операций
|
ОС |
Almost all unix systems, Amiga,
Atari, LynxOS, Macintosh, PE, MS-DOS, MVS, Netware, OS/2, QNX, VMS, Windows
3.x, Windows NT |
реализация |
Perl (Practical Extraction
and Report Language) |
версия |
4.0 patchlevel 36 |
описание |
perl - интерпретируемый язык, оптимизированный для сканирования
текстовых файлов, доступа информации оттуда, и печати отчетов на основе этих
данных. Являетс также хорошим языком для многих задач управления системой.
Характеризуется:
- очень высокой семантической плотностью из-за мощного механизма
подстановки регулярных выражений
- обработка исключений, механизм provide/require
- ассоциативные массивы, которые могут быть представлениями файлов БД
- теоретически не имеет ограничений по длине обрабатываемых данных
- прямой доступ ко всем системным вызовам
- возможность манипуляций бинарными данными
- много полезных идиом для общих задач
- 8-битная очистка, включая null
- типа переменных: скалярные, массивы и хеш таблицы
- синтаксис требует описание переменных и префиксные символы
|
ОС |
большинство
unix систем, MSDOS, Mac, Amiga, Atari, OS/2, VMS, NT, MVS |
Python
реализация |
Python |
версия |
1.3 |
описание |
Python - простой, но мощный язык программирования, среднее
между C и языками оболочки shell, идеален для быстрого прототипирования.
Синтаксис позаимствовал многое из разных языков; наибольшее влияние оказали ABC,
C, Modula-3 и Icon. Python являетс объектно-ориентированным языком, достаточным
для разработки довольно больших программ.
Характеризуется:
- пакетами;
- обработкой исключений;
- хорошим интерфейсом с Си;
- динамической загрузкой Си модулей;
- методы, наследование;
- поддержка многих оконных систем;
- не существует общего Windows API для всех платформ.
|
ОС |
unix, Macintosh, OS/2, Windows 3.1 (Win32s), Windows NT |
реализация |
vpApp |
версия |
0.2 |
описание |
vpApp (visual-programming application) поддерживает технологию
разработки приложений на Python. |
ОС |
любой Python интерпретатор с поддержкой X-систем |
REXX
реализация |
The Regina Rexx Interpreter |
версия |
0.05i |
описание |
Интерпретатор Rexx. VMS версия имеет почти полный набор DCL
функций. В MS-DOS и OS/2 отсутствует такая поддержка. |
ОС |
Unix, VMS, MS-DOS (ограниченно), OS/2 (ограниченно) |
реализация |
REXX/imc |
версия |
1.6 |
описание |
REXX для Unix. Язык общего назначения, созданный Майком
Коулишоу (Mike Cowlishaw) в IBM UK, легко читаемый и легкий в использовании.
Полезен как управляющий язык для Unix или для приложений использующих интерфейс
программирования REXX (REXX/imc можно откомпилировать как динамическую
библиотеку C дл использования в сторонних системах). REXX - официальный язык
сценариев для VM/CMS, OS/2 и AmigaDOS. |
ОС |
SunOS, AIX 3.2 |
Snobol
реализация |
Snobol4 beta2 |
версия |
0.91 |
описание |
Компилятор в Си. Реализация раннего классического SNOBOL 4
Ральфа Грисволда (Ralph
Griswold) , сконструированного для манипуляций текстом, под влиянием
синтаксиса UNIX утилиты rexexp. Компилятор реализован как макро программа на
SIL (SNOBOL Implementation Language). Поддерживает загрузку Си библиотек на
BSD системах. |
ОС |
различные UNIX системы |
реализация |
vanill Snobol4 |
версия |
2.10 |
описание |
Реализация раннего классического SNOBOL 4 Ральфа Грисволда
(Ralph Griswold) , сконструированного для манипуляций текстом, под влиянием
синтаксиса UNIX утилиты rexexp. Данная реализация базируется на 'beta2' SNOBOL
Фила Бадни (Phil Budne). |
ОС |
msdos |
Tcl
реализация |
Tcl (Tool Command Language) |
версия |
7.4 |
описание |
Небольшой язык для встраиваемых систем, нацеленный на
манипуляции текстом, похожий
на LISP с поддержкой расширений, что позволяет использовать его как язык
оболочек (shell). Tcl позволяет легко и удобно записывать алгебраические
выражения. Его мощь лежит в механизме представления всего как строк.
Возможности:
- можно использовать как интерпретатор встраиваемых систем;
- исключения, пакеты (называемые библиотеками);
- только одно пространство имен;
- provide/require;
- нет возможности динамической подгрузки;
- 8-битный механизм очистки;
- только 3 типа переменных: строки, списки, ассоциативные массивы.
|
ОС |
msdos |
реализация |
Tcl, Tk |
версия |
4.0 |
описание |
Tk является графической библиотекой X11 сделанной дл
взаимодействия с Tcl. Обеспечивает очень легкий способ для создания сложных
приложений. По внешнему виду напоминает Motif. |
реализация |
Tickle |
версия |
5.0v1 |
описание |
Интерпретатор и библиотека Tcl на Macintosh. Включает
редактор текста; утилиты трансляции файлов; поддержка расширений tclX;
некоторые unix-утилиты; доступ к функциям Macintosh (Resource Manager,
Communications Toolbox, OSA Components, Editions, и Apple Events); поддержка
сценариев OSA; Drag and Drop. |
ОС |
Mac |
реализация |
Extended Tcl (tclx) |
версия |
7.4a |
описание |
Extended Tcl добавляет инструкции для высокого уровня дл
доступа к системным примитивам
unix. |
реализация |
MTtcl - Multi-threaded Tcl |
версия |
0.9 |
описание |
Пакет MTtcl дает доступ программистам Tcl/Tk к многопоточным
возможностям Solaris 2. Пакет поставляется в двух частях; модифицированная
версия Tcl 7.4, и многопоточное расширение Tcl. Модификации, необходимые для
работы в многопоточной среде были названы MT-Sturdy Tcl. |
ОС |
Sparc Solaris 2.3 |
реализация |
Cygnus Tcl Tools |
версия |
Release-930124 |
описание |
GNU release стандартных средств Tcl и Tk. |
ОС |
unix, msdos:msc5.1 |
Функциональные языки
Варианты Си
реализация |
GNU C (gcc), C++, Objective-C, RTL |
версия |
2.7.1 |
описание |
Компиляторы C, C++, Objective-C очень высокого качества, хорошо
переносимы. Транслятор поддерживает множество front-end и множество back-ends с
помощью трансляции сначала в RTL (Register Transfer Language), а потом в
ассемблер целевой машины. Front end компиляторы сделаны для Ada, Pascal, и
Fortran.
C - надмножество K&R C и ANSI C. C++ - поддерживает множество
черт ARM; обработка исключений поддерживается только на некоторых платформах.
Поддержка bool типа, RTTI. Не поддерживает: шаблоны членов класса, пространства
имен.
Objective-C - удовлетворяет стандарту предложенному NeXT. |
ОС |
3b1, a29k, aix385, alpha, altos3068, amix, arm, convex,
crds, elxsi, fx2800, fx80, genix, hp320, clipper, i386-{dos, isc, sco,
sysv.3, sysv.4, mach, bsd, linux, windows, OS/2}, iris,i860, i960, irix4,
m68k, m88ksvsv.3, mips-news, mot3300, next, ns32k, nws3250-v.4, hp-pa,
pc532, plexus, pyramid, romp, rs6000, sparc-sunos, umpis, vax-vms, vax-bsd,
we32k, hitachi-{SH,8300}, 6811 |
реализация |
Stanford SUIF Compiler (C, Fortran, SUIF) |
версия |
1.0.1 |
описание |
SUIF - это библиотека для исследований алгоритмов
построения компиляторов. Включает ядро, поддерживающее формат Stanford
University Intermediate Format (файловый I/O, манипуляции , и т.п.), и
набор средств для конструирования проходов компиляторов и библиотек для
анализа зависимостей, трансформации циклов, оптимизации векторов,
кодогенерации и т.п. Может генерировать параллельный код.
C front end - ANSI-C совместим, FORTRAN поддерживает большинство из
f77. |
ОС |
DECstation, SPARC/SunOS/Solaris, SGI, Linux |
реализация |
c68/c386 |
версия |
4.2a |
описание |
K&R C + прототипы функций и другие ANSI черты.
Использует многие 68k и i386
ассемблеры, вкл. Gas. Поддержка плавающей точки через инлайн-код или
эмуляцию. Кодогенерация лучше чем в ACK. |
ОС |
386 и 68k Minix |
реализация |
lcc |
версия |
3.4b |
описание |
Анализатор написанный вручную и потому быстрее yacc.
Возможность настройки целевой машины. Легкая переносимость. Порождаемый код не
так хорош как GCC, но компилятор ANSI C совместимый, маленький и быстрый.
Требуется отдельный препроцессор.
Описывается в книге Benjamin/Cummings "A Retargetable C Compiler: Design and
Implementation", 1995.
|
ОС |
x86, MIPS, SPARC |
реализация |
Maspar MPL C |
версия |
3.1 |
описание |
MPL основан на ANSI C и включает расширения языка SIMD. Новое
ключевое слово plural используется для объявления параллельных массивов.
Например, объявление "plural int i" объявляет i в каждом из
параллельных процессоров.
plural выражения могут использоваться в IF, WHILE, SWITCH и других
инструкциях управления потоком управления. MPL компилятор основан на GNU
компиляторе. |
реализация |
C++, Extended C |
версия |
2.10 |
описание |
EC++ - препроцессор, который транслирует программы в C++.
Расширения включают:
- предусловия, постусловия и инвариантные классы;
- параметризованные классы;
- обработка исключений;
- сборка мусора
|
реализация |
Metre |
версия |
2.3 |
описание |
Metre - общедоступный анализатор ANSI/ISO C, поведение которого
определяется набором правил. Наборы обеспечиваются для инструментов метрик и
дерева вызовов. Написан на стандартном Си с применением lex и yacc, и потому хорошо
переносим. |
реализация |
Small-C |
описание |
Small-C является подмножеством Си, для которого было написано
множество общедоступных компиляторов. Исходный компилятор был написан Роном
Кейном (Ron Cain) и появилось в майском номере 1980 журнала Dr.Dobb. Позднее
Джеймс Хендрикс (James E.Hendrix) улучшил и расширил Small-C в книге "The
Small-C Handbook" (1984). Оба компилятора генерировали ассемблер 8080.
Компилятор для 6502 BBC Micro основан на RatC, версии исходного компилятора
Рона Кейна описанного R.E.Berry и B.A.Meekings в книге "A Book on C"
(1984). Компилятор 6502 написан на Small-C и был "раскручен" с использованием
Zorland C на Amstrad PC1512 под MSDOS 3.2, и потом перенесен на BBC Micro
используя Kermit.
|
ОС |
68k, 6809, VAX, 8080, BBC Micro, Z80 |
реализация |
uC++ |
версия |
4.4 |
описание |
Расширенный C++ с облегченным параллелизмом для Unix-подобных
систем. uC++ произноситс как "микро-C++".
Возможности:
- настоящая поддержка многопроцессорности на SUN, DEC, SGI, Sequent;
- сопрограммы, мониторы и расширения задач
- не блокирующая библиотека вв./выв;
- механизм группировать задачи и виртуальные процессоры;
- недетерминированное разделение времени.
|
ОС |
Sequent (BSD), SUN Solaris (SPARC) & SunOS (SPARC,
M68K), DEC, OSF 3.2+ (Alpha), SGI IRIX 5.3+ (MIPS), IBM AIX 3.2+ (RS/6000),
HP HP-UX 9.03+ (PA), LINUX 1.2.13+/1.3.20+ (i386+) |
Компилируемые императивные языки
Множество традиционных инфиксных языков не Си и Паскаль, каждый из которых
имеет свою специфику.
Ada
реализация |
Ada/Ed |
версия |
1.11.0a+ |
описание |
Транслятор/интерпретатор Ады. Учебный транслятор и потому
не имеет возможностей коммерческих компиляторов. Разработан в университете
Нью-Йорка как часть проекта по определению и прототипированию языка. |
ОС |
Unix, MSDOS, Amiga, Atari |
реализация |
GNAT Ada 95 |
версия |
3.01 |
описание |
полный компилятор Ada95, использует технологию GCC back-end
для генерации кода. |
ОС |
SunOS, Sun/Solaris, OS/2, SGI/IRIX, Windows NT, Windows95,
Linux, NetBSD, Alpha/Dec-Unix, DOS |
Simula 67
реализация |
cim |
версия |
1.62 |
описание |
Симула - первый по настоящему объектно-ориентированный
язык. Данный транслятор переводит Симулу в Си для последующей
компиляции |
Объектно-ориентированные языки
Семейство Lisp
реализация |
Feel (Free and Eventually Eulisp) |
версия |
0.75 |
описание |
Черты:
- интегрированная объектная
система;
- модули;
- параллелизм;
- интерфейс с библиотекой PVM, сокеты tcp/ip, Linda, CSP
|
ОС |
большинство Unix-ов |
реализация |
CMU Common Lisp |
версия |
17c |
описание |
CMU Common Lisp является общедоступной реализацией программной
среды Common Lisp. Многие из изменений в языке предлагаемые комитетом X3j13 были
реализованы. В большинстве случаев эти изменения прозрачны и позволяют
использовать как CLtL1 так и предлагаемый ANSI CL. Новые черты: SETF функции,
LOOP и макрос WITH-COMPILATION-UNIT.
Возможности:
- новый CMU CL компилятор (Python) эффективнее других Common Lisp
компиляторов. Генерирует лучше код и легче в использовании;
- Программная среда основанная на редакторе Hrmlock, лучше интегрирована
чем основанные на gnu emacs;
|
ОС |
Sparc/Mach Sparc/SunOS Mips/Mach
IBMRT/Mach |
реализация |
KCL (Kyoto Common Lisp) |
описание |
KCL - реализация Common Lisp, написанная на Си для запуска
под Un*x-подобными системами. Транслятор переводит Лисп программы в Си
программы для последующей компиляции. |
реализация |
xLisp |
версия |
2.1 |
описание |
XLISP - экспериментальный язык программирования
комбинирующий некоторые черты Common Lisp с возможными расширениями в
сторону объектной ориентации. Позволяет экспериментировать с ОО
программированием на малых системах. |
ОС |
unix, amiga, atari, mac, MSDOS |
реализация |
LISP |
описание |
Исходная версия из книги Robert R. Kessler и Amy R. Petajan
“LISP, Objects, and Symbolic Programming” |
Scheme
реализация |
T |
версия |
3.1 |
описание |
Разработанный в Йеле язык похожий на Scheme. Транслятор T
написан на самом себе и позволяет генерировать эффективный код. Включает среду
Scheme |
ОС |
Decstation, Sparc, Iris. Старые m68k версии |
реализация |
scm |
версия |
4e1 |
описание |
Быстрый, переносимый интерпретатор R4RS Scheme. |
ОС |
Amiga, Atari-ST, MacOS, MS-DOS, OS/2, NOS/VE, Unicos, VMS,
Unix |
реализация |
Hobbit |
версия |
release 4b |
описание |
Основной целью при разработке hobbit было производить
максимально эффективные C программы, которые будут поддерживать большинство
Scheme структур, и обеспечивать читабельность выходных программ и
модифицируемость. Hobbit написан на Scheme.. |
ОС |
љ |
реализация |
scsh |
версия |
0.4 |
описание |
Scsh является еще одним Unix shell-ом со встроенными
возможностями R4RS Scheme. Обеспечивает высокоуровневую нотацию и полный
доступ к системным вызовам Unix. Реализация основана на Scheme 48 (версия
0.36). |
ОС |
SunOS, NetBSD, Linux, HP-UX, NeXTSTEP (intel) |
Языки описания документов
Существует множество языков описания документов, которые очень зависят от
конкретной реализации программы и скорее слабо стандартизованы.
Postscript
реализация |
Ghostscript |
версия |
2.6.1 |
описание |
Общедоступный Postscript интерпретатор с возможностью
просмотра для многих систем и многими шрифтами. |
ОС |
unix, msdos:msc5.1 |
SGML
реализация |
SGML (Standardized Generalized Markup Language) sgmls |
версия |
1.1 |
описание |
SGML является мощным языком разметки стандартизованным ISO
8879. Sgmls - это SGML анализатор, потомок ARCSGML анализатора написанного
Чарльзом Голдфарбом Charles Goldfarb). Выдает простое, легко разбираемое,
построчное, ASCII представление SGML стрктуры Element Structure Information
Set . Используется как front end для приложений с управляющими структурами в
виде SGML. SGML - важный шаг в направлении перехода к разделению информации
от его представления, то есть. |
ОС |
unix, msdos |
HTML
реализация |
Netscape Navigator |
версия |
4.04 |
описание |
љ |
ОС |
большинство unix систем, mac, windows, windows nt/95, os/2
warp |
реализация |
Internet Explorer |
версия |
4.0 |
описание |
љ |
ОС |
unix, mac, windows, windows nt/95 |
Языки программирования логики
Языки созданные для манипулирования логическими предикатами. Часто
используются для программирования экспертных систем.
Janus
Prolog
Параллельные языки и языки симуляций
Семейство Форт
Mops
Генераторы компиляторов
Генераторы компиляторов позволяют автоматизировать (в большей или меньшей
степени) процесс написания компиляторы. Большинство из них используют в качестве
входных языков вариации на тему BNF.
Реализация |
0x (attribute-grammar extension of Yacc and Lex) |
версия |
G1.01 |
описание |
Ox обобщает функции Yacc таким же образом, как и атрибутные
грамматики обобщают С-грамматики. Обычно спецификации Yacc и Lex можно описывают
наследуемые и синтезируемые атрибуты в виде программ на Си. Ox проверяет такие
спецификации на завершенность и корректность и генерирует по ним программу,
которая строит и декорирует дерево разбора. Ox допускает наиболее общий класс
атрибутных грамматик. Пользователь может определять проход дерева для
постдекорации для легкого определения побочных эффектов в виде кодогенерации. Ox
обрабатывает ошибки при генерации дерева разбора. Ox - препроцессор, и расширяет
синтаксис Yacc, Lex и C.
Работает для LALR(1)-грамматик, характерна семантически управляемая генерация.
|
ОС |
Unix |
реализация |
Rie (атрибутные грамматики) |
версия |
2.10 |
описание |
Rie - еще один генератор компиляторов, основанный на
однопроходных атрибутных грамматиках, называемых ECLR-атрибутными грамматиками.
ECLR-атрибутные грамматики являются надмножеством LR-атрибутных грамматик, и
генерируемый компилятор может вычислять наследуемые и синтезируемые атрибуты
параллельно с LR разбором без генерации дерева разбора. Стиль описания для Rie
основан на Yacc, но семантическая часть продукции может содержать атрибутные
правила.
Т.к. спецификации основаны на атрибутных грамматиках, пользователь может
интегрировать синтаксис и семантику одним описанием. Rie также допускает
сокращения, контекстные условия и локальные атрибуты, которые полезны при
написании компиляторов.
Генерируемый компилятор только в 1.8 раза медленнее написанного вручную. Rie
генерирует Си код атрибутного вычислителя.
|
ОС |
UNIX, DOS, и .д. (те же, как и bison) and Sharp X68000 |
реализация |
PCCTS (Purdue Compiler-Construction Tool Set) EBNF |
версия |
1.33 |
описание |
PCCTS напоминает высоко интегрированную версию YACC и LEX; в
котором ANTLR (ANother Tool for Language Recognition) соответствует YACC и DLG
(DFA-based Lexical analyzer Generator) работает как LEX.
PCCTS грамматики содержат спецификации лексики и синтаксиса с выборочными
откатами ("infinite lookahead"), семантичскими предикатами,
конструкцией промежуточного представления и изощренной обработкой исключений при
разборе. Правила могут использовать расширенную форму Бэкуса (Extended BNF -
EBNF) для описания грамматических конструкций и могут определять параметры,
возвращаемые значения и локальные переменные. Языки, описываемые на PCCTS,
распознаются с помощью предсказывающего LL(k) анализатора и генерируют
читабельный, C/C++ код;
Доступен C++ анализатор, написанный на PCCTS.
|
ОС |
Unix, DOS, Windows, OS/2, Macintosh, NeXT |
реализация |
PRE-CC Xtended |
версия |
2.30 |
описание |
PRECCX - генератор компиляторов с бесконечным заглядыванием
вперед для КЗ грамматик. Генерируемый код ANSI C.
Исходные спецификации представляют EBNF формы с наследуемыми и синтезируемыми
атрибутами. Написанные сценарии могут компилироваться в отдельные модули и в
последующем собираться вместе. Позволяются правила с мета-продукциями. В основе
технологии лежат оптимизации LL(oo) грамматик. Существует конвертер для
yacc. |
ОС |
unix, MS-DOS |
реализация |
GMD Toolbox for Compiler Construction (бывший Cocktail) |
версия |
9209 |
описание |
Целый комплекс инструментов:
- lalr: генератор синтаксических анализаторов (LALR(1) -> C, Modula-2);
- ell: генератор синтаксических анализаторов (LL(1) -> C, Modula-2);
- rex: генератор лексических анализаторов (-> C, Modula-2);
- bnf: транслятор Extended BNF в BNF;
- y2l: транслятор BNF (yacc) в Extended BNF;
- ast: генератор абстрактных синтаксических деревьев;
- ag: генератор атрибутных вычислителей;
- puma: преобразования абстрактных синтаксических деревьев при помощи поиска шаблонов
|
ОС |
Unix, Linux, MS-DOS, MS-Windows, OS/2 |
реализация |
bison++, flex++ |
версия |
1.21-8 (bison), 2.3.8-7 (flex), 5 (flex++bison++misc) |
описание |
Переписанный на С++ bison-1 и flex 2.3, генерирующий классы.
Так же как и Bison с Flex-ом, данные два инструмента независимы друг от друга,
но сконструированы для работы вместе.
Почти все символьные имена могут быть переопределены, транслятор может
использоваться как в C, так и в C++.
|
ОС |
SUNOS4, DOS, все те же что и Flex/Bison, Windows NT |
реализация |
bison-A2.3 |
версия |
2.3 (соответствует gnu bison 1.22) |
описание |
Стандартный gnu bison с множеством расширений:
лицензионно-чистые анализаторы на C и C++, только один внешний символ для каждой
грамматики, разрешает много грамматик для одного приложения. |
ОС |
большинство UNIX систем |
реализация |
COCO/R |
версия |
1.39 (Modula, Pascal, Oberon) |
описание |
генератор компиляторов для LL(1)-грамматик.
Coco/R генерирует анализаторы, работающие по методу рекурсивного спуска и
связанные с ними сканеры по атрибутным грамматикам. С помощью Coco/R можно
раскрутить самого себя с генерацией драйвера, анализатора, сканера и
семантического вычислителя по атрибутным грамматикам из CR.ATG.
|
ОС |
MS-DOS: TopSpeed Modula-2; FST 2.0; FST 3.1 - 3.5;
StonyBrook QuickMod 2.2; Logitech 3.03; Turbo Pascal. Macintosh: Apple
MacMeth. Unix/Linux/FreeBSD: Mocka, Gardens Point. |
реализация |
Coco/R for C |
версия |
1.05 |
описание |
Си версия Coco/R профессора Moessenboeck.
Coco/R генерирует рекурсивный анализатор и сканер по атрибутным
грамматикам. Coco/R можно раскрутить самого себя с генерацией драйвера,
анализатора, сканера и семантического вычислителя по атрибутным грамматикам
из CR.ATG.
|
ОС |
Многие UNIX системы (Linux, UnixWare, SunOS, IBM AIX,
HP-UX, и т.д.) MS-DOS и OS/2 |
реализация |
TXL: Tree Transformation Language |
версия |
7.4 |
описание |
TXL - язык для выполнения преобразования одного исходного
кода в другой. Может использоваться для быстрого прототипирования новых
языков и языковых процессоров. Использовался для прототипирования языков
спецификаций, командных языков и для таких более традиционных задач,
вычисление константных выражений, преобразование типов, оптимизация
исходных программ и reverse engineering. TXL воспринимает на входе
КС-грамматику в расширенной нотации БНФ, и множество правил с примерами
преобразований, применимых к исходному коду, описываемому грамматикой. TXL
- является гибридным зыком функционального/основанного на правилах, с
использованием парадигмы структурных преобразований. |
Математические языки и инструменты
APL
Unix BC
Fortran
Инжиниринговые языки
Языки имитаций, конструирования и спецификации электронных плат.
EDIF
VHDL
Семейство Вирта
Языки созданные Никлаусом Виртом (Niklaus Wirth) и их наследники.
Modula-2
Modula-3
Pascal
Oberon
Oberon-2
Ассемблеры
Ассемблеры для разных платформ
Макропроцессоры
C препроцессоры
Gnu M4
Языки специального назначения
SQL
Естественные языки
Недоразумения
Классификация языков программирования по уровню
Развитие языков программирования (да и всего программирования в целом)
характеризуется общей тенденцией повышения уровня языков программирования.
Все начиналось с машинного автокода (пример, AUTOCODER от Алика
Гленни[Alick E. Glennie], 1952), когда автокод был примитивным символьным
представлением машинного кода. Потом появились первые языки общего
назначения (Fortran). В 70 года получили широкое распространение языки т.н.
“среднего” уровня - BLISS (один из первых “не ассемблеров”, который
использовался при программировании операционной системы), BCPL, C. В то же
время уже существовали языки высокого уровня, такие как PL, Algol
илиPascal. С введением в последнее время в широкое пользование парадигмы
объектно-ориентированного программирование наибольшее распространение
получили языки высокого уровня, такие как C++, Object Pascal и т .п. корни
которых лежат в наиболее распространенных языках прошлого десятилетия.
Классификация языков программирования по средствам разработки
Несмотря на то, что в последние десятилетия появилось огромное
количество новых языков программирования, новых средств для конструирования
компиляторов появилось не так уж и много. Большинство из существующих
компиляторов по-прежнему разрабатывается на старых-добрых Lex/Yacc/Bison
или их новых потомках Flex++/Bison++. Другие средства, получившие широкое
распространение в последнее время: PCCTS, PRECC, Cocktail.
|