最近,我开始读一些F#的相关文献中,“真实世界的函数编程”和“专家F#” E发言。 g ^ ..一开始很容易,因为我有在Haskell一些背景,并且知道C#。但是,当说到“语言的程序设计”我只是不明白这一点。 - 我读了一些解释和它就像读一篇学术论文是变得更加抽象和陌生的每一句话

是否有人有这样的东西一个简单的例子,它是如何比较现有的范式?这不仅仅是学术的幻想,是不是? ;)

谢谢, wishi

有帮助吗?

解决方案

F#有一个风格的一个可以称之为做编程的几个机制“语言为本”。

首先,语法礼节(函数调用不需要括号,可以定义自己的缀运营商,...)使它让很多用户定义的库中嵌入DSL的外观。

其次,F#“报价”机制可以使你引用代码,然后用一个替代的语义/评价引擎运行它。

第三,F#“的计算式”(又名工作流程,单子,...)还提供了一种方式,以提供一种类型的用于某些代码块替代语义。

所有这些有点落入EDSL类别。

其他提示

语言面向程序(LOP)可以被用来描述任何下列情况。

创建外部语言(DSL)

这也许是最常见的用途LOP的,并且是你有一个特定的领域 - 如通过通过中转航线类型等,而不是试图编码所有这些特定领域的实体的计划内UPS货运包装代码,你宁愿创建一个单独的编程语言,只是域。所以,你可以在一个单独的外部语言编码您的问题。

创建内部语言

有时候你希望你的程序代码看起来不那么像“代码”,并更紧密地映射到问题域。也就是说,让代码“读更自然”。甲连贯接口是这样一个例子:流利接口。此外,F#具有支持此相当好活动模式。

我写一个博客帖子上LOP而回,它提供一些代码示例。

在面向对象编程,您尝试使用对象来模拟一个问题。然后可以将这些对象连接在一起来执行功能...并最终解决原始问题。

在语言面向对象编程,而不是使用面向现有对象或函数式编程语言,您设计最适合有效地解决你的问题,一个新的领域特定语言。

术语语言面向对象编程可能过载,它可能有不同的含义不同的人。

但在如何我已经用它的术语,它意味着你创建一个DSL( HTTP: //en.wikipedia.org/wiki/Domain_Specific_Language ),然后再开始解决你的问题。

一旦创建您的DSL,那么你会在DSL方面编写程序。

这个想法是,你的DSL更适合表达比通用语言会有问题。

一些示例将是make文件语法或Ruby on Rails的ActiveRecord类。

我没有的直接的在现实世界的情况下使用语言的面向对象编程(创建一个实际的语言),但考虑有用的,可以帮助设计更好的领域驱动的对象。

在某种意义上,请任何真实世界的发展Lisp或计划可以被认为是“语言为本”,因为你正在开发的应用程序的“语言”,其抽象的树,你的代码沿。 黄瓜是另一个真实世界的例子我“听说有关。

请注意,有一些问题,这种方法(和任何领域驱动方式)在真实世界的发展。我之前已经处理了一个主要问题是有意义的域中的逻辑是有道理的软件逻辑之间的不匹配。域(业务)逻辑可以是非常错综复杂和无谓 - 并导致域模型分解

域专用语言的一个简单的例子,提到的这里,是SQL。另外:UNIX shell脚本。

当然,如果你是做了很多基本的OPS的,有很多与底层语言的重叠,这可能是过度设计。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top