几个语言的比较

这里就把 wiki 上的比较的一部分摘抄一下。

语言 imperative OO functional procedural generic reflective event driven type safety type exp type compatibility type checking
C Yes No No Yes No No No Unsafe explicit nominal static
basic Yes VB No Yes No No No Safe explicit optional nominal static
C++ Yes Yes Yes Yes Yes No No Unsafe explicit nomin/struct static
MATLAB Yes Yes Yes Yes No Yes No Safe implicit dynamic
Java Yes Yes No No Yes Yes No Safe explicit nominal static
perl Yes Yes Yes Yes No Yes channel Safe optional dynamic/o
python Yes Yes Yes Yes No Yes No Safe implicit structural dynamic
ruby Yes Yes Yes Yes No Yes No Safe implicit structural dynamic
scala Yes Yes Yes No Yes Yes actor Safe optional nomin/struct static
groovy Yes Yes Yes No Yes Yes No Safe optional dynamic/o
go Yes Yes No Yes No No channel Safe optional structural static
lua Yes Yes Yes Yes No Yes No Safe implicit dynamic

这里有几个地方定义似乎有点模棱两可,好像 wiki 上面也有一些地方有错,纯粹瞎搞了

  • imperative programming 是说定义执行的顺序,从这个角度来说跟 procedural programming 并没有区别,后者更多的是与 OOP 相对;而 imperative programming 更多的与 declarative programming 相对,主要是指只需要指定目标而不需要实现的那种。
  • functional programming 感觉比较 tricky,它其实是指程序通过定义类似 mathematical function 的方式(即 stateless function)来完成计算任务,也可以看成是 declarative programming 中的一种,但是似乎常规更多的是与 imperative programming 相比较。特别是 function 可以作为 first class 传递,其实 C++ 有点算不上这个,function pointer 和 functor 不完全是等价的东西
  • type compatibility 里面 nominal 指按名字来认 type,其实这个对 Java 来说是如此,dynamic programming language 多数都是运行时去检查的;至于 C++ 我觉得 template 之前算是如此;
  • structural 指按照是否满足某些结构上的要求,如是否定义了某些函数,这类里面 go 的 interface、scala 那个 trait 的 mixing 结构都有点这个意味,其实 C++ template 也是的
  • 某些 dynamic language 现在也在加 static 的 type checking
  • 其实 Java/Go 也有 dynamic 的 checking 的…

——————
And the land which I gave Abraham and Isaac, to thee I will give it, and to thy seed after thee will I give the land

Advertisements
几个语言的比较

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s