文档章节

编程语言虚拟机(一)

chunquedong
 chunquedong
发布于 2015/10/09 19:33
字数 273
阅读 131
收藏 1

最近写了一个玩具型的Fantom语言VM,也就是解释器。类似于JVM运行Java bytecode。

实现一个VM需要完成以下任务:

  • 字节码读取
  • 函数调用栈
  • 操作数栈和指令操作实现
  • 参数传递和返回值
  • 默认参数和参数缩减
  • 本地方法调用
  • 垃圾收集
  • 基本类型装箱和拆箱
  • 运行时类型信息和对象字段访问
  • 方法查找缓存和对象缓存
  • 异常处理

作为了一个玩具实现,很简单,没有复杂的地方。如果要再进一步成为可实际使用的VM,有三个难的地方:

  • 对垃圾收集的优化。目前我只做了一个简单的标记清除垃圾回收。
  • JIT编译,目前我没有任何的思路来做,也许可以通过LLVM来实现。
  • 实现所有的系统标准库。这个工作量比较大,而且写起来也有些乏味。

© 著作权归作者所有

chunquedong

chunquedong

粉丝 47
博文 135
码字总数 39720
作品 5
海淀
高级程序员
私信 提问
加载中

评论(2)

chunquedong
chunquedong 博主

引用来自“jackyxinli”的评论

开源吗?
是开源https://bitbucket.org/chunquedong/fanrun,但是估计没什么参考价值。
jackyxinli
jackyxinli
开源吗?
凭啥Java的运行环境称虚拟机,Python的只能称解释器

看到Stackoverflow上有个问题在讨论Java和Python的对比,其中就有人问答为啥Java的运行环境被称之为JVM,而Python的只能叫做Interpreter。 这个问题估计想过的人不多,先找维基百科看一下虚拟...

AlexMahoneFBI
2015/03/07
398
0
关于JAVA这门语言和虚拟机

C -> 汇编 -> 机器码,芯片在运行时,直接运行机器码。也就是说,程序员写的代码,编译链接完成后,最终是以机器码形式存在的。 而JAVA,最后生成的是字节码,而这些字节码则是放在它的虚拟机...

380121850Lee
2017/05/14
705
14
PHP 运行时环境 - polarphp

为什么要做 polarphp 项目 随着和的强势崛起,的市场份额逐渐被蚕食,而官方仍然坚守在编程领域,有些东西越是想守住就越守不住。借鉴和的相关特性对重新封装,去掉一些古老弃用的特性和强属...

polarphp
01/28
7.2K
11
广州Linux C++服务端新手求职

自我评价 在上一家公司待了6个月后由于生病离职,但休息时有自己钻研技术,学习了linux 上的TCP socket编程,深入学习了编译原理并独自用C++开发了一个动态语言的虚拟机。有能力阅读英文技术...

优游幻世
2014/10/10
606
6
开发利器重磅推荐:JVM的编程语言杀手

【IT168 技术】随着各种各样的编程语言铺地盖地向我们涌来,软件世界似乎变得有点疯狂了。JVM的帝国在不断地壮大,它已经不满足于只作为Java语言的运行平台。它勇敢地将自己的触角伸向了JRu...

it168网站
2012/03/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Android面试常客之Handler全解

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/fnhfire_7030/article/details/79518819 前言:又到了一年...

shzwork
12分钟前
1
0
position sticky 定位

本文转载于:专业的前端网站➫position sticky 定位 1、兼容性 https://caniuse.com/#search=sticky chrome、ios和firefox兼容性良好。 2、使用场景 sticky:粘性。粘性布局。 在屏幕范围内时...

前端老手
19分钟前
1
0
CentOS 7 yum 安装 PHP7.3 教程

参考:https://www.mf8.biz/centos-rhel-install-php7-3/ 1、首先安装 EPEL 源: yum install epel-release 安装 REMI 源: yum install http://rpms.remirepo.net/enterprise/remi-release......

dragon_tech
34分钟前
1
0
Linux物理网卡聚合及桥接

Linux内部实现的bridge可以把一台机器上的多张网卡桥接起来,从而把自己作为一台交换机。同时,LInux bridge还支持虚拟端口,即桥接的不一定都是物理网卡接口,还可以是虚拟接口。目前主要表...

xiangyunyan
34分钟前
1
0
一起来学Java8(一)——函数式编程

在这篇文章中,我们将了解到在Java8下如何进行函数式编程。 函数式编程 所谓的函数式编程就是把函数名字当做值进行传递,然后接收方拿到这个函数名进行调用。 首先来看下JavaScript如何进行函...

猿敲月下码
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部