新协程并发脚本语言的问世

2022-10-01 15:14:48 +08:00
 monkeyNik

今天的主人公名为——Melang

这是一款“新”的脚本语言,然而其已经默默问世了 6 年之久。

下面笔者就带你走进 Melang world 。

What is Melang

Melang 是一款协程并发脚本语言。它是一款解释型,而非编译型语言。

在 Melang 中,每一个脚本任务都是一个协程。而多个脚本任务即可以同时在同一个线程中处理,也可以在多个线程间处理。

这与 Go 的协程非常相似,但是 Melang 中的协程并不需要主动让出 cpu 执行权限或者调用特定函数来间接让出 CPU 执行权限。而是按解释器执行一定操作后自动切换任务执行。这也就免除了开发者需要考虑切换时机的问题。

在 Melang 中,所有的脚本代码逻辑都是同步的。但是实际都是由解释器异步进行的。这就免除了很多对异步编程不熟悉的开发者的上手难度。

同时,为了让开发者可以更快的入手,语言的语法与 C 语言非常相似,因此对 C 熟悉的开发者将会很容易上手开发。

下面那就让我们一起 Hello, world !

//hello.m
sys = import('sys');

sys.print("Hello, World!")

执行:

$ melang hello.m

你将看到:

Hello, World!

协程并发与协程池

在 Melang 中,每一个脚本任务都是相互隔离的。然而有时我们也需要让不同任务之间可以相互通信来彼此协作,因此 Melang 的库函数中提供了消息队列模块,使得这一想法成为可能。

然而基于这一机制,我们很容易衍生出一种新的池结构模型——协程池。

即,主协程可用于分配资源,而一组工作协程可以通过消息机制接收资源并各自进行处理。这与传统的线程池模型非常相似。

下面我们就来看一个使用协程池实现的最简单的 HTTP 服务器:

/* filename: server.m */
net = import('net');
mq = import('mq');

listenfd = net.tcp_listen('127.0.0.1', '80');
for (i = 0; i < 4; ++i) {
    eval('processor.mln', i);
}
while (1) {
    fd = net.tcp_accept(listenfd);
    mq.send('test', fd);
}
/* filename: processor.m */
sys = import('sys');
net = import('net');
mq = import('mq');

sys.print(EVAL_DATA);
while (1) {
    fd = mq.recv('test');
    ret = net.tcp_recv(fd);
    if (ret) {
        net.tcp_send(fd, "HTTP/1.1 200 OK\r\nContent-Length: 1\r\n\r\na\r\n\r\n");
    }fi
    net.tcp_close(fd);
}

这两个代码文件分别为:主协程( server.m )与工作协程( processor.m )。

主协程( server.m )创建了 4 个工作协程( processor.m ),然后就进入死循环等待客户端 TCP 的建立。

工作协程( processor.m )则是在死循环中,从主协程处收到已建立的 TCP 套接字,然后从 TCP 上收取请求,然后发送 HTTP 响应,最后关闭套接字。

下面,我们可以在命令行中使用如下命令启动脚本:

$ melang server.m -t=2

这里,-t=2 的含义是,让解释器启动两个线程来处理这 5 个协程( 1server+4processor )。

启动后,就可以使用 curl 或者 ab 之类的工具进行访问了。

小结

综上,Melang 是一个:

除此之外,Melang 还融合了响应式编程、运算符重载、反射、注入等等特色。

感谢您的阅读!

1034 次点击
所在节点    分享创造
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/884209

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX