LINUX.ORG.RU

Racket 8.0

 , ,


0

4

Вышла новая мажорная версия языка программирования Racket, основанного на Scheme и нацеленного на создание пользователем собственных DSL.

  • Завершён переход на среду исполнения Chez Scheme — таким образом удалось уменьшить объём генерируемого кода на величину от 10 до 30%, а также значительно ускорить выполнение программ и повысить эффективность.
  • Переписан движок среды тестирования программ.

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

★★★

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

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

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

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

начинается жесть, больше пока никакой новой инфы до 2047

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

автор с 96 года пишет на схеме

Не «пишет», а «hacking». Интересуется.

И мне нравится подбор фраз:

I’ve been hacking Scheme and Lisp since 1996. And I love building web sites. I’m a full-stack developer by day.

Не сказано, что первая и третья фраза связаны. Вот я тоже «hacking Lisp since 2000». И «love building web sites» (три или четыре сделал). И «full-stack developer by day». Правда на 1С. :-)

Но меня хватает не тащить 1С в Racket. Или не хватает.

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

А тут - https://gumroad.com/jessealama - он вообще утверждает, что он математик и программист :) Я так понял, это далеко не единственная его публикация.

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

Ну пусть используется и дальше. Реализация там чья? Мезано успешным проектом трудно назвать, это — игрушка, Grammarly используют SBCL, а не гнушный лисп, который как раз мертв, Давайте определимся, Common Lisp, он же ANSi Lisp, как язык, не обновлялся с середины 90х, стало быть, минус потоки, минус юникод, минус параллелизм. Хорошо, есть библиотеки, но они друг с другом не дружат. Это касательно языка. Последняя версия gnu clisp вышла в 2010м году, а в 2015м проекту мантейнеров искали. Это называется — жив? SBCL еще жив, да. Кстати, последний стандарт его ровесника — фортрана вышел в 2015м.

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

Видел твои комментарии в темах про хаскель и сложилось впечатление, что его ты тоже освоил. Обычно люди или любят динамическую типизацию или наоборот. Неужели «для каждой задачи свой инструмент»?

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

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

Вероятность обнаружить какие-то нужные тебе библиотеки для CL раз так в 100 выше, чем для схемы.

для Clojure ещё выше

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

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

Почему-то со всем этим у CL получше чем у модного python, который неплохо так ломают от версии к версии.

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

Common Lisp, он же ANSi Lisp, как язык, не обновлялся с середины 90х

Стандарт 1991 года это начало 90х.

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

А разве там нельзя менять этот синтаксис как перчатки?

Да, но насколько я понял, менять хотели именно #lang racket. Или вернее сказать - сделать ему синтаксис. @monk поправит если я не так понял.

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

для Clojure ещё выше

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

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

Grammarly используют SBCL, а не гнушный лисп, который как раз мертв

У тебя что-то в голове какая-то каша, при чем тут вообще какой-то «гнушный лисп»? Grammarly, на сколько помню, использует и SBCL, и CCL.

Давайте определимся, Common Lisp, он же ANSi Lisp, как язык, не обновлялся с середины 90х, стало быть, минус потоки, минус юникод, минус параллелизм. Хорошо, есть библиотеки, но они друг с другом не дружат.

По факту - все есть и многое дружит.

Последняя версия gnu clisp вышла в 2010м году, а в 2015м проекту мантейнеров искали. Это называется — жив?

Ты взял одну никому ненужную реализацию и что-то хочешь этим продемонстрировать? Вполне себе живы 3-4 опенсорсных реализации и 2-3 коммерческих промышленного уровня. У большинства популярных языков зачастую вообще одна эталонная реализация, и парочку экспериментальных.

Кстати, последний стандарт его ровесника — фортрана вышел в 2015м.

Стандарт устарел, но это не означает, что язык «не жив».

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

Под рукой нет. Когда-то мерял: получалось, что без аннотаций вообще Racket быстрее. Добавляю в SBCL declare type + declare speed 3, он быстрее. Добавляю в Racket unsafe-fx+ вместо + или переписываю на Typed Racket получается примерно вровень. Добавляю в SBCL safety 0, он в 2-3 раза быстрее.

Надо будет запилить бенч на актуальных версиях.

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

ANSi Lisp, как язык, не обновлялся с середины 90х, стало быть, минус потоки, минус юникод, минус параллелизм

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

Это называется — жив?

Это называется, достиг совершенства. Как coreutils.

Проблема Common Lisp как языка в том, что когда писали стандарт, не было C++ STL. В результате, типы-контейнеры прибиты к компилятору гвоздями и тип элемента можно указать только у них. Даже указать list of ints нельзя, надо всюду, где от него car запихивать declare.

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

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

Обычно люди или любят динамическую типизацию или наоборот.

В Racket тоже есть Typed Racket. А в Haskell есть тип Dynamic.

Приятнее писать на Haskell, если задача укладывается в систему типов Haskell’а. Например, map из Racket в Haskell уже не написать. Также контракты Racket гораздо мощнее, чем типы Haskell: можно указать, например, что на вход ожидается сортированный массив с значениями в диапазоне 0..10.

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

Всё также. Никак не могут решить, на какой именно. И лень переписывать всю документацию.

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

