Lisaac
| Lisaac | |
|---|---|
| Класс языка | объектно-ориентированный прототипный |
| Появился в | 2003 |
| Автор | Benoît Sonntag |
| Разработчик | Benoît Sonntag & Jérôme Boutet |
| Выпуск | 0.42 (9 ноября 2020) |
| Система типов | статическая типизация |
| Основные реализации | Lisaac |
| Испытал влияние | Smalltalk, Self, Эйфель |
| Лицензия | GNU GPL 3 |
| Сайт | lisaac.org |
Lisaac — первый компилируемый объектно-ориентированный язык программирования, основанный на концепции прототипов, поддерживающий системное программирование и контрактное программирование.
Lisaac был разработан для написания операционной системы Isaac.
Компилятор Lisaac создаёт оптимизированный ANSI C код, который можно скомпилировать на любой платформе, для которой имеется компилятор языка C, что делает программы на языке Lisaac переносимыми. Возможно получить программы столь же быстрые, как и программы, написанные на языке C[1][2].
Несмотря на то, что язык строго типизирован, нет различия между кодом и данными. Даже скомпилированный код сохраняет динамические свойства.
Простейший пример кода
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. Дата обращения: 24 июля 2007. Архивировано 12 ноября 2007 года.
- ↑ Computer Language Benchmarks Game. Дата обращения: 8 июля 2008. Архивировано из оригинала 19 марта 2012 года.