LINUX.ORG.RU

MIT/GNU Scheme 10.1

 , , ,


2

3

MIT/GNU Scheme — это реализация языка программирования Scheme, предоставляющая интерпретатор, компилятор, отладчик исходного кода, встроенный Emacs-образный редактор и большую библиотеку времени выполнения. MIT/GNU Scheme заточен под программирование больших приложений с быстрым циклом разработки.

Изменения:

  • Сборки для Windows больше не распространяются, поскольку существовавшие 32-разрядные сборки малопригодны для современных систем, а для достижения работоспособности 64-разрядной нужны немалые усилия, в которых никто из текущих сопроводителей не заинтересован.
  • Для macOS теперь выпускаются только 64-разрядные сборки, поскольку в применяемом в последних выпусках инструментарии поддержка 32-разрядной сборки объявлена устаревшей.
  • Переносимая версия для C не включена в этот выпуск, поскольку её не удалось вовремя починить.
  • На следующий выпуск запланировано кучу мелких улучшений; первоочерёдными задачами этого выпуска являются нововведения.

Важные нововведения:

  • Почти полностью поддерживается R7RS (Семикратно Пересмотренный Отчёт по Алгоритмическому Языку Scheme), кроме:
    • автоподгрузки библиотек, которая появится в следующем выпуске;
    • многозначных возвратов, с которых есть прок лишь в ограниченных условиях; для исправления этого нужна сильная переработка компилятора, которая вряд ли когда-либо будет произведена.
    Обратите внимание на новую возможность R7RS — параметры, предоставляющие переносимый способ динамического связывания. С этого выпуска использование fluid-set объявлено устаревшим, и будет полностью удалено в будущем.

    Учтите также, что поведение REPL (цикл чтения-выполнения-вывода) не изменилось. То же самое касается загрузчика и компилятора, поскольку они автоматически определяют наличие R7RS-кода в файле и соответствующим образом это обрабатывают. Эти изменения позволяют и существующему коду работать, и новому писаться.

  • Поддержка Юникода:
    • поддержка NFC- и NFD-нормализации; большинство строк теперь в NFC;
    • поддержка конвертации между строками и байтовыми векторами UTF-{8,16,32};
    • символы, читатель, писатель и текстовые порты теперь поддерживают Юникод;
    • таблицы символов теперь поддерживают Юникод и занимают значительно меньше места благодаря внедрению списков инверсии;
    • новый соответствовальщик регулярным выражениям regsexp поддерживает Юникод;
    • старые соответствовальщики и rexpне поддерживают;
    • Edwinтоже.
  • Добавлен интерфейс внешних функций для динамической подгрузки C-библиотек и взаимодействия с ними из Scheme. Этот интерфейс заменил собой много специализированных интерфейсов к различным библиотекам, которые теперь представлены в виде плагинов.
  • Реализована виртуальная машина, svm, которая поддерживается в качестве нативной цели сборки. Хоть она и намного медленнее нативного кода, но работает на любой архитектуре. В этом выпуске предоставлена 64-разрядная версия; 32-разрядной нет, но она может быть собрана при необходимости.

Ещё изменения:

  • начальная поддержка SMP;
  • уведомления сборщика мусора;
  • события нитей;
  • многие другие мелкие нововведения и исправления.

Несовместимые изменения:

  • Большинство строк теперь иммутабельны! Почти все способы создания строк генерируют иммутабельные строки, кроме make-string и string-copy. Иммутабельность привносит множество новых возможностей, в первую очередь возможность использования компактных представлений, см. подробности в руководстве.
  • Процедура hash изменена для совместимости с SRFI 69. Перед этим она была похожа на object-hash, которая теперь должна использоваться вместо неё.
  • Процедуры vector-8b, использовавшиеся для работы со строками как с векторами байтов, объявлены устаревшими. Используйте вместо них непосредственно векторы байтов.
  • Процедуры для работы с URI больше не принимают в качестве аргументов строки. Конвертируйте строки в URI с помощью ->uri при их использовании.
  • Удалена поддержка старых форм кодирования в Юникод. Используйте вместо них конвертеры в векторы байтов, если это вообще нужно, поскольку для многих задач теперь отпала необходимость особым образом работать с Юникодом.

Экспериментальные новые возможности:

  • Тип URI имеет новый синтаксис: #<...>. И читатели, и писатели работают с этим синтаксисом.

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

Лицемеры из GNU и сюда добрались? MIT — отличная лицензия для такого софта, не очень ясно, зачем нужно было лицензировать код под GPL, да ещё и v.2.

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

Мне скорее не нравится вот это форсированное выпячивание GNU/ в названии продукта. Это как если бы любой хостящийся на Github продукт добавлял в имя «Github».

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

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

Там дело не только в хостинге, чтобы носить шильдик GNU — надо соблюдать ряд условий, это что-то типа сертификации. Как чтобы носить гордое название программы из проекта KDE, надо быть написанным на культях и как-то интегрироваться со всякой кедопарашей.

bodqhrohro_promo ()

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

Это multiple return values? Но они же ещё в R5RS появились?!?

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

Я понимаю. Более гнилого и лицемерного проекта, чем GNU ещё поискать. Никто до них не пытался приватизировать понятие свободы (пусть и в контексте ПО), чтобы в одностороннем порядке решать, какой софт «свободный», а какой — нет. Фактически никто не сделал больше GNU для дискредитации свободного ПО.

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

Какое движение? Что, до GNU не было свободного софта под лицензиями MIT и BSD? Под последней вон целая ОС готовая уже была. GNU громче всех кричали (и делали гораздо меньше многих других).

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

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

dk- ()

Сборки для Windows больше не распространяются, поскольку существовавшие 32-разрядные сборки малопригодны для современных систем

