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++ виртуальной машиной.
Примечания
- The Cat Programming Language, Lambda the Ultimate
- Factor: a dynamic stack-based programming language (англ.) — Slava Pestov, Daniel Ehrenberg, Joe Groff. Dynamic Languages Symposium 2010, см. раздел Related Works
- MetaCat
- Cat — A Statically Typed Programming Language Interpreter in C# Архивная копия от 13 ноября 2011 на Wayback Machine, Christopher Diggins, 4 Nov 2006, The Code Project
- scheme-cat — a separate project for embedding Cat in Scheme by Ben Chambers
- Online Cat interpreter Архивировано 15 июня 2011 года.
- Cat in Python — implementation by Andrew Nelis
- Cat in Haskell
На основе: 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 - Cat interpreter in Omega using thrists (threaded lists) by Gabor Greif Архивировано 19 декабря 2013 года.
- Typed callcc in a stack-based language
- cvml на Google Code
Литература
- Christopher Diggins. Cat: A Functional Stack-Based Little Language (англ.) // Dr. Dobb's Journal. — April 15, 2008.
- Christopher Diggins. Typing Functional Stack-Based Languages (PDF, 0.7 МБ). Submitted for consideration to ICFP 2007
- Christopher Diggins. Simple Type Inference for Higher-Order Stack-Oriented Languages (PDF, 100Kb), Technical Report Cat-TR-2008-001, Draft April 20, 2008
- Christopher Diggins. What is a Concatenative Language (недоступная ссылка). Dr. Dobbs (31 декабря 2008). Архивировано 14 мая 2012 года.
Ссылки
- cat-language, The Cat Programming Language Project на Google Code
- Cat Language discussion group
- The Kitten Programming Language