Lisaac | это... Что такое Lisaac? (original) (raw)
Lisaac
Класс языка: | объектно-ориентированный прототипный |
---|---|
Появился в: | 2003 |
Автор(ы): | Benoît Sonntag |
Релиз: | 0.13.1 (Спецификация) (February 17, 2008) |
Типизация данных: | статическая типизация |
Основные реализации: | Lisaac |
Испытал влияние: | Smalltalk, Self, Эйфель |
Сайт: | isaacproject.u-strasbg.fr |
Lisaac — это первый компилируемый объектно-ориентированный язык программирования основанный на концепции прототипов, поддерживающий системное программирование и контрактное программирование.
Lisaac был разработан для написания операционной системы Isaac.
Компилятор Lisaac создаёт оптимизированный ANSI C код, который можно скомпилировать на любой платформе для которой имеется компилятор языка C, что делает программы на языке Lisaac переносимыми. Возможно получить программы столь же быстрые, как и программы написанные на языке C[1][2].
Несмотря на то, что язык строго типизирован, нет различия между кодом и данными. Даже скомпилированный код сохраняет динамические свойства.
Содержание
- 1 Простейший пример кода
- 2 Динамическое наследование
- 3 Переопределение операторов
- 4 Обобщённое программирование
- 5 Контрактное программирование
- 6 Внешние ссылки
- 7 Сноски
Простейший пример кода
`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.
- ↑ Computer Language Benchmarks Game. Архивировано из первоисточника 19 марта 2012. Проверено 8 июля 2008.