编程语言和语言运行时的思考

1. 什么是一门编程语言

  一门编程语言应该具备一下基本要素:

    1. 类型系统(可以定义变量)
    2. 复合类型(例如:结构体,枚举,类,接口)
    3. 循环结构
    4. 判断结构
    5. 函数,及其调用规范

    6. 编译器,可以将这种语言编译的源代码,编译成,特定平台上可以执行的代码

  这是就构成一们编程语言

2. Runtime (运行时)

  运行时包含了程序运行的基本环境,这里有动态内存---堆,有线程栈,有最基本的运行时函数库,例如文件读写API, 字符串操作,等等。

CLR叫做公共语言运行时(Common Language Runtime)

1. CTS

C#和VB.NET都是公共语言运行时的托管代码,它们的语法和数据类型各不相同。CLR是如何对这两种不同的语言进行托管的呢?通用类型系统(Common Type System)用于解决不同语言的数据类型不同的问题,如C#中的整型是int,而VB.NET中是Integer,通过CTS我们把它们两个编译成通用的类型Int32。所有的.NET语言共享这一类型系统,在它们之间实现无缝互操作。

2. CLS

编程语言的区别不仅仅在于类型,语法或者说语言规范也都有很大的区别。因此.NET通过定义公共语言规范(Common Language Specification),限制了由这些不同点引发的互操作性问题。CLS是一种最低的语言的标准,制定了一种以.NET平台为目标的语言所必须支持的最小特征,以及该语言与其他.NET语言之间实现互操作性所需要的完备特征。凡是遵守这个标准的语言在.NET框架下都可以实现互相调用。例如,在C#中命名是区分大小写的,而VB.NET不区分大小写,这样CLS就规定,编译后的中间代码必须除了大小写之外有其他的不同之处。

3. .NET编译技术

为了实现跨语言开发和跨平台的战略目标,.NET所有编写的应用都不是编译为本地代码,而是编译成微软中间代码MSIL(Microsoft Intermediate Language)。它将由JIT(Just In Time)编译器转换成机器代码。C#和VB.NET代码通过它们各自的编译器编译成MSIL,MSIL遵守通用的语法,CPU不需要了解它,再通过 JIT编译器编译成相应的平台专用代码,这里所说的平台是指我们的操作系统。这种编译方式实现了代码托管,还能够提高程序的运行效率。

时间: 2024-08-12 10:00:19

编程语言和语言运行时的思考的相关文章

关于使用动态语言运行时 (. net)

AutoCAD Managed .NET API允许您使用使用. NET 4.0 引入的动态语言运行时 (DLR). 使用DLR可以直接访问对象, 而无需: 打开一个对象进行读取或写入, 然后在完成后关闭该对象. 利用事务提交所做的更改. 在使用DLR时获得对象的ObjectId后, 可以直接访问对象的属性和方法.获得ObjectId后, 可以将ObjectId分配给数据类型的变量: Object in VB.NET dynamic in C# 获取ObjectId因对象保存到数据库的方式而异.

《精通C#》第十六章-动态类型和动态语言运行时-第一节至第四节

在.Net4.0中引入了一个关键字dynamic,这是一个动态类型关键字.Net中还有一个关键字是var,这是一个隐式类型,可以定义本地变量,此时var所代表的实际的数据类型有编译器在初次分配时决定,比如:var a=1:a="aa":此时编译器就会报错,因为var在初次定义是已经被分配为int类型,它无法用于返回值.参数或者类/结构.这个时候就要想到所有类型的父类object,按照继承关系来说,object是所有类型的父类,所以它可以替代所有的类,也就是说:object a=1:a=

[转帖]运行时库(runtime library)

运行时库(runtime library) https://blog.csdn.net/xitie8523/article/details/82712105 没学过这些东西 或者当时上课没听 又或者 世一大的老师没好好讲 只顾着开公司赚钱了. 2018年09月15日 11:34:33 xisuesuexi 阅读数 593 一切从   默认库“LIBCMTD”与其他库的使用冲突,请使用 /NODEFAULTLIB:library. error LNK2005: XXX已经在 libcmtd.lib

Rust语言——无虚拟机、无垃圾收集器、无运行时、无空指针/野指针/内存越界/缓冲区溢出/段错误、无数据竞争

2006年,编程语言工程师Graydon Hoare利用业余时间启动了Rust语言项目.该项目充分借鉴了C/C++/Java/Python等语言的经验,试图在保持良好性能的同时,克服以往编程语言所存在的问题.其最大的特点在于保持较高的运行效率.深入的底层控制和广泛应用范围的同时,解决了传统C语言和C++语言中的内存安全问题.2009年,Mozilla接手Rust项目,创建了以Graydon为首的专业全职开发团队,并且开放了该项目的源代码.2012年1月,第一个面向公众的预览版本--v0.1 发布

cefSharp 设置运行时系统语言

在使用用CefSharp使用过程中,系统用了很多第三方控件.这些控件很多能够根据浏览器设置的语言来进行控件展示对应语言. 在cefSharp可以设置系统语言,代码如下: CefSharp.Settings setting = new CefSharp.Settings(); string flashPath = Application.StartupPath+ @"\Plug\gcswf32.dll"; setting.AddPluginPath(flashPath); //设置语言

OC是动态运行时语言是什么意思?什么是动态识别,动态绑定?

动态: 主要是将数据类型的确定由编译时,推迟到了运行时. 这个问题其实浅涉及到两个概念,运行时和多态. 简单来说,运行时机制使我们直到运行时才去决定一个对象的类别,以及调用该类别对象指定方法. 现在,让我来想想OC的动态语言特性.OC的动态特性表现为了三个方面:动态类型.动态绑定.动态加载.之所以叫做动态,是因为必须到运行时(run time)才会做一些事情. (1)动态类型 动态类型,说简单点就是id类型.动态类型是跟静态类型相对的.像内置的明确的基本类型都属于静态类型(int.NSStrin

Swift和OC,是编译型语言、解释性语言、运行时语言

首先需要明确的一点是,什么是编译型语言和解释性语言 编译型语言,就是在其执行过程中需要先将其经过编译成机器码来给计算机识别的,其执行效率就会比较高这个是显而易见的,常见比如:C.C++ 而解释型语言,是不用编译这个过程的,只是在执行时通过相应的翻译器(虚拟机)逐行翻译.这样它的跨平台性就会较好,因为可以直接通过编译器编译成需要的平台上的语言,但是有一个问题就是:它每次运行都要讲每行代码逐行解释翻译一遍.常见比如:Python.JS.PHP 由此可见,我们的OC和Swift都是需要先进行编译后才能

[Asp.net 5] Localization-Asp.net运行时多语言

本节介绍的是Microsoft.AspNet.Localization工程.该工程是运行在Asp.net 5环境中的运行时多语言设置. ASP.net 5中间件技术 在新的Asp.net 5中,可以将组件组册到asp.net环境中.注册是通过接口IApplicationBuilder的扩展方法实现的. public static IApplicationBuilder UseMiddleware(this IApplicationBuilder builder, Type middleware,

Android数据存储之Android 6.0运行时权限下文件存储的思考

前言: 在我们做App开发的过程中基本上都会用到文件存储,所以文件存储对于我们来说是相当熟悉了,不过自从Android 6.0发布之后,基于运行时权限机制访问外置sdcard是需要动态申请权限,所以以往直接sdcard根目录上直接新建了一个xxx/cache/目录来做文件存储就会不是那么容易控制了,所以有必要重新认识一下Android文件存储的相关知识了. 背景: 有关外置sdcard的读写权限 <uses-permission android:name="android.permissi