Сатер
Парадигма | объектно-ориентированный , функциональный |
---|---|
Разработано | Стив Омохундро |
Разработчик | Калифорнийский университет, Беркли , Университет Вайкато , проект GNU |
Впервые появился | 1990 |
Стабильная версия | 1.2.3 [1]
/ 7 июля 2007 г |
Дисциплина набора текста | статический , сильный |
Веб-сайт | www |
Основные реализации | |
ИКСИ Сатер, GNU Сатер | |
Под влиянием | |
Эйфель , CLU , Common Lisp , Схема | |
Под влиянием | |
Прохладный |
Sather — объектно-ориентированный язык программирования . Он зародился примерно в 1990 году в Международном институте компьютерных наук (ICSI) при Калифорнийском университете в Беркли и был разработан международной командой под руководством Стива Омохундро . Он поддерживает сборку мусора и обобщения по подтипам .
Первоначально он был основан на Eiffel , но разошелся и теперь включает в себя несколько функционального программирования функций .
Название навеяно Эйфелем; Башня Сатер — узнаваемая достопримечательность Беркли, названная в честь Джейн Кром Сатер , вдовы Педера Сатера , пожертвовавшей большие суммы в фонд университета.
Сатер также черпает вдохновение из других языков программирования и парадигм: итераторов , проектирования по контракту , абстрактных классов , множественного наследования , анонимных функций , перегрузки операторов , контравариантной системы типов.
Исходная реализация Беркли (последняя стабильная версия 1.1 была выпущена в 1995 году, больше не поддерживается). [2] ) был принят Фондом свободного программного обеспечения и стал GNU Sather. Последняя стабильная версия GNU (1.2.3) была выпущена в июле 2007 года. [3] и программное обеспечение в настоящее время не поддерживается. Было еще несколько вариантов: Sather-K от Университета Карлсруэ ; [4] [5] Сатер-В из Университета Вайкато [6] (реализация Sather версии 1.3); Порт ICSI Sather 1.1 Питера Ноллса на ОС RISC ; [7] и Сатер, [8] [9] параллельная версия ICSI Sather, предназначенная для многопроцессорных архитектур с неоднородным доступом к памяти , но предоставляющая программисту модель общей памяти.
Бывший компилятор ICSI Sather (теперь GNU Sather) реализован как компилятор C , т. е. компилятор не выводит объектный или машинный код, а берет исходный код Sather и генерирует исходный код C в качестве промежуточного языка . Оптимизация остается на усмотрение компилятора C.
Компилятор GNU Sather, написанный на самом языке Sather, имеет двойную лицензию GNU GPL и LGPL .
Привет, мир
[ редактировать ] class HELLO_WORLD is
main is
#OUT+"Hello World\n";
end;
end;
Несколько замечаний:
- Имена классов пишутся ЗАГЛАВНЫМИ БУКВАМИ; это не просто соглашение, оно обеспечивается компилятором.
- Метод под названием
main
является точкой входа для выполнения. Он может принадлежать к любому классу, но если он отличается отMAIN
, он должен быть указан как опция компилятора. #
— это символ конструктора: он вызываетcreate
метод класса, имя которого следует за оператором. В этом примере он используется для создания экземпляраOUT
class, который является классом стандартного вывода .- The
+
Оператор был перегружен классом для добавления строки, переданной в качестве аргумента, в поток. - Такие операторы, как
+
являются синтаксическим сахаром для вызовов методов с традиционными именами:a + b
означаетa.plus(b)
. Обычные арифметические соглашения о приоритете используются для определения порядка вызова методов в сложных формулах.
Пример итераторов
[ редактировать ]Эта программа печатает числа от 1 до 10.
class MAIN is
main is
loop
i := 1.upto!(10);
#OUT + i + "\n";
end;
end;
end;
The loop
... end
Конструкция является предпочтительным средством определения циклов, хотя while
и repeat
- until
также доступны. Внутри конструкции можно использовать один или несколько итераторов. Имена итераторов всегда заканчиваются восклицательным знаком. (Это соглашение обеспечивается компилятором.) upto!
представляет собой метод INT
класс принимает одного once
аргумент, означающий, что его значение не изменится при выходе итератора. upto!
может быть реализовано в INT
класс с кодом, похожим на следующий.
upto!(once m:INT):SAME is
i: INT := self; -- initialise i to the value of self,
-- that is the integer of which this method is called
loop
if i>m then
quit; -- leave the loop when i goes beyond m
end;
yield i; -- else use i as return value and stay in the loop
i := i + 1; -- and increment
end;
end;
Информация о типе переменных обозначается постфиксным синтаксисом. variable:CLASS
. Тип часто можно вывести, и поэтому информация о типизации не является обязательной, как в anInteger::=1
. SAME
— это псевдокласс, ссылающийся на текущий класс.
Ссылки
[ редактировать ]- ^ https://directory.fsf.org/wiki/sather .
{{cite web}}
: Отсутствует или пусто|title=
( помощь ) - ^ «Планы на будущее ICSI Sather» . Архивировано из оригинала 05 февраля 2012 г. Проверено 2 марта 2012 г.
- ^ «Загрузки GNU Sather» . Архивировано из оригинала 5 апреля 2012 г. Проверено 2 марта 2012 г.
- ^ Страница проекта Sather-K (архив 2001 г.)
- ^ «Загрузка Sather-K 0.9, версия 1994 года» . Архивировано из оригинала 29 апреля 2024 г. Проверено 2 марта 2012 г.
- ^ Страница проекта Sather-W 1.3 (архивная ссылка за 2002 год)
- ^ Порт Питера Ноллса больше не доступен в Интернете.
- ^ "описание pSather" . Архивировано из оригинала 05 февраля 2012 г. Проверено 2 марта 2012 г.
- ^ "загрузка pSather" . Архивировано из оригинала 6 июля 2017 г. Проверено 11 октября 2021 г.
{{cite web}}
: CS1 maint: bot: исходный статус URL неизвестен ( ссылка )