明天的主人公名为——Melang。

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

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

What is Melang

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

在Melang中,每一个脚本工作都是一个协程。而多个脚本工作即能够同时在同一个线程中解决,也能够在多个线程间解决。

这与Go的协程十分类似,然而Melang中的协程并不需要被动让出cpu执行权限或者调用特定函数来间接让出CPU执行权限。而是按解释器执行肯定操作后主动切换工作执行。这也就罢黜了开发者须要思考切换机会的问题。

在Melang中,所有的脚本代码逻辑都是同步的。然而理论都是由解释器异步进行的。这就罢黜了很多对异步编程不相熟的开发者的上手难度。

同时,为了让开发者能够更快的动手,语言的语法与C语言十分类似,因而对C相熟的开发者将会很容易上手开发。

上面那就让咱们一起Hello, world!

//hello.msys = 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还交融了响应式编程、运算符重载、反射、注入等等特色。

感谢您的浏览!