image.png

简介

内容主要集中在语言的类型模型、编程范型、交互、判断结构、核心特性、独特之处等。

Ruby

Note

1.解释型语言,纯面向对象语言(一切皆对象),支持鸭子类型,动态类型语言,脚本语言
2.单继承,通过Mixin来满足多继承需求
3.集合和集合操作非常方便
4.metaprogramming(元编程):开放类、method_missing、模块
5.类的继承有点意思
image.png
6.类名用驼峰,函数和实例变量使用下划线命名法

优劣


1.更加注重工程师的效率而非程序的效率,有很多语法糖,良好的扩展性可以提升程序员的效率,极大的释放工程师的生产力
2.Rails对Web的支持非常好


1.性能较差
2.并发较差
3.由于类型安全问题,没有教好的IDE工具

Reference

1.Ruby未来的出路在哪里
2.听说 Ruby 性能不好,为什么还有这么多人推荐 Ruby 呢
3.Ruby官网
4.Ruby中文社区

我的一点看法

1.“快乐”编程语言,非常适合小团队或者创业早期团队;在web开发和脚本工具开发应该都能极大的提升效率
2.开放类这种“骚操作”很多时候是一种灾难,特别是团队的成员在技术能力上差距较大时。
3.关于性能,其实大部分业务都没有到纠结性能问题的时候已经死掉了,而且很多的性能问题并不是语言层面的改善就能改善的,更多的是架构上的问题。当然如果业务发展到一定程度了,就需要纠结语言性能的问题来满足用户更高的性能要求和降低成本。
4.Ruby的社区支持很好,无论中文社区还是英文社区都非常活跃,各种库和工具也相对完善。

io

io的核心优势是拥有大量可定制语法和函数,以及强有力的并发模型。它的简单语法和原型编程模型都值得我们重点关注

Note

1.只有对象没有类,所有事物都是对象;
2.通过复制其他对象来制造对象;
3.对象是一组槽,通过发送消息来获取槽的值,任何对象都有type这个槽。
4.以大写字母开头的对象是类型,因此 Io会对它设置type槽。而类型的复制品若以小写字母开头,则会调用它父对象的type槽。类型仅仅是帮助Io程序员更好地组织代码的工具。
5.对象不过是槽的容器而已。发送槽名给对象可获得该槽。如 果该槽不存在,则调用父对象的槽。你要理解的全部内容就是这些。这里没有类,也没有元类。 你手里也不会有接口或模块,有的只是对象
image.png
6.所有与对象的交互都是消息
7.你要做的不是实例化类,而是复制那些叫做原型的对象;
8.对象会记住它的原型,如果对象无法响应某消息,则它会把该消息发送给自己的原型

优劣


1.占用空间小,适用于嵌入式系统,
2.简单,语法简洁
3.支持鸭子类型,灵活自由
4.并发支持协程、actor、future模型


1.几乎没有语法糖
2.社区不完善,并没有中文社区
3.性能不好

我的一点看法

1.更像是一个玩具语言
2.但引入了协程作为语言层面的工具是个不错的做法

Reference

1.出于什么样的原因,诞生了「协程」这一概念?
2.为什么 Java 坚持多线程不选择协程?
3.协程的好处有哪些?
4.为什么协程切换的代价比线程切换低?

FAQ

1.协程的定义,在各语言的支持程度

Prolog

Note

image.png

image.png

优劣


在一些特定的领域有应用,如自然语言处理、游戏、语义网、调度、AI等

劣**
1.专注于逻辑编程,但是不是一门通用语言,在语言设计上有较多限制,可以参考reference-2
2.性能差,其查询匹配模式通过下面的方式实现,其无疑就是穷举法。
image.png

image.png
3.社区支持太差了,基本可以忽略

Reference

1.命令式语言中递归的理论基础
2.Prolog 这类逻辑式编程语言为什么没有得到广泛应用?
3.What is the difference between declarative and imperative programming?
4.声明式编程和命令式编程有什么区别?
5.从年会看声明式编程(Declarative Programming)

我的一点看法

1.Prolog的使用领域太少,充其量就是DSL
2.声明式编程思想的引入确实更利于程序员的逻辑,我理解其更像是在命令式编程的一层抽象,尝试在用人类的常规逻辑来描述程序。这也是为什么SQL基本算是最接近人类正常语言的原因了,譬如阿里很多的产品和运营同学基本都会写一些SQL来分析数据。

FAQ

1.什么的语言才能称的上是通用语言?

Scala

Note

与Java的联系
image.png

与Java不同
类型推断、不变量、函数式编程概念、高级程序构造


Java 和 Ruby 都是强类型的,汇编语言和 C 语言则是弱类型的。
override用于继承和trait用于多继承
对比var和val,val用于表示不可变

image.png

Scala最重要的方面之一便是并发,其主要结构包括actor和消息传递

优劣

image.png

2.基于JVM上可以方便的使用java的很多经过考验的库、功能等

3.桥接
每种新出现的编程范型都需要一个桥梁。Scala具有成为这座桥梁的先天优势。函数式编程模 型很重要,因为它可以很好地处理并发,并且处理器的并发程度也越来越高

我的一点看法

1.Scala表达力很强,非常适合写一些处理数据的,长期运行,且吞吐量较大的daemon或者服务,而且immutable的数据模型更利于编写高并发算法。
2.在阿里的时候曾经维护过一个使用少量Scala代码的项目,项目的的主要功能是把离线数据(ODPS)、增量数据(DB)拉去出来构建成到HDFS然后提供给淘宝的搜索引擎Ha3并构建成搜索索引。数据量也算是比较大的大概有3~4个亿,这个功能每天会运行一遍全量,时间大概需要1个小时左右,Scala主要做的把数据拉取出来后做一些数据格式上的转换。当然现在阿里的搜索架构可能已经不再是这样子了。

Reference

1.Scala 是一门怎样的语言,具有哪些优缺点?
2.你们是为什么上scala,有怎样的经历?
3.国内有哪些 Scala 大牛?
4.怎么看 LinkedIn 放弃 Scala 和 Node.js?
5.如何评价Linkedin决定逐渐减少Scala转而使用Java8的决定?
6.有哪些优秀的 Scala 开源项目?
7.如何学好Scala?请给出一条科学的时间线
8.为什么说 Scala 是 JVM 上的 C++?

Erlang

Note

优劣

我的一点看法

FAQ

Reference

Haskell

Note

优劣

我的一点看法

FAQ

Reference

总结