Lisaac

Из Википедии, бесплатной энциклопедии

Lisaac
Класс языка объектно-ориентированный прототипный
Появился в 2003
Автор Benoît Sonntag
Разработчик Benoît Sonntag & Jérôme Boutet
Выпуск 0.42 (9 ноября 2020; 3 года назад (2020-11-09))
Система типов статическая типизация
Основные реализации 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 нотации.

Внешние ссылки[править | править код]

Сноски[править | править код]

  1. Isaac project benchmarks. Дата обращения: 24 июля 2007. Архивировано 12 ноября 2007 года.
  2. Computer Language Benchmarks Game. Дата обращения: 8 июля 2008. Архивировано из оригинала 19 марта 2012 года.