LINUX.ORG.RU

Вышел GNU Guile 2.0.7

 , , ,


1

3

Вышла новая версия реализации языка Scheme — GNU Guile 2.0.7. Несмотря на незначительное изменение номера версии, появились несколько интересных нововведений, а именно:

  • Полная поддержка инфиксных выражений (curly-infix-expressions). Теперь вместо (* a (+ b c)) можно писать {a * {b + c}}.
  • Поддержка разных опции чтения (read option) для разных портов.
  • Поддержка вложенных директив future.
  • Специальный синтаксис для добавления путей в переменные окружения GUILE_LOAD_PATH и GUILE_LOAD_COMPILED_PATH в конец списка путей, а не в начало.
  • Исправлен недочет в функции load-in-vicinity, которая не сканировала директории, установленные в переменной %load-compiled-path.
  • Исправлен порядок поиска расширений. Теперь Guile не изменяет для этого переменную окружения LD_LIBRARY_PATH.
  • Функция make-vtable-vtable помечена устаревшей, рекомендуется использовать make-vtable и <standard-vtable>.
  • Оптимизированы вызовы equal? и eqv? для случаев, когда один из аргументов — константа.
  • Новые предупреждения компилятора -Wduplicate-case-datum и -Wbad-case-datum.
  • Многочисленные незначительные улучшения и исправления ошибок.

>>> Подробности

★★★★★

Проверено: tazhate ()

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

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

Я так понимаю, «непосредственности» — это вылетевшие со второго курса наркоманы, сидящие дома, задрачивающие анафорические лямбды и жрущие мамкин борщ? В то время как «быдлокодеры» пишут операционные системы, СУБД, серверы приложений, веб-серверы, почтовые серверы, оптимизирующие компиляторы, embedded софт, десктопный софт, вебсайты, enterprise системы, middleware, telecom software, CAD/CAM, SCADA и CASE-системы, игры, программируют high performance вычисления.

И делают это отнюдь не на лиспе.

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

это не язык для посредственностей.

Если лисп — это язык не для посредственностей, а для выдающихся, талантливых профессионалов, то они должны себя соответствующим образом проявлять. То есть писать выдающийся и профессиональный код. Можешь нам его предъявить?

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

выдающийся и профессиональный код

Профессиональный код - далеко не всегда выдающийся.

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

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

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

ados ★★★★★ ()
Последнее исправление: ados (всего исправлений: 1)
Ответ на: комментарий от Nagwal

это походу один и тот же человек из под анонимуса вбрасывает как 'за' так и 'против'. Чем занимается уже на протяжении нескольких тредов. Эдакую 'затравку' создаёт. Троль-автотроф, кормящийся сам на себе. Потом правда в его ловушку скатываются и другие зелёные и не очень и происходит взаимокормление.

Bad_ptr ★★★★ ()
Последнее исправление: Bad_ptr (всего исправлений: 1)

Лиспоненавистники с криками «ненужно» уже набежали?

// Я лиспопофигист, если что.

hobbit ★★★★★ ()

«Scheme is widely used by a number[28] of schools; » (с) педевикия

И чего реально enterpriZe-полезного, кроме дисеров от «яйцеголовых», на этом творении написано?

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

И делают это отнюдь не на лиспе.

Да и не под никсы, по сути.

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

И чего реально enterpriZe-полезного, кроме дисеров от «яйцеголовых», на этом творении написано?

Alterator же православного альта.

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

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

Я себе не очень хорошо представляю как там в sbcl, но вот например сколько примерно, навскидку, займет времени решение следующей (абсолютно приземленной и практической) проблемы:

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

На яве все разборки заняли от силы 5 минут - посмотреть stack trace, поставить breakpoint в нужном месте, посмотреть оригинальный exception, понять что надо прогнать update скрипт на базе.

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

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

Лехко!

