0%

编程语言

编程语言

汇编语言

提到汇编语言不得不提机器语言

  • 机器语言

机器语言:机器指令的集合(二进制数字0,1)
计算机转变为一列高低电平,以使计算机的电子器受到驱动,进行运算。

  • 汇编语言

实质与机器语言相同,直接对硬件操作。将源程序汇编生成的可执行文件
组成:指令、伪指令和宏指令

高级语言

高级语言是依赖编译或者解析的
如:C、C++、Python、Java、Matlab、LabVIEW等等

  • 低级语言:泛指机器语言和汇编语言

按转换方式划分

  • 解释型:一边“翻译”成目标代码(机器语言)一边执行
  • 编译型:应用源程序执行之前,就将程序源代码“翻译”成目标代码(机器语言)

解释型语言中包括脚本语言(又叫动态语言,扩建的语言)

  • 脚本语言:shell,Lua,php

脚本语言作为一钟解释型语言,一般以文本的形式存在,脚本语言可分为独立型和嵌入型,独立型脚本语言在其执行时完全依赖于解释器,而嵌入型脚本语言通常在编程语言中(如C,C++,VB,Java等)被嵌入使用。

其他分类方式

  • 动态语言:语言的数据类型判断是在运行中判断
  • 静态语言:语言的数据类型判断是在运行前判断(如编译阶段)如:C、C++,C#,java
  • 强类型语言:变量不经过强制转换,它永远是这个数据类型,不允许隐式的类型转换 如:Java
  • 弱类型语言:它与强类型语言定义相反,允许编译器进行隐式的类型转换如:C、C++

    优缺点对比

  • 动态语言和静态语言
  • 强类型语言和弱类型语言
  • 解释型语言和编译型语言
  • 机器语言和汇编语言

    分析案例

  • C#
  • C
  • C++
  • Java
  • Lua
  • Pyhon

    补充说明

  • CLR和.Net

.Net是一种解决方案; C# 是.Net解决方案中的一种语言; CLR是.Net的运行架构.

  1. CLR是公共语言运行库(Common Language Runtime)和Java虚拟机
    一样也是一个运行时环境,它负责资源管理(内存分配和垃圾收集等),并保
    证应用和底层操作系统之间必要的分离。
  2. NET FrameWork的核心是其运行库执行环境,称为公共语言运行库(Common Language Runtime)。
  3. 作用:
    (1)CLR是一个类似于JVM的虚拟机,为微软的.Net产品提供运行环境。
    (2)CLR上实际运行的并不是我们通常所用的编程语言(例如C#、VB等),而是一种字节码形态的“中间语言”。
    这意味着只要能将代码编译成这种特定的“中间语言”(MSIL),任何语言的产品都能运行在CLR上。
    (3)CLR通常被运行在Windows系统上,但是也有一些非Windows的版本。这意味着.Net也很容易实现
    “跨平台”。(至于为什么大家的印象中.Net的跨平台性不如Java,更多的是微软商业战略导致的)。
    语言支持:
    微软已经为多种语言开发了基于CLR的编译器,这些语言包括:C++/CLI、C#、Visual Basic、F#、
    Iron Python、 Iron Ruby和IL。除此之外,其他的一些公司和大学等机构也位一些语言开发了基于CLR
    的编译器,例如Ada、APL、Caml、COBOL、Eiffel、Forth、Fortran、Haskell、Lexicon、LISP、
    LOGO、Lua、Mercury、ML、Mondrian、Oberon、Pascal、Perl、PHP、Prolog、RPG、Scheme、
    Smaltak、Tcl/Tk。

CLR为不同的编程语言提供了统一的运行平台,在很大程度上对上层开发者屏蔽了语言之间才特性差异。
对于CLR来说,不同语言的编译器(Compiler)就相当于一个这种语言的代码审查者(Checker),所做的
工作就是检查源码语法是否正确,然后将源码编译成CLR所需要的中间语言(IL)。所以编程语言对于CLR
是透明的,也就是说CLR只知道IL的存在,而不知道IL是由哪种语言编译而来。
功能:
(1)基类库支持 (Base Class Library Support)
(2)内存管理 (Memory Management)
(3)线程管理 (Thread Management)
(4)垃圾回收 (Garbage Collection)
(5)安全性 (Security)
(6)类型检查 (Type Checker)
(7)异常处理 (Exception Manager)
(8)即时编译 (JIT)
在这里插入图片描述
在这里插入图片描述
具体过程:
CIL(IL): CIL类似一个面向对象的汇编语言,并且它是完全基于堆栈的,它运行在虚拟机上(.Net Framework, Mono VM)的语言
遵循LI规范的高级语言,被先被各自的编译器编译成中间语言:IL(CIL),等到需要真正执行的时候,这些IL会被加载到运行时库,也就是VM中,由VM动态的编译成汇编代码(JIT)然后在执行。
IL2CPP https://www.cnblogs.com/lancidie/p/6258154.html :Mono vm –>IL2CPP vm

  • AOT和JIT

https://blog.csdn.net/h1130189083/article/details/78302502

  • 程序集的组成

1.程序集清单,包含描述该程序集中各元素彼此如何关联的数据集合,还包含指定该程序集的版本要求和安全标识所需的所有元数据,以及定义该程序集的范围和解析对资源和类的应用所需的全部元数据。
2.元数据,提供有关程序集中定义的类型的信息,包括类型的名称,可见性,基类和类型所实现的接口。注意:程序集清单和元数据说明了程序集是自我描述的。
3.实现这些类型的MSIL代码。
4.资源集,诸如位图,指针,静态文本等。

  • 程序集和命名空间的关系

命名空间用于对类型进行逻辑分组。程序集则是程序的物理分组,对应于一个dll或exe文件。
程序集1:
namespace1{
public class A1{…}
public class A2{…}
}

namespace2{
public class A3{…}
public class A4{…}
}

程序集2:
namespace1{
public class B1{…}
public class B2{…}
}

namesapce2{
public class B3{…}
public class B4{…}
}
https://blog.csdn.net/DY_1024/article/details/82946643

  • 托管模块

中间语言代码(Microsoft Intermediate Language MSIL==IL)就是托管代码)
在这里插入图片描述
在这里插入图片描述