问题标签 [greenspunning]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
language-features - Greenspunning:您对一门语言所做的最令人印象深刻的扩展以及是否值得
绿纺。我们都有机会破解一种语言缺失的特性来获得我们需要的东西。在 Java 中实现伪单子模式,在 Javascript 中实现 Y 组合器,在 C 中实现变量不变性......
您认为寻找更强大功能的最令人印象深刻的解决方法是什么?事后看来,这值得黑客攻击吗?更好的是:它是否像 Ruby 的string#to_proc一样,成为该语言更高版本的公认特性?
design-patterns - INTERPRETER 是反模式吗?
对我来说,Interpreter 模式听起来很像被称为 Greenspun 第十条规则的反模式:
任何足够复杂的 C 或 Fortran 程序都包含一个临时的、非正式指定的、充满错误的、缓慢的 Common Lisp 一半的实现。
也就是说,如果您需要使用解释器,您可能会创建一些缓慢、临时且指定不明确的东西。正确的解决方案是从一开始就使用正确的语言。
或者,也可以将一种众所周知的、明确指定的语言嵌入到您的应用程序中,例如 Guile(GNU 可嵌入方案)。或者使用 Haskell 作为嵌入式领域特定语言。
但我在实践中还没有看到这一点——您在构建自己的嵌入式语言方面有什么经验?这是个好主意吗?它比嵌入已经存在的语言更好吗?
(我不是特别喜欢 lisp。这很好,但 C、Haskell 和 python 以及许多其他语言也是如此。)
c# - C# 中静态类型的良构 cons 列表
我问了自己一个愚蠢的问题,现在已经绞尽脑汁几个小时没有结果。
假设您出于某种原因想在 C# 中实现一个 cons 单元(Greenspun 的第十条规则就足够了)。由于它在 C# 中,因此您希望它是静态类型的。像这样的东西就足够了:
现在有一种static void VisitList<T>(? list, Action<T> action)
方法可以接受格式良好的列表T
并对每个元素执行某些操作。格式良好的列表 ofT
是一个Nil
或一个 cons 单元格,T
其左侧元素和格式良好的列表 ofT
作为其右侧元素。现在我们可以?
用一个真实的类型替换(是的,想象一下有一个Either
非单子)static void VisitList<T, U>(Either<Nil, ICons<T, U>> list, Action<T> action) where U : Either<Nil, ICons<T, U>>
:.
不可能的问题是:你到底是如何构造一个可以传递给这个方法的值?任何人都可以写一个工作片段吗?示例代码的其余部分如下。