现代编程语言的良好特性

问答者
• 阅读 1427

关于现代编程语言的良好特性,我也来说说自己的一点点想法:

  1. OO范式并未过时,而是Java的OO方式太过保守和繁琐了,总想做好,也添了不少这个那个的特性,但往往没出力到点子上,甚至Gosling都说如果现在来设计Java,绝对不是现在这个样子。比如Data Class(Scala里类似的Case Class,当然更强大,特别是结合PM)、Trait,都是非常好的高效特性,但Java不支持(不过据说11里会考虑,仅仅还只是可能)。虽说Python到了刚发布的3.7版本才加入Data Class,但之前早就已经有了不错的namedtuple替代方案。
  2. 有关OO的继承特性的讨论就更多了,Favor Composition Over Inheritance。
  3. 函数第一性是必须的,这样才有之后的Closure、Lambda。再看看Java,为了支持Lambda,需要整理一堆的Functional Interface出来,实在是照虎画皮不伦不类,失去了Lambda一次性应用的乐趣与便捷。
  4. 并发特性。其实不管是CSP还是Actor,我的感觉是只要有并发支持就行,都是成熟并发模型。而性能问题实在是扯不清,个人偏好也各不同。但并发原子特性轻量化应该是趋势。CSP模型没啥毛病,这是在Unix环境里得到充分证明的好模式。关于性能,绝大多数场景都是能够hold得住的,不只是编程语言的事情,况且没人能指望一门编程语言就能够应对所有业务场景。
  5. 类型推断。这是必须,在「Programming in Scala」一书中开篇对“类型推断”的阐述,能够让人对“类型推断之于静态语言的意义”有清晰认识,也正是这席精辟描述,让我当年喜欢上了Scala。可以说,类型推断在静态语言中的作用非凡,类型系统设计优劣,至少从面上影响了开发效率——冗余不是静态语言的原罪,而是看是否在类型系统设计上下了大力气。Java新版本也不得不开始考虑更多的类型推导设计了。
  6. 简单。也许这世上就是有一小撮人对语言结构很注重细节,比如我自己。但绝大多数人还是没这么投入的,其关心的是“能够很快地上手去解决问题”,所以简单性至关重要。这里Go就是一个很好的例子,其在工程化特性方面的执着,给其带来了显著收益。从这点上来看,Scala的特性又实在是多了一些。
  7. 小结一下,OO结合FP是趋势,去OO重量化特性而添加轻量化特性是趋势,更好的类型推导(系统)是趋势,简单化是趋势。近期的一个编程语言大好发展时期是2010的前后五年,这是要有互联网、移动互联网快速发展背景来支撑的。而且这段时间不仅仅是编程语言在快速发展,框架乃至更博大更宏大的技术模式都在变化。以后会不会再出现快速攻城掠寨的编程语言?我觉得难度不小,看领域业务发展能否带来机遇。所以,TypeScript、Dart、Go、Kotlin、Swift等可能就是最近一班车的乘客,其他更小众的一些编程语言,可能就要骑着车奋力直追了。
点赞
收藏
评论区
推荐文章
九路 九路
4年前
Go 函数是“一等公民”的理解
函数(function)作为现代编程语言的基本语法元素存在于支持各种范式(paradigm)的主流编程语言当中。无论是命令式语言C、多范式通用编程语言C,还是面向对象编程语言Java、Ruby,亦或是函数式语言Haskell、动态脚本语言Python、PHP、JavaScript,函数这一语法元素都是当仁不让的核心。Go语言以“成为新一代系统
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Stella981 Stella981
3年前
Scala学习(一):Scala简介与Hello World!
一.Scala是什么Scala是一门多范式的编程语言,类似于Java。设计初衷是实现可伸缩的语言、并集成面向对象编程和函数式编程的各种特性。二.环境准备(以Windows下安装Scala为例)1.官网:http://www.scalalang.org/ 下载安装包:!image(https://static.osc
Wesley13 Wesley13
3年前
Java 概述
Java概述Java编程语言是一种通用的、并行的、基于类的、面向对象的语言。它被设计得非常简单,这样程序员可以在该语言上流畅的交流。Java编程语言与C和C有关联,但组织却截然不同,其中也省略了其他语言的一些用法,比如指针。它的目的是作为一个生产性语言,而不是一个研究性语言,因此,在设计上避免了包括新的和未经考验的功能。
Wesley13 Wesley13
3年前
Go接口
Go接口的定义Go语言不是一种 _“传统”_ 的面向对象编程语言:它里面没有类和继承的概念。但是Go语言里有非常灵活的 接口(Interfacesarenamedcollectionsofmethodsignatures) 概念,通过它可以实现很多面向对象的特性。接口提供了一种方式来 说明 对象的
Wesley13 Wesley13
3年前
NEO从源码分析看网络通信
_0x00前言_NEO被称为中国版的Ethereum,支持C和java开发,并且在社区的努力下已经把SDK拓展到了js,python等编程环境,所以进行NEO开发的话是没有太大语言障碍的。比特币在解决拜占庭错误这个问题时除了引入了区块链这个重要的概念之外,还引入了工作量证明(PoW)这个机智的解决方案,通过数学意义上的难题来保证每个