一些最有趣的每日WTF故事以private languages run amok为特色。但是,特定于域的语言可以quite powerful,并且似乎越来越受欢迎。当然,如果没有好的图书馆,我们就无法编程,但正如谚语所说,"library design is language design"。
没有人喜欢糟糕的API,但只是其中一个程度,或者WTF是一个完全不同的物种?显然这是主观的,所以我把它作为一个社区维基帖。 (Stackoverflow联合创始人着名的有different opinions about whether one particular in-house language was even a WTF or not。)
我自己的预感是,这是一种普遍性的尝试,使WTF出现,但我想看看其他人的想法。
(这个问题是通过阅读JaredPar对这个问题的答案的评论来触发的:https://stackoverflow.com/questions/901320/anti-joel-test/901361#901361)
(为了澄清一点,“私人语言”一词通常用于负面内涵,而“DSL”或“图书馆”则是中性的。“内部”工具交叉的是什么行(如果有的话)被嘲笑为一种可怕的“私人语言”的方式,除了可能使它成为一种坏工具的常见事物之外?这不一定是一种语言;它可能是一个图书馆或框架。)
最终编辑:我接受了罗杰佩特的回答:“实质上是什么?没有。”因为我觉得这个问题实际上是正确的。我想强调Aaronaught关于DSL的答案,因为我觉得它特别好。感谢。
答案 0 :(得分:6)
答案 1 :(得分:3)
本质上?没什么。(我已经把你理解为“坏语言和糟糕的库/ API之间的差异”,而不是“糟糕的语言/库/ API与优秀的语言/库/ API之间有什么区别” 。)
一个体积足够大的图书馆会像语言的方言一样使用它,特别是在某些语言中(考虑MFC,Qt,GTK,......)。
低于该大小阈值的库要么不经常使用,要么被足够多的人用来标记它,或者描述为API是愚蠢的,即使该术语在技术上是正确的。 (想象一下只有一个函数的库,或者没有函数的库,只是作为< stdint.h>等有用类型的集合。)
您可以绘制的唯一区别是不会尝试破坏语言的库/ API将不会被称为“私人语言”或“DSL”。例如,Qt需要(它仍然是非常强烈地使用它)一个特殊的预处理器来将其添加到C ++中,并且它在那时超过了“dialect”状态。 MFC也使用宏走了同一条线。
答案 2 :(得分:1)
我认为这与最少惊喜的原则有关。精心设计的DSL和API也可以完全按照您的期望(或者在很大程度上这样做)。如果你使用的是一个好的API(并且你很聪明且经验丰富),你会发现自己会说,“它应该有一种内置的方式来做这样的事情”,而且看起来,API开发人员也在想同样的事情。可怕的API /私人语言具有意外或不一致的行为,并使事情变得困难。