Написание переносимой схемы кода. Что-нибудь «стандартное» помимо самого R5RS?

Я изучаю схему и до сих пор пользуюсь лукавством. Я действительно только учусь, чтобы научить себя функциональному языку программирования, но я хотел бы опубликовать какой-нибудь проект с открытым исходным кодом, чтобы усилить исследование & # x2014; не уверен, что еще ... Я веб-разработчик, так что, вероятно, что-то в Интернете.

Становится очевидным, что публикация кода схемы не очень проста, со всеми этими различными реализациями и без реальных стандартов, выходящих за рамки самого языка (R5RS). Например, мне почти наверняка понадобится выполнить базовый ввод-вывод на диске и через сокет TCP вместе с манипуляциями со строками, такими как сканирование / регулярное выражение, которые, кажется, не покрываются R5RS, если только я этого не вижу в документе. Кажется, что Схема - это скорее «концепция». чем практический язык ... это справедливая оценка? Возможно, мне стоит взглянуть на что-то вроде Haskell, если я хочу изучать функциональный язык программирования, который больше подходит для использования в проектах с открытым исходным кодом?

На самом деле, какую боль представляют различные реализации схемы, когда вы хотите опубликовать проект с открытым исходным кодом? Мне не очень нравится поддерживать 5 различных функций для базовых вещей, таких как манипуляции со строками, в различных основных реализациях (Chicken, guile, MIT, DrRacket). Сколько людей на самом деле пишут схемы для совместимости между реализациями, а не тесно связаны с библиотечными функциями, которые существуют только в их собственной схеме?

я прочиталhttp://www.ccs.neu.edu/home/dorai/scmxlate/scheme-boston/talk.htmlчто не наполняет меня уверенностью;)

РЕДАКТИРОВАТЬ | Давайте переопределим «стандарт» как "общий".

 Sam Tobin-Hochstadt18 июн. 2012 г., 16:38
Ваш вопрос создает впечатление, что вы думаете, что R5RS является самым последним стандартом для Scheme, но это не так. R6RS, который обрабатывает больше вопросов, о которых вы спрашиваете, был опубликован в 2009 году и является текущим стандартом Схемы. R6RS все еще слишком мал, чтобы выполнять многие задачи, так что вы, вероятно, захотите придерживаться конкретной реализации. Я использую (и разрабатываю) Racket, но Guile также является разумным выбором.

Ответы на вопрос(4)

Решение Вопроса

Сложный вопрос.

Большинство людей решают быть прагматичными. Если переносимость между реализациями важна, они пишут основную часть программы в стандартной схеме и изолируют нестандартные части в (маленьких) библиотеках. Были разные подходы, как именно это сделать. Одним из недавних усилий является SnowFort.

http://snow.iro.umontreal.ca/

Старое усилие - SLIB.

http://people.csail.mit.edu/jaffer/SLIB

Если вы посмотрите - или попросите - библиотеки для регулярных выражений и лексеров / парсеров, вы быстро их найдете.

Поскольку философия R5RS заключается в том, чтобы включать только те языковые функции, с которыми согласны все разработчики, стандарт невелик, но также очень стабилен.

Однако для «реального мира» программирование R5RS может не подойти. Поэтому R6RS (и R7RS?) Включают в себя больше «реального мира» библиотеки.

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

 d11wtq16 июн. 2012 г., 14:41
Отличный ответ, спасибо. Я буду держать его открытым чуть дольше. Одна из причин, по которой я использую guile, заключается в том, что он не требует Java и написан на C (у меня нет JVM и я не хочу его устанавливать). К сожалению, я не верю, что guile имеет версию, совместимую с R6RS, и MIT-Scheme заявила, что не собирается ее писать. Цыпленок все еще R5RS. Возможно, придется поискать другие реализации C, которые имеют R6RS :)
 d11wtq16 июн. 2012 г., 14:48
Снег выглядит интересно. Что-то вроде rubygems или NPM, по звуку этого.
 16 июн. 2012 г., 16:23
Снег для переносимого кода. Смотрите такжеplanet.racket-lang.org а такжеwiki.call-cc.org/chicken-projects/egg-index-4.html для большего количества пакетов. Хотя пакеты находятся на странице Racket или Chicken, между ними есть несколько переносимых пакетов. К сожалению, вам нужно посмотреть на источник, чтобы узнать.

Стоит отметить, что современные реализации Scheme сами по себе достаточно переносимы; Вы можете часто переносить целые программы в новые среды, просто используя соответствующую схему. Это, однако, мало помогает программистам библиотек, и именно здесь появляется R7RS-small, последнее определение Scheme. Он пока еще не получил широкого применения, но он обеспечивает большее общее ядро, чем R5RS.

 03 нояб. 2014 г., 16:07
Да, конечно. Исправлена.
 24 сент. 2014 г., 04:10
R7RS-small обеспечивает большее общее ядро, чем R7RS? Конечно, вы имели в виду R5RS. :-D

я полагаю, чтоin Scheme, portability is a fool's errand, поскольку реализации Scheme более отличаются, чем похожи, и нет единой реализации, которую пытаются эмулировать другие реализации (в отличие, например, от Python и Ruby).

Таким образом, переносимость в Scheme аналогична использованию программного рендеринга для написания игр, поскольку она находится в общем подмножестве между OpenGL и DirectX. Другими словами, это наименьший общий знаменатель, это можно сделать, но вы теряете доступ ко многим функциям, которые предлагает реализация.

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

A prime example is case-lambda (SRFI 16); it can be implemented portably, and the reference implementation demonstrates it, but it's definitely less optimal compared to a built-in case-lambda, since you're having to implement function dispatch in "user" code. Another example is stream-constant from SRFI 41. The reference implementation uses an O(n) simulation of circular lists for portability, but any decent implementation should adapt that function to use real circular lists so that it's O(1).†

Список можно продолжить. Многие полезные вещи в Схеме не являются переносимыми; SRFI помогают сделать больше функций переносимыми, но SRFI не могут охватить все. Если вы хотите, чтобы полезная работа была выполнена эффективно, скорее всего, вам придется использовать непереносимые функции. Я думаю, что лучшее, что вы можете сделать, - это написать статью для инкапсуляции тех функций, которые еще не охвачены SRFI.

† Есть на самом делеТеперь способ реализацииstream-constant in an O(1) fashion без использования круговых списков вообще. Портативный и быстрый для победы!

Я пишублог который использует Scheme в качестве языка реализации. Поскольку я не хочу отталкивать пользователей от какой-либо конкретной реализации Схемы, я пишу на ограниченном диалекте Схемы, который основан на R5RS плюс макросы синтаксического случая плюс мойСтандартная прелюдия, Я не считаю это чрезмерным ограничением для алгоритмических программ, которые я пишу, но ваши потребности могут быть другими. Если вы посмотрите на различные упражнения в блоге, вы увидите, что я написал свой собственный инструмент сопоставления регулярных выражений, что я провел довольно много манипуляций со строками, и что я выхватил файлы из Интернета, выдавая wget (я использую схему Chez - пользователи должны предоставить собственный непереносимый механизм оболочки, если они используют что-то еще); Я даже выполнил некоторую ограниченную графическую работу, написав терминальные последовательности ANSI.

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

 16 июн. 2012 г., 16:03
Блог WordPress. Решения реализованы в схеме.
 19 июн. 2014 г., 14:51
LOL сначала я думал, что это было буквально написано на схеме =)
 d11wtq16 июн. 2012 г., 15:45
Интересный блог. Придется следить за этим. Вы имеете в виду, что блог написан на Scheme, или это WordPress? о_О

Ваш ответ на вопрос