Lars bak

news2024/9/21 7:59:55

(1)先从smalltalk说起

上回书《阿伦凯(Alan Kay)》咱们说到世界上第一个基于语言虚拟机的编程语言Smalltalk,以及它的创造者:Alan kay。今天我再沿着语言虚拟机这条路,再走向系统虚拟机《虚拟机:IBM-S/360-OS/2》,最后走向今天我们要讲的容器技术,而我仍然是通过一个神人来串起这些事,这个人就是:Lars bak。

这位神人和Alan Kay一样同样出身于施乐实验室。Alan虽然创造了Smalltalk和语言虚拟机,但是由于当时计算机的性能太差无法高性能地跑语言虚拟机,所以Smalltalk只能待在实验室里玩而无法大规模普及给工商业界。我想了想我在1999年学习Java的时候都觉得java虚拟机很慢,记得我也是在2004年之后Java虚拟机才感觉快起来,所以对于80年代编程语言用虚拟机技术那更是痴心妄想。所以说Alan Kay的主要贡献不在于Smalltalk和语言虚拟机,而是GUI-MVC-面向对象。

我上回书说到:

C++是借鉴的面向对象编程语言鼻祖Simula,而不是Smalltalk。我想根源可能是C++作者觉得欣赏面向对象思想而不欣赏语言虚拟机,毕竟C语言以高性能而著称。

而苹果的Object C则是借鉴了SmallTalk。我一开始不明白这个关联,而且我过去看见苹果公司搞LLVM也不是很明白。现在,Ojbect C-Smalltalk-LLVM,这么一串联,我就对上了。你对上了没有?你是否明白苹果做LLVM的用意?

其实一个语言虚拟机分为好几层:

  • 编程语言层

  • 前向编译器:其实含检查器-优化器-编译器-链接器四大部分。这个前向编译器就是把源代码编译成中间字节码

  • 中间字节码-虚拟指令集层

  • 后向编译器:比如编译成机器能识别的二进制代码,或者目标代码(如JS代码)

  • 执行虚拟机:其实就是和一台虚拟的计算机一样,搞核心的应用程序加载-执行、计算(线程-并发-锁)、内存(内存分配-回收)

至于其他如文件系统、内存-文件交换都交给操作系统,还有IO驱动控制也都交给操作系统。

所以大家看,搞编程语言-编译器-语言虚拟机-操作系统的人,都是知识共享的。所以微软一个搞个人电脑上的BASIC解释器的公司也后来搞了操作系统。

(2)JVM

言归正传,咱们还是回来说咱们的大神Lars bak。

这位大神接手了Smalltalk,一直有个梦想就是把这门编程语言推广给工商业界,所以他树立了一个目标:让Smalltalk的运行速度达到C语言的75%性能。

所以他一阵魔改:在编程语言级别-前向编译器级别-后向编译器级别-执行虚拟机级别到处修改,改来改去就改出一个东西:StrongTalk。所以我想了想Java、Scala、Kotlin,不也是殊途同归么?

我为啥这里说起Java呢?嗯,大家都知道,Java搞JVM其实就是借鉴的是Smalltalk语言虚拟机的思路,是为了统一屏蔽硬件差异巨大的日本家电的。但是Sun公司的人搞操作系统拿手(Unix-Solaris),搞编程语言-虚拟机还不擅长。所以Java虚拟机在1997年的时候还是解释型的,就如同我们早年玩的Dbase、VBasic、JavaScript一样,那当然性能慢啊。

咋办?还得找鼻祖,谁发明的就找谁。于是,Sun公司就把大神Lars bak给并购过来了。这就是后来Sun公司官方的JVM:Hotspot JIT即时编译器。

这位大神先搞定了java最大的性能问题后也没闲着,就在Sun公司负责了J2ME的规范设计。要知道J2ME可是Java发源的初心,也是最最苛刻的硬件条件,能把慢如牛的java在最小的硬件资源上高性能地运转起来,那就把Java的初心实现了。于是,lars就开始搞J2ME CLDC。CLDC指的是Connected Limited Device Configuration,有限连接设备配置,此版本主要针对电池小、尺寸小、硬件资源有限的设备。如移动手机。

而J2ME CLDC版本中包含的语言虚拟机,就是大家过去听说过的KVM。这就是大神的杰作。想想当年在iPhone和安卓之前,多少游戏是用KVM写的啊。不过想想大神连续搞了这么多次语言虚拟机也就理解了,大神算是把虚拟机都玩透了。

(3)V8

大神搞完J2ME和KVM之后,了然无趣,就飘然而去去了谷歌。去了谷歌就一鸣惊人,Chrome浏览器横空出世,以闪电性能立马席卷IE的市场。Chrome为啥这么快?就是因为大神搞了一个JS执行引擎:V8。

