明天的主人公名为——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还交融了响应式编程、运算符重载、反射、注入等等特色。
感谢您的浏览!