本文同步发布于博客(xblc.netlify.app),如果有更新博客会在第一时间更新
编程语言
中级语言
C/C++ 其实可以被叫做是一种中级语言,他们相较于高级语言,抽象程度更低、执行起来更快
他们相较于其他的主流高级语言,操作颗粒度更小,会涉及一些底层的操作,比如说位、字节、地址
而相较于机器语言,则引导除了高级语言的趋势:
- 结构化编程:代码和数据分离
- 内置功能齐全:有明显的数据类型
- 可移植性:编译器的 IR(Intermediate) 是可移植性的基础,而标准库是编译器提供的
函数式语言
- 一种用途不是特别广泛的语言
- 函数是最主要的对象
- 函数主场,递归,函数闭包,纯函数,声明式编程
- 应用场景是科学计算、游戏开发和分布式系统
汇编语言
- 汇编语言大致说就是最低层次的,还能有被理解的逻辑的语言
- 这个逻辑也是硬件直接运行的逻辑,所以也是 ISA 独立的
- 汇编语言是编译器跨平台处理后得到的结果,然后再经过机器特定的汇编器被汇编成相应的机器代码
和字节码的区别
- 二者都是机器语言和高级语言的中介
- 字节码是 Java 中设计出来的概念,跟 Java 代码运行的机制有关,大致说就是
.java编译得到.class,即可以在 JVM 可以运行的字节码,JVM 运行字节码得到机器语言 - 不同机器上编译得到的字节码是大致相同的规则,提供跨平台特性的是第二层处理逻辑,即 JVM。JVM 虽然也是虚拟机,但是他只是“代码执行上”的虚拟机,可以让相同的字节码在不同机器上得到运行。
JavaScript
- JS 的即时编译特性(JIT)不是由 JVM 支持的,但是底层也是由字节码动态编译成机器码(存疑)
支持
-
面向对象
-
命令式
-
响应式
-
prototype-based:其实就是面向对象中继承的一种特性,表示当我们基于原型创建类的时候,我们常常可以不用显式定义一个类,甚至可以用空对象来创建类
-
多范式
-
单线程
-
动态类型、弱类型:动态分配类型and类型在计算中是否会有明确隐式转换
- 什么是隐式类型转换呢,就是不是你自己转换的,在计算机中,你没有动他,但是它自己类型转换然后运算了
- 难以区分的点是强类型语言中也会有部分隐式转换,所以用字符串来理解比较好,典型的例子是弱类型语言中数据可以和字符串直接相加
- TS中会变成强类型
-
函数式编程
- 高阶函数
- 闭包
编程范式
范式:Paradigm 非常清楚且典型的例子
程序语言特性
(?这里不是很理解,留个坑)
- 是否允许副作用
- 操作的执行顺序
- 代码组织
- 状态管理
- 语法和词法
程序语言的副作用,表示代码是否会改变程序的状态 程序的状态可以理解为全局共享的变量,如果说我们一个函数影响了它作用域外的全局变量,我们就说这个函数有副作用
范式的主要领域
- 命令式:以“计算机执行命令”的语气来主导编程风格的一种方式
- 面向过程
- 面向对象:封装成一系列对象,通过描述对象间的交互来完成编程
- 声明式:”描述问题“ -> “解决问题”
- 函数式
- 响应式:数据流,通过数据的变化触发函数(?
阶乘的递归和迭代分别就是典型的 Declarative 和 Imperative Programming
过程式
结构化编程