很长一段时间以来,我一直在尝试不同的语言来找到我想要的功能集,但我一直无法找到它。我的语言非常适合我的各种项目,但我提出了这些语言的交集,这将使我能够用一种语言完成 99.9% 的项目。我想要以下内容:
- 构建在 .NET 之上或具有 .NET 实现
- 在编译时和运行时对 .NET 运行时的依赖很少(这很重要,因为主要用例之一是在 .NET 运行时完全自定义的嵌入式开发中)
- 有一个 100% .NET 代码的编译器,没有非托管依赖项
- 支持任意表达式嵌套(见下文)
- 支持自定义运算符定义
- 支持类型推断
- 优化尾调用
- 具有明确的不可变/可变定义(很好——我开始喜欢这个但没有它也可以生活)
- 支持强大的元编程的真实宏(绝对必备)
我主要使用的两种语言是 Boo 和 Nemerle,但我也使用过 F#。
对 Nemerle 的主要抱怨:编译器有可怕的错误报告,实现是地狱般的错误(编译器和库),宏只能在函数内或作为属性应用,而且依赖关系相当严重(尽管还不够破坏者)。
对 Boo 的主要抱怨:没有任意表达式嵌套(dealbreaker),宏难以编写,没有自定义运算符定义(潜在的 dealbreaker)。
对 F# 的主要抱怨:难看的语法、难以理解的元编程、非自由许可证(史诗般的交易破坏者)。
所以我想得越多,我就越想开发自己的语言。
优点:
- 获取我想要的确切语法
- 获得更快的周转时间;很难量化,但看到 1.5 倍的开发人员生产力我不会感到惊讶,特别是由于测试基础设施可以为某些项目启用
- 我可以轻松地向编译器添加自定义功能,以便与我的运行时完美配合
- 我得到了完全按照我想要的方式设计和工作的东西——尽管这听起来像 NIH,但这会让我的生活更轻松
缺点:
- 除非它能够流行起来,否则我将被维护的负担所困。我知道我至少可以让 Nemerle 人过来,因为我认为每个人都想要更专业的东西,但这需要一个村庄。
- 由于第一个骗局,我对在专业环境中使用它持谨慎态度。也就是说,我已经在使用 Nemerle 并使用我自己的自定义修改编译器,因为他们根本没有很好地维护它。
- 如果它没有得到普及,那么寻找开发人员将变得更加困难,以至于保罗格雷厄姆甚至可能不会宽恕。
所以基于所有这些,普遍的共识是什么——这是一个好主意还是一个坏主意?也许更有帮助的是,我是否错过了任何重大的利弊?
编辑:忘记添加嵌套示例——这是 Nemerle 的一个案例:
def foo =
if(bar == 5)
match(baz) { | "foo" => 1 | _ => 0 }
else bar;
编辑#2:认为如果存在将转换为这种语言的代码类型的示例,这不会有什么坏处(仅 S. Lott 的回答可能足以吓跑我不要这样做)。该代码大量使用了自定义语法(操作码、:=、quoteblock 等)、表达式嵌套等。您可以在此处查看一个很好的示例:here。