1.应用场景

了解编程语言的分类及显著的区别, 帮助理解编程语言的本质,和帮助快速学习一门新的语言.

2.学习/操作

1. 文档阅读

12 | 栈空间和堆空间:数据是如何存储的?-极客时间

2. 整理输出

2.1 动态与静态类型

要理解一门语言是静态类型还是动态类型,最本质的判断方法是看在什么时间段对类型进行检测。

静态类型的语言会在编译阶段就行检测,动态类型的语言会在运行时做类型检测!

比如C/C++/Go是静态语言,会在编译阶段对类型就行检测,如果检测到不合法的语言,编译阶段就会报错!

而JavaScript,PHP就是动态语言,编译阶段不会做太多类型检测,而是等到运行时再检测变量的具体类型,这是动态语言性能低于静态语言的一个关键的地方。V8对这种动态性做了大量的优化!

2.2 强类型与弱类型语言

要理解一门语言是弱类型还是强类型,看变量在运行时,是否能够改变类型。

比如C / C++ / JavaScript 都可以在运行时将一种类型的变量,改成另外一种类型的,所以他们是弱类型,

而Java就不能运行过程中修改变量类型,所以是静态语言!

对于各种语言的类型,你可以参考下图

举例

```
a = 1
a = 1.1
a = ''
a = []
a = {}
```

这段代码在JS和Python都是可以执行的,但Python并不是一门弱类型的语言。

```
1 + '1'
```

这代码在JS执行结果是'11',但在Python执行却是报错的,因为Python不理解一个整数和字符串相加的逻辑。
在JS中,任何两个类型都是可以相加的,但是结果却不是一定是我们想要的。

补充

Go 和 Java 类似,它是一门静态的、强类型的、编译型编程语言,为并发而生,所以天生适用于并发编程(网络编程)

2.3 特点[优劣势]

1). 动态语言 VS 静态语言

优点:

动态语言:不需要进行编译,开发效率比较高,适合快速开发迭代项目,就学习曲线,可能平缓一些,实际上个人感觉也是差不多。

静态语言: 会做类型检查,质量方面会更好一下,性能方面会更好一些,更适合开发大型项目。

缺点:

动态语言:性能方面差一些。

静态语言: 需要每次执行前,进行编译,开发效率低一些。

2). 强类型语言 VS 弱类型语言

TBD

图表对比

后续补充

...

3. 问题/补充

1. Go 与 Python/PHP的对比

Python/PHP 都是动态语言,而 Go 是静态语言,会做类型检查,可靠性更高。

开发 Web 应用时,Python/PHP 通常躲在 Nginx/Apache 后面作为后台进程,Go 则提供了内置的 Web 服务器,完全可以直接在生产环境使用。

Python/PHP 之所以要借助额外的 Web 服务器是因为对并发请求的处理,Python 有一个全局锁同时只允许运行一个线程,PHP 本身就没有多线程多进程机制,一次请求从头到位都是一个独立的进程,为了让基于 Python/PHP 的 Web 应用支持并发请求,必须借助外部 Web 服务器。

而 Go 内置的 Web 服务器充分利用了 goroutine,对并发连接有很好的支持。此外,由于协程的本质是在在同一个进程中调度不同线程,所以还支持共享资源。

另外就是 Python/PHP 作为动态语言,性能不如 Go,如果要提升 Python/PHP 性能,必须通过 C 语言编写扩展,复杂度和学习成本太高。

2. 命令式语言一般是指哪些语言呢?

作者回复:

1. 所谓“命令式语言”是英文imperative languages的一种翻译。

命令式的语言的一个特点就是程序员要完成是一件事,需要自己一步一步告诉 机器如何做,即把执行步骤用编程语言的语法罗列出来。

如今主流的编程语言,如c, c++, java, go, python, ruby,无论是否是静态语言还是动态语言,无论是否支持面向对象编程,本质上都是命令式语言。

那什么不是命令式语言呢?

与命令式语言相对的是声明式语言,最常见的就是SQL,它的特点是你只要输入你想要的结果「就是SQL语句」,语言引擎知道该执行什么步骤。

历史上还有一种叫prolog的逻辑编程语言也是声明式的,如果对prolog感兴趣,可以看看我参与翻译的《七周七语言》一书。

3. 变量的静态类型动态类型

20|控制结构:Go中的switch语句有哪些变化?-极客时间

func main() {
    var x interface{} = 13
    switch x.(type) {
    case nil:
        println("x is nil")
    case int:
        println("the type of x is int")
    case string:
        println("the type of x is string")
    case bool:
        println("the type of x is string")
    default:
        println("don't support the type")
    }
}

switch 关键字后面跟着的表达式为x.(type),这种表达式形式是 switch 语句专有的,而且也只能在 switch 语句中使用。

这个表达式中的 x 必须是一个接口类型变量,表达式的求值结果是这个接口类型变量对应的动态类型。

什么是一个接口类型的动态类型呢?

我们简单解释一下。

以上面的代码var x interface{} = 13为例,x 是一个接口类型变量,它的静态类型为interface{},如果我们将整型值 13 赋值给 x,x 这个接口变量的动态类型就为 int。

