Рефал оказался мертвее, чем я думал

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

Рассказывать я собирался про Рефал-5. Основных версий Рефала, доступных в Интернете, насколько я вижу, четыре: Рефал-2 (нет, извините, это просто ад какой-то со всеми этими спецификаторами значений и прочими нашлёпками; морально устаревшей эта версия стала задолго до того, как я, ещё будучи студентом, вообще узнал о существовании Рефала), Рефал-5 (в котором вместо спецификаторов есть where-блоки, сами написанные на Рефале, и это довольно органично смотрится), Рефал-6 и Рефал-Плюс. Рефал-6, как я понял, существует только для Windows, это то же самое, как если бы его не было вовсе; Рефал-Плюс написан на Джаве, дальше мне как-то не хочется смотреть. Остаётся только Рефал-5, с ним я уже знаком — когда-то давно использовал его как reference implementation при попытке сотворить модель Рефала в InteLib'е. Вроде бы всё хорошо, на сайте есть архив с исходниками, написано это дело на чистом Си, под Linux прекрасно собирается (и не только под Linux)... короче, никак я тут подвоха не ожидал.

Ну, естественно, полез я за этими исходниками, чтобы освежить свои знания Рефала, а заодно чтобы написать параграф про то, как это всё собирать и ставить, пакетов-то, естественно, для него нет. И заметил то, чего в начале нулевых, когда InteLib Refal впервые пытался написать, почему-то не увидел. Трах-бабах, а в архиве-то лежат, кроме исходников, бинарные (!) библиотеки для анализа XML, причём и линуксовые (.a и .so), и виндовые DLLки. Потому архив этот и оказался таким здоровым. Ладно, фигня война, хотя, конечно, ТАКОЕ уже читателям книги рекомендовать было бы странно. Ну, думаю, ладно, попробую эти библиотеки отстричь нафиг, всё равно моим читателям вряд ли эти возможности потребуются. Отстриг — ни малейших сложностей не возникло, то есть просто стёр и сами либы, и те файлы, которые на них были завязаны, а потом из длинного-предлинного switch/case выкинул веточки с вызовами соответствующих рефальских функций. И всё собралось. Только попутно я заметил, что, во-первых, там есть несколько файлов с непонятным содержимым, никак в сборке не задействованных, и во-вторых сами исходники изнутри выглядят так, будто там толпа обкуренных индусов что-то праздновала. Ну, думаю, ладно, сейчас я это всё почищу, благо объёмы там не шибко большие... э...

А вот не тут-то было. На этом этапе я, наконец, догадался посмотреть туда, откуда стоило вообще-то начинать — в файл лицензии. А там, извините, вот такое:


Use in source and binary forms, with or without modification, are permitted provided that source code must retain the above copyright notice and binary forms must reproduce the above copyright notice.

Source and binary forms of the distributive of REFAL-5 VERSION-PZ, with or without modification, may not be free redistributed as a proper part of any other software product. Right of redistribution of the source and binary forms, with or without modification, is a subject for an Agreement between the REFAL-5 VERSION-PZ team of developers and a user looking for such a right. See the official Internet REFAL-5 VERSION-PZ site for contact information: http://www.botik.ru/pub/local/scp/refal5/ .

Without such an Agreement the source and binary forms of REFAL-5 VERSION-PZ may be just referred to the official Internet REFAL-5 VERSION-PZ site http://www.botik.ru/pub/local/scp/refal5/ from a user distributive using REFAL-5 VERSION-PZ.

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

На сайте единственный указанный контакт — Andrei P. Nemytykh, ну я даже не поленился его отчество припомнить, человек мне всё-таки в отцы годится с запасом. Пишу, стало быть, этому Андрею Петровичу, что мол так и так, я тут пишу книжку, хочу вставить главу про Рефал, нужна реализация в качестве учебного пособия, но я что-то не шибко понимаю, что у вас там такое с условиями лицензии; если я имеющиеся исходники почищу, можно ли мне будет результат выложить и вообще нельзя ли лицензию поменять на что-нибудь более внятное? Подробно рассказывать про нашу переписку не буду, но в общем получил я в итоге вежливый, но совершенно однозначный отказ.

Итого: единственная реализация Рефала, которую я считал условно живой и приемлемой для моих целей, внезапно (несмотря на открытую публикацию исходников) оказалась проприетарной. Причём как-то даже, я бы сказал, изощрённо-проприетарной: обычно такие вещи происходят из-за денег, но это случай совершенно не тот, ёжику понятно, что на Рефале денег уже никто никогда не заработает, этот А.П.Немытых сам признаёт, что он единственный пользователь этой реализации, а последние исправления там датированы 2008 годом. Так что сей случай скорее из серии «а не доставайся же ты никому»; непонятно только, зачем тогда вообще архив исходников в интернет выкладывать.

В общем, жаль, конечно, но увы. R.I.P. Рефал. Зато можно надеяться, что четвёртый том выйдет недели на две раньше, вряд ли я на эту главу потратил бы меньше времени.

Боюсь, глупый

