Lisaac

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 11:38, 2 июня 2016.
Lisaac
Парадигма объектно-ориентированный прототипный
Спроектировано 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 нотация.

Примечания

  1. "Isaac project benchmarks". Archived from the original on 2007-11-12. Retrieved 2007-07-24. 
  2. "Computer Language Benchmarks Game". Archived from the original on 2012-03-19. Retrieved 2008-07-08. 

Список литературы

  1. Lisaac
  2. bmstu.wiki