Interested Article - Spice (язык программирования, 1998)
![](/images/009/175/9175568/1.jpg?rand=977859)
![](https://cdn.wafarin.com/avatars/e97abd871ea2793ffa98f430ed268c35.gif)
- 2020-04-27
- 2
Здесь представлена статья о языке программирования, разработанном в 1998 году. Статью о языке программирования для симуляции аналоговых цепей, разработанном в 1972 году, см. здесь SPICE (язык программирования, 1972) .
Spice — язык программирования , схожий с Common Lisp , но использующий синтаксис в стиле Алгол . Создан с учетом ускорения и упрощения обработки XML . Поддерживается довольно необычное смешение статической и динамической типизации, то есть поддерживается динамическая типизация с дополнительной возможностью статической типизации. Выражение-ориентированный язык с поддержкой множества типов данных, автоматическим управлением хранением данных и несколькими методами управления (multiply-dispatched methods).
Философия языка
Ориентирован на не слишком опытных программистов, время от времени работающих с текстом, HTML и XML, и использующих среднего размера проекты.
История
Язык был разработан на основе идеи Дейва Регетта, Криса Доллина и Стива Лича. Первоначальная работа была закончена осенью 1998 года, после чего было сделано несколько модификаций, в результате чего реализация языка существенно развивалась, а разработчики получили некоторый опыт.
Первая версия языка использовала таблицы стилей, а его синтаксис был близок к ECMAScript . В версии языка от 2002 года таблицы стилей уже не использовались, так как у разработчиков возникли проблемы с привязкой их к основному фреймворку, а синтаксис языка потерял Си-основу, приблизившись скорее к . Ядро языка осталось тем же самым, а разработчики продолжили эксперименты с добавлением поддержки регулярных выражений.
Технический обзор
Язык поддерживает автоматическое управление размещением в памяти : программы выделяют память под новые данные, которые удаляются, когда на них больше нет ссылок. Это освобождает программиста от рутинного контроля освобождения памяти.
Spice поддерживает динамическую типизацию : по умолчанию, типы являются сущностями времени исполнения (то есть их тип определяется во время исполнения, а не во время компиляции), а не сущностями времени компиляции, привязанными к выражениям. Это обеспечивает гибкость при разработке программ, за счет уменьшения обнаружения открытых ошибок и некоторых накладных расходов во время исполнения. Указание типов могут быть добавлены к объявлению переменных, и компилятор будет их использовать при проверке на ошибки и оптимизации.
Spice — выражение-ориентированный язык : (почти) все конструкции языка возвращают значения, даже циклы. Язык поддерживает многозначность: выражения различают ряд из нуля или более значений. Число значений выражения не относится к свойству, определяемому на стадии компиляции.
Язык относится к высокоуровневым языкам : он поддерживает функции как значения, полную лексическую поддержку, и обладает синтаксисом для использования символов функция (то есть лямбда-выражений).
Spice поддерживает многоуправляемость : функции могут быть определены частями («перегружены») для различных комбинаций типов аргументов, а при вызове функции выполняется наиболее подходящий по описанным параметрам кусок. Обычное однозначное динамическое управление объектно-ориентированных языков (Smalltalk, C++, Java) — частный случай мультиметодов Spice, созданных под влиянием CLOS и ObjectClass.
Spice — классово-нейтральный : новая перегрузка любой обобщенной функции может присутствовать в любом пакете, где данная функция входит в область видимости, причем специальный синтаксис для различения вызова перегруженной функции от неперегруженной не требуется. Классы не поддерживают пространства имен.
Языком поддерживается несколько типов процедур: функции, методы, конструкторы и прочие. Для оформления вызова процедуры используется синтаксис вида F(X) , в котором F — имя вызываемой процедуры, а X — передаваемый ей аргумент.
При использовании переменных их объявление является обязательным.
Строки представляют собой последовательности символов Unicode в каноническом виде. Являются неизменяемыми и могут рассматриваться как массивы с использованием стандартной нотации s[i] .
Стандартная библиотека
Для языка Spice разработана довольно богатая библиотека стандартных значений и процедур.
Примеры стандартных процедур:
- x.typeOf — тип x
- x.print — сокращение от x.printOn(standardOutput)
- x.toString — конвертирует x в строку, аналогичным образом как это делает print
Реализовано несколько типов чисел: малые целые ( Small ), большие целые ( BigInt ), короткие и длинные числа с плавающей запятой ( Float , Double ), отношения (дроби) ( Ratio ) и комплексные числа ( Complex ).
Операторы: + , - , * , / , div , rem , % работают как и в большинстве других языков. Div — деление нацело, операторы должны быть целыми числами, а результат округляется в сторону нуля. Rem — остаток от деления, операторы должны быть целыми числами, результат представляет собой соответствующий остаток от деления. / в результате дает число с плавающей запятой, если операторы не делятся нацело. Оператор /: выполняет точное деление : результат содержит отношение для обозначения составляющих, не относящихся ни к целым числам, ни к числам с плавающей запятой (собственно, это является основным способом получения подобных значений). Функционал операторов отношения <= , < , >= , > , == , /== реализован схожим образом, как в других языках (единственное, операторы == и /== не рекомендуется применять к числам с плавающей запятой).
Примеры программ
Пример традиционной программы «Hello, world!» на языке Spice:
# Простейший пример
println( "Hello, world!" );
Здесь знак
#
означет начало строчного комментария, а процедура
println
печатает строку. Символ
;
используется для разделения инструкций, означая конец одной строки и возможное начало другой. Не всегда является необходимым, но рекомендуется его всегда использовать.
См. также
Ссылки
- (англ.)
![](https://cdn.wafarin.com/avatars/e97abd871ea2793ffa98f430ed268c35.gif)
- 2020-04-27
- 2