LINUX.ORG.RU

[lorgoogle] Встраиваемый функциональный язык

 


0

1

Разыскивается встраиваемый функциональный язык, пригодный для удобных вычислений на древовидных структурах данных.

Требования:

  • компактная и эффективная реализация, пригодная для встраивания в программу;
  • интерпретируемый, динамический; не стоит задачи загонять программу в байт-код и быстро её выполнять, но стоит задача эффективно грузить и исполнять кучу мелких скриптов и не жрать при этом много памяти;
  • обрабатываться будут произвольные строки, целые числа и составленные их них структуры: списки, хэши, деревья; других типов данных иметь не обязательно;
  • не обязательно функциональщину в чистом виде, главное чтобы выражать алгоритмы в функциональном стиле было удобно.

В общем, этакий make-подобный язык, но ориентированный не на генерацию файлов, а на вычисление произвольных структур по дереву.

Пока присматриваюсь к универсальным ЯП: лиспам и Tcl, но хотелось бы найти что-то более заточенное под задачу, если оно существует в природе.

яваскрипт, конечно же

note173 ★★★★★
()

кстати да, lua легче всех встраивается в программу, но явасприпт все равно приятнее

note173 ★★★★★
()
Ответ на: комментарий от archimag

>JavaScritpt же, не понятны причины сомнения.

JavaScript - функциональный?

Led ★★★☆☆
()

Класс языка: мультипарадигменный: объектно-ориентированное, обобщённое, функциональное, императивное, аспектно-ориентированное, событийно-ориентированное, прототипное программирование

Кроме того, JavaScript имеет ряд свойств, присущих функциональным языкам — функции как объекты первого класса, объекты как списки, карринг, анонимные функции, замыкания — что придаёт языку дополнительную гибкость.

(ц) педевикия

anonymous
()

Всем спасибо за советы, но однако же, господа, советующие JS, я удивлён, какое именно слово во фразе «make-подобный язык, но ориентированный не на генерацию файлов, а на вычисление произвольных структур по дереву» вам не ясно? С тем же успехом можно целиком всё приложение написать на каком-нибудь питоне, что в мои планы, к счастью, не входит.

Tcl или лиспы благодаря гибкости можно заточить под сколь угодно специфичный DSL и получить требуемое, а вот с JS такой финт ушами не пройдёт.

geekless ★★
() автор топика
Ответ на: комментарий от x3al

> guile

По всей видимости. Как раз ковыряю документацию.

geekless ★★
() автор топика
Ответ на: комментарий от CARS

> Внезапно Haskell.

Статически типизированный. А значит, ненужное переусложнение транслятора, бесполезное для простых скриптов.

geekless ★★
() автор топика
Ответ на: комментарий от geekless

Статическая типизация означает отсуствие определенногл класса ошибок. А транслятор все равно не тебе писать.

tailgunner ★★★★★
()
Ответ на: комментарий от geekless

«make-подобный язык, но ориентированный не на генерацию файлов, а на вычисление произвольных структур по дереву»

prolog ?

Reset ★★★★★
()
Ответ на: комментарий от Reset

> «make-подобный язык, но ориентированный не на генерацию файлов, а на вычисление произвольных структур по дереву»

prolog ?

знаете хорошую встраиваемую реализацию?

shty ★★★★★
()
Ответ на: комментарий от Sosiska

если ты заранее за нас решил, то что зачем вопрос тут задаешь?

Потому что:

хотелось бы найти что-то более заточенное под задачу, если оно существует в природе.

geekless ★★
() автор топика
Ответ на: комментарий от Sosiska

Какую реализацию? Насколько я знаю, они все компиляторы, за исключением HUGS. А у HUGS я не нашел в документации информации, что он пригоден для встраивания.

geekless ★★
() автор топика

newlisp, как вариант, есть «легкие» варианты хаскеля, название не помню

XVilka ★★★★★
()
Ответ на: комментарий от anonymous

Примеров такого встраивания больше 100500.

anonymous
()
Ответ на: Io от chinarulezzz

> Io

Блин, я даже и не вспомнил об этом языке. По свойствам, кажется, подходит лучше лиспа и уж точно лучше тикля.

Благодарю.

geekless ★★
() автор топика

JavaScript
потому что есть уже seed или gjs для gtk
или qt в котором уже встроен javascript через QML

enep ★★★★★
()
Ответ на: комментарий от enep

