Qi (язык программирования)

Материал из Циклопедии
Перейти к навигации Перейти к поиску
Логотип языка программирования Qi

Qi (произносится «чи») — функциональный язык программирования, близкий к Common Lisp, но отличающийся от него возможностью использовать статическую типизацию (как в Haskell или C++), сопоставление с образцом и другие преимущества современных декларативных языков.

Qi написан на Лиспе и поверх него (используя его богатые возможности метапрограммирования)[1] и разрешает использовать функции базового языка[2].

Язык принципиально разрабатывается как экспериментально-образовательный, создатель языка не прилагает никаких особых усилий к его популяризации, в следствие чего уступает, к примеру, такому «новому лиспу» как Clojure[3].

Наименование и логотип[править]

Наменование Qi — это английское написание того, то известно у нас как жизненная сила Ци (气,氣). Логотип Qi в 2007 году разработал Ли Ша (англ. Xah Lee, настоящее имя Ли Шаван, 李杀网). По его собственным словам он основывался на традициях китайской каллиграфии. Лямбда окрашена в цвет тёмной киновари, традиционный цвет даосских храмов. Авторские права на логотип переданы создателю языка Qi Марку Треверу[4].

История[править]

Автор языка — Марк Тарвер, в настоящее время — профессор в отставке. Qi был создан им как часть проекта L21, цель которого — улучшение Лиспа для решения проблем 21 века. В своём докладе[5] Тарвер излагает проблемы Лиспа, которые, как он утверждает, наносят ущерб широкому распространению языка. Конкретно, он обозначает отсутствие в Common Lisp паттерн матчинга, несоответствия с теорией лямбда-исчисления и отсутствие статической типизации. Эти недостатки, по утверждению Тарвера, привели к отказу от Лиспа при обучении в университетах и, как следствие, к отсутствию Лисп-программистов.

Язык был представлен сообществу в Апреле 2005 года. Первая версия распространялась под лицензией GPL. В конце 2008 года была выпущена пересмотренная версия Qi II. Лицензия GPL была заменена двойной лицензией, позволяющей как Open Source, так и закрытое коммерческое использование[6]. Среди нововведений Qi II можно, в частности, отметить ленивое вычисление (по требованию)[7].

В августе 2009 года Марк объявил, что он прощается с программированием и уезжает в Индию заниматься йогой[8]. Однако в декабре того же года он вернулся в Англию и заявил, что «фаза путешествий закончилась».

Shen[править]

Логотип языка программирования Shen

В том же году Тарвер на европейской лисп-конференции (European Conference on Lisp) представил доклад «The Next Lisp»[9]. В качестве основной проблемы языка Qi им была названа зависимость от Коммон Лиспа. Поэтому следующая версия языка, появившаяся в ноябре 2011 года, названная уже Shen (что по-китайски означает «душа») реализована уже поверх минималистиного виртуального лиспа, подобного Lisp 1.5, разработанному Джоном МакКарти. Этот минимальный лисп сначала назывался Kernel Lisp а затем получил название KLambda.

Shen был портирован на CLisp, SBCL, ECL, Scheme, Clojure, JavaScript и Java. Лицензия Shen является копилефтной и позволяет свободно использовать и модифицировать код языка, до тех пор, пока спецификация языка остаётся неизменной, не допускается распространять производные копии, которые не соответствуют стандарту Shen и/или имеют другие названия[10]. Одним из важных нововведений этого языка стало появление собственной макросистемы[11].

Ядро языка[править]

Ядро Qi — это основано на Лиспе. Для функции также используется префиксная запись. Hello World на Qi выглядит так:

(output "Hello, world~%")

Списки создаются при помощи квадратных скобок [ … ] с пробелами, разделяющими элементы.

[76 trombones]	

Функция вычисления факториала с использованием сопоставления с образцом:

(define factorial	
0 -> 1	
N -> (* N (factorial (- N 1))))	

Лямбда функция, умножающая аргумент на 2:

(/. X (* X 2))

В функциях можно использовать сопоставление с образцом для списков (Qi, в основном, следует синтаксису Эдинбургского Пролога при сопоставлении (переменные пишутся в верхнем регистре), но вместо запятых при разделении используются пробелы.):

(define member	
_ [] -> false	
X [X | _] -> true	
X [_ | Y] -> (member X Y))

В состав языка также включена полноценная реализация Пролога Qi Prolog, реализованная как библиотека на Qi.

В языке Shen сопоставление с образцом возможно также для строк и векторов[12].

Функция, использующая охрану при нахождении первого числа, большего чем N, в списке:

(define find_greater	
N [] -> (error "no number greater than ~A.~%" N)	
N [M | _] -> M where (> M N)	
N [_ | Ns] -> (find_greater N Ns))

Статическая типизация[править]

Статическая типизация необязательна и включается командой (tc +), а выключается (tc -). Система типов распознает знаки, переменные, строки, логические значения, числа и символы в качестве примитивных типов. Операторы примитивных типов: списки, *(умножение), --> и массивы.

Источники[править]

  1. Common Lisp как мета-язык
  2. Mark Tarver и Qi
  3. Why Qi Lisp Fails and Clojure Succeeds
  4. Qi Lisp Language Logo, Xah Lee, 2007-12-30
  5. All notes taken from Mark Tarver’s lecture 'Lisp for the 21st C.'
  6. Лицензия
  7. Вышел Qi II, linux.org.ru, 02.12.2008
  8. Создатель Qi сворачивает проект, linux.org.ru, 02.08.2009
  9. Mark Tarver The Next Lisp. Проверено 13 декабря 2012.
  10. Mark Tarver The Shen License. Проверено 13 декабря 2012.
  11. Mark Tarver Shen Macros. Проверено 13 декабря 2012.
  12. Mark Tarver Shen pattern matching. Проверено 13 декабря 2012.

Литература[править]

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

 
Используемые
в разработке

Ада A+ APL Atlast Forth AWL Язык ассемблера ActionScript ABAP/4 AutoIt AWK BeanShell Бейсик Си Кобол C++ C# Clarion Clojure ColdFusion Common Lisp D dBase Delphi DuAL Eiffel Erlang Euphoria F# Форт Фортран Gambas Go Groovy HAL/S Haskell IBM PL/S Icon IridiumJava JavaScript Limbo Lua Модула-3 Object Pascal Objective-C OCaml Oz Parser Паскаль Компонентный Паскаль Perl Pixilang PHP PowerBASIC Python ПЛ/1 Пролог Qi Ruby Scala Scheme Seed7 Smalltalk SQL PL/SQL Tcl TouchDesigner Vala Visual Basic (.NET) • X-Robot

Академические

Agda Clean Curry Idris Лого ML Оберон Planning C РЕФАЛ Симула

IEC 61131-3

Instruction List ST FBD Ladder Diagram (LD) • SFC

Прочие

Алгол Алгол 68 Модула-2 Миранда Hope НОРМИН Санда

Эзотерические

HQ9+/HQ9++ • INTERCAL Brainfuck Befunge Malbolge Piet Spoon Unlambda Whitespace FALSE LOLCODE Глагол

Визуальные

G (LabVIEW) • Microsoft VPL Sikuli VisSim Алиса ДРАКОН Скретч

Прочее

ДинамическиеКомпилируемыеС ключевыми словами не на английском языке С C-style синтаксисом СинтаксисYoptaScript

Категория Языки программирования