Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Для людей с фамилией см. Sather (фамилия) .

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это удобный псевдокласс, относящийся к текущему классу.

Ссылки [ править ]

  1. ^ https://directory.fsf.org/wiki/sather .
  2. ^ Планы ICSI Sather на будущее
  3. ^ Загрузки GNU Sather
  4. ^ Страница проекта Sather-K (архив с 2001 г.)
  5. ^ Sather-K 0.9 скачать, версия 1994 года
  6. ^ Страница проекта Sather-W 1.3 (заархивированная ссылка с 2002 года)
  7. ^ Порт Питера Наулла больше не доступен в Интернете.
  8. ^ pОписание отца
  9. ^ pSather скачать

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

  • Домашняя страница Sather