关于接口类型变量的动态类型,我们后面还会详细讲,这里先简单了解一下就可以了。

个人想法,所以,静态类型与动态类型是可以出现在同一个编程语言中的,同一个变量中的。

4.参考

参见当阅读列表

后续补充

...

编程语言 - 强弱/动静态类型 - 整理相关推荐

  1. 强/若类型语言 动/静态语言

    弱/强类型指的是语言类型系统的类型检查的严格程度.动/静态指的是变量与类型的绑定方法. 弱类型相对于强类型来说类型检查更不严格,比如说允许变量类型的隐式转换,允许强制类型转换等等.强类型语言一般不允许 ...

  2. 动态与静态类型编程语言(Statically Dynamically Typed Languages)

    动态与静态类型编程语言 1.类型检查 2. 静态类型语言 2. 动态类型语言 4. 两种类型语言的比较 区分「动态类型」与「静态类型」编程语言非常简单. 在此之前,让我们先看看「类型检查」. 1.类型 ...

  3. 为什么要在JavaScript中使用静态类型? (使用Flow进行静态打字的4部分入门)

    by Preethi Kasireddy 通过Preethi Kasireddy 为什么要在JavaScript中使用静态类型? (使用Flow进行静态打字的4部分入门) (Why use stati ...

  4. sql编辑器_SQL的弱点(3):缺少静态类型检查

    静态类型检查的重要 如果要把SQL按照编程语言的类型来分类的话,SQL应该属于一种描述型的动态语言. 用动态语言编写的程序,当达到一定的复杂度后,相比强类型静态编译语言来说,更容易出问题. 从2个例子 ...

  5. 整合Tomcat和Nginx实现动静态负载均衡

    由于Tomcat主要用来处理动态的内容,比如jsp文件.那么静态的html/图片等资源就可以交给Nginx来处理, 期间也用到了分发. 而对于一台服务器实现动静态分离时,则需要在一台服务器上同时搭建N ...

  6. O-C相关-08-动态类型与静态类型

    08-动态类型与静态类型 1, 什么是动态类型和静态类型 1) 动态语言 又叫动态编程语言,是指程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除等在结构上的变化.比如众所周知的EC ...

  7. 浅谈 TypeScript【上】-- Flow 静态类型检查工具

    文章内容输出来源:拉勾教育 大前端高薪训练营 前言 在[编程语言分类]中,我介绍到JavaScript是一种类型不安全语言,没有明确的数据类型声明,变量的类型可以随意的更改.为了解决这种问题,微软开发 ...

  8. 为什么要在JavaScript中使用静态类型? 我们是否应该使用它们?

    by Preethi Kasireddy 通过Preethi Kasireddy 为什么要在JavaScript中使用静态类型? 我们是否应该使用它们? (Why use static types i ...

  9. Python学习01、计算机基础概念、初识Python、常量,变量,类型和表达式、字符串、动态静态类型、注释

    前言:本文章主要用于个人复习,追求简洁,感谢大家的参考.交流和搬运,后续可能会继续修改和完善. 因为是个人复习,会有部分压缩和省略. 计算机基础概念 什么是计算机? 现在我们所说的计算机不光能进行算术 ...

最新文章

  1. 防静电塑料包装袋周围的静电场
  2. 我们常用的撤销和恢复功能,你知道它们使用了什么设计模式吗?
  3. db2 日期加减一天_常用SQL系列之(八):列值累计、占比、平均值以及日期运算等...
  4. 使用kuberbuilder创建工程示例
  5. 设计模式--抽象工厂(Abstract Factory)模式
  6. python面试设计模式问题_聊聊 Python 面试最常被问到的几种设计模式(下)
  7. 弹层,iframe页面
  8. hibernate(五)之继承关系
  9. mysql sqlserver 拷贝_SQLyog工具进行SQLSERVER表结构或数据拷贝到MySQL数据库
  10. nyoj1058部分和问题(简单基础易上手的dfs)
  11. UI库colorui的使用————小程序
  12. 第8章 Stata主成分分析与因子分析
  13. 系统架构师笔记——数据库
  14. SharePoint 2010 Webpart 部署 报错的解决方法
  15. 美国零售业初创公司排名前5位的软件开发公司
  16. Android ListView列表 刷新和加载更多
  17. 深度学习: ground truth 解释
  18. 北大数学系「扫地僧」韦东奕爆红!拒绝哈佛offer,留任北大
  19. 清华大学2019计算机录取分数线,清华大学2019录取分数线是多少
  20. 平台经济下的商业模式画布

热门文章

  1. 我悟出了公众号取名的套路
  2. 我的世界回连Center
  3. Java开发学习进阶路线
  4. 照片变漫画的方法有哪些?推荐两个方法给你
  5. 渲染吃显卡还是CPU,如何高效3D渲染?
  6. Combining Deep Learning with Information Retrieval to Localize Buggy Files for Bug Reports
  7. 辉芒微IO单片机FT60F121-RB
  8. 在线制图工具团队版介绍
  9. 路由器打印机服务器系统,路由器当打印机服务器
  10. 0基础24岁女硕士生,想转行做月薪30k的测试开发,需要从什么开始学习?