Для людей с фамилией см. Sather (фамилия).
Paradigm | объектно-ориентированный, функциональный |
---|---|
Разработано | Стивом Омохундро |
Разработчик | Калифорнийский университет, Беркли, Университет Вайкато, Проект GNU |
Впервые появился | 1990 |
Печатная дисциплина | статический, сильный |
Веб-сайт | www.gnu.org / software / sather / |
Major реализации | |
ICSI Sather, GNU Sather | |
под влиянием | |
Eiffel, CLU, Common Lisp, Scheme | |
под влиянием | |
Холодный |
S ather - это объектно-ориентированный язык программирования. Он возник примерно в 1990 году в Международном институте компьютерных наук (ICSI) при Калифорнийском университете в Беркли, разработан международной группой под руководством Стива Омохундро. Он поддерживает сборку мусора и обобщенные типы по подтипам.
Первоначально он был основан на Eiffel, но разошелся и теперь включает несколько функциональное программирование функций.
Название навеяно Эйфелем; Башня Сатера - узнаваемая достопримечательность Беркли, названная в честь Джейн Кром Сатер, вдовы Педера Сатера, пожертвовавшей крупные суммы на фонд университета..
Сатер также черпает вдохновение из других языков программирования и парадигм: итераторы, дизайн по контракту, абстрактные классы, множественное наследование, анонимные функции, перегрузка операторов, контравариантная система типов.
Первоначальная реализация Беркли (последняя стабильная версия 1.1 была выпущена в 1995 г., больше не поддерживается) была принята Фондом свободного программного обеспечения, поэтому стала GNU Sather. Последняя стабильная версия GNU (1.2.3) была выпущена в июле 2007 года, и в настоящее время программное обеспечение не поддерживается. Было еще несколько вариантов: Sather-K из Университета Карлсруэ ; Sather-W из Университета Вайкато (реализация Sather версии 1.3); Перенос Питером Науллом ICSI Sather 1.1 на RISC OS ; и pSather, параллельная версия ICSI Sather, адресующая неоднородный доступ к памяти многопроцессорных архитектур, но представляющая программисту модель совместно используемой памяти.
Прежний компилятор ICSI Sather (теперь GNU Sather) реализован как компилятор для C, т. Е. Компилятор не выводит объект или машина, но берет исходный код Sather и генерирует исходный код C как промежуточный язык. Оптимизация оставлена на усмотрение компилятора C.
Компилятор GNU Sather, написанный на самом Sather, имеет двойную лицензию под GNU GPL LGPL.
1 класс HELLO_WORLD равен 2 main is 3 # OUT + "Hello World \ n"; 4 конец; 5 конец;
Несколько замечаний:
main
является точкой входа для выполнения. Он может принадлежать к любому классу, но если он отличается от MAIN
, он должен быть указан как параметр компилятора.#
- это символ конструктора, вызывающий метод create
соответствующего класс; здесь он используется для создания экземпляра класса OUT
, который на самом деле является стандартным выводом.+
был перегружен здесь для обозначения добавления потока.+
, являются синтаксическим сахаром для вызовов методов с обычными именами: a + b
означает a.plus (b)
. Для определения порядка вызова методов в сложных формулах используются обычные соглашения о приоритете арифметики.1 класс MAIN is 2 main is 3 loop 4 i: = 1.upto! (10); 5 # ВЫХОД + я + "\ п"; 6 конец; 7 конец; 8 конец;
Эта программа печатает числа от 1 до 10.
Конструкция loop
... end
является предпочтительным средством определения циклов (хотя while
и повторяют
- , пока не станут доступны
). Внутри конструкции можно использовать один или несколько итераторов. Имена итераторов всегда заканчиваются восклицательным знаком (это соглашение обеспечивается компилятором). upto!
- это метод целочисленного класса INT
, принимающий один аргумент once
, что означает, что его значение не будет изменяться по мере того, как итератор уступает. до!
может быть реализовано в классе INT
следующим образом:
до! (Один раз m: INT): SAME is i: INT: = self; - инициализировать i значением self, - то есть целым числом, от которого этот метод называется loop, если i>m, затем выйти; - выйти из цикла, когда i выйдет за m конец; yield i; - иначе используйте i как возвращаемое значение и оставайтесь в цикле i: = i + 1; - конец приращения; конец;
Информация о типе переменных обозначается постфиксным синтаксисом переменная: КЛАСС
. Тип часто можно вывести, и поэтому информация о типе необязательна, как в anInteger :: = 1
. SAME
- вспомогательный псевдокласс, относящийся к текущему классу.