咱们刚才说,JavaScript是解释型的,在浏览器中内置了一个JS解释器,所以肯定性能慢啊。但是你想让广大程序员把解释型JavaScript换成编译型JavaScript这比较难。这就是习惯的力量。大神当时还不敢动众人的奶酪。所以大神想了想:不能在编程语言-编译器级别搞事,那我就在再往下层级搞事。大神当年魔改Smalltalk的劲头又出来了。

大神搞了一个V8语言虚拟机,其实原理就是:浏览器把JS代码从服务器端下载下来后,就进入了大神的视野。大神把JS源代码当Java源代码看待,搞检查器-优化器-前向编译为字节码-后向编译为机器码-语言虚拟机来加载执行。也就是说,你看到的是JS源代码,其实内部执行的是二进制代码。别看大神多了这么多环节步骤,但我们一点都不感觉到慢,可想大神在搞编译器-语言虚拟机方面的工程功力。

2004年,ADSL网速加快,Web2.0风潮兴起,AJAX带来了丝滑般的数据刷新的体验。Adobe的心痒痒了。同样为三大插件技术:Flash、Applet、ActiveX,最先退场的是Applet(Java走上了Servlet-JSP道路),ActiveX不甘心走上Silverlight道路,Flash走上Flex RIA道路。谷歌也不甘心啊,就搞了一套GWT,也是RIA 富网页应用,但是谷歌没有搞插件模式,而是用Java开发网页富UI,然后提供编译器把Java源代码编译成Javascript代码。嘿嘿嘿,我们老看见把源代码编译成二进制,很少看见把源代码编译成另一种编程语言的源代码,谷歌也是真绝了。

但我个人也理解谷歌的做法。毕竟谷歌的渲染引擎一开始用的是Opera的Presto渲染引擎,后来换成了苹果公司Safari浏览器用的Webkit WebCore渲染引擎,后来苹果公司把Webkit引擎换成Webkit2引擎,谷歌又把Webkit2魔改成Blink渲染引擎。而苹果公司Safari浏览器的渲染引擎Webkit其实是来自大名鼎鼎的Unix GUI桌面团队KDE在互联网时代的作品:KHTML技术,就是希望把网页UI搞的和本地GUI一样。

但谷歌把Java源代码经过检查器-优化器-编译器翻译成JavaScript源代码,交给浏览器V8 JS引擎,V8再接力把JS搞检查器-优化器-前向编译为字节码-后向编译为机器码。

所以我也想明白了谷歌为啥在搞安卓的时候要放屁脱裤子,先把安卓代码编译成Java字节码,再把Java字节码编译成自己的dex字节码,然后把dex字节码交给自己魔改的语言虚拟机DavlikVM去执行,而且从安卓5.0版本开始把JIT编译换成AOT前置编译成二进制。你能想明白谷歌为啥要脱裤子放屁多加一层的意义了吗?嘿嘿嘿,这个问题留给你,我先不告诉你答案。

我不知道GWT是不是有Lars大神参与,但是这思路和大神的思路很像啊。当然大神不甘心在编程开源框架-编译器-语言虚拟机层级搞事。要想把事情搞彻底就要在编程语言层级动手,这空缺的一环必须补上。

大神们都是说要有光,于是光就有了。所以Dart开发语言就在2010年发布了。这自然是大神Lars的作品了。这不再是Java强类型语言翻译成JavaScript弱类型语言,而是魔改JavaScript成强类型语言。终于,JavaScript在开发阶段就需要有编译器,不过自然是编译成中间字节码啊,再交给Chrome浏览器中的V8语言虚拟机去执行。

所以大家才会看到V8从套壳Chrome中能够独立出来,成为NodeJS执行环境,可以部署到服务器端,用NodeJS编程语言(类JavaScript)来编写业务逻辑代码。我记得我在windows时代就是用Delphi既开发客户层UI又开发中间层业务逻辑,一门语言打天下。现在程序员需要JavaScript+Java两门编程语言才能举事。

想了想谷歌作为Web时代的大佬也是真能折腾,几乎把Web各层都折腾了个遍:

  • GWT UI组件-编译器-字节码、Flutter UI组件、安卓UI组件

  • AngularJS MVVM编程框架

  • WebGPU渲染技术标准

  • Dart编程语言-编译器-字节码、Kotlin编程语言-编译器-字节码

  • Chrome浏览器-V8执行引擎-JS语言虚拟机、DavlikVM语言虚拟机

  • HTTP/2传输技术、gRPC-Protobuf调用技术

顺便说一声,Flutter UI组件就是采用大神发明的Dart编程语言开发的。

(4)万物互联

大家都知道,网景当年是浏览器的老大啊,被微软IE免费捆绑windows给干死了。2003年,网景公司解散,随即,Mozilla基金会成立。而Firefox就是Mozilla基金会出品的开源浏览器。也就是说:Mozilla就相当于网景,Firefox就相当于网景浏览器。