Полное ощущение, что все, кто предлагает в треде JS — лютые тролли. Хотя вроде среди отметившихся хватает и адекватных людей, так что я в недоумении. Мало того, что он абсолютно не подходит под требования, так теперь еще и:

потому что есть уже seed или gjs для gtk

или qt в котором уже встроен javascript через QML



Я что, где-нибудь писал, что мне нужна интеграция с этими тулкитами?

geekless ★★
() автор топика
Ответ на: комментарий от anonymous

> В js есть eval, с ним любые финты пройдут.

А еще он тьюринг-полный, и поэтому на нём можно реализовать произвольный алгоритм. Например, набыдлокодить интерпретатор лиспа, в котором уже сделать нужный DSL. Извращенцев хватает...

geekless ★★
() автор топика
Ответ на: комментарий от archimag

> Да вроде подходит, что не так?

Собственно:

главное чтобы выражать алгоритмы в функциональном стиле было удобно

И не говорите мне, что у него функции суть объекты первого рода, и можно делать замыкания. Уродливый, многословный синтаксис, где даже самая тривиальная и лаконичная мысль абсолютно теряется за нагромождением ключевых слов, которые приходится накрутить, чтобы её выразить. var и function(){} — рак этого языка.

geekless ★★
() автор топика
Ответ на: комментарий от geekless

> Полное ощущение, что все, кто предлагает в треде JS — лютые тролли

отнюдь, JS как встраиваемый язык лучший вариант из всех, взяв тот же v8 ты сможешь статично слинковаться с одной небольшой либой и получить не только действительно мощный язык, но и компиляцию в машинный код,

aho
()
Ответ на: комментарий от geekless

> Уродливый, многословный синтаксис

Мы ведь здесь не про лисп, а про JS, да?

де даже самая тривиальная и лаконичная мысль абсолютно теряется

за нагромождением ключевых слов



Да что вы такое говорите?

var и function(){} — рак этого языка.


И кто здесь тролль?

archimag ★★★
()
Ответ на: комментарий от KRoN73

> Forth соответствует всем критериям :)

Угумс, только, вот, придется написать свой Lisp для «обрабатываться будут произвольные строки, целые числа и составленные их них структуры: списки, хэши, деревья».

P.S. Впрочем, для настоящего фортера это не проблема, пока доступна книжка К.Таунсенд`а и Д.Фохт`а.

:)

Neksys ★★★
()
Ответ на: комментарий от geekless

> Полное ощущение, что все, кто предлагает в треде JS — лютые тролли. Хотя вроде среди отметившихся хватает и адекватных людей, так что я в недоумении. Мало того, что он абсолютно не подходит под требования

реализация языка Arc (dialect of Lisp) на JavaScript: http://jonathan.tang.name/files/arclite/

сайт http://arclanguage.org/
тутор http://ycombinator.com/arc/tut.txt
прочее http://www.arcfn.com/2008/04/many-arc-compilers-and-interpreters.html

Neksys ★★★
()
Ответ на: комментарий от geekless

> А еще он тьюринг-полный, и поэтому на нём можно реализовать произвольный алгоритм. Например, набыдлокодить интерпретатор лиспа, в котором уже сделать нужный DSL. Извращенцев хватает...

Ты знал...

Neksys ★★★
()
Ответ на: комментарий от archimag

> Да что вы такое говорите?

filelist.select(function(v){return v.isValid()}).map(function(v){return v.escape()}).join(", ")

join ", " (map pathEscape (filter fileValid filelist))

join [lmap [lselect $filelist {fileValid $args[0]}] {pathEscape $args[0]}] ", "

filelist.select{|v| v.isValid}.map{|v| v.escape}.join(", ")

filelist select(isValid) map(escape) join(", ")

К.О. в недоумении.

> var и function(){} — рак этого языка.

И кто здесь тролль?

Троллить простым указанием на общеизвестный факт? Вы переоцениваете мои способности, до такой степени мастерства я еще не дошел. Так что когда я указываю на факт, я просто указываю на факт.

geekless ★★
() автор топика
Ответ на: комментарий от geekless

> К.О. в недоумении.

Да просто под дурочка косит

archimag ★★★
()
Ответ на: комментарий от Neksys

>Угумс, только, вот, придется написать свой Lisp…

Так это всё пишется в несколько десятков строк :)

KRoN73 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.