我正在学习方案,并至今一直在使用诡计。 我真的只是学习的方式来教自己函数式编程语言,但我想发表某种形式的一个开源项目,以增援在study-不知道还...我是一名Web开发人员,所以可能是一些丝网的。
现在越来越明显的是,发布方案的代码是不是很容易的事情,所有这些不同的实现并超越了语言本身(R5RS)的核心没有真正的标准。 例如,我几乎可以肯定将需要做基本的IO在磁盘上,通过TCP套接字,与字符串处理一起,如扫描/正则表达式,这似乎不被R5RS覆盖,除非我没有看到它在文档中。 这似乎是计划更多的是一种“概念”的比实际的语言......这是一个公正的评价? 也许我应该找什么样的Haskell,如果我想了解的是使其本身更加开源项目使用功能的编程语言?
在现实中,有多少痛苦做了不同方案的实施构成,当你想发布一个开源项目? 我真的不看中其维持在各种主流的实现比如字符串处理基本的东西,5个不同的功能(鸡,诡诈,麻省理工学院,DrRacket)。 有多少人可以写跨实现的兼容方案,而不是与库函数,只有在自己的方案中存在紧密耦合?
我已阅读http://www.ccs.neu.edu/home/dorai/scmxlate/scheme-boston/talk.html ,不与信心充满我;)
编辑| 让我们重新定义“标准”为“普通”。
难的问题。
大多数人决定以务实。 如果实现方式之间的可移植性是重要的,它们编写程序的标准方案的体积和隔离在(短小)库非标准件。 曾有究竟是如何做到这一点的各种方法。 最近的一个努力是SnowFort。
http://snow.iro.umontreal.ca/
一个旧的努力是SLIB。
http://people.csail.mit.edu/jaffer/SLIB
如果你看看 - 或者要求 - 对正则表达式和词法分析器/解析器库,你很快就会发现一些。
由于R5RS的理念是只包括那些语言功能的实现者都同意,这个标准是小 - 但也很稳定。
然而,对于“真实世界”节目R5RS未必是最合适的。 因此R6RS(和R7RS?)包括更多的“真实世界”库。
这就是说,如果你只需要便携性,因为它似乎是正确的事,然后仔细考虑,如果你真的要付出努力。我只想写我的程序上,我知道最好的执行。 然后,如果有必要将它移植之后。 这通常被证明是更容易超出预期。
我相信, 在计划,便携性是一个傻瓜的差事 ,因为方案实现更不同于它们是相似的,并没有单一的实现其它实施方案试图模仿(不像Python和Ruby等)。
因此,便携性方案是类似于使用软件呈现编写游戏“因为它在OpenGL和DirectX之间的公共子集”。 换句话说,这是一个最低的共同点,是可以做到的,但你无法访问许多功能的实现提供。
出于这个原因,而SRFIs一般有便携式参考实现(如果可行),有的则是伴随着音符,一个质量计划的实施应该调整使用,以发挥最佳功能实现特定的功能库。
- 一个典型的例子是
case-lambda
( SRFI 16 ); 它能够方便地实现,参考实现演示它,但它肯定不是最优相比内置的case-lambda
,因为你不必实现在“用户”代码函数分派。 - 另一个例子是
stream-constant
从SRFI 41 。 参考产品采用了便携性的圆形表的O(n)的模拟,但任何像样的实现应该适应这个函数使用真正的圆形列表,这样,它的O(1)。 †
这样的例子不胜枚举。 方案许多有用的东西都不是便携式SRFIs有助于使更多的功能便携,但也没有办法,SRFIs能面面俱到。 如果你想高效地完成有用的工作,机会是相当不错的,你将不得不使用非便携的特点。 你能做的最好的,我认为,是写一个门面封装,尚未涵盖SRFIs这些功能。
†实际上有现在实施方式stream-constant
在O(1)的方式 ,而无需使用圆形列出在所有。 便携式和快速的胜利!
我写博客 ,使用计划,作为其实现语言。 因为我不想疏远任何具体实施方案的用户,我写方案的限制方言是基于R5RS加语法的情况下,宏再加上我的标准前奏 。 我没有发现,过于严格的那种,我写的算法程序,但您的需求可能会有所不同。 如果你看一下在博客上的各种练习,你会看到我写我自己的正则表达式匹配,我已经做字符串操作相当数量的,而且我已经脱壳而出,以抢去从互联网文件wget的(我用的切斯计划 - 用户有,如果他们使用什么要提供自己的非便携外壳机制); 我甚至写ANSI终端序列做了一些有限的图形工作。
我不同意就只是一点点与延。 相反,移植之后,我发现它从一开始就容易建立在便携性。 我没有使用这样认为,但我在过去三年的经验表明,它的作品。
值得指出的是,现代计划实现本身是相当便携; 你可以经常口整个程序来新的环境,简单地沿使相应的计划。 这不利于库的程序员很多,不过,这也正是R7RS小,最新的方案定义的用武之地。它没有被广泛尚未实施,但它提供了比R5RS一个更大的共同核心。
文章来源: Writing portable scheme code. Is anything “standard” beyond R5RS itself?