试用GO开发pyhton编译器:字节码基础

掌握一门编程语言最好的办法或许是将它的编译器设计出来。毫无疑问那些开发Python编译器的人应该是世界上对Python了解最深刻的人群之一。我用python开发过不少程序,但是每次反思或复盘的时候总是感觉对Python的认知还不到位,由此也看了很多讲Python的书,但看的时候感觉好像懂了,但过了一段时间后又忘了,也就是说单纯看书很难将某一项技术完全内化。当然技能的掌握必然要从实践中来,但是我发现在使用Python开发程序时,我总是使用它的一部分功能就够了,或者说居于我的思维模式限制,我在使用python开发时总是落入一个套路,这使得我只能掌握python技术的冰山一角,就如同井底之蛙一样只了解一小块内容,为了能够打破认知局限,让我自己能更全面的对python的设计原理有更深入的了解,我打算尝试做一个能运行的python编译器。

我在标题中使用了”试用”,也就是这是一个尝试性质,编译器的技术难度足够大,我不清楚能做到哪一步,所以采取了走一步看一步的方式,能做多少就多少,也有可能尝试后发现太难而做不下去,因此是”试用“的由来。

我计划用Go语言来实现python编译器,这样完成这个项目后我们能收获一箭双雕的好处,一是掌握如何使用GO来开发一个复杂程序,一是对python的设计原理能有深入的了解和掌握。首先我们来尝试做一个简单的,基于栈的虚拟机,后面我们会把python编译成字节码,然后在我们设计的虚拟机上运行,这个过程跟java类似。

对虚拟机而言,首先需要字节码,它们是针对虚拟机的一系列操作指令,例如push 1, push 2, add,这三条字节码会把数值1,2压入虚拟机,然后弹出栈顶的两个数值进行相加,把相加结果放到堆栈的顶部,如下图所示:
请添加图片描述
首先我们要实现的是字节码,所谓字节码就是一个操作指令,后面跟着0个或1个操作数,例如push 1, add等,每个操作指令用一个数值表示,一旦虚拟机读取到对应的数值时就执行相应操作,如果我们使用0x01表示push,那么当虚拟机读取到数字0x01时,它就

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值