Firefox浏览器由几大部分构成:

  • 渲染引擎:Gecko

  • JS前向编译器:Rhino,可以把JS源代码编译成Java字节码

  • 代码优化器:IonMonkey

  • 后向编译器:OdinMonkey,把asmJS字节码编译成二进制

  • 语言虚拟机:JaegerMonkey

你看这思路,这不就是大神搞V8的思路么?

现在这项技术统称为WebAssembly,像V8语言虚拟机技术一样被从浏览器中剥离出来,现在被另外用于边缘云的容器技术,比服务器端运行的Docker容器技术更快更小。你看,一项技术本来是用来解决JS安全和JS性能的,现在却被解决容器安全和容器性能去了。作者如果知道现在,不知道是该哭还是该笑。

Docker联合创始人Solomon Hykes在一条Twitter里表示,如果 Wasm + WASI 在 2008年就存在了,就没有必要创建 Docker了。

其实Docker容器是个包装,思路很巧妙,借助的主要是谷歌在2007年提交给Linux内核的一个修改:Cgroups。嘿嘿嘿,你看做芯片的Intel在芯片级支持虚拟机技术,你看做操作系统的Linux在操作系统内核级支持多用户资源配额,你看做系统虚拟机的VMWare在系统虚拟机级做多用户资源配额,而Docker既吸收了多用户资源配额的思想又吸收了JAR统一打包的思想。大家都在自己擅长的领域各显身手。

你说谷歌领导的这套WASM+K8S+Servless+服务网格发展的风风火火,那大神去哪里了?。

大神现在成立了一个创业公司作为联合创始人和首席科学家,搞ToitWare,物联网平台:

  • Toit编程语言-字节码虚拟指令集

  • 检查器-优化器-编译器

  • 语言虚拟机

仿佛我们又回到了大佬折腾J2ME-CLDC-KVM的好时光。

f4c4b8e2266ee521225f3b2b4839299f.jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/416987.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WebServer项目(一)->计网知识补充

WebServer项目->计网知识补充1.网络结构模式C/S结构B/S结构2.MAC 地址3.IP 地址1)IP 地址编址方式2)A类IP地址3)B类IP地址4)C类IP地址5)D类IP地址(了解)6)特殊的网址7)子网掩码4.端口5.网络模型1)OSI 七层参考模型(Open System Interconnection)2)TCP…

测试开发岗 - 一面复盘

1. 什么是软件测试, 谈谈你对软件测试的了解 软件测试就是验证产品特性是否符合用户需求, 软件测试贯穿于软件的整个生命周期. >>> 那软件测试具体是什么呢 ? 就拿生活中的例子来说, 比如说我们去商场买衣服, 会有以下几个步骤 : 第一步: 我们会走进门店…

SSM版本个人博客系统实现

SSM版本的个人博客系统 文章目录SSM版本的个人博客系统统一的数据返回处理关于前端的一些问题实现注册功能实现登录的功能存储session获取用户的信息获取左侧的个人信息获取右侧的博客列表时间格式化删除操作注销功能(退出登录)查看文章的详情页排查问题…

机器人项目与产品开发

ROS(Robot Operating System) ROS(Robot Operating System)是一个开源的机器人操作系统,旨在为机器人软件开发提供一个通用的、模块化的、分布式的软件平台。ROS由加州大学伯克利分校机器人实验室开发,目前…

一图看懂 xlwings 模块:基于 BSD 协议在 Excel 中方便调用 Python 库(反之亦然), 资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创,转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 xlwings 模块:基于 BSD 协议在 Excel 中方便调用 Python 库(反之亦然), 资料整理笔记(大全)摘要模块图类关系图模…

向量和矩阵的backward

向量&#xff1a; 有yw*x&#xff0c;取w、x分别如下且y得&#xff1a; x1 tc.tensor([[5],[6]], dtypetc.float32, requires_gradTrue) w tc.tensor([[10,20],[30,40]], dtypetc.float32, requires_gradTrue) y1 tc.mm(w, x1) y1: tensor([[170.],[390.]], grad_fn<M…

网络安全必学 SQL 注入

1.1 .Sql 注入攻击原理 SQL 注入漏洞可以说是在企业运营中会遇到的最具破坏性的漏洞之一&#xff0c;它也是目前被利用得最多的漏洞。要学会如何防御 SQL 注入&#xff0c;首先我们要学习它的原理。 针对 SQL 注入的攻击行为可描述为通过在用户可控参数中注入 SQL 语法&#…

LightGBM——提升机器算法详细介绍(附代码)

LightGBM——提升机器算法 前言 LightGBM是个快速的&#xff0c;分布式的&#xff0c;高性能的基于决策树算法的梯度提升框架。可用于排序&#xff0c;分类&#xff0c;回归以及很多其他的机器学习任务中。 在竞赛题中&#xff0c;我们知道XGBoost算法非常热门&#xff0c;它…