(define (loops n)
  (let ((result 0))
    (let loop1 ((i1 1))
      (if (> i1 n)
          'done
          (begin
            (let loop2 ((i2 1))
              (if (> i2 n)
                  'done
                  (begin
                    (let loop3 ((i3 1))
                      (if (> i3 n)
                          'done
                          (begin
                            (let loop4 ((i4 1))
                              (if (> i4 n)
                                  'done
                                  (begin
                                    (let loop5 ((i5 1))
                                      (if (> i5 n)
                                          'done
                                          (begin
                                            (let loop6 ((i6 1))
                                              (if (> i6 n)
                                                  'done
                                                  (begin
                                                    (set! result (+ result 1))
                                                    (loop6 (+ i6 1)))))
                                            (loop5 (+ i5 1)))))
                                    (loop4 (+ i4 1)))))
                            (loop3 (+ i3 1)))))
                    (loop2 (+ i2 1)))))
            (loop1 (+ i1 1)))))
    result))

Это из сорцов ракетки, на которую тут все мелко подрачивают, если чо.

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

А, тихо сам с собою я веду беседу :) Некоторых и не так плющит :)

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

Еще оттуда же.

  ;
  ;
  ;
  ;
  ;   ;;;;                                   ;;    ;
  ;  ;;;                                    ;  ;  ;
  ;  ;;;; ;;; ;;;;;;;  ;;; ;; ;;;    ;;;;   ;  ;  ;
  ;  ;;;; ;;;;;;;;;;;; ;;;;;;;;;;;  ;; ;;;  ;  ; ;
  ;  ;;;  ;;;  ;;  ;;; ;;; ;;; ;;; ;;; ;;;   ;; ;; ;;
  ;  ;;;  ;;;    ;;;;; ;;; ;;; ;;; ;;;;;;;      ; ;  ;
  ;  ;;;  ;;;  ;;; ;;; ;;; ;;; ;;; ;;;         ;  ;  ;
  ;  ;;;  ;;;  ;;; ;;; ;;; ;;; ;;;  ;;;;;;     ;  ;  ;
  ;  ;;;  ;;;   ;;;;;; ;;; ;;; ;;;   ;;;;     ;    ;;
  ;
  ;
  ;
  ;


  (define -frame%
    (drracket:module-language:module-language-online-expand-frame-mixin
     (frame-mixin
      (drracket:frame:mixin
       (drracket:frame:basics-mixin
        (frame:size-pref-mixin
         (frame:searchable-text-mixin
          (frame:searchable-mixin
           (frame:text-info-mixin
            (frame:delegate-mixin
             (frame:status-line-mixin
              (frame:info-mixin
               (frame:text-mixin
                (frame:editor-mixin
                 (frame:standard-menus-mixin
                  (frame:register-group-mixin
                   (frame:focus-table-mixin
                    (frame:basic-mixin
                     frame%))))))))))))))))))

      (test-check "Rinf+Rinf2"
        (solve 9 (x y)
        (any-union (Rinf x y) (Rinf2 x y)))
        '(((x.0 z) (y.0 z))
         ((x.0 (s z)) (y.0 (s z)))
         ((x.0 (s (s z))) (y.0 (s (s z))))
         ((x.0 (s (s (s (s z))))) (y.0 (s (s (s (s z))))))
         ((x.0 (s (s (s z)))) (y.0 (s (s (s z)))))
         ((x.0 (s (s (s (s (s (s z)))))))
           (y.0 (s (s (s (s (s (s z))))))))
         ((x.0 (s (s (s (s (s (s (s (s z)))))))))
           (y.0 (s (s (s (s (s (s (s (s z))))))))))
         ((x.0 (s (s (s (s (s z)))))) (y.0 (s (s (s (s (s z)))))))
         ((x.0 (s (s (s (s (s (s (s (s (s (s z)))))))))))
           (y.0 (s (s (s (s (s (s (s (s (s (s z))))))))))))))
anonymous ()
Ответ на: комментарий от provaton

Той же гомоиконности в хаскеле нет и не будет.

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

