如何给自己网站做外链,南阳网站网站建设,wordpress 邮件文章,城市规划建设网站今天的主人公名为——Melang。
这是一款使用C语言开发的“新”的脚本语言#xff0c;然而其已经默默问世了6年之久。
下面笔者就带你走进Melang world。
What is Melang
Melang是一款协程并发脚本语言。它是一款解释型#xff0c;而非编译型语言。
在Melang中#xff…今天的主人公名为——Melang。
这是一款使用C语言开发的“新”的脚本语言然而其已经默默问世了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(coroutine.mln, i);
}
while (1) {fd net.tcp_accept(listenfd);mq.send(test, fd);
}/* filename: coroutine.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);}finet.tcp_close(fd);
}这两个代码文件分别为主协程server.m与工作协程coroutine.m。
主协程server.m创建了4个工作协程coroutine.m然后就进入死循环等待客户端TCP的建立。
工作协程coroutine.m则是在死循环中从主协程处收到已建立的TCP套接字然后从TCP上收取请求然后发送HTTP响应最后关闭套接字。
下面我们可以在命令行中使用如下命令启动脚本
$ melang server.m -t2这里-t2的含义是让解释器启动两个线程来处理这5个协程1-server 4-coroutine。
启动后就可以使用curl或者ab之类的工具进行访问了。
小结
综上Melang是一个
脚本语言抢占式任务调度语言协程并发语言同步代码异步执行的语言
除此之外Melang还融合了响应式编程、运算符重载、反射、注入等等特色。
感谢您的阅读