Да, но насколько я понял, менять хотели именно #lang racket.

Уже определились, что новый язык будет называться Rhombus и иметь к Racket примерно такое же отношение, как Raku к Perl.

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

Это же в рантайме?

Контракты - да. Зато произвольные.

В Typed Racket можно и при компиляции. Что-то вроде

(: sort (All (a) (-> (Vectorof a) (SortedVector a)))

(:make0-10 (-> Int Int0-10))
(define (make0-10 x) x) ;; можно сделать runtime проверку или просто пообещать, что сюда будут попадать только от 0 до 10

(: test (-> (SortedVector Int0-10) Void))

(test (sort (vector (make0-10 2) (make0-10 3) (make0-10 5))))
monk ★★★★★ ()
Последнее исправление: monk (всего исправлений: 1)
Ответ на: комментарий от monk

В случае Haskell всё ломается на арифметике. Я не могу сделать реализацию «+» c типом Int10 -> Int10 -> Int. В Typed Racket есть подтипы и объединения типов.

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

На самом деле зависит от размера программы. Чем больше программа, тем больше нужны контракты (или типы). Даже там, где их нет (в 1С, например) на функциях пишут в комментариях ожидаемый тип аргументов и тип результата.

И наоборот, десятистрочный скрипт удобнее писать без указания типов.

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

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

Спасибо, прояснил ситуацию. Мне казалось, что ситуация гораздо хуже.

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

Аннотации типов помимо проверок статическим анализатором дают возможность автокомплита в IDE.

Очень сильно зависит от синтаксиса.

Вот, например, Haskell:

3 + k<Tab> 

Какой тип может иметь k*? Любой, который из дальнейшей конструкции позволит получить Num. В смысле Num, Foo -> Num, Foo -> Bar -> Num, … Например, если у нас существует оператор ~~~ :: Foo -> Bar -> Num с приоритетом выше, чем у +, то k* может иметь также любой тип, который позволяет получить Foo. И так далее рекурсивно.

В Racket чуть получше. (+ 3 k) даёт только числа, а (+ 3 (k только функции, возвращающие числа.

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

Это ты про автокомплит в дракете? А для имакса такое есть?

Только для имакса и есть http://synthcode.com/wiki/scheme-complete

В дракете автокомплит убогий: дополняет до любого слова из доступной документации. Не видит даже, какие символы доступны. Надо подключать что-то вроде https://github.com/yjqww6/drcomplete/ .

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

А Haskell приятен … возможностью написания сверхобобщённых алгоритмов

Динамика-то всё равно обобщеннее будет.

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

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

Я пытался к Racket прикрутить подобное, понял что для максимального эффекта необходима ленивость и чистота. А если это всë сделать, то именно Haskell и получится.

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

Haskell (со скобками) на Racket даже есть: Hackett. Но из-за несовместимой семантики интероперабельности со стандартной библиотекой Racket нет. Поэтому игрушка.

monk ★★★★★ ()

так что там с чашками

Harald ★★★★★ ()
Ответ на: комментарий от papin-aziat

Кайфуйте на геометрией, зачем вам эта алгебра?

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

И наоборот, десятистрочный скрипт удобнее писать без указания типов.

Писать - возможно, читать и особенно вносить изменения - уже не очень. Да и (даже) скрипты имеют свойство разрастаться.

Но это бессмысленный спор.

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

Вот как разрастаются и в нём появляются функции, вот тогда нужны типы.

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

monk ★★★★★ ()
Последнее исправление: monk (всего исправлений: 1)
Ответ на: комментарий от monk
(+) :: Op a b -> Op a b -> Op a b 

Соломенный дурень сгорит хохоча, когда сломается твой череп :)

Иди дальше пылесось (рэкет - это пылесос) и расшатывай свой золотой 1_SS во славу рейхстага с пивными сцаками. Штольман вас разбаловал.

Никто вас не спасёт, даже потные девки (побочный эффект) с гнилыми зубами.

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

Ничего не понял. Как из этого монстра Int получить?

В Typed Racket я могу написать (* (+ (make0-10 5)(make0-10 8)) 42). Как написать аналог в Haskell?

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

Сортированный вектор из 10 элементов - иди дальше трави свои сочные байки. Давай уже покажи рэкет в деле :: залупи Op на своих обрезанных типах лол

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

Поработай хоть немного, как честные люди (за идею), а то ты сильно пристрастился к 1_SS и черному налу на своём гнилом пенсионном счёте в гнилом банке. И про Contravariant тоже не забудь, а то не привык на своем гнилом черепе ездить.

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

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

Уважаемые знатоки, с вами играет телезритель из БРЯНСК-СЕВЕР.

Имеются 2 чашки с одинаковой толщиной стенок 2мм объемом 342мл, в одну наливается кипяток. А теперь внимание вопрос: сколько раз нужно переливать кипяток из чашки в чашку в течение 8 минут, чтобы температура воды стала 73°C, 53°C, 47°C?

Решение гарантирует жизнь (Цена услуги + 1 копейка) :: Чешуекрылым до 2047, которые любят грязь, монадический эффект гораздо важнее вкуса, запах - это побочный эффект (но это вряд ли что-то изменит)

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

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

Так о том и речь, что типы не особо мешают, а только помогают.

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