Author |
Message |
d_wanderer
Senior
Joined: 28 Feb 2006 21:34 Posts: 180
|
Хе... Хотел бы я посмотреть на примерчик... Например видоизменить грамматику, на допустим, обратную польскую запись как в смоллтолке... Ну или хотя бы на S-выражения...
|
05 Jul 2007 11:50 |
|
|
d_wanderer
Senior
Joined: 28 Feb 2006 21:34 Posts: 180
|
Хм... А не проще сразу фреймы сделать?
|
05 Jul 2007 11:52 |
|
|
SfS
Doomed
Joined: 16 Apr 2005 22:35 Posts: 492 Location: Томск
|
Интересная тема. Но есть некоторые замечания по терминологии.
Термн "ленивый" - это хоть и устоявшийся в определённых кругах термин, но неправильный. Гораздо более правильный термин - "отложенный".
Согласись, что термин "отложенные вычисления" гораздо более понятен, чем "ленивые вычисления" ?
Термин же "ленивый" возник из-за безграмотности технического переводчика, который когда-то где-то буквально перевёл слово lazy, не вникая в смысл текста...
В общем я за то, чтобы термины были понятны
|
07 Jul 2007 04:43 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22576 Location: Silicon Valley
|
lazy = ленивый
так проще и понятнее
|
07 Jul 2007 05:42 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22576 Location: Silicon Valley
|
Обратную польскую говришь?... Ну вот например так:
| | | | Code: type polish = push(num)|oper((num,num)->num);
fun eval (list(polish)) -> num { (lp)=evalstack(lp,[]); }
fun evalstack (list(polish),list(num)) -> num { (empty_list,n::empty_list) = n; (push(n)::p,s) = evalstack(p,n::s); (oper(f)::p,a::b::s) = evalstack(p,op(b,a)::s); }
// вариант записи с пролого-подобным конструктором списков [H|T] вместр хоповского ::
fun evalstack (list(polish),list(num)) -> num { ([],[n]) = n; ([push(n)|p],s) = evalstack(p,[n|s]); ([oper(f)|p],[a,b|s]) = evalstack(p,[op(b,a)|s]); }
| | | | |
Пример использования: eval([push(1),push(2),push(3),oper(*),oper(+)]) вернёт 7
|
07 Jul 2007 17:22 |
|
|
d_wanderer
Senior
Joined: 28 Feb 2006 21:34 Posts: 180
|
Минутку... Но ведь нотацию объявления функции ты не меняешь. То есть как была нотация определенного ВИДА ВЫРАЖЕНИЯ типа
То оно так и осталось. Исчезла простота обратной польской записи такой какой она есть в ФОРТЕ и смоллтолке.. Смысла от таких наворотов я не вижу.
Метаязык долджен поддерживать возможность изменения именно ВХОДНОЙ ГРАММАТИКИ. Посмотри на то что сделано в Common Lisp.
Там меняются имено ПРАВИЛА интерпретации символов во входящем потоке. Если хочешь - кину ссылки из Гая Стила.
Это во первых. Во вторых, в какой тип байткода ты собрался его транслировать. Я могу показать (если интересно) что получилось у меня при написании байткода для симпла. Особенно сборка мусора...
Написанная мной ВМ работает дажа на небольших объемах памяти (около 10 Кб).
|
08 Jul 2007 03:00 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22576 Location: Silicon Valley
|
Ну можно оператор описать, который будет заменять вызов eval, если в этом загвоздка:
Байт код нужен будет для представления структур данных и функциональных преобразователей данных, а интерпретатор этих структур будет нативным (на сях написанным).
|
08 Jul 2007 07:50 |
|
|
bar
Senior
Joined: 07 Aug 2006 10:18 Posts: 185
|
насколько я знаю, такой подход к совмещению io и функциональности, некогда использовался в haskell'е. до тех пор, пока они не придумали IOMonad -- концепцию, до которой я так и не допетрил.
зы. а автор знаком с хаскеллом? а то я понять не могу, то ли всё это изобретение велосипеда, то ли мысль глубже чем я вижу...
|
08 Aug 2007 21:01 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22576 Location: Silicon Valley
|
Знаком отчасти, но мне он не сильно симпатичен - там ведь побочные эффекты допустимы - процедурности и императивности слишком много и например сравнение с образцом идёт сверху вниз, а идеальным всё-таки является вариант когда берётся наиболее подходящая конструкция - как в Hope...
|
08 Aug 2007 21:16 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22576 Location: Silicon Valley
|
Решил познакомиться с хаскелом поближе - на аппловском ноуте в дебиане он уже был как стандартный пакет - теперь взялся ставить на свой домашний пц со слакварью - пошёл на haskell.org и взялся было качать самую последнюю версию GHC - 6.6.1. Сюрприз номер один - чтобы собрать хаскел из сырцов нужен уже установленный... хаскел более старой версии!... Ок - идём к бинарным сборкам для линуха. Скачал, развернул - далее установка через configure и make install (как альтернатива - make in-place). Сюрприз номер два - make install где-то зациклился при попытке скопировать либы в /usr/local/lib... Не беда - делаем локальную установку make in-place (сделать рабочим в том месте где лежит) вместо глобальной make install. Вроде всё срослось - однако при запуске интерпретатора не получилось запустить ядро из lib-каталога - сюрприз номер три: у него атрибутов запуска небыло - поправил. Далее оказалось что интерпретатор не может найти свои либы - сюрприз номер четыре: в файле package.conf осталось куча ссылок на /usr/local/lib/... Короче пришлось вручную править. Итог - сыровато будет для серъезного и массового применения. Хотя чeго можно ждать от проекта, который держит сотрудник микрософта?...
|
19 Aug 2007 21:37 |
|
|
bar
Senior
Joined: 07 Aug 2006 10:18 Posts: 185
|
не знал что всё так сложно. я его собирал исключительно через гентушные портажи.
это ты к чему? типо это плохо законспирированная попытка дискредитировать не-MS?
|
27 Aug 2007 05:36 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22576 Location: Silicon Valley
|
Скорее Haskell постепенно превратится во временное явление под названием "функциональный C#"
|
27 Aug 2007 06:17 |
|
|
Mac Buster
Retired
Joined: 03 Aug 2003 22:37 Posts: 1474 Location: Moscow
|
Так это, вроде там уже все места заняты, есть F#
_________________ Extreme Entertainment
|
27 Aug 2007 12:32 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22576 Location: Silicon Valley
|
F# - это другая группа
|
27 Aug 2007 15:56 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22576 Location: Silicon Valley
|
Справедливости ради следует сказать что всё вышесказанное относится только к конкретной реализации Haskell под названием GHC - может с другими реализациями не всё так плохо...
|
31 Aug 2007 13:50 |
|
|