Боюсь, глупый вопрос, но всё же: если проприетарная часть достаточно легко выстригается, можно ли распространять патч или shell-скрипт, автоматизирующий этот процесс? Т.е. "исходники скачайте сами с оф. сайта, да не забудьте запустить перед сборкой мой скриптик, и будет вам щщастье". Как это соотносится с лицензией для того же Рефала?

Она там не

Она там не выстригается, откуда вы это взяли? Как раз, если уж на то пошло, те библиотеки, которые я оттуда выстриг -- изначально свободные (кстати, не смотрел на их лицензионный статус, если вдруг они GPLные, то всё будет совсем интересно)

Лицензия библиотек (дополнение)

Информацию о лицензии можно, однако, увидеть в соответствующем хедере (xmlparse.h), так что на самом деле все еще менее интересно, если не считать сомнительного содержимого linux/, в котором, вполне вероятно, может сидеть Expat 1.2, что противоречило бы информации в хедере.

Лицензия библиотек

Если верить дате бинарников, в качестве либы для парсинга используется знаменитый Expat, версии 1.1.
Начиная с 1.2 он лицензируется под MIT (которая как раз еще и известна как Expat License), но под 1.1 идет двойное лицензирование: MPL 1.1 и GPL.
Так что из интересного разве что отсутствие уведомления, требуемого MPL.

В сущности это безразлично

Судя по нашей переписке, А.П.Немытых в лицензиях и авторских правах не разбирается (от слова совсем), но при этом запрет на несогласованные лично с ним модификации, а также запрет на распространение этих исходников иначе как через него — исходят, опять же, от него и установлены намеренно. Ну а в число модификаций, которые он не намерен никому разрешать, входит, к примеру, стилистическая правка: как я понял, он с презрением относится к "программистам", сам себя программистом не считает, а "чтобы выглядело красиво" рассматривает как одно из тех проявлений программистов, за которые он их (нас), собственно говоря, и презирает :-)

Безотносительно отношения Немытых к программистам, пользоваться такой реализацией в любом случае нельзя, как и любой другой проприетарщиной. Можно считать, что её просто нет.

Теоретически вообще-то не факт, что А.П.Немытых имеет право на установление всех этих ограничений, поскольку он не является основным автором реализации. Насколько я понял, основной автор этих исходников — сын Турчина — Дмитрий Валентинович Турчин. К сожалению, сам Дмитрий Валентинович умер. Можно было бы обратиться к его наследникам, попросить разрешения на перелицензирование работы, права на которую они унаследовали со смертью автора... э... но, во-первых, я не знаю, как с ними связаться, во-вторых, не факт, что они согласятся (да и вообще так себе ситуация, прямо скажем), и самое главное — оно мне надо? Там чтобы из этих исходников получить что-то осмысленное, надо полгода пахоты.

Refal-5 Lambda

В природе интернете существует 2clause-BSD версия надмножества Refal-5.

https://github.com/bmstu-iu9/refal-5-lambda

Спасибо

Это надо будет посмотреть. А почему нет ссылки с http://www.refal.net на эту реализацию?

Кто бы знал

Возможно никто не рассматривает, цитирую, "тестовый полигон для нескольких курсовых проектов и выпускных квалификационных работ бакалавра" как полноценную реализацию, хотя ядро проекта именно таковым и является (вроде бы). Но я ставлю на обычное nobody cares -- это всё-таки рефал, а не очередной ML.8)

Не, отказать

