Расширяемый встраиваемый язык
Парадигма | Мультипарадигмальность : скриптовая , императивная , функциональная , объектно-ориентированная. |
---|---|
Разработано | Дэвид Олофсон |
Впервые появился | 2005 г |
Стабильная версия | 0.3.6
/ 4 февраля 2014 г |
Дисциплина набора текста | Динамический |
ТЫ | Кросс-платформенный |
Лицензия | Меньшая стандартная общественная лицензия GNU |
Расширения имен файлов | угорь |
Веб-сайт | угорь |
Под влиянием | |
Луа , Си , Паскаль |
Расширяемый встраиваемый язык ( EEL ) — это язык сценариев и программирования, разрабатываемый Дэвидом Олофсоном. EEL предназначен для написания сценариев в системах реального времени с тактовой частотой в диапазоне кГц, таких как музыкальные синтезаторы и промышленные системы управления, но также претендует на то, чтобы его можно было использовать в качестве независимого от платформы общего назначения языка программирования .
Философия
[ редактировать ]Что касается дизайна языка, общая идея состоит в том, чтобы найти практический баланс между мощностью, простотой использования и безопасностью. Цель состоит в том, чтобы помочь избежать многих типичных ошибок программирования, не прибегая к чрезмерно многословному синтаксису или ограниченной функциональности.
История
[ редактировать ]Первое воплощение EEL было в виде простого синтаксического анализатора структурированных определений звука, используемого в звуковом движке с открытым исходным кодом бесплатной игры Kobo Deluxe , SDL- порта для X11 игры XKobo . Это был простой интерпретатор с очень ограниченным управлением потоком данных и синтаксисом, сильно отличающимся от синтаксиса текущих версий. Эта первоначальная ветка EEL была впервые выпущена в 2002 году и до сих пор используется в Kobo Deluxe, начиная с версии 0.5.1.
В декабре 2003 года EEL был выделен в отдельный проект и подвергнут серьезной переработке, чтобы его можно было использовать для написания сценариев в реальном времени во встроенном приложении реологии . Именно здесь переход от интерпретатора к компилятору / VM произошел и материализовался настоящий язык программирования EEL. Первый официальный релиз состоялся в январе 2005 года. С тех пор EEL развивался медленно, в основном под влиянием личных и профессиональных потребностей его автора.
Функции
[ редактировать ]Общий
[ редактировать ]Язык не предназначен строго для какой-либо конкретной парадигмы программирования , но поддерживает объектно-ориентированное программирование или, точнее, программирование на основе прототипов , посредством минимального набора функций синтаксического сахара . другие стили и парадигмы программирования, такие как функциональное , модульное и метапрограммирование Также поддерживаются .
Благодаря отказу от указателей и предоставлению полностью управляемых структурированных типов данных EEL «безопасен» в том смысле, что программы EEL не должны иметь возможности привести к сбою виртуальной машины или хост-приложения.
Основные моменты
[ редактировать ]- C-подобный синтаксис.
- Непрозрачные ссылки (в отличие от необработанных указателей ).
- Динамическая типизация.
- Автоматическое управление памятью.
- Обработка исключений .
- Встроенные структурированные типы данных, такие как:
- строка — неизменяемая строка .
- dstring — динамическая строка .
- векторный фиксированного типа числовой массив .
- array — массив динамически типизированных элементов.
- таблица — ассоциативный массив .
Пример кода
[ редактировать ]Классическую программу hello world можно записать следующим образом:
export function main<args> { print("Hello, world!\n"); return 0; }
Ниже приведен пример рекурсивной функции:
export function main<args> { print("Recursion test 1:\n"); procedure recurse(arg) { print("arg = ", arg, "\n"); if arg recurse(arg - 1); } recurse(10); print("Recursion test 2; Mutual Recursion:\n"); procedure mrecurse2(arg); procedure mrecurse1(arg) { print("arg = ", arg, "\n"); if arg mrecurse2(arg); } procedure mrecurse2(arg) { mrecurse1(arg - 1); }; mrecurse1(10); print("Recursion test 2; Mutual Recursion with Function Reference:\n"); procedure mrrecurse1(arg, fn) { print("arg = ", arg, "\n"); if arg fn(arg, fn); } local mrr2 = procedure (arg, fn) { mrrecurse1(arg - 1, fn); }; mrrecurse1(10, mrr2); print(Recursion tests done.\n); return 0; }
Внутренности
[ редактировать ]Исходный код EEL компилируется в байт-код для специальной виртуальной машины , которая имеет набор инструкций относительно высокого уровня, предназначенный для минимизации количества команд и, следовательно, накладных расходов. Виртуальная машина EEL основана на регистрах и «без стека», то есть не полагается на C стек вызовов для управления контекстами виртуальной машины.
Базовый метод управления памятью — подсчет ссылок, который позволяет автоматически управлять памятью с детерминированным временем без необходимости одновременной сборки мусора.
Виртуальная машина использует «списки неопределенности» для отслеживания промежуточных объектов, созданных внутри выражений и т.п., что значительно упрощает обработку исключений и устраняет необходимость активного подсчета ссылок в каждой отдельной операции.
Приложения
[ редактировать ]Кобо Делюкс
[ редактировать ]Kobo Deluxe — это приложение EEL. [1]
Ссылки
[ редактировать ]- ↑ Лучшее за 2013 год: 31 год спустя — независимые игры на Commodore 64 Джеймса Монкмана на indiegames.com (20 декабря 2013 г.)