Это точно так в данном случае? Вообще-то, современные 64-разрядные Windows беспроблемно запускают огромное количество старых 32-разрядных программ (но есть исключения, да).

hobbit ★★★★★ ()

MIT/GNU Scheme заточен под программирование больших приложений

Дооо, именно под программирование, причём именно больших приложений он и заточен:

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

её не удалось вовремя починить

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

vrms ругаться будет, пичальбида!

root@localhost:~# vrms
       Non-free packages installed on localhost.localdomain

amd64-microcode                     Processor microcode firmware for AMD CPUs
bluez-firmware                      Firmware for Bluetooth devices
firmware-amd-graphics               Binary firmware for AMD/ATI graphics chips
firmware-brcm80211                  Binary firmware for Broadcom/Cypress 802.11 wireless c
firmware-linux-nonfree              Binary firmware for various drivers in the Linux kerne
firmware-misc-nonfree               Binary firmware for various drivers in the Linux kerne
icc-profiles                        ICC color profiles for use with color profile aware so
intel-microcode                     Processor microcode firmware for Intel CPUs
libunrar                            Library for extract *.rar format archives (non-free ve
mbrola                              Multilingual software speech synthesizer
opera                               Fast and secure web browser and Internet suite
p7zip-rar                           non-free rar module for p7zip
rar                                 Archiver for .rar files
skypeforlinux                       Skype keeps the world talking, for free.
sparse                              semantic parser of source files
teamviewer                          Remote control and meeting solution.
ttf-xfree86-nonfree                 non-free TrueType fonts from XFree86
unrar                               Unarchiver for .rar files (non-free version)
  Reason: Modifications problematic
viber                               Free Text & Calls.
virtualbox-guest-additions-iso      guest additions iso image for VirtualBox

Non-free packages with status other than installed on localhost.loc

cluster3                            ( dei)  Reimplementation of the Eisen-clustering softw
skype                               ( dei)  Wherever you are, wherever they are

        Contrib packages installed on localhost.localdomain

alsa-firmware-loaders               ALSA software loaders for specific hardware
browser-plugin-freshplayer-pepperfl PPAPI-host NPAPI-plugin adapter for pepperflash
flashplugin-nonfree                 Adobe Flash Player - browser plugin
game-data-packager                  Installer for game data files
game-data-packager-runtime          Launcher for proprietary games
glx-alternative-mesa                allows the selection of MESA as GLX provider
glx-diversions                      prepare for using accelerated GLX implementations from
iucode-tool                         Intel processor microcode tool
nvidia-installer-cleanup            cleanup after driver installation with the nvidia-inst
pepperflashplugin-nonfree           Pepper Flash Player - browser plugin
playonlinux                         front-end for Wine
quake                               classic gothic/horror-themed first person shooter
ttf-mscorefonts-installer           Installer for Microsoft TrueType core fonts
update-glx                          utility for switching the GLX implementation
virtualbox                          x86 virtualization solution - base binaries
virtualbox-dkms                     x86 virtualization solution - kernel module sources fo
virtualbox-qt                       x86 virtualization solution - Qt based user interface
winetricks                          package manager for Wine to install software easily

Contrib packages with status other than installed on localhost.loca

torbrowser-launcher                 ( dei)  helps download and run the Tor Browser Bundle
virtualbox-4.2                      ( dei)  Oracle VM VirtualBox
virtualbox-4.3                      ( dei)  Oracle VM VirtualBox
virtualbox-ext-pack                 ( dei)  extra capabilities for VirtualBox, downloader.

  22 non-free packages, 0.4% of 5529 installed packages.
  22 contrib packages, 0.4% of 5529 installed packages.
bodqhrohro_promo ()
Ответ на: комментарий от Bobby_

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

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

А кто тебя заставляет бежать за свеженькими релизами? Ты бы ещё от PHP 7.0 или Python 3.0–3.2 плакался. Оно кагбэ и не бетка уже, а всё равно сырое и ломающее (и даже поломанное). Тут явно ж написано: сначала хотели побольше фич высрать, а потом всё это вылизывать.

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

Да у тебя там просто перевод кривой.

У тебя:

Почти полностью поддерживается R7RS, кроме многозначных возвратов, с которых есть прок лишь в ограниченных условиях

Что можно понять так, будто они не поддерживаются вовсе, поскольку «проку с них нет».

В оригинале:

Most of R7RS is now supported, with some exceptions:
Multiple-value returns are usable only in restricted ways.

Это на самом деле означает, что возврат нескольких значений (а не «многозначный возврат»), вообще говоря, поддерживается, но ограниченно, не во всех случаях.

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

Интерпретатор схемки для нужд обучающихся в MIT на инженерных специальностях. Ни одного случая использования сего продукта для иных целей мне неизвестно. Для практических нужд есть Racket с куда более обширной базовой библиотекой, для встраивания — guile.

env ★★ ()

Смотрю я на все эти лиспы, и гложет меня вопрос. А может ли один и тот же разработчик одинаково хорошо реализовывать задачи на императивных и функциональных ЯП, или это заточенность мозгов? Я просто до функциональщины на реальных задачах так и не добрался к сожалению...

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

возврат нескольких значений (а не «многозначный возврат»)

Значений много — значит, многозначный. Пйоблем?

поддерживается, но ограниченно, не во всех случаях

Ну так и есть — прок есть, но мало. А «нет» ты сам между строк увидел, и в любой другой небинарной формулировке мог узреть, раз тебе так удобно.

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

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

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

по флатпаках требование (которое, кстати, имеет корни из стандарта xdg-что-то-там): если у приложения нет собстевенного сайта и оно хостится на гитхабе, то уникальное название должно начинаться с com.github....

actionless ★★★★★ ()