LINUX.ORG.RU

Будущее языков ML


0

0

Вот тут намедни порылся в славном семействе языков ML. И что-то хреново мне на душе стало. С одной стороны релизы выходят регулярно, есть несколько реализаций. С другой стороны, нет внятной документации, сайты, застрявшие в эпохе CERN'овского веба, с кучей битых ссылок, ссылок на древние, неоконченные/неполные доки. Полное отсутствие следов какого-то сообщества.

Такое ощущение, что теперь силы всей прогрессивной научной общественности направлены либо на F#, либо на Haskell. И от того и от другого, что-то сильно пахнет мышами.

С Ocaml ситуация несколько получше, но тоже крайне плачевна. И опять мышами пахнет.

И самое главное, натыкаешься на следы активных исследований, которые происходили в 80-х - 90-х годах. И для своего времени были прогрессивны.

Команда MosML, кажется, целиком переключилась на РЕФАЛ. SML/NJ в состоянии искусственной комы. MLTon сдох. PolyML вроде как-то шевелится, но опять же без сообщества.

Что же произошло? Неужели вот так после тридцати лет исследований ML будет выброшен на помойку, оставшись только в не очень идеологически чистом Ocaml'е, казуальных проектах типа Mythryl и дальних родственниках типа Хаскеля?

★★★★★

Ответ на: комментарий от anonymous

>Я меньше чем за 100K не консультирую.

Кстати, а в каких направлениях сейчас лисп применяют? И вот еще спросить хочу, SBCL оно как? Сильно сливает коммерческим лиспам?

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

Программный код на Scheme легко транслируется в CL моим кодогенератором благодаря мощи последнего.

мило. а зачем?

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

>> Я меньше чем за 100K не консультирую.

Кстати, а в каких направлениях сейчас лисп применяют?

В направлении троллинга.

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

а что, SICP - учебник по Scheme. и неужели после него нельзя макры писать. СL - единственный язык с макрами? В Схемен они не кошерны? Мне, кстати, пришлось одну макhу написать в конце 3-й главы сикпа. чтобы запись (lazy-list (f 1) (f 2) (f 3)) разворачивалась в (cons-stream (f 1) (cons-stream (f 2) (cons-stream (f 3)))

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

забыл спросить. я лиспер не опытный(aka nub). Мне, после схемы, показалось очень неудобным отсуcтвие блочности в CL.(или она там есть). Можете мне объяснить, какие проблемы могла принести блочность, и почему от нее отказались в CL.

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

Мне, кстати, пришлось одну макhу написать в конце 3-й главы сикпа

и что только люди не делают, лишь бы не учить Haskell

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

Что такое «блочность»?

(define f ()
  (define g ())   
  ...)
То, что дефайны друг в друга вкладываются и как в паскале внутренний вне внешнего не видно?

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

круто, уже забыл как в схеме функции объявлять

(define (f) 
  (define (g))    
  ...)

Love5an
()
Ответ на: комментарий от Macil

> В F# важную роль играет платформа...

Кстати, дотнетовские вещи вписываются очень органично в F#. Например, дотнетовский double называется в F# согласно традиции просто float, а дотнетовский float - это float32 в F#. На первом месте ML, на втором - дотнет. Во многих случаях можно писать, особо не обращая внимания на нижележащую платформу. Изящно спроектировано. Так, как будто F# был таким изначально, и дотнет тут как бы не причем.

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

если да - вероятно, стандарт был и так уже большой, и добавлять еще какой-то дублирующий функционал(уже есть labels) не захотели

Или, это как-то с макросами связано, чтоб можно было определять топлевел-видимые функции вне топлевела

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

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

покажите как это реализвать в CL: (define (f a b c) (define (g x) (if (p? x (- a x)) x (g (* b x)))) (g c))

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

Блочность, емнип, в схеме это не begin, а то, что define создает lexical environment, ограничивающий внутренний дефайны

а labels на такое не способен?

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

в том то и дело, что способен
т.е. это чисто синтаксическая фича такая.


и еще там, в схеме, прямо как в паскале, все define должны быть перед обычным кодом

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

> одно из удобств локальных ф-й, то что они замыкаются на контексте,
В CL на это есть flet и labels (ну и ещё впридачу можно пользоваться macrolet и symbol-macrolet).

(Извините за отступление от темы, я не знаю ML)

den73 ★★★★★
()
Ответ на: комментарий от pseudo-cat

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

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

Кстати, а в каких направлениях сейчас лисп применяют? И вот еще спросить хочу, SBCL оно как? Сильно сливает коммерческим лиспам?

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

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

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

В СLtL были даже generic-flet и generic-labels, кстати
но их убрали, потому что никто якобы ими не пользовался, не представлял, как они должны работать, и еще потому что обобщенные функции как бы предполагаются расширяемы извне(а это, понятно, невозможно, когда у нас жестко лексически ограниченная область видимости).

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

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

Вот какой фичи иногда не хватает, возможно, так это динамической области видимости функций

не понял, в смысле из всех пакетов? или лексических символов в динамическом окружении, но тогда вообще не понятно, зачем это)

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

