02
2018
01

电脑行为管理软件函数式编程语言

函数式编程语言一般不操作状态,程序中生成的副作用就小很多。这意味着这类语言一直在执行并行算法。高度并行系统的圣杯是避免重叠“无意”的状态操作。死锁、竞态条件以及被破坏的不变量都是没有同步状态操作代码的经典问题。通过线程、共享内存以及锁定来并行编程和同步都是非常困难的,所以为什么不一起避免?因为函数式编程语言鼓励程序员编写无状态的算法,这样编译器就可以推到出代码的自动对应性。这意味着可以利用多核处理器的强大能力,而没有管理线程、锁定和共享内存的巨大负担。

函数式程序是很简洁的,与命令式语言相比,函数式语言通常需要较少的代码就可以解决问题。代码较少一般意味着bug较少,要测试的区域也较少。

按照设计,这些类别都是广义的:语言可能包含一个或多个类别共有的特性。类别应用作把已有的语言特性与它们擅长解决的问题关联起来的一种方式。

像C#和VB.NET这样的语言现在利用了它们的动态性和函数性。LINQ(Language Integrated Query)就是一个借用的好例子。考虑下面的C#3.0 LINQ查询:

Var query=from c in customers

Where c. CompanyName==”Microsoft”

Select new {c.ID,c.CompanyName}

这里有几个借用的特性。关键字var表示推断出指定查询的类型,它很像一种动态语言。而查询本身from c in…看起来又像是声明式语言SQL,select new {c.ID…创建了一个新的匿名类型,是相当动态的。这些语句的代码生成结果很有趣:它们并没有编译为经典的IL(intermediate language,中间语言),而是编译到所谓的表达式树中,再在运行时解释——又是动态语言的特性。

 

« 上一篇

相关文章:

评论列表: