彻底理解闭包实现原理

2022-10-24
阅读 5 分钟
3.9k
闭包对于一个长期写 Java 的开发者来说估计鲜有耳闻,我在写 Python 和 Go 之前也是没怎么了解,光这名字感觉就有点"神秘莫测",这篇文章的主要目的就是从编译器的角度来分析闭包,彻底搞懂闭包的实现原理。
封面图

手写编程语言-如何为 GScript 编写标准库

2022-10-17
阅读 5 分钟
3.9k
版本更新最近 GScript 更新了 v0.0.11 版本,重点更新了:Docker 运行环境新增了 byte 原始类型新增了一些字符串标准库 Strings/StringBuilder数组切片语法:int[] b = a[1: len(a)];具体更新内容请看下文。前言前段时间发布了 GScript 的在线 playground,这是一个可以在线运行 GScript 脚本的网站,其本质原理是接收用...
封面图

用自己的编程语言实现了一个网站(增强版)

2022-10-08
阅读 2 分钟
4.5k
看起来确实非常的挫,其实之前一直也想做一个 GScript 的在线 playground ,于是国庆期间学了一点 皮毛 Vue 加上老弟的帮忙(他是前端开发),最终完成了下面这个网站:
封面图

手写编程语言-递归函数是如何实现的?

2022-09-27
阅读 5 分钟
5.7k
前言本篇文章主要是记录一下在 GScript 中实现递归调用时所遇到的坑,类似的问题在中文互联网上我几乎没有找到相关的内容,所以还是很有必要记录一下。在开始之前还是简单介绍下本次更新的 GScript v0.0.9 所包含的内容:支持可变参数优化 append 函数语义优化编译错误信息最后一个就是支持递归调用先看第一个可变参数:...
封面图

手写编程语言-实现运算符重载

2022-09-19
阅读 3 分钟
5.9k
前言先带来日常的 GScript 更新:新增了可变参数的特性,语法如下: {代码...} 得益于可变参数,所以新增了格式化字符串的内置函数: {代码...} 下面重点看看 GScript 所支持的运算符重载是如何实现的。使用运算符重载其实也是多态的一种表现形式,我们可以重写运算符的重载函数,从而改变他们的计算规则。 {代码...} 以...
封面图

里程碑!用自己的编程语言实现了一个网站

2022-09-14
阅读 6 分钟
5.5k
前言在上一篇《终于实现了一门属于自己的编程语言》 介绍了自己写的编程语言 GScript ,在文中提到希望最终可以使用 GScript 开发一个网站。到目前为止确实是做到了,首页地址:[链接]要称为一个网站确实有点勉强,不过也是一个动态网页,因为返回的是 HTML,所以在当前阶段只要不嫌麻烦其实也能写一个“合格”的网站,有...
封面图

终于实现了一门属于自己的编程语言

2022-09-07
阅读 6 分钟
4.7k
都说程序员的三大浪漫是:操作系统、编译原理、图形学;最后的图形学确实是特定的专业领域,我们几乎接触不到,所以对我来说换成网络更合适一些,最后再加上一个数据库。
封面图

一门语言的作用域和函数调用是如何实现的

2022-08-18
阅读 4 分钟
1.5k
前言上次利用 Antlr 重构一版 用 Antlr 重构脚本解释器 之后便着手新增其他功能,也就是现在看到的支持了作用域以及函数调用。 {代码...} 整个语法规则大部分参考了 Java,现阶段支持了:函数声明与调用。函数调用的入栈和出栈,保证了函数局部变量在函数退出时销毁。作用域支持,内部作用域可以访问外部作用域的变量。...
封面图

用面向对象的方式操作 JSON 甚至还能做四则运算 JSON 库

2022-07-04
阅读 5 分钟
1.2k
在之前实现的 JSON 解析器中当时只实现了将一个 JSON 字符串转换为一个 JSONObject,并没有将其映射为一个具体的 struct;如果想要获取值就需要先做断言将其转换为 map 或者是切片再来获,会比较麻烦。
封面图

几百行代码实现一个 JSON 解析器

2022-06-28
阅读 8 分钟
2.1k
以前我也有思考过它是如何实现的,过程中一旦和编译原理扯上关系就不由自主的劝退了;但经过这段时间的实践我发现实现一个 JSON 解析器似乎也不困难,只是运用到了编译原理前端的部分知识就完全足够了。

几百行代码实现一个脚本解释器

2022-05-30
阅读 2 分钟
1.7k
最近又在重新学习编译原理了,其实两年前也复习过,当初是为了能实现通过 MySQL 的 DDL 生成 Python 中 sqlalchemy 的 model。
封面图

手写一个词法分析器

2020-03-23
阅读 5 分钟
9.8k
最近大部分时间都在撸 Python,其中也会涉及到将数据库表转换为 Python 中 ORM 框架的 Model,但我们并没有找到一个合适的工具来做这个意义不大的”体力活“,所以每次新建表后大家都是根据自己的表结构手写一遍 Model。