Скачал (склонировал git'ом). С ходу обратил внимание, что для репа с исходниками оно какое-то слишком большое.

Дальше -- больше. Поддиректория docs содержит толпу PDFов, ODFов и PPTXов (!), и у всех файлов ИМЕНА РУССКИМИ БУКВАМИ. Поскольку у меня koi8r, а архивы (в том числе git'овские) распаковываются в предположении, что "везде" utf, естественно, имена файлов получились нечитаемые.

Дальше -- ещё больше. Makefile вроде есть. По умолчанию выдаёт надпись "Read Makefile for details". В начале Makefile -- комментарий ПО-РУССКИ (!). Ладно, беру iconv, расшифровываю. Начинаю понимать, что, видимо, надо запустить bootstrap.sh, это же подтверждается виденным где-то в документации. Окей, запускаю. Он куда-то лезет git'ом и начинает что-то откуда-то ещё клонировать (а я сейчас, простите, что делал?!) В общем, на этом месте я его прервал и всё стёр. Даже пытаться не буду разгребать всю эту конюшню.

Не настаиваю

Оформление там для недостудентов, но остальные пляски с бубном из-за организации бутстрапа: они держат подмножество рефала, на котормо написана часть ядра, в отдельном подмодуле git, собственно, его и вытягивает boostrap.sh.

Понимаете, ну всему есть предел

В документации там заявлено, что сборка происходит с помощью командных скриптов, поскольку якобы make есть не везде. При этом почему-то, видимо, считается, что везде есть git, доступ в Интернет, а сайт ГитХаба будет работать вечно.

Ну и русский язык там, где он просто не имеет права быть -- в именах файлов и в Makefile. Возможно, он есть ещё и в исходниках, не смотрел их на эту тему и вообще давно уже всё стёр.

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

Понимаю, но как бы...

git clone --recursive мог бы избавить Вас от столь неприятного опыта внезапной загрузки подмодуля. Очевидно, принятые решения выглядят по меньшей мере странно, за великий и могучий в исходниках надо карать, но это наименьшее зло, от которого, к слову, можно избавиться в (полу-?)автоматическом режиме.

Ага

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

Можно ли избавиться от русского в неуместных для него местах? Можно. И почистить английскую версию документации тоже можно, чтобы она не была настолько кривой, что даже я при своём посредственном английском вижу там полный трэш. Ёлки, да всё можно. И make нормально сделать. И перепаковать это всё, убрать вообще следы гита, сотворить классический .tar.gz, который только распаковать и сказать make. Да и вообще, можно даже свою реализацию Рефала сделать. И спасти в итоге первоначальный план книги от выкидывания рефальской главы. И ещё потратить две недели на её написание. И что?

Понимаете, рассказ в книге о вычислительной модели Рефала — исходно довольно сомнительная идея. А тут ещё сначала один из "отцов-основателей" устраивает лицензионный цирк в стиле "не трожь, моё, и вообще все программисты идиоты", другой свою реализацию оформляет так, как вменяемый программист бы никогда не сделал, причём это я ещё даже не успел добраться до исходников. Короче, эти, каждый по-своему, убедили меня, что от рассказа о Рефале будет вреда больше, чем пользы. Остатки рефал-диаспоры, похоже, ничему хорошему никого не научат, и нефиг, следовательно, возрождать к Рефалу интерес.

пффффф

Вообще я исходил из предположения, что про Рефал написать хотелось.8) Ошибся, тогда точно в топку.

Ну, вообще-то

Ну, вообще-то хотелось, конечно. Язычок маленький, в смысле описать его можно быстро, а в плане «вывернуть мышление наизнанку» — весьма эффективный :-) Но ведь реализация нужна, чтобы читатель мог хотя бы попробовать, что получается.

А может

А может добавить какие-нибудь другие интересные языки вместо него?

Например, J, Forth, Tcl, Factor, OCaml, Haskell?

И обзяательно Scheme, если её ещё нет (давно смотрел). На ней знаменитый курс SICP от MIT основан.

Во-первых, Scheme и

Во-первых, Scheme и Tcl уже есть, причём посвящённые им разделы давно закончены, о чём было сказано в новостях. Во-вторых, Haskell'а не будет, и не просите (и, замечу, тут в комментариях неоднократно говорилось о причинах). В-третьих, я прекрасно знаю, на чём основан SICP, и далёк от восхищения как самим SICPом, так и его авторами, допустившими замену своего курса на питономакаковый конвейер, который теперь в MIT вместо SICPа. Наконец, я в принципе (то есть вообще) не принимаю никаких рекомендаций относительно того, как мне писать книгу и что туда включать — кто хочет, чтобы книга была написана как-то иначе, пусть пишет свою книгу. И уж тем более я не нуждаюсь в советах тех, кто считает возможным припереться на чужой сайт, не дать себе труда посмотреть, что тут происходит, и таки лезть кропать комментарии.

и нефиг,

и нефиг, следовательно, возрождать к Рефалу интерес
Да пёс с ним! (c) Царь Иван Васильевич
В самом деле, если посмотреть на план четвертого тома, для функциональщины там места выделено с избытком - зачем еще один язык, который ценен лишь для матери-истории, да еще и при явном противодействии этих самых "отцов-основателей". Очень жду главу по логическому программированию - это, все же, "немножко экзотика" на фоне ФП и ООП. Еще, надеюсь, Вы не откажетесь от параграфа про редукцию последовательностей на шаблонах C++. В общем, желаю Вам успехов в нелегком просветительском деле, ну и бумажной работы поменьше, так ее растак...

для

для функциональщины там места выделено с избытком - зачем еще один язык, который ценен лишь для матери-истории

Я никогда не рассматривал Рефал как функциональный язык, с моей точки зрения это язык со своей собственной системой парадигм, в которой от функциональщины разве что рекурсия. Хотелось просто продемонстрировать, что вот это вот сопоставление с образцом и переписывание, при всей своей примитивности, позволяет писать программы. Ну и плюс к тому в Рефале-5 естественным образом появился бэктрекинг, поэтому глава про него могла бы заодно показать, что бэктрекинг бывает не только в Прологе.

да еще и при явном противодействии этих самых "отцов-основателей"

Ну да, это стало для меня решающим аргументом. По мне так им бы радоваться следовало, что кто-то ещё про Рефал помнит и даже готов его в книге описывать, а они меня вместо этого, я бы сказал, послали. Впрочем, в данном случае не "они", а "он", но я сильно сомневаюсь, что попытки связаться с кем-то ещё позволят здесь что-то изменить.

от параграфа про редукцию последовательностей на шаблонах C++

Он уже написан, так что не откажусь :-)

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступны HTML теги: <a> <em> <strong> <ins> <del> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <pre>
  • Строки и параграфы переносятся автоматически.

Подробнее о форматировании

CAPTCHA
Проверка на бота
Image CAPTCHA
Copy the characters (respecting upper/lower case) from the image.