[基础] - 从xx语言是跨平台的说起
我经常碰到一些人在说xx语言跨平台而yy语言不是(为避免不必要的纷争,在此不写具体语言但不影响阅读),从而来表明自己使用xx语言进行程序开发进而在编程语言鄙视链上高高在上很有优越感。
大概是从Java 提出的“Write once, Run anywhere”这个口号开始,跨平台的概念开始流行起来了(我不完全确定时间点是不是高度重合,所以使用了“大概”这个词)。
这里我拿Java语言举例子来说明一下,从编码开始到真正执行的过程是:编写源代码(.java)文件->编译器编译成字节码(.class)文件->各种部署或分发->在计算机上开始执行->计算机加载资源->发现是Java编程的程序->调用JVM->JVM解析.class文件->JVM执行程序。我们可以看出程序执行过程中真正由计算机本身执行的步骤有加载资源到调用JVM部分,当JVM开始解析.class文件并执行的过程并不是直接交付给计算机执行的而是均有JVM来负责,这也是为什么这种JVM程序运行机制叫做托管环境。
那么Java具体是怎么实现跨平台的呢?当然是由Java的开发商(先是Sun后是Oracle)实现了各个操作系统平台(Windows,Linux和Mac系列)的JVM,需要实现哪个平台的支持部署时安装上该平台所对应的JVM(JVM以及其需要lib合起来被称为JRE)即可实现Java程序在该平台的运行能力。所以从严格意义上来讲,Java语言开发的程序本身不是跨平台的但JVM有各个平台对应的版本,Java可以在各个平台下运行;从程序员开发程序的角度来看我们也可以简化为Java程序具有跨平台的能力。事实上当程序交付给JVM(JRE)执行的时候其并不关注程序是不是由Java语言编写成的,其仅仅是解释并执行类文件(.class),这样为JVM执行其他语言编写的程序提供了便利。
那其他语言有跨平台的能力吗,比如C语言?C语言从开发到运行的过程相对于Java的过程有所不同:开发源代码文件(.c)->编译器编译源代码->运行。在编译器编译源代码的过程中没有编译为中间结果而是编程成了相对应的机器码(或Windows或Linux或Unix等),当程序执行的时候直接由CPU解释执行,所以C语言开发的程序在这种执行机制下是不具备跨平台执行的能力的。
那么还有没有其他类似的程序执行机制的吗?当然有了,比如以C#为主的.NET系编程语言,其跨平台的原理和Java基本相同,不过虚拟机不叫JVM而是叫CLR(Common Language Runtime),从名字上我们可以看出Common的是不限制各种编程语言,只要该语言编译器能编程成符合CLR执行标准规范的中间层(类似Java语言体系中的.class)即可这个中间层的名称叫IL,全称是MSIL(Microsoft intermediate Language),而这套标准规范就是CLS(Common Language Specification)。但是微软出于某些考虑在.NET推出的10多年中仅仅实现了在Windows平台下的CLR而始终没推出基于Linux平台的CLR,虽然也有其他公司尝试推出MONO,但力度不大也没太多的工业界影响力。在2014年之后微软推出了.NET Core,并同步推出了各个平台相应的Runtime。
截止到目前,Java的相关专利均有其公司持有,任何对这些专利有抵触的地方都可能有被诉讼法律的风险,比如当年微软针对性的优化Java在Windows平台下执行性能和效率专门开发的Visual J++套件就是因为专利的问题被Sun公司起诉并获赔的。
而C#等.NET体系的编程标准均为ECMA标准,这里我简单列一下其链接不再详述:
Common Language Infrastructure(ecma-335)
C# Language Specification(ecma-334)
任何有实力有想法的公司或个人均可以基于这些开发标准进行相应的开发,不过大部分的公司处于竞争不过微软的地位而不在这方面多投入资源,但也有极个别的公司曾经尝试过,比如Borland公司的Delphi.NET。
有过Java和C#,有关跨平台,有关.NET Core等等,这些有很多可以说的,不是短短的几篇文章能描述清楚,有需要了解这些情况的同学还是优先看各种官方文档,我们只能从各种二手资料中推断演绎。
后续还计划写一篇.NET 程序在Windows平台下执行的过程及其逻辑,希望能做到。
[基础] - 从xx语言是跨平台的说起的更多相关文章
- 20165101 学习基础和C语言基础调查
学习基础和C语言基础调查 技能学习心得 看了15级学长学姐丰富的技能之后,我感到很惭愧.我的课外技能可以说是很糟糕.唱歌的话,小时候还可以用假声唱一下,变声之后就是高音上不去,低音下不来.体育更是差劲 ...
- JAVA语言的跨平台性和JDK,JRE与JVM
Java虚拟机--JVM ~JVM:java虚拟机简称JVM是运行所有java程序的假想计算机,是java程序的运行环境,是java最具有吸引力的特性之一,我们编写的java代码,都运行在JVM之上 ...
- [转]概率基础和R语言
概率基础和R语言 R的极客理想系列文章,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大. R语言作为统计学一门语言,一直在小众领域闪耀着光芒.直到大数据的爆发,R语 ...
- 狗屁不通的“视频专辑:零基础学习C语言(小甲鱼版)”(2)
前文链接:狗屁不通的“视频专辑:零基础学习C语言(小甲鱼版)”(1) 小甲鱼在很多情况下是跟着谭浩强鹦鹉学舌,所以谭浩强书中的很多错误他又重复了一次.这样,加上他自己的错误,错谬之处难以胜数. 由于拙 ...
- 20165318 预备作业二 学习基础和C语言基础调查
20165318 学习基础和C语言基础调查 技能学习经验 我们这一代人,或多或少的都上过各种兴趣班,舞蹈钢琴画画书法,我也是如此.可这些技能中,唯一能拿的出手的就是舞蹈了.按照<优秀的教学方法- ...
- 20165230 学习基础和C语言基础调查
20165230 学习基础和C语言基础调查 技能学习经验 我擅长弹钢琴.小时候我曾上过很多兴趣班,比如钢琴.跳舞.书法.绘画等等,唯一坚持至今的只有钢琴.仔细一算学习钢琴至今已有12年,不能说已经精通 ...
- 20165237 学习基础和C语言基础调查
学习基础和C语言基础调查 一.技能学习与特长 你有什么技能比大多人(超过90%以上)更好? 我的爱好和技能说实话挺广泛的.如果要挑出来一个很擅长的话,我觉得应该是钢琴. 针对这个技能的获取你有什么成功 ...
- 20165234 预备作业2 学习基础和C语言基础调查
学习基础和C语言基础调查 一.技能学习经验及体会 你有什么技能比大多人(超过90%以上)更好? 看到这个问题,我仔细想了想,好像的确没有什么特别出众的技能,但是我想到了许多我个人的爱好. 我从小喜欢五 ...
- 20165337学习基础和C语言基础调查
20165337学习基础和C语言基础调查 你有什么技能比大多人(超过90%以上)更好? 讲道理我感觉我自己没有什么能比90%以上的人都做得好的技能,我就瘸子里面拔将军挑一个我自认为还不错的技能吧. 我 ...
随机推荐
- Python【day 14-5】sorted filter map函数应用和练习
'''''' ''' 内置函数或者和匿名函数结合输出 4,用map来处理字符串列表,把列表中所有人都变成sb,比方alex_sb name=[‘oldboy’,'alex','wusir'] 5,用m ...
- django4-模板进阶
1.模板系统的语法 引用变量数据: {{ }} 标签逻辑操作:{%...%} 2.变量 变量名由字符数字下划线组成 ,可以执行由视图函数传过来的对象的方法和属性 ,但是视图函数中如果使用 ' . ' ...
- JS 中 判断数据类型 typeof详解
typeof 可用来获取检测变量的数据类型 语法 typeof operand typeof(operand) 参数 operand 一个表示对象或原始值的表达式,其类型将被返回. 描述 下表总结 ...
- (一)创建新的react native 应用程序
最近开始学习ReactNative了,首先了解下ReactNative http://wiki.jikexueyuan.com/project/react-native/GettingStarted. ...
- wamp环境下composer及laravel的安装配置
laravel: PHP Web开发框架 composer: PHP 的一个依赖管理工具.它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们. 一.composer安装 参考:Windows ...
- 如何优雅地停止Spark Streaming Job
由于streaming流程序一旦运行起来,基本上是无休止的状态,除非是特殊情况,否则是不会停的.因为每时每刻都有可能在处理数据,如果要停止也需要确认当前正在处理的数据执行完毕,并且不能再接受新的数据, ...
- web前端学习路线(干货)
- SpringCloud学习笔记(九、SpringCloud Stream)
目录: 什么是SpringCloud Stream 如何使用SpringCloud Stream 消息分流 什么是SpringCloud Stream: SpringCloud Stream是一个用于 ...
- Pwn-level4
题目地址 https://dn.jarvisoj.com/challengefiles/level4.0f9cfa0b7bb6c0f9e030a5541b46e9f0 友情连接 https://www ...
- 浅谈js的事件冒泡和事件捕获
本文地址:https://www.cnblogs.com/christineqing/p/7607113.html 前言: 这篇文章起源于上次工作上的原因,在事件上出的bug,所以就抽空写出一篇 ...