首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

《七周七语言:理解多种编程范型》读书笔记

书中介绍的七种编程语言

Ruby

Io

Prolog

Scala

Erlang

Clojure

Haskell

一些几个问题让你对一门你即将学习的新语言有一个很清晰的认识:

语言的类型模型是什么(强类型、弱类型、静态类型、动态类型)

语言的编程泛型是什么(OO、函数式、过称式、综合体)

怎样和语言交互(编译、解释、有无虚拟机)

语言的判断结构和核心数据结构

哪些核心特性让这门语言与众不同

Ruby。这门面向对象语言高票当选,因为它不仅好用,而且好读。我曾经考虑过不介绍 任何一门面向对象语言,但我又想在其他编程范型与面向对象编程之间作一些比较,因 此,至少介绍一门面向对象语言还是有必要的。相比于大多数程序员的日常用法,我想 把它挖掘得更深入一些,以揭示设计者的良苦用心。我最终决定重点介绍Ruby元编程 (metaprogramming),因为它可以用来扩展Ruby的语法。对于Ruby榜上有名的结果,我还

是相当认可的。

Io。和Prolog一样,Io也是本书颇具争议的语言。它虽与商业成功无缘,但其兼具简单性

和语法一致性的并发结构,却是十分重要的思想。它的最简语法(minimal syntax)功能 强大,与Lisp的相似性也颇能给人留下几分印象。Io不仅和JavaScript一样同为原型语言, 还有着独一无二、韵味无穷的消息分发机制,因此在众多编程语言之中,它也占有小小 的一席之地。

Prolog。没错,Prolog年事已高,但它仍然威力无穷。它能轻松解出数独问题,这着实让 我大开眼界。用Java或C语言时,有些难题我殚精竭虑方能解决,用Prolog却能干净利落 地搞定。承蒙Erlang发明者Joe Armstrong出手相助,我得以深刻体会到Prolog之妙,而且 4 也正是深受Prolog影响,Erlang才得以问世。如果你此前从未用过Prolog,我保证,它定 会带给你惊喜。

Scala。作为运行于Java虚拟机上的新一代语言,Scala为Java系统引入了强大的函数式思 想,同时也并未丢弃面向对象编程。回顾历史,我发现C++和Scala有着惊人的相似之处, 因为从过程式编程过渡到面向对象编程期间,C++同样起到了举足轻重的作用。当你真正 融入Scala社区之后,你就会明白,为什么对于函数式语言程序员来说,Scala是异端邪说, 而对于Java开发者来说,Scala是天降福音。

Erlang。作为名单上历史最悠久的语言之一,Erlang不仅是一门函数式语言,而且在并发、 分布式编程、容错等诸多方面都有优异表现,真是想不火都难。CouchDB(新兴的基于 云的数据库)的创始人就选择了Erlang,并且义无反顾地一直用它,只要花上点时间了解 这门分布式语言,你就会明白原因所在。在Erlang帮助下,设计带有并发、分布式、容错 等特征的应用程序将变得无比简单。

Clojure。这又是一门Java虚拟机语言,但正是这门Lisp方言,彻底颠覆了我们在Java虚拟 机上并发编程的思考方式。它是本书唯一在版本数据库中使用同一种策略管理并发的语 言。作为Lisp方言,Clojure或许拥有本书所有语言中最灵活的编程模型,因此绝不缺乏号 召力。与其他Lisp方言不同的是,它不会带那么多括号2,还有众多Java库和在各平台上 的广泛部署作为坚强后盾。

Haskell。它是本书唯一的纯函数式语言,这也意味着,它根本不存在可变状态:只要使 用相同的输入参数,去调用相同的函数,就会返回相同的输出。在所有强类型语言中, Haskell拥有最令人称羡的类型模型。和Prolog一样,它也需要你花一些时间理解,但你得 到的回报绝对物超所值。

学习编程语言你最不应该关注的几个问题:

语法

安装指南

你最应该关注的问题:

享受编程

Ruby

其设计者主要关心的是提高程序员的编程效率,或者说编程幸福感,而编程语言的执行效率较为次之。

Ruby的核心优势在于她的语法和灵活性,根本的不足之处大概是性能。

Ruby语言的主要应用场景

服务(网站、App等)后端

DSL

工具脚本

Io

Io是一种原型语言,这意味着每个对象都是另一个对象的复制品。Io的核心优势是拥有大量可定制语法和函数,以及强有力的并发模型。

当你了解 Io 后,会对 JavaScript 的运行机制理解的更透彻。

安装(Mac):

brew install io

初体验

(base) ~ io

Io 20151111

Io> "peng" print

peng==> peng

再体验

(base) ~ io

Io 20151111

Io> Vehicle := Object clone

==> Vehicle_0x7fc1b5e13f80:

type = "Vehicle"

Io> Vehicle description := "Something to take you places"

==> Something to take you places

Io> Vehicle slotNames

==> list(type, description)

收获:

上述的 Vehicle 不是类,也不是用来创建对象的模板,它只是个对象,是一个基于 Object 原型的对象。

通过复制其他对象来知道对象

对象是一组槽

通过发送消息来获取槽的值

继承

Io> Car := Vehicle clone

==> Car_0x7fc1b789d9d0:

type = "Car"

Io> Car slotNames

==> list(type)

Io> Car type

Io> ferrari := Car clone

==> Car_0x7fc1b7b03090:

Io> ferrari slotNames

==> list()

Io> ferrari type

定义方法

Io> Car drive := method("Vroom" println)

==> method(

"Vroom" println

)

Io> ferrari drive

Vroom

Io> ferrari getSlot("drive")

==> method(

"Vroom" println

)

对象的原型

Io> ferrari proto

==> Car_0x7fc1b789d9d0:

drive = method(...)

type = "Car"

Io 遵循的几条基本原则

所有事物都是对象

所有与对象的交互都是消息

你要做的不是实例化类,而是复制那些叫做原型的对象

对象会记住它的原型

对象有槽

槽包含对象(包括方法对象)

消息返回槽中的值,或调用槽中的方法

如果对象无法响应某消息,则他会把该消息发送给自己的原型

列表和映射

Io> toDos := list("1","2")

==> list(1, 2)

Io> toDos size

Io> toDos isEmpty

Io> map1 := Map clone

==> Map_0x7fd74414ab40:

Io> map1 atPut("aaa","bb")

==> Map_0x7fd74414ab40:

Io> map1 at("aaa")

学到这里我已经对 JavaScript 有了新的理解了。

Rrolog

Prolog是一门声明式编程语言(decalarative language)。你向Prolog提供一些事实(fact)和推 论(inference),并让它为你推断。

如果你发现一个特别适合Prolog解决 的问题,那就利用Prolog解决吧。

Scala

特点

类型推断

函数式编程概念

不变量

高级程序构造

核心优势

并发

遗留Java的演化

领域特定语言

XML

桥接

不足之处:

静态类型

语法

可变性

Erlang

为并发量身打造

特点

无线程

轻量级进程

可靠性

它能在正确的时间和正确的地点解决正确的问题。

Clojure

Clojure是JVM上的Lisp实现。

Lisp 是函数式编程语言,但不是纯函数式语言。

目前主要的 Lisp 方式是 Common Lisp 和 Scheme

Haskell

纯函数式语言。

我想介绍其他编程语言(依实用为目的)

JavaScript

Ruby

Python

Perl

Go

C

Rust

Scratch

Lisp

Lua

TypeScript

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200208A0LVLL00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券