Гордость альта - панель управления на guile. Хотя там ещё bash, html, JS, perl и, как говорят, ruby.

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

Ну а это вообще пушка. Среднюю часть пришлось вырезать, так как не помещалось в экран, лол.

            (chi-expr499 (lambda (type1628 value1627 e1626 r1625 mr1624
                                  w1623 ae1622 m?1621)
                           ((lambda (t1629)
                              (if (memv t1629 '(lexical))
                                  value1627
                                  (if (memv t1629 '(core))
                                      (value1627 e1626 r1625 mr1624 w1623
                                        ae1622 m?1621)
                                      (if (memv t1629 '(lexical-call))
                                          (chi-application500 value1627
                                            e1626 r1625 mr1624 w1623 ae1622
                                            m?1621)
                                          (if (memv t1629 '(constant))
                                              (list
                                                'quote
                                                (strip522
                                                  (source-wrap444
                                                    e1626
                                                    w1623
                                                    ae1622)
                                                  '(())))
(полкило лапши выкинуто)
                                                                                              (if (memv
                                                                                                    t1629
                                                                                                    '(syntax))
                                                                                                  (sc-syntax-error
                                                                                                    (source-wrap444
                                                                                                      e1626
                                                                                                      w1623
                                                                                                      ae1622)
                                                                                                    '"invalid context for definition")
                                                                                                  (if (memv
                                                                                                        t1629
                                                                                                        '(displaced-lexical))
                                                                                                      (displaced-lexical-error299
                                                                                                        (source-wrap444
                                                                                                          e1626
                                                                                                          w1623
                                                                                                          ae1622))
                                                                                                      (sc-syntax-error
                                                                                                        (source-wrap444
                                                                                                          e1626
                                                                                                          w1623
                                                                                                          ae1622)))))))))))))))))))))
anonymous ()
Ответ на: комментарий от Nagwal

Не уловил сути вопроса.

backtrace там есть. «Точку облома» тоже можно. Хотя лучше trace на функцию повесить.

То бишь вопрос решается похожим образом примерно везде.

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

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

Посмотри на Tcl ;-)

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

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

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

Посмотри на Tcl ;-)

С библиотеками плохо.

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

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

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

Если времени много - coursera.org Выбирай самое интересное, а не думай, тратить время на лисп или не тратить.

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

Не очевидно как ты определяешь суть ошибки. А именно такие ошибки для CL не характерны по крайней мере по моей практики. Для Cl можно сказать: Посмотрел в backtrace где ошибка, перепрыгнул на код, поправил, перекомпилировал функцию. 2 м. 40 с.

Имени den73 Возврат значения из замыкания (комментарий)

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

Смотрел. Очень понравился. В связке с Tk - вообще бомба.

Но недостатки с которыми столкнулся, оставил меня на питоне. Во первых б00000000000льшие числа. Неприятно что надо дополнительную библиотеку использовать/искать. Во вторых, когда писал парсер для бота - возникли непонятки в работе регулярных выражений. Кстати насчёт регулярных выражений, хотел бы спросить совета, если ты знаком.

chinarulezzz ★★ ()

Тред не читал, дайте актуальную книгу по лиспу. А то сицп лежит, простаивает.

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

Тред не читал, дайте актуальную книгу по лиспу. А то сицп лежит, простаивает.

Если по Common Lisp (CL), то любая книга по нему будет актуальна, так как стандарт не изменялся с 1993 года. А вообще рекомендую PCL или PAIP в связке с CLTL2 (как справочник). Все они легко гуглятся.

gensym ★★ ()

Странный релиз. Сплошной регресс.

Полная поддержка инфиксных выражений (curly-infix-expressions). Теперь вместо (* a (+ b c)) можно писать {a * {b + c}}.

То есть вместо (или наряду) с интуитивно понятным простым (* a (+ b c)) будут теперь писать абракадабру {a * {b + c}}? А зачем было давать такую возможность? Для удобства обфускаторов?

Поддержка вложенных директив future.