всмысле вот так:

(defun foo () (print 123))

(defun bar () (f))

(defun baz ()
  (dynamic-flet ((foo () (print 456)))
    (bar)))

;;(bar) ==> 123
;;(baz) ==> 456

Хотя, в принципе, и сейчас можно делать так, естественно:

(defvar *foo* (lambda () (print 123)))

(defun bar () (funcall *foo*))

(defun baz ()
  (progv '(*foo*) (list (lambda () (print 456)))
    (bar)))

;;(bar) ==> 123
;;(baz) ==> 456

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

Ну, dynamic-flet я как-то криво нарисовал, конечно. Лучше так:

(declaim (fspecial foo))
;;...
(defun baz () 
  (dynamic-flet '(foo) (list (lambda () (print 456)))
    (bar))) 

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

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

а по поводу (define (foo 1) (define (bar 2)) , ведь это обычная работа для макросов, почему бы тем, кому нравится, не сделать такой дефайн?

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

потому что, макрос должен принимать, в качестве параметра, код который будет вызывать эти ф-и. а в случае сехмы, код внешней ф-и не заперт в макросе.

Или ты хотел заменить макросом defun внешней ф-и? тогда да, с виду задача легкая. Но если при этом могут возникать проблемы, то поправьте меня.

З.Ы. Хорошее видно будущее в МЛ, раз в этом топике обсуждают только лисп.

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

> Хорошее видно будущее в МЛ, раз в этом топике обсуждают только лисп.

Сектанты набигают :) А будущее языка не по обсуждению на ЛОРе определяется.

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

а чем ЛОР не показатель? тут хотя-бы дают высказаться анонам(правда после небольшого перерыва, но то был не ЛОР, ЛОР тогда спал), которые смело признаться что они юзают Лисп/Хаскелл/Эрлан(нужное подчеркнуть), и не боятся, что за ними уже выехали Жаберы или ПЫХ-ПЫХеры чтобы уничтожить, под предлогом сектанства.

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

а давно Scratch вышел на 27-е место? неужели столько детей занимается программированием?

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

Такая же, практически, картина.

на TIOBE есть только общая сводка, здесь же можно отделить котлеты от мух

так, на Yahoo LISP обошёл OCaml -значит, о нём больше говорят; так, на Freashmeat OСaml обошёл LISP - значит, на нём больше пишут :)

лично для меня весьма интересны показатели IRC'овых каналов - хорошо видно, что community у OCaml во всяком случае есть, и немаленькое

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

> а чем ЛОР не показатель?

Чем ЛОР не показатель текущего положения вещей? Тем, что тут вообще маргиналы тусуются. Чем не показатель будущего? Тем, что здесь вряд ли есть люди, принимающие решения.

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

И где же он используется?

сходи на #ocaml @ FreeNode да спроси

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

> Вот и открылась вся правда о генеалогии хаскеля!

Не, просто один лиспер оказался внебрачным сыном Петросяна.

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

Вот и открылась вся правда о генеалогии хаскеля!

лисперы такие лисперы

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

упоминать Петросяна это уже давно само по себе петросянство





смотрим wikipedia -> haskell (programming language) -> influenced by(находим там ML, ага. Можно еще посмотреть в influenced by у influenced by(напр. miranda), и тоже найти там оно самое.)

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

дык, а что скрывать

ты так ловко и незаметно переводишь тему, что даже мешать не хочется :)

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

А у jtootf'а педалька, сразу печатающая «LISP».

старая добрая M-x lisp-pedal-mode ;)

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