文档章节

编程语言设计原理小结

Freewheel
 Freewheel
发布于 2017/04/26 20:11
字数 690
阅读 326
收藏 3
  • 了解编程语言设计原理有什么用?
  1. 增强表达想法的能力
  2. 增强选择合适语言的能力
  3. 增强学习新语言的能力
  4. 更好地理解语言的实现
  • 编程领域
  1. 科学研究应用 如 Fortran 计算大量的浮点数
  2. 商业应用 如 COBOL 处理会计报告
  3. 人工智能领域 如 LISP Prolog
  4. 计算机系统编程 如 C/C++ 对性能要求非常高
  5. Web软件应用 如 HTML, PHP , JAVA 等
  • 对一个语言评测的标准

    • Readability 可读性
      • 这个比较好理解,指的是这个语言的代码是否足够好理解,是否存在歧义(比如 不必要的操作符重载? e.g. C的指针与乘法符号),控制语句,数据类型,结构,语法(臭名昭著的 a++ 和 ++a)等。
    • Writability 表达性
      • 代码写起来是否简易,支持抽象的能力,表达能力(prolog 可以用5行代码写一个prolog的interpreter)
    • Reliability 稳定性
      • 类型检查,异常处理,别名问题(aliasing),可读性表达性不足也会导致稳定性差。
    • Cost 整体代价
      • 学习成本,写代码的效率,编译效率,执行效率,维护等
  • 编程语言设计的两大影响因素

    1. 计算机架构

      • 即 von Neumann architecture,数据和程序都存在内存中, CPU与内存分开,靠bus传递信息
      • von Neumann architecture
      • 因此,多数语言都有 变量,赋值 这些概念
      • CPU和内存直接的信息通道传递速度远比CPU处理速度慢,这成了最大的瓶颈。
    2. 编程方法论

      • 如面向过程,面向对象,函数式编程等
  • 编程语言的三种实现

    1. 编译型
      • 程序被编译转换成机器代码
      • 优点:程序运行速度快,效率高
      • 缺点:编译时间相对较长
    2. 解释型
      • 程序运行在解释器中,解释器对于这种语言相当于一个虚拟的计算机。
      • 优点:非常易于debug,因为错误信息可以即时显示
      • 缺点:执行效率低;无论之前执行过多少次,每个语句都需要被decode后才能执行; 通常需要更多的内存空间
    3. 混合实现
      • 先编译成一个中间语言,再运行在解释器中
      • 优点:效率比纯解释型高,因为高级语言被编译成了中间语言,也就是只decode一次 ; 可移植性高 portability,只要有各平台的解释器,程序只需要编译一次,就能在各平台中执行(比如Java)。
      • JIT (just-in-time)系统,可以将按需将代码编译成机器码,以便之后反复使用,提高执行效率。

© 著作权归作者所有

共有 人打赏支持
Freewheel
粉丝 8
博文 83
码字总数 48265
作品 0
普陀
程序员
私信 提问
加载中

评论(1)

柠萌恩
柠萌恩
你好
大数据、机器学习及人工智能必读书目——《数学之美》

  计分析、机器学习即人工智能必读书目系列之数学之美      我们已经进入了全新的数据时代,大数据、云计算、物联网、机器学习、人工智能等等一系列技术纷至沓来,数据的管理和应用已经...

爱编程爱统计
2017/09/09
0
0
Java学习之面向对象与面向过程的比较

前言 Java编程语言是一门面向对象的语言,这与之前的编程语言来说,是一个重大的进步和发展,下面主要来分析一下面向对象和面向过程两者之间的关系。 编程语言的发展 如下图,编程语言的发展...

m18633778874
2018/04/10
0
0
关东升的《从零开始学Swift》3月9日已经上架

大家一直期盼的《从零开始学Swift》于3月9日已经上架,它是关东升老师历时8个月的呕心沥血所编著,全书600多页,此本书基于Swift 2.x,通过大量案例全面介绍苹果平台的应用开发。全书共分5 部...

tony关东升
2018/06/26
0
0
关东升的《从零开始学Swift》3月9日已经上架

大家一直期盼的《从零开始学Swift》于3月9日已经上架,它是关东升老师历时8个月的呕心沥血所编著,全书600多页,此本书基于Swift 2.x,通过大量案例全面介绍苹果平台的应用开发。全书共分5 部...

智捷课堂
2016/03/11
43
0
机房合作开篇之作——了解C#语言

前言 C#语言 环境 程序结构 小结 前言 近期小编开始了机房合作,前期是文档编写和构思,正在进行阶段,开发机房收费系统第三版使用的是C#语言,之前对于这门语言的接触是在C#视频和设计模式两...

m18633778874
2017/11/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

dockerfile 镜像构建(1)

通用dockerfile 利用已经编译好的.jar 来构建镜像。要构建的目录如下: [root@iZuf61quxhnlk9m2tkx16cZ demo_jar]# docker build -t demo:1 . 运行镜像: [root@iZuf61quxhnlk9m2tkx16cZ de...

Canaan_
12分钟前
0
0
Redis radix tree源码解析

Redis实现了不定长压缩前缀的radix tree,用在集群模式下存储slot对应的的所有key信息。本文将详述在Redis中如何实现radix tree。 核心数据结构 raxNode是radix tree的核心数据结构,其结构体...

阿里云云栖社区
15分钟前
3
0
vue import 传入变量

在做动态添加component的时候,传入变量就会报错,出现以下错误信息: vue-router.esm.js?fe87:1921 Error: Cannot find module '@/components/index'. at eval (eval at ./src/components ......

朝如青丝暮成雪
17分钟前
0
0
Flutter开发 Dio拦截器实现token验证过期的功能

前言: 之前分享过在Android中使用Retrofit实现token失效刷新的处理方案,现在Flutter项目也有“token验证过期”的需求,所以接下来我简单总结一下在Flutter项目中如何实现自动刷新token并重...

EmilyWu
18分钟前
5
0
final Map可以修改内容,final 常量不能修改

1.final Map 可以put元素,但是不可以重新赋值 如: final Map map = new HashMap(); map = new HashMap();//不可以 因为栈中变量map引用地址不能修改 2.final str = “aa”; str = "bb";/......

qimh
21分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部