Lisaac
Последнее изменение этой страницы: 11:38, 2 июня 2016.
Парадигма | объектно-ориентированный прототипный |
---|---|
Спроектировано | Benoît Sonntag |
Разработчики | Benoît Sonntag & Jérôme Boutet |
Первый появившийся | 2003 |
Стабильная версия | 0.13.1 (спецификация) / 17 февраля 2008 года |
Печать дисциплины | статическая типизация |
Портал: | http://www.lisaac.org |
Главная реализация | |
Lisaac | |
Под влиянием | |
Smalltalk, Self, Eiffel |
Lisaac — первый компилируемый объектно-ориентированный язык программирования, основанный на концепции прототипов. Lisaac воплотил в себе идеи языков Smalltalk (всё - объекты), Self (прототипное программирование) и Eiffel (контрактное программирование). Хотя Lisaac считается наследником Self, он отличается от него, в особенности из-за ограничений системного программирования. Lisaac допускает как низкоуровневое программирование, так и высокоуровневое. Компилятор Lisaac использует оригинальные техники оптимизации, такие как предотвращение позднего связывания, предсказание типов и специализацию кода, способствующие к достижение такой эффективности, что для генерируемого кода она недостижима для других языков такого же типа.
Содержание
Особенности
- Разработан для написания операционной системы Isaac
- Поддерживает работу с прерываниями и памятью драйверов
- Компилятор Lisaac создаёт оптимизированный кроссплатформенный ANSI C код
- Производительность компилируемых программ близка к производительности программ, написанных на C[1][2]
- Несмотря на строгую типизацию, язык не различает код и данные
- Динамические свойства объектов сохраняются после компиляции
Основной синтаксис
Lisaac чувствителен к регистру. Ключевые слова начинаются с заглавной буквы (Section, Header, Public, …), идентификаторы типов пишутся полностью в верхнем регистре (INTEGER, BOOLEAN, OBJECT, …), идентификаторы переменных и слотов — полностью в нижнем регистре. Объекты состоят из слотов, которые представляют собой данные или код. Символ ':' используется для объявления типов. В именах слотов используются префиксы '+' и '-' для обозначения видимости только для текущего объекта и для всех объектов соответственно. Скобки используется для разделения списков операторов, написанных через запятую. Список операторов может иметь произвольное количество возвращаемых значений. Символ ':=' используется для привязки слота к оператору или списку операторов, который будет выполнен при загрузке/инициализации объекта. Символ '<-' используется для привязки слота к списку операторов, который будет выполнен при вызове этого слота.
Примеры кода
Программа «Hello, World»
Section Header
+ name := HELLO_WORLD;
Section Public
- main <-
(
"Hello world\n".print;
);
Динамическое наследование
Родительский объект — это слот, значение которого можно переопределить:
Section Header
- NAME := DECOD_MPEG2_TO_SCREEN; Section Inherit
- videoparent : OBJECT <-
(
+ result : OBJECT;
typ
.when 1 then { result := WINDOW;}
.when 2 then { result := VIDEO_VGA;}
.when 3 then { result := VIDEO_TVOUT;};
result
) Section Public
- typ : INTEGER;
- decode_stream <-
(
putimage decode_to_bitmap;
)
Переопределение операторов
В Lisaac Оператор (программирование)|оператор — это слот, значение которого можно переопределить. Для примера переопределим оператор "+" для объекта NUMERIC:
- '+' Left 80 other:SELF :SELF <- Self - -other;
Или для матрицы:
- '+' Left 80 other:SELF :SELF <-
(
+ result : SELF;
result := SELF.create count;
1.to tab.count do {
i : INTEGER;
result.put (item i+other.item i) to i;
};
result
)
Обобщённое программирование
Предусмотрены Обобщённое программирование|обобщённые объекты:
ARRAY[E], DICTIONARY[KEY, VALUE]
Контрактное программирование
Используется Z нотация.
Примечания
- ↑ "Isaac project benchmarks". Archived from the original on 2007-11-12. Retrieved 2007-07-24.
- ↑ "Computer Language Benchmarks Game". Archived from the original on 2012-03-19. Retrieved 2008-07-08.
ISSN 2542-0356
Следуй за Полисом
Оставайся в курсе последних событий
Лицензия
Если не указано иное, содержание этой страницы доступно по лицензии Creative Commons «Attribution-NonCommercial-NoDerivatives» 4.0, а примеры кода – по лицензии Apache 2.0. Подробнее см. Условия использования.