Зачем?

Специальный синтаксис для добавления путей в переменные окружения GUILE_LOAD_PATH и GUILE_LOAD_COMPILED_PATH в конец списка путей, а не в начало.

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

Исправлен порядок поиска расширений. Теперь Guile не изменяет для этого переменную окружения LD_LIBRARY_PATH.

То есть вместо очевидного системного механизма подгрузки либ смастерили свой костылик. зачем?

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

Той же гомоиконности в хаскеле нет и не будет.

В хаскеле своей гомосятины под завязку...

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

То есть вместо (или наряду) с интуитивно понятным простым (* a (+ b c)) будут теперь писать абракадабру {a * {b + c}}? А зачем было давать такую возможность? Для удобства обфускаторов?

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

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

Для обычных людей паскакаль сделали.

В луа раздражает вот эта расширенная семантика. Круглые скобочки это одно, фигурные уже совсем другое, а без скобок третье. И сюда эти приперлись...

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

Для обычных людей паскакаль сделали.

Для обычных людей - паскакаль. Для Ылиты - лисп. Для быдлокодеров - пыхпых. Но кто же тогда, чёрт возьми, пишет на сях, плюсах, перле и пайтоне?

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

Посмотри например на yesod.

И что я там не заметил? Там какие-то особенные шаблоны?

Я не спорю с тем, что с template haskell можно много чего сделать. Но всё это будет выглядеть крайне противоестественно по сравнению с макросами CL или Scheme, где они - основа языка.

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

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

Вот именно. Поэтому CLOS - конфетка вроде «Ирис Кис-Кис». Вроде и сладко, но и зубы вырвать легко.

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

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

Если SBCL уже не числится среди живых, то что тогда живо? CLIPS что-ли? :-)

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

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

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

Ваши предложения?

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

Но мне кажется, что в каждом ЯП скорость понимания ошибок приходит с опытом.

Это, конечно, так. Но думаю сомнения Nagwal вызваны тем, что в некоторых языках с опытом приходит понимание того, что основной ошибкой был выбор этого чудо-языка. И сомнения эти, к сожалению, не беспочвенны.

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

Тред не читал, дайте актуальную книгу по лиспу. А то сицп лежит, простаивает.

Я учил по этому: http://www.gigamonkeys.com/book

Есть и в печатном виде.

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

В хаскеле своей гомосятины под завязку...

Не знаю, как с этим, а вот с гомоиконностью там ооочень плохо.

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

конфетка вроде «Ирис Кис-Кис». Вроде и сладко, но и зубы вырвать легко.

0_o

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

Когда настраиваешь емакс - это очень прикольно. А вот серверное приложение в продакшене я бы побоялся так хачить.

Продакшн я так и не хачу, на продакшене всегда зафиксированые версии (lisp-образ).

А вот разрабатывать весьма удобно инкрементально, хоть и тоже своих косяков хватает: например как пришибить конкретную специализацию generic'а я так и не нашел в SLIME'е. Например если была специализация :around, а потом все выродилось в :before. Не перезагружать же лисп-машину для этого? Лисперы, может подскажет кто?

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

Reader macros тоже ок, позволяют легко и просто расширять язык дополнительными конструкциями.

Только вот они привносят зависимость от state самого reader'а, что на практике приводит к большим проблемам с воспроизводимостью при том же deployment'е или bugfixing'е. То, с чем приходилось встречаться совсем недавно: clsql, чтоб его.

Хотя может я что-то не умею готовить (или, как вариант, не умеют авторы clsql).

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

Скорость у guile офигенно низкая

Вы на нём кодек что-ли писать собираетесь? Не стоит, guile --- для всякой скриптовни, где скорость не важна совершенно.

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

Ну с кодом как с данными можно работать в любом языке. Никто не мешает в том-же питоне распарсить исходник, перелопатить его и скормить компилятору

Теоретически ты прав и вообще все полные по Тьюрингу языки эквивалентны.

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

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