LINUX.ORG.RU

Racket завершает переход с LGPL на двойное лицензирование MIT/Apache

 , ,


1

2

Racket — язык, вдохновленный Scheme, а также экосистема для программирования других языков — начал переход на двойное лицензирование Apache 2.0 или MIT в 2017 году и теперь, к версии 7.5, практически все его компоненты завершают этот процесс.

Авторы отмечают две основные причины этого:

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

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

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



Проверено: a1batross ()
Последнее исправление: filosofia (всего исправлений: 2)

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

Т.е. схема меняется и сразу ломается весь написанный под нее код? А если БД накрылась, то программа превратилась в мусор? Обычно ORM подразумевает обратный процесс, схема автоматически генерируется и обновляется на основе классов.

Программа нужна была для работы с БД, которая создаётся через ORM закрытой программы. Поэтому было желательно, чтобы при внезапном изменении схемы программа переставала компилироваться, а не начинала падать в неожиданные моменты времени.

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

А макросы Си тоже функции?

Макросы C — отдельный язык, налепленный сверху. Но да, так и есть.

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

и скимах

даже без ридеров

Как это сделать? В R6RS есть identifier-syntax, но как на нём сделать что-то более-менее серьёзное?

PamidoR
()

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

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

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

В syntax-rules можно перегружать имена для тела, а потом как обычно - пребезумнейшая портянка шаблонов, которая задаёт контекст выполнения. Даже для слитого синтаксиса, вроде всяких префиксов тупо задать свой шаблон(ы) для каждого возможного варианта. Ну тот же loop в СL, это разве sexp синтаксис.

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

И может, ты имел в виду syntax-case? Я не нашёл, как использовать макрос, задаваемый syntax-rules, без скобок.

Внутри syntax-rules. Как в loop используются «макросы» for, collecting, into, … А всё это вместе в скобках.

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

А всё это вместе в скобках

А я хотел, чтобы вообще не-лисповый синтаксис можно было пилить. Типа как в ракете, только средствами R6RS/Chez.

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

Не-лисповый синтаксис как-то надо отделять от лиспового. Можно скобками и первым словом. Можно спец-симоволом (как в Common Lisp работает readtable). Можно отдельным файлом (как принято в ракете).

Типа как в ракете, только средствами R6RS/Chez.

(eval (parse (read-file «my-module.my-lang»)))

monk ★★★★★
()

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

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

(eval (parse (read-file «my-module.my-lang»)))

Т.е. пишем на Scheme парсер my-lang -> scheme? Ну так не интересно. Я так понимаю, в ракете под капотом именно так и сделано?

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

Т.е. пишем на Scheme парсер my-lang -> scheme? Ну так не интересно. Я так понимаю, в ракете под капотом именно так и сделано?

Ну да. Вот учебный пример: https://beautifulracket.com/stacker/the-reader.html

А как предполагаешь выполнение чуждого языка без парсера? Хотя бы теоретически.

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

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

Что-то типа такого:

(define-syntax ... куча всего)
(define-syntax ... куча всего)
(define-syntax ... куча всего)

и потом в этом же файле хоп:

stdout << "Hello, world!" << endl;

и всё это выполняется в интерпретаторе.

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

Это только с подменой штатного парсера. Чтобы на «stdout … ;» включался твой обработчик. На Common Lisp делается достаточно легко через подмену таблицы чтения. На большинстве схем именно так нельзя, потому что сначала читается весь файл целиком, а уже потом выполняется. Это позволяет обращаться к переменным, определённым позже в этом же файле, но не позволяет использовать синтаксис, для чтения которого надо сначала выполнить код в файле.

и всё это выполняется в интерпретаторе.

Так в интерпретаторе или в файле? В интерпретаторе тоже можно таблицу чтения расширять:

> (define tuple-readtable
    (make-readtable #f #\< 'terminating-macro parse-open-tuple))
> (current-readtable tuple-readtable)
> <1 , 2 , "a">
(tuple 1 2 "a")
monk ★★★★★
()
Ответ на: комментарий от monk

Так в интерпретаторе или в файле?

Если файл скормить интерпретатору, разве это не то же самое, что написать руками в интерпретаторе? Или я чего-то не понимаю?

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

В Common Lisp - то же самое.

В Scheme нет. Файл:

(define (f) (g (+ 1 2)))
(define-syntax-rule (g a) a)
(f)

даёт 3

В интерпретаторе

> (define (f) (g (+ 1 2)))
> (define-syntax-rule (g a) a)
> (f)
. . g: undefined;
 cannot reference an identifier before its definition

В результате, в Scheme менее важен порядок определений.

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

Точнее, в Common Lisp то же самое только если загружать файл через (load «foo.lisp»). А если сначала скомпилировать, потом перезапустить среду и загрузить скомпилированный, то будет не то же самое.

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

в схеме намеренное использование макросов, для решения задачи такой же антипаттерн как и итерация через set!

Нет, использование макросов всегда антипаттерн, и даже не только в этих двух семействах ЯП. Всегда убедись что кроме макросов другого способа красиво решить задачу нет.

syntax-rules - рекурсивный матчер, и конкретно для схемы - он чертовски идиоматичен

В Схеме много чего чертовски идиоматично в ущерб практичности. Если вам нужна именно идиоматичность - тогда да, syntax-rules.

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

Нет, использование макросов всегда антипаттерн, и даже не только в этих двух семействах ЯП. Всегда убедись что кроме макросов другого способа красиво решить задачу нет.

В Common Lisp не так: with-open-file, unwind-protect и ещё куча конструкций сделана через макросы, несмотря на то, что это не было необходимо. Также как и в C++: решения на макросах-шаблонах гораздо популярнее, чем альтернативы на объектной системе/интерфейсах.

другого способа красиво решить задачу нет

Красота в глазах смотрящего. Для схемера функциональное решение красивее императивного, для общелиспера нет. Для общелиспера решение на DSL красивее решения на функциях, для схемера нет.

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

Не просто так, а чтобы сообщество было поширше

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

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

Так вон же в топике сколько вою по поводу скобок, что нечитабельно и борщ, и фу. Может ecmascript за основу возьмут или даже, прости Г-споди, хаскелл. Не ведаю. Основная задача сейчас до конца портировать Racket на ChezVM. RacketCS дефортным будет в 7.6 либо в 7.7…

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

У меня в прошлой компании

проприетарщики какие-то поди?

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

Со скобками у сабжа хотя бы есть заинтересованная аудитория из лисперов и схемеров. Без скобок он будет нужен только авторам и еще полутора землекопам.

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

Хороший, кстати, аргумент. +1. Если сабж объявят deprecated, будет повод вернуться обратно на Кложуру. С CL я как-то не ужился.

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