CPU 原创 | 静态类型和函数式语言的趋势

Posted 宁诺CPU

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CPU 原创 | 静态类型和函数式语言的趋势相关的知识,希望对你有一定的参考价值。

我是
注释
/*
本文写手:张淞。

张淞是我们的学长,12年从诺丁汉大学毕业,在牛津读了一年研究生,毕业来宁诺教我们 Haskell,成了 UNNC 最年轻的 teaching fellow,也创造了非博士生教课的历史。对了,他还出版了一本书,《Haskell函数式编程入门》,应该是国内少有的几本有关 Haskell 的中文资料。



前几天微信找他邀稿,他交稿的时候告诉我他过几天会回宁诺。我问他想不想和学弟学妹们聊一聊,他欣然应允。再问他想聊什么主题,我本觉得怎么也得跟 CS 沾点边吧,结果他问我,“婚恋”怎么样?

现在的他在找女朋友,找工作。大家看完文章觉得他还不错的可以找他聊聊天,联系方式在文末。

*/


Part
A

静态语言类型


语言从类型上分可以分成静态类型与动态类型,动态类型就是在运行时才会决定类型的语言,比如 javascript、Ruby、Python、php 都是当今炙手可热的语言,从 TIOBE 三月的排名来看,前5名都是静态类型的语言。


CPU 原创 | 静态类型和函数式语言的趋势

动态语言与静态语言争论已久,最近在群里的对话:


程序猿A
CPU 原创 | 静态类型和函数式语言的趋势
搞静态类型的人还在研究利弊的时候,动态类型的人已经把活干完了。
动态语言程序员还在抓bug的时候,静态语言程序员已经躺下来喝茶了。
CPU 原创 | 静态类型和函数式语言的趋势
程序猿B


不得不说,大部分的动态语言如 Ruby、Python、Matlab、Bash等等,可以非常快速地写出可以用的脚本程序,但是作为程序员,单打独斗还可以,人一多,项目大了就会比较难维护,虽然我用动态语言的经历不多,但是在写Bash时是非常困难的,帮别人有偿写过几百行的Bash,感觉相当麻烦后来就再没用过。


动态类型的语言其实本质上就是把很多编译时能解决的问题放到运行期。最麻烦的问题就是一个函数可能会返回多种类型的结果,如果没有好的文档与编写习惯,这样的代码是极难维护的,所以在大的项目中,不太有人会使用它们。但不能否认的是动态语言做起事情来的确是要更为灵活高效的,Python有IDE的辅助用起来十分顺手,中学生都可以来学的语言。


但是从上面的表格来看的比例看来,前几名的静态语言几乎占了半壁江山,新出的Scala语言、F#都是静态的,虽然不断有新的动态语言出来,但是无法撼动静态语言的地位。


Part
B

函数式的趋势


其实大部分非函数式语言所能听到的不过是函数式里的 lambda 表达式,这里就来看看 lambda 是如何来增加代码的可读性的。以下代码来自知乎。一个 Multiset,需要对元素进行过滤,如同Haskell 的 filter 函数。


CPU 原创 | 静态类型和函数式语言的趋势


可以看到需要显式地实现一个apply的匿名内部类,手打那么多东西其实只是一个string -> Bool的函数,在现有的Java 8中就可以写成:




第一段代码就是函数式的风格,但是由于语言本身不支持函数式的语法,所以用起来十分蹩脚,避免了手写大段的代码,否则写Java简直就是在比拼打字速度,另外更重要的是这样的代码可读性更高(前提是你知道lambda表达式的基础上)。


C++ 14、Ruby、Python也支持了lambda表达式。这就是lambda演算对它们的影响,相信在不久的将来,lambda表达式将会是所有语言的标配。




重多新语言中,新贵有两个,一个是F#、一个是Scala,两者都具有函数式特性,但是有不同,F#是基于ML发展的OCaml,ML是一个函数式语言,OCaml是有面向对象的函数式语言。而Scala是在面向对象的基础上发展,融入了函数式,两种语言都是混合范式的但是给人的感觉十分不同。


目前来讲,这两种语言算得上是比较有前途的两种语言,Scala由洛桑联邦理工大学与Well-typed公司支持,F#则由微软剑桥研究院与微软支持,所以算是发展势头强劲的语言。


要完全学好计算机语言需要把面向对象与函数式分别学好,并且了解其中各自的问题,当混合使用他们的时候就可以取长补短了。



作者 微博:阅千人而惜知己 http://weibo.com/u/1914643755 (微博头像是本人)


编辑 | 冯元



宁诺CPU
CS 学院唯一认可的、
面向全校的计算机类
学生社团

以上是关于CPU 原创 | 静态类型和函数式语言的趋势的主要内容,如果未能解决你的问题,请参考以下文章

编程语言的发展趋势及未来方向:函数式编程

鹅厂原创 | 前端中的函数式编程

# 对Haskell这门语言的基本认识

读函数式编程思维笔记04_语言与范式_模式与重用

“函数式编程”有明确的含义,但“函数式语言”呢?

Haskell代码编程