MySQL:安装 MySQL、Navicat、使用 Navicat 连接 MySQL

文章目录Day 01&#xff1a;一、概念1. 数据库 DB2. 数据库管理系统 DBMS3. MySQL二、安装 MySQL三、安装 Navicat Premium 16四、使用 Navicat 连接 MySQL注意&#xff1a;Day 01&#xff1a; 一、概念 1. 数据库 DB 数据库&#xff1a;DB (Database) 数据仓库&#xff0c;…

NumPy 秘籍中文第二版:四、将 NumPy 与世界的其他地方连接

原文&#xff1a;NumPy Cookbook - Second Edition 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 在本章中&#xff0c;我们将介绍以下秘籍&#xff1a; 使用缓冲区协议使用数组接口与 MATLAB 和 Octave 交换数据安装 RPy2与 R 交互安装 JPype将 NumPy 数组发送到 J…

脑电信号分析

导读 EEG信号的分析过程是为了获得能够突出信号本身特定特性的值&#xff0c;从而对其进行表征。同时&#xff0c;也需要将所获得的值通过准确的绘图技术来进行正确地显示&#xff0c;以使这些值对用户有用且清晰易读。目前&#xff0c;已有许多不同的脑电信号分析和显示技术&…

MVCC

MVCC基本概念 当前读 当前读 : 读取的是记录的最新版本,读取时还要保证其他并发事务不能修改当前记录,会对读取的记录进行加锁. 对于我们日常的操作. 如 : select....lock in share mode(共享锁) , select * for update , update ,insert,delete(排他锁) 都是一种当前读. 快…

「Cpolar」使用Typecho搭建个人博客网站【内网穿透实现公网访问】

&#x1f482;作者简介&#xff1a; THUNDER王&#xff0c;一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学本科在读&#xff0c;同时任汉硕云&#xff08;广东&#xff09;科技有限公司ABAP开发顾问。在学习工作中&#xff0c;我通常使用偏后端的开发语言A…

Spring学习小结

文章目录1 BeanFactory与ApplicationContext的关系2 Spring基础环境下&#xff0c;常用的三个ApplicationContext3 Spring开发中Bean的配置4 Bean的初始化和销毁方法配置5 Bean的实例化配置6 Bean的依赖注入之自动装配7 Spring 的 xml 标签&#xff08;默认、自定义&#xff09…

硬件语言Verilog HDL牛客刷题 day09 哲K部分

1.VL59 根据RTL图编写Verilog程序 1.题目&#xff1a; 根据以下RTL图&#xff0c;使用 Verilog HDL语言编写代码&#xff0c;实现相同的功能&#xff0c;并编写testbench验证功能 2.解题思路 2.1 了解D触发器的知识 &#xff08;在时钟是上升沿的时候&#xff0c; 输入是什么…

UE “体积”的简单介绍

目录 一、阻挡体积 二、摄像机阻挡体积 三、销毁Z体积 四、后期处理体积 一、阻挡体积 你可以在静态网格体上使用阻挡体积替代碰撞表面&#xff0c;比如建筑物墙壁。这可以增强场景的可预测性&#xff0c;因为物理对象不会与地面和墙壁上的凸起细节相互作用。它还能降低物理模…

visio的使用技巧

一、调节箭头方向 1.打开你要修改的Microsoft Visio文件 2.选中你要修改的箭头&#xff0c;在上方的开始工具栏中找到“线条”选项&#xff0c;鼠标左键单击打开&#xff1b; 3.在下面找到“箭头”这个选项&#xff0c;鼠标移到上面去&#xff0c;就会展开&#xff1b;带阴影的…

Linux网络编程 第七天

目录 网络编程阶段项目 项目目标 Web服务器开发准备 Html语言基础 Html简介 Html标签介绍 题目标签 文本标签 列表标签 图片标签 超链接标签 http请求消息 请求类型 http响应消息 http常见状态码 http常见文件类型分…

“万物智联·共数未来”2023年移远通信物联网生态大会圆满落幕

4月12日&#xff0c;以“万物智联共数未来”为主题的2023年移远通信物联网生态大会在深圳前海华侨城JW万豪酒店隆重举办。 大会邀请到来自运营商、主流芯片商、行业客户、产业协会、标准联盟、媒体等产业链合作伙伴的40多位行业大咖&#xff0c;共话物联网产业的现在和未来。参…

node开通阿里云短信验证服务,代码演示 超级详细

阿里云官网步骤&#xff1a;Node.js SDK (aliyun.com) 首先先搭建一个node项目&#xff1a;app.js const express require(express); // 引入 Express 框架const app express(); app.use(express.json()); // 解析请求中的 JSON 数据const PORT process.env.PORT || 3000; …