编程范式丨青训营笔记

97 阅读3分钟

本文同步发布于博客(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 非常清楚且典型的例子

程序语言特性

(?这里不是很理解,留个坑)

  1. 是否允许副作用
  2. 操作的执行顺序
  3. 代码组织
  4. 状态管理
  5. 语法和词法

程序语言的副作用,表示代码是否会改变程序的状态 程序的状态可以理解为全局共享的变量,如果说我们一个函数影响了它作用域外的全局变量,我们就说这个函数有副作用

范式的主要领域

  • 命令式:以“计算机执行命令”的语气来主导编程风格的一种方式
    • 面向过程
    • 面向对象:封装成一系列对象,通过描述对象间的交互来完成编程
  • 声明式:”描述问题“ -> “解决问题”
    • 函数式
    • 响应式:数据流,通过数据的变化触发函数(?

阶乘的递归和迭代分别就是典型的 Declarative 和 Imperative Programming

过程式

结构化编程

面向对象

函数式

响应式