Interested Article - Spice (язык программирования, 1998)

Здесь представлена статья о языке программирования, разработанном в 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 печатает строку. Символ ; используется для разделения инструкций, означая конец одной строки и возможное начало другой. Не всегда является необходимым, но рекомендуется его всегда использовать.

См. также

Ссылки

  • (англ.)
Источник —

Same as Spice (язык программирования, 1998)