Для людей с фамилией см. Sather (фамилия) .
Парадигма | объектно-ориентированный , функциональный |
---|---|
Разработано | Стив Омохундро |
Разработчик | Калифорнийский университет в Беркли , Университет Вайкато , проект GNU |
Впервые появился | 1990 г. |
Стабильный выпуск | 1.2.3 [1] / 7 июля 2007 г . |
Печатная дисциплина | статичный , сильный |
Интернет сайт | www |
Основные реализации | |
ICSI Sather, GNU Sather | |
Под влиянием | |
Эйфель , CLU , Common Lisp , Схема | |
Под влиянием | |
здорово |
Sather - объектно-ориентированный язык программирования . Он возник примерно в 1990 году в Международном институте компьютерных наук (ICSI) Калифорнийского университета в Беркли и был разработан международной группой под руководством Стива Омохундро . Он поддерживает сборку мусора и обобщения по подтипам .
Первоначально он был основан на Eiffel , но разошелся и теперь включает несколько функций функционального программирования .
Название навеяно Эйфелем; Sather башня является узнаваемой достопримечательностью в Беркли, названная в честь Джейн Кра Sather , вдова Педер Sather , который пожертвовал крупные суммы в фонд университета.
Сатер также черпает вдохновение из других языков программирования и парадигм: итераторы , проектирование по контракту , абстрактные классы , множественное наследование , анонимные функции , перегрузка операторов , контравариантная система типов.
Первоначальная реализация Беркли (последняя стабильная версия 1.1 была выпущена в 1995 году, больше не поддерживается [2] ) была принята Free Software Foundation, поэтому она стала GNU Sather. Последняя стабильная версия GNU (1.2.3) была выпущена в июле 2007 года [3], и в настоящее время программное обеспечение не поддерживается. Было еще несколько вариантов: Sather-K из Университета Карлсруэ ; [4] [5] Sather-W из Университета Вайкато [6] (реализация Sather версии 1.3); Перенос Питером Науллом ICSI Sather 1.1 на RISC OS ; [7] и pSather, [8] [9]параллельная версия ICSI Sather, обращающаяся к многопроцессорным архитектурам с неоднородным доступом к памяти, но представляющая программисту модель разделяемой памяти.
Прежний компилятор ICSI Sather (теперь GNU Sather) реализован как компилятор для C , т. Е. Компилятор не выводит объектный или машинный код, но принимает исходный код Sather и генерирует исходный код C в качестве промежуточного языка . Оптимизация оставлена на усмотрение компилятора C.
Компилятор GNU Sather, написанный на самом Sather, имеет двойную лицензию по условиям GNU GPL и LGPL .
Привет, мир [ править ]
класс HELLO_WORLD - это главное это # OUT + "Hello World \ n" ; конец ; конец ;
Несколько замечаний:
- Имена классов ВСЕ ЗАГЛАВНЫМИ; это не только соглашение, но и выполняется компилятором.
- Вызываемый метод
main
является точкой входа для выполнения. Он может принадлежать к любому классу, но если он отличается отMAIN
, он должен быть указан в качестве параметра компилятора. #
- символ конструктора, вызывающий методcreate
соответствующего класса; здесь он используется для создания экземпляраOUT
класса, который на самом деле является стандартным выводом.- Здесь
+
оператор был перегружен, чтобы обозначать добавление потока. - Операторы , такие как
+
являются синтаксическим сахаром для условно названных вызовов методы:a + b
обозначаетa.plus(b)
. Обычные соглашения о приоритете арифметики используются для определения порядка вызова методов в сложных формулах. - Компоновка программы допускает предварительные и последующие условия (здесь не показаны), показывающие происхождение Сатера Эйфеля.
Пример итераторов [ править ]
класс MAIN - это главное это петля i : = 1. до ! ( 10 ); # OUT + i + "\ n" ; конец ; конец ; конец ;
Эта программа печатает числа от 1 до 10.
Конструкция loop
... end
является предпочтительным средством определения циклов (хотя while
и repeat
- until
также доступны). Внутри конструкции можно использовать один или несколько итераторов. Имена итераторов всегда заканчиваются восклицательным знаком (это соглашение обеспечивается компилятором). upto!
- это метод целочисленного класса, INT
принимающий один once
аргумент, что означает, что его значение не будет изменяться по мере того, как итератор уступает. upto!
можно было бы реализовать в INT
классе так:
до ! ( Один раз м : INT ): ЖЕ это я : INT : = самостоятельно ; - инициализировать i значением self, - то есть целым числом, от которого этот метод называется loop, если i > m, затем выйти ; - выйти из цикла, когда i выйдет за m конец ; yield i ; - иначе используйте i как возвращаемое значение и оставайтесь в цикле i : = i + 1 ; - конец приращения ; конец ;
Информация о типе переменных обозначается постфиксным синтаксисом variable:CLASS
. Тип часто можно вывести, поэтому вводимая информация является необязательной, например, в anInteger::=1
. SAME
это удобный псевдокласс, относящийся к текущему классу.
Ссылки [ править ]
- ^ https://directory.fsf.org/wiki/sather .
- ^ Планы ICSI Sather на будущее
- ^ Загрузки GNU Sather
- ^ Страница проекта Sather-K (архив с 2001 г.)
- ^ Sather-K 0.9 скачать, версия 1994 года
- ^ Страница проекта Sather-W 1.3 (заархивированная ссылка с 2002 года)
- ^ Порт Питера Наулла больше не доступен в Интернете.
- ^ pОписание отца
- ^ pSather скачать
Внешние ссылки [ править ]
- Домашняя страница Sather