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

Cat — функциональный стековый язык программирования вдохновлен языком программирования Joy, от которого он отличается тем, что обеспечивает статическую типизацию с выводом типов (как, например, в ML и Haskell). Это один из подходов к решению проблемы надёжности, существующей в стековых языках[2] Так же включает макроязык MetaCat[3], позволяющий расширение языка Cat путём переопределения термов.

Cat
Изображение логотипа
Класс языка Конкатенативный язык программирования
Появился в 2006[1]
Автор Christopher Diggins
Выпуск 1.0 beta 4. (16 апреля 2008)
Система типов строгая, статическая, с выводом типов
Испытал влияние Joy, СIL, Java bytecode, Haskell, Factor, Forth
Лицензия MIT License
Сайт cat-language.com

Cat разрабатывался как высокоуровневый промежуточный язык, который также может использоваться как самостоятельный язык для разработки простых приложений. Таким образом, он занимает нишу аналогичную PostScript. Другое назначение этого языка — преподавание основных понятий программирования.


Примеры

править
Числа Фибоначчи
define fib {
    dup 1 <=
        []
        [dup 1 - fib swap 2 - fib +]
    if
}

    1
    [dup fib write ", " write inc]
    [dup 16 lteq]
while
"..." writeln
Факториал
define fact {
    dup 1 <= 
        [pop 1]
        [dup 1 - fact *]
    if
}

    0
    [dup write "! = " write dup fact writeln inc]
    [dup 16 lteq]
while

Реализации

править

Базовая реализация Cat представляет собой написанный на C# интерпретатор[4] и компилятор в CIL-код. Доступны также интерпретаторы Cat, написанные на Scheme[5], JavaScript[6], Python[7], Haskell[8], Ωmega[англ.][9], Standard ML[10].

В настоящее время Christopher Diggins работает над проектом cvml (Chickadee Virtual Machine Language)[11], написанной на C++ виртуальной машиной.

Примечания

править
  1. The Cat Programming Language Архивная копия от 20 июня 2010 на Wayback Machine, Lambda the Ultimate
  2. Factor: a dynamic stack-based programming language Архивная копия от 26 июля 2011 на Wayback Machine (англ.) — Slava Pestov, Daniel Ehrenberg, Joe Groff. Dynamic Languages Symposium 2010 Архивная копия от 18 апреля 2011 на Wayback Machine, см. раздел Related Works
  3. MetaCat. Дата обращения: 31 мая 2015. Архивировано 31 мая 2015 года.
  4. Cat — A Statically Typed Programming Language Interpreter in C# Архивная копия от 13 ноября 2011 на Wayback Machine, Christopher Diggins, 4 Nov 2006, The Code Project
  5. scheme-cat Архивная копия от 24 июля 2010 на Wayback Machine — a separate project for embedding Cat in Scheme by Ben Chambers
  6. Online Cat interpreter Архивировано 15 июня 2011 года.
  7. Cat in Python Архивная копия от 21 августа 2011 на Wayback Machine — implementation by Andrew Nelis
  8. Cat in Haskell Архивная копия от 13 июня 2012 на Wayback Machine
    На основе: Techniques for Embedding Postfix Languages in Haskell by Chris Okasaki. Haskell Workshop, October 2002, pages 105—113. Архивная копия от 20 июля 2011 на Wayback Machine+source code Архивная копия от 20 июля 2011 на Wayback Machine
  9. Cat interpreter in Omega using thrists (threaded lists) by Gabor Greif Архивировано 19 декабря 2013 года.
  10. Typed callcc in a stack-based language. Дата обращения: 1 июня 2011. Архивировано 17 декабря 2010 года.
  11. cvml Архивная копия от 4 мая 2013 на Wayback Machine на Google Code

Литература

править

Ссылки

править