已经决定半年后继续这个项目.

 

JavaScript同步调用异步的处理方式也确定了下来.

 

主要原理就是当同步函数调用异步函数时,

 

异步函数将返回一个Parallet对象.

 

同步函数可以用该对象查询状态,响应结束时间,得到返回值或异常信息.

 

而用JavaScript实现Parallet, 为了针对JavaScript的特点, 语法规则也会大幅度改变. 尽量兼容现有的JS语法, 方便开发者入门.

 

 

posted @ 2012-01-05 15:34 Parallet 阅读(35) 评论(0) 编辑

number类型是否允许为null, 的确是很头疼的问题.

Parallet的目标是脚本语言. (但它也可预先编译代码)

很多脚本语言的所有类型都允许为null的.

但是为了让number为null, 要付出的代价实在是太大了.

就按我的经验, number需要为null的情况, 非常非常少.

如果某些场合需要允许传递null, 大不了可以定义参数为var便可.

(虽然那样的话允许传递任何类型)

-

现在DotNet的版本依然有很多工作.

考虑到最近实在太忙, 这样进展太慢也不是办法.

-

Parallet要发展起来, 必须需要实在的项目用来支持它.

我是打算实现了DotNet的版本后, 先做一个P2P的项目用来验证, 然后再推出Web框架.

但是这个过程太漫长了.

现在HTML5太流行, JavaScript的不足和进展缓慢让人很遗憾..

就在自己的需求角度来看,  值得先在JavaScript上实现Parallet.

在JavaScript上实现Parallet, 将会对Parallet有以下好处:

1 - 可在主流浏览器上运行, 用于补充JS的不足, 可建立更强的HTML/AJAX应用. 

2 - 可直接在V8引擎上,配合C/C++, 实现任何非HTML应用.

3 - Parallet它自身不需要考虑JIT. 只需要解释执行或编译成JS即可.
    这个特征可以完全兼容不JIT的浏览器/设备, 如果浏览器/设备支持JIT后, Parallet直接得到好处.

4 - 可以用作移动设备的开发. 例如IPHONE.

只要我自己也用Parallet, 让它为我带来好处, 那么即使它进度再慢, 也不会被放弃掉.

-

现在要实现JS版本的Parallet, 唯一的设计难点就是同步函数的问题.

Parallet默认是异步函数. 但是在JS上实现的话, 需要非常紧密地与JS/DOM进行交互.

JS/DOM的函数是同步的. 这样就有兼容性问题. 简单来说, 就是

btn.onclick=MyParalletFunction;

由于MyParalletFunction是异步的,

那么MyParalletFunction里的逻辑, 异步执行时, onclick的event就会失效.

并且也不能给onclick指定返回值.

要解决这个问题, 可能需要强制引入关键字 synchronous:

synchronous function MyParalletFunction(event)
{

  return false;
}

定义了synchronous的函数, 是'显式'的, 是不允许调用任何异步函数的.

它只能调用显式或隐式的synchronous函数.

如果它调用的隐式synchronous函数, 因为修改代码自动变成异步函数,

那么新的代码将产生编译错误, 用来保证程序员明确知道如何处理.

posted @ 2011-07-11 09:37 Parallet 阅读(102) 评论(0) 编辑

目前还有很多细节没做完. 说道一些细节, 如果没有写下来, 没有写成文档, 甚至是'规范', 有时我自己也会忘记某些细节的实现规则如何..

所以, 看来还是有必要继续在当前版本下点功夫, 然后一点一滴, 把细节搞定先. 这样, 有了一个规范, 才能让这个语言不变得模棱两可.

--

另外, 在重构DotNet版本之前, 我还想先去JVM那边做一个版本出来验证一下先.. 毕竟现在基于JVM的语言还是挺火的.

如果Parallet推出JVM版本, 未尝不是一件X事.

posted @ 2011-06-27 08:52 Parallet 阅读(65) 评论(0) 编辑

代码来源于 http://www.cnblogs.com/miloyip/archive/2010/07/07/languages_brawl_GI.html

在我的电脑上, C#_ref那个测得52秒, 而用Parallet解释执行, 则需要1350秒, 是C#的26倍时间.

由于编译执行没完全做好, 所以就还没做编译执行的测试.

C#的26倍时间, 和LUA差不多了, 比我想象中好很多, 毕竟LUA是C写的而且传说还用了CPU寄存器做卖点..

比起ChromeJS,也只相差5倍而已, 比之前差70倍的数学测试要好不少.

下一次等编译执行搞定后, 再来测试一下.

(备注:如果采用多线程并发模式, 则只需要575秒. CPU是双核+超线程, 超线程平均可提供额外30%的性能)

posted @ 2011-06-23 21:40 Parallet 阅读(152) 评论(0) 编辑
摘要: Parallet是笔者自创的一种新的编程语言. 当初的定位是DotNet下的异步脚本, 用来弥补C#对异步编程的不足. (笔者想实现一些异步操作超多超复杂的服务器应用, 但是用C#做起来超难. ) 这个项目已经开启了接近一个月. 目前的进度, 可以参考 http://www.parallet.net 上的描述 , 也可以在本博客里, 找到第一篇简介, 和最近的一些心得. 就在昨天, 笔者完成了初步的动态编译到IL的实现. 让大部分不需要异步执行的函数, 编译成CLI的方法. 这些函数由解释执行转换为编译执行后, 性能提高了100多倍. 基本上, 现在很多架构上的设计, 都已经完成. 大方向比较明确, 剩下的, 都是无穷无尽的细节问题.阅读全文
posted @ 2011-06-22 15:47 Parallet 阅读(1382) 评论(15) 编辑
摘要: 在同一个ModuleBuilder里, DefineType并且CreateType之后, 是可以继续DefineType的.. 这样可以防止编译多次代码导致的AssemblyBuilder过多的问题. 现在只需要1个AssemblyBuilder就够了. 示例代码 : using System;.......阅读全文
posted @ 2011-06-22 13:24 Parallet 阅读(207) 评论(1) 编辑

很简单的fibonacci数列性能测试.

C++用int,C#用int, Parallet用double,

int Fib(int a)
{
    if(a<2)
           return a;
    return Fib(a-1)+Fib(a-2);
}

Fib(40) 所需时间分别为
C++ : 1500

C# : 1400

Parallet : 1750

C#竟然比C++快?

这个结果让我对在C++上实现Parallet的欲望减少了不少..

Parallet的第一版的任务是先把DotNet上的实现做好. 

然后再考虑搞到Mono去, 然后才是JVM上, 然后才到C++..

posted @ 2011-06-22 01:20 Parallet 阅读(179) 评论(2) 编辑
摘要: 第一个版本的Parallet是在DotNet里实现的. (自带GC省了很多工作量)当前进度是, 在同一个编译系统中同时实现了解释执行,编译执行,调用IL,被IL调用,IL类型,新类型系统这6个东西混在一起是非常复杂的.互相调用时的同步异步模式转换,参数传递与类型转换, 非常麻烦.经过今天部分完成的编译执行的验证, 性能比解释执行最多提升了一百多倍. (已经超过ChromeJS, 优势来自于支持强类型)也就是说, 虽然编译执行的环节的增加让实现变得很繁琐, 但物有所值.(但是解释执行仍然有它的意义,它不Emit出Assembly,在不断执行新脚本的环境下不会造成内存越积越多的问题)-这个项目计划阅读全文
posted @ 2011-06-21 23:18 Parallet 阅读(69) 评论(0) 编辑
摘要: Parallet是笔者自己开发的一种新语言,主要是基于JavaScript和C#的语法. 里面包含着针对异步与并行编程的独特思想. 无论你对异步并行编程,还是对如何创作新的编程语言感兴趣, 不放试试耐心地阅读这篇随笔.阅读全文
posted @ 2011-06-16 01:12 Parallet 阅读(1309) 评论(15) 编辑