Parallet - My Dynamic Language - 一款异步编程语言
简介:
Parallet是笔者自创的一种新的编程语言. 当初的
定位是Dot
Net下的异步脚本, 用来弥补C#对异步编程的不足. (笔者想实现
一些异步操作超多超复杂的
服务器
应用, 但是用C#做起来超难. )
这个项目已经开启了接近一个月. 目前的进度,
可以参考 http://www.parallet.net 上的
描述 , 也可以在本
博客里, 找到第一篇简介, 和最近的一些
心得.
就在昨天, 笔者完成了初步的动态编译到IL的实现. 让大部分不需要异步
执行的函数, 编译成CLI的
方法. 这些函数由
解释执行转换为编译执行后, 性能提高了100多倍.
基本上, 现在很多架构上的
设计, 都已经完成. 大方向比较明确, 剩下的, 都是无穷无尽的
细节问题.
异步:
在异步编程
方面, 由于新语言的异步函数的特点, 让它除了支持传统的命令式编程, 还支持新的异步方式编程, 让
开发者可以用传统的命令式语法去编写异步操作,
一次过摆脱为了异步而异步的各种麻烦的编程手法.
而且, 这个新的语法体系里, 函数默认是异步的,
系统会自动
分析哪些函数需要异步处理, 而哪些不需要. 所以, 这个语言并没有为异步操作而创建
任何一个
关键字. 非常简单
容易接受.
实际上一时之间要描述出这个新的异步语言, 是非常非常难. 这表现在多个方面:
- 笔者的语文水平极差, 表达能力极差, 心里所想的东西并不能很好地表达出来.
- 和传统编程一摸一样的语法, 这是优点, 但也导致读者会认为这根本就和异步编程没什么
关系..
- 如果读者没有做过异步编程的工作, 那么就无法知道异步编程有多麻烦,
不知道异步编程的麻烦之处, 也不会明白异步函数调用异步函数的好处.
如果说代码就是文档的话, 那么或许用代码来解释这个异步函数的概念, 可能是最好的. 以下就用例子来慢慢说明异步函数的概念与意义.
示例:
以下示例, 力求简单, 都是随便手写, 用
JS语法, 目的是让大家更容易
理解.
传统,阻塞型,
同步调用
上面代码, 通过给xhr.open传递一个false, 指定为sync模式. 当xhr.send("")执行时, 除非
服务器返回或者出错, 否则当前代码就会被阻塞, 当前的线程也会被阻塞,
浏览器也不会响应.
在
UI线程里, 发生阻塞,
界面假死, 对
用户是非常不友好的事. 为了
解决这个
问题, xhr
提供了异步模式
传统,回发型,异步调用:
通过给xhr.open传递一个true, 指定为async模式. xhr.send("")后, 就立刻返回, 不会发生阻塞, 但程序也不会立刻得到结果. xhr得到服务器的响应后, 执行onreadystatechange指定的方法, 来通知它本身的调用者去处理异步的结果.
咋一看, 两个LoadConfig用了不同的方式, 实现了相同的事了不 ?
没有 !
假如有人写了这么一段代码 :
阻塞方式的LoadConfig能阻塞线程, 等待服务器回复, 并且把结果返回给它的调用者.
但是, 如果把LoadConfig里的xhr改成异步调用, 那么config=LoadConfig()就不能正确地给config传递服务器结果了.
所以, 要解决这个问题, 方案是
建立新的函数 LoadConfigAsync
而在外面的代码, 也需要响应改变成
$$1
30^$^