Главная > Open Source, Разное > ParenScript — встрёчайте Lisp в виде JavaScript-а.

ParenScript — встрёчайте Lisp в виде JavaScript-а.

24 ноября 2007

celing-pc.pngПриветствую наших читателей. Если вы уже читали наш блог, вероятно заметили наметившуюся тенденцию к расширению возможностей языка javascript путём реализации не просто фреймворков и расширяющих конструкции языка библиотек, а написанию трансляторов с других, более высокоуровневых и мощных языков программирования, код которых позже автоматически транслируется в исполняемый в браузере JavaScript. Уже есть, и мы рассказывали, о трансляторах с Java, C# и даже с новых, созданных специально для такой задачи языках. Сегодня расскажем вам об ещё одном аналогичном проекте, где основным языком выступает заслуженный ветеран - язык Lisp.

Если вы не знаете, что такое Lisp, можете ознакомиться с цитатой из Wikipedia:

Лисп (LISP, от англ. LISt Processing — «обработка списков») — семейство языков программирования, основанных на представлении программы системой линейных списков символов, которые притом являются основной структурой данных языка. Лисп считается вторым после Фортрана старейшим высокоуровневым языком программирования. Сущность языка Лисп — символьная обработка. Вход в символьное пространство позволяет заниматься задачами искусственного интеллекта: понимания окружающего мира и принятия решений.

В стандарте Common Lisp (каждый) символ реализован как узел многокоординатной опять же символьной сети. Координаты, свойства, уровни сети записаны в ящичках (slots) символа. Основные слоты: имя символа (основополагающее аристотелево А=А), функциональный слот, слот значение, расширяемый список свойств (можно сказать микромир самого символа). Традиционный Лисп имеет строгую динамическую систему типов, содержит императивные свойства, но в общем поощряет функциональную парадигму программирования. Полноценная символьная обработка подразумевает возможность создания любого профиля объектно-ориентированного программирования (то есть реализация полного ООП имеющего тот или иной характер средствами языка).

А мы ознакомим вас с проектом ParenScript - реализацией языка Lisp для создания веб-приложений, в котором все операции над данными, а также работа с HTML и СSS ведётся при помощи Lisp-а, а потом транслируется в программу на JavaScript. Кстати, авторы поступили очень и очень правильно, изначально сделав ставку на читаемость кода, причём не только оригинального, но и транслированного - он прекрасно отлаживается при помощи Firebug-а, а разработчики могут легко использовать в проекте и другие популярные JavaScript фреймворки, например Prototype.

Помимо самого языка разработчики могут использовать дополнительные библиотеки, которые расширяют его возможности, например, AllegroServe HTMLGEN позволяет производить генерацию HTML кода из Lisp/ParenScript программы, а CL-JSON дополняет возможности работы с JSON данными. Кстати, очень много библиотек из оригинального Lisp-а (стандарта Common Lisp) можно использовать вместе с ParentScript.

Описания языка приводить мы не будем - это сама по себе большая и во многом интересная (Как и сложная) тема, просто приведем один пример, выводящий простую страницу с приветствием "hello world!", а далее попытаемся на минутку представить сферы применения такого оригинального сплава, как Lisp+JavaScript.

И так, пример программы "Hello world!":


(defun tutorial1 (req ent)
(declare (ignore req ent))
(html
(:html
(:head (:title "ParenScript tutorial: 1st example"))
(:body (:h1 "ParenScript tutorial: 1st example")
(:p "Please click the link below." :br
((:a :href "#" :onclick (ps-inline
(alert "Hello World")))
"Hello World"))))))

Теперь же немного подумаем. Язык Лисп был всегда, да похоже, и остаётся, очень удобным языком для программирования искусственного интеллекта и решения различных задач по обработке естественных языков. Помню ещё, была в советские времена такая переведённая книжка автора Терри Виноградова, которая называлась "Программа, понимающая естественный язык" (или так примерно), в которой детально рассказывалось об алгоритмике работы программ на Лиспе как раз, оперирующих естественным языком и позволяющие разбирать входные фразы, понимать их смысл исходя из контекста и строить синтаксически и логически верные ответы. Ну так, а теперь представьте, что вся накопленная алгоритмическая и теоретическая база на Лиспе теперь доступна для включения в разработки для веба. В принципе, можно ожидать, что это позволит создавать более совершенные веб-системы, в основном там, где требуется взаимодействие с пользователем, к примеру, поисковые системы (не глобального масштаба), системы управления знаниями, виртуальные гиды и помощники, системы поддержки пользователей и электронные магазины. Создание такого небольшого бота-помощника, первоначально общающегося с пользователем, причём, реализованного на стороне клиента, подгружающего только базу знаний с сервера, вполне доступно, а Лисп делает программирование такого решения не настолько уж сложным. Осталось дождаться версии ПРОЛОГ...

P.S. Кстати, есть и фреймворк для создания веб-приложений на ParentScript - UnCommon Web

Оценить материал на DevLinks.com.ua

Комментирование отключено.