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.

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

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


Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты