关于一个程序员的终极浪漫

2026-10-08 (分类:技术、开源)

前言

很早的时候我就想着开发一个属于自己的编程语言,这好像是我身为程序员生涯中的最终梦想,浪漫与残酷并存。

起始

记不清大概什么时候有这个想法的了,但是付出行动大概是2023年的时候(我错了,查看代码文件的时候22年的时候我就开始了!),那会刚毕业,意气风发。

那会的AI编程还不像如今这么强悍,于是我就上网找找这方面的资料。大学的时候,我学过编译原理,但是太难了,只懂一点点内容,上编译原理时,老师讲着讲着没声也睡着了。

于是我使用java开始设计自己的编程语言QiuCa,全部使用Java代码开发,自己设计栈等一些简单的数据结构配合正则解析来实现功能,还记得当时的真值表达式真的把我折磨的不轻,嵌套表达把我整的脑袋都大了。QiuCa迭代到2.0,11代就剧终了。

简单看看我的QiuCa解析器项目结构吧。

QiuCa的java解析项目目录

再看看就的QiuCa代码

class Dog{
    Int qiu_fun(Int n){
        print("我是qiu函数"+n);
        return n;
    }
    Int ii_fun(Int m){
        print("你好世界"+m);
        return i1_fun(i1_fun(1,1011),i2_fun(m,m));
    }
    Int i1_fun(Int m,Int n){
        return n;
    }
    Int i2_fun(Int m,Int n){
        return n;
    }
    Int i3_fun(Int n){
        Int m=123;
        return n;
    }
    Void main_fun(Str[] args) {
        Int m=1100;
        Int n=12345;
        ii_fun(m);
        if(m||(n&&m)||m||(n&&m)&&m>n||m==n):
        print("qiu"),
        print("lks"),
        print("输出函数的返回值:"+i2_fun(i2_fun(i2_fun(m,m),i2_fun(m,m)),m)+"个"+m+"小可爱");
        print("dsds");
    }
}

这代码我自己都没法评价,因为这些都是我纯手写的,对应的解析器也是,我当时真是被迷住了,熬很深的夜去编程。

探索

我继续搜索着实际的教程,我在博客园中找到了几篇写的优良的博客内容,内容是一个一个程序员LTFrame分享自己的编程语言Menthol(中文名薄荷醇)开发教程,现在这些文档好像被作者删除了,连仓库数据也没了,不清楚就是什么情况,但是还好我下载了一份源码。

menthol编程语言

menthol编程语言源码

他说:Menthol是一个简单、易用、易学的脚本语言,语法简单,开发简便,使用C/C++可以快速为它开发扩展

说实话,在AI不盛行的年代,手搓编程语言是我永远触碰不到的梦,对这些技术大牛真是很佩服。

看一下一个Menthol的函数写法示例代码:

Import console;
use Console;
module test
{
	var @m = mmrt(Console);
	def func:$i1,$i2=333
	{	
		@m.Out($i1);
		@m.Out($i2);
	}
}
_mmain:$a,$c
{	
	var $t = mmrt(test);
	$t.func(222,1000,333);
	$t.func(555);
}

是不是很特别,LTFrame好像专攻桌面开发,我用豆包检索了一下作者,关于他的事情已经很少了,豆包介绍“简单一句话:LTFrame = 桌面壳子;Menthol = 壳子里用来写程序的脚本语言。”,这些内容我无从考证,但是我记得曾经存在这样一门编程语言,叫做Menthol。

bison学习

当时学习时候保留的文章内容

看了几篇基本的文章内容,懵懂的我觉得又行了,我找到一个将语法分析内容的课程,于是我就开始学习了起来,但是进度也太慢了,学完后,也还是只会一个计算器逻辑的实现,离实现一个编程语言还有十万八千里。

flex-bison

觉得这样写也不是个办法,好像需要按照文档,将编程语言的基本语法功能设计出来,像Menthol一样......

此处省略一年多时光。

接续

于是我在24年的时候设计了Liekkas编程语言的关键字,语法等内容,真的要大干一场了,真的是大干一场吗?

我在B站上找到了一个开发编程语言的视频教程,于是我就一边看视频,一边写代码,视频是反复的看,但是写的时候总会出现纰漏,就这样,Liekkas开发的极其缓慢,使用C++写出了基本的框架,但是功能实现起来很是困难,视频看完了,还是又很多东西不懂,主要是无法举一反三。于是Liekkas在24年8月底宣布难产,无限期停止开发。

Liekkas难产,但是对于我而言还是很有帮助的。从最初的QiuCa采用java来实现解析,到后面读取了Menthol的开发指南,勉强设计出了Liekkas的语法内容,然后到学习B站上的采用C++实现编程语言开发的教程。从最初的22年,都已经好几年了,有些感慨,自己对开发自己的编程语言为什么如此的执着,我自己都不是很明白,也许就是为了满足一下自己而已。

Liekkas示例代码

这是Liekkas的函数和语句示例代码:

[主函数定义,无返回值,输入arg和args两个可空的形参]
fun main arg,args{

}
[定义一个返回值位置的无参函数]
fun 函数名{

}
[强制定义形参类型,定义函数返回值类型]
fun funName arg:int [int]{
	return arg+1
}
[输入两个形参,函数存在一个返回值]
fun funName arg1,arg2{
	return arg1+arg2
}
[输入两个形参,函数存在一个返回值]
fun funName arg1,arg2{
	return arg1+arg2
}
[输入两个参数,返回两个数据]
fun funName arg1,arg2{
	return arg1+arg2,arg1-arg2
}
[语句的定义和使用]
fun funName arg:int [int]{
	var sentence=arg{
		arg+=1
	}
}
[语句调用执行,当不主动传值时,自动寻找当前函数的形参或在语句之前定义的合法参数]
fun sentenceTest{
    var sentence=arg{
    	arg+=1 [自动返回最后一行数据,可以不使用return关键字]
    	// return arg+1
    }
    int sen=sentence()
    int sen1=sentence(10)
    print sen [输出语句执行的数据]
    print sen1
}

与接下来实现nura在语法上区别还是很大的。

新生

今年9月份,在编程的过程中,我开始突发奇想,着手一点SomoeNetProject的方案起草,和代码的测试,这是一个分布式智能体项目,为将来的项目实现智能化增强,且可以通过SomoeNet实现数据互联,让智能体在不同的项目中畅游,为用户提供更加智能和更加便利的功能。前期的项目验证,使用TS和nestjs框架实现的,看上去还不错,但是项目还需要细心的打磨。

期间又出了一个JEV,我之前在使用LangGraph框架时,就在思考LangGraph的意图识别框架是什么,应该是json吧,json是格式化的解析起来对于智能体很友好,也方便程序判断执行对应的功能代码。后面我又了解了MCP协议,这个协议的主体也是json格式,消息主体是 JSON,底层基于 JSON-RPC 2.0。那JEV呢,也是JSON格式。所以我完全可以把JEV融入SomoeNet项目中,实现智能网关的角色。后面对项目的设计内容越来越多,想法也渐渐偏远,我猛地发现,是不是需要开发一个更智能的编程语言,来解决日后SomoeNet中不同节点之间的破坏传染问题,或实现分布式智能体增强?也顺便把之前没实现的编程语言梦实现一下,说干就干,9月份的时候就开始整理资料,在Liekkas的基础上设计出语言的新特性,以此来使用未来SomoeNet项目的需要。

于是我基于Liekkas的语法上开发出了Nura编程语言。

nura的lambda示例代码:

export let add = {x, y -> x + y};
print(add(3, 4));

export let double = {n -> n * 2};
print(double(5));

export let greet = {name -> print("Hello, " + name)};
greet("Nura");

export let square = {x -> x * x};
print(square(6));

nura的函数示例代码:

export fun double(x) {
    return x * 2
}

export fun add(a, b) {
    return a + b
}

print(double.run(5))
print(add.run(3, 4))

export fun apply(f, v) {
    return f.run(v)
}

print(apply(double, 21))

export let fn = double
print(fn.call(10))

export fun make_adder(n) {
    return { x -> x + n }
}

export let add5 = make_adder(5)
print(add5.run(10))

nura主打AI 原生与分布式 AI 场景。

官网:https://nura.somoe.net

以nura为基础,又打造了初级版本的nura-web和nura-sqlite语言库提供使用,目前又开发了nura-ds,这是一个提供不同数据结构的库。目前官网的文档现在很落后了,需要等我更新。

总结

在开发nura的期间,难免与其他的编程语言进行一下对比,目前nura的性能真是拉完了,连python的速度都比不上,优化之路还很远。nura目前不考虑实现自举,目前我还没有那个能力,还需要学习很多东西。

nura的语法与Kotlin很像,但又结合了其他语言的风格,例如Rust,Python等。nura的理念与jac编程语言有部分重合,jac是一个新的编程语言,2022年左右开始成型的。这是官网The Jac Programming Language,感兴趣的可以看看。

Jac-Lang官网截图

jac也是支持原生LLM特性,它的口号是One language, one compiler, the whole stack. No glue.,关于nura与jac的分享可以看我另一篇分析文档Jac-Lang与Nura编程语言的对比。

目前nura正在稳步开发中,部分新特性细节还要不断的测试,打磨,平台也需要适配,还要做好开源的事情,不同软件高亮插件的开发,nura语言也要优化提速,需要做的东西很多,且需要我不断的探索。

← 返回博客列表