| Tony Huang's profileSouline PLUS planBlogListsNetwork | Help |
|
24 December 曾经的腾讯,你在哪里还记得当初完全不懂英语时,看到OICQ的中文界面时的兴奋。
市场运营的手段无可厚非
但是他以如此粗暴而缺乏良知的行为对待当初的“战友”实在让我汗颜。。。
那个有梦想的青年,现在的你为何会变成这样?
陈寿福可能会很快地从我们的视野中消失,从我们的记忆中消失,但是若干年以后,我们会告诉我们的孩子,曾经有一个珊瑚虫的插件,非常棒,非常好。
“那后来呢?”
我们只能摇摇头,无奈地说,那人被腾讯告了。。。。
曾经看到icq告腾讯的oicp侵权,于是腾讯起了个讨巧的名字qq,再后来icq就再也没有出现在中国的大地上
或许未来的某个时候,我们也会发现,qq已经成为一个被历史埋没的词,而腾讯也不复存在了。。。。 21 December Souline Script Engine : Specified Functions, Class Inherit, Class Extension今天下午没有课,就乘机把昨天公布的Features做了一下,主要包含以下部分:
(1) Specified Functions
我称之为函数特例话,但是函数式编程语言中有一个更加形象(或者说更加数学)的单词来形容他:Currying,其实我们做的是一样的东西,只是语法上有所不同而已:)
下面我放出一个这个功能的一个例子:
function plus(a, b)
{
return a + b;
}
var plus_five = specific plus(5,);
plus_five(10); //This function call will return 15
(2) Class Inherit
这个没有什么好说的,无非就是传统面向对象语言中常见的继承,暂时不考虑做多集成支持。。。
(3) Class Extension
这个和C# 3.0中的Extension Method很相似,不过在Souline Script中的语法有所不同(因为W认为C#3.0中的语法实在是比较怪异啦)
在Souline Script中,W使用语法就是一个类继承自己,比如原先由一个类A,那么我只要写 class A : A { function methodXXXX() {} } 就可以给A类添加一个methodXXXX()方法。
其实从这个语法的实现上W也是这么做的,感觉上比较像A = A + methodXXXX; 呵呵:)
最后,W很荣幸地告诉大家,Souline Script的主要功能都已经实现了,接下来,W将会把它应用到一些项目中去(比如数字图像处理的Project中):)
下面W要解决的燃眉之急就是要把数字图像处理的Projects做掉(一共4个的说。。。。) 20 December Souline Script Engine : Anoymous Functions, Object-Oriented Features从昨天晚上到今天早上,我又给Souline Script Engine加入了一些新的功能,一些语法的细节也做了改进:
先说说语法的改进吧~~
现在的var已经不仅仅可以定义变量了,还可以给变量赋初值(这个貌似很简单的样子嘛。。。),比如原来必须;
var i;
i = 1;
现在可以用
var i = 1;
来代替了,也算是个语法甜头吧。
接着再说说Anoymous Functions,现在的Souline Script Engine已经支持匿名函数了,比如:
function GenericCalc(oper, num1, num2)
{
return oper(num1, num2);
}
GenericClac(function(num1, num2) { return num1 + num2; }, 5, 10);
再说说面向对象特性,Souline Script Engine已经加入了部分面向对象的特性,其实也就是支持类了,比如:
class Souline.Animals.Cat {
function SayHello() {
return "Hello, this is " + this.Name;
}
}
var cat = new Souline.Animals.Cat;
cat.Name = "Tony Huang";
cat.SayHello();
很不幸地是,函数结果的缓存功能可能暂时不会出现在Souline Script Engine中了,主要原因是算法和数据结构选择的问题,因为确实很难找到适合的算法,如果大家有什么建议的话,可以给我留言。
再说说Script Engine即将加入的Feature:
(1)特例化函数变量
这个名字听起来挺古怪的,实际上它的思想很简单,举个例子:
假设现在有一个数组,我想对里面的所有元素都加1,那么只要:
function plus(num1, num2)
{
return num1 + num2;
}
function each(numberArray, oper)
{
var keys = keys(numberArray);
var len = length(keys);
for(var i = 0; i < len; i = i + 1)
oper(numberArray, keys[i], numberArray[keys[i]]);
}
function each_process(numberArray, oper)
{
var callback_function = function(array, key, value, oper) { array[key] = oper(key, value) };
each(numberArray, specific callback_function(,,,oper));
}
each_process(numberArray, specific plus(1));
(2) 类的继承
现在的面向对象的功能,我只实现了类,还没有实现类的继承,设计的语法是这样的:
class A { function methodA() { } }
class B : A {function methodB() { } }
这样B类就既有methodA方法,也有methodB方法
(3)Extension Method
这是借鉴C# 3.0的一个设计,就是类是可以扩展的,比如:
class A { function methodA() {} }
class A : A { function methodB() {} }
这样A类就同时具有methodA和methodB了 14 December Souline Script Engine : Collections今天第二节的课调整了时间,就干脆坐下来,开发了这个Souline Script Engine的Collections功能,放一段测试用的脚本吧(好像我酷爱计算素数嘛。。。):
function countPrime2(max)
{ var i; var j; var col; var cnt; cnt = max - 1; for(i = 2; i <= max; i = i + 1) col[i] = 1; for(i = 2; i < (sqrt(max) + 1); i = i + 1) if(col[i] == 1) for(j = i + i; j <= max; j = j + i) { if(col[j] == 1) cnt = cnt -1; col[j] = 0; } return cnt; } 前段时间,我为了要把Souline Script Engine发扬光大,把它集成到了一个无限小车的上位机控制端上, 发两张截图吧:
这是主控制界面 这是可以让用户自己编缉脚本的带语法显亮功能的编辑环境:) 10 December Souline Script Engine : EXTERNAL FUNCTIONS, LIBRARIES最近一直在自习自动控制原理,终于第1次把书看完了,这个礼拜开发Souline Script Engine的时间也比较少,说说最近的更新吧:
1) External Functions:
说白了,就是让Souline Script Engine 可以调用dotNet中的函数啦,比如我写了一个类:
public class MathLibrary
{
public static double sqrt(double num)
{
return Math.Sqrt(num);
}
}
然后让Script Engine加载这个库
scriptEngine.AppendLibrary(typeof(MathLibrary));
这样,就可以在脚本中使用这个库里面的函数了:
a = readNumber();
println("Sqrt(" + a + ") = " + sqrt(a));
2. Libraries
Library在Souline Script Engine中分为2种类型:
1) Souline Script Library
其实就是一般的Souline Script脚本,这是可以被其他的程序所引用,假设有一个Console.sslib库,其他程序想要引用它只要在程序中调用require_lib函数:
require_lib("Console");
println("Hello, world!");
2) Dot Net Library
这个和上面的External Function类似,而且也是利用上面的External Function实现的,它的主要特点是,可以通过配置文件加载到程序中。
在这里放上一个Script Engine的配置文件,大家就一目了然了:
文件Souline.Script.config清单:
<?xml version="1.0"?>
<Souline>
<Services> <Script> <Libraries> <DotNetLibrary name="ConsoleLibrary" version="1.0" assemblyName="Souline.FinanceScript.dll" className="Souline.FinanceScript.InternalLibraries.ConsoleLibrary" /> <SoulineScriptLibrary name="Console" version="1.0" fileName="console.sslib" /> </Libraries> </Script> </Services> </Souline> 下一步的开发计划:
1) 加入Collection功能
这不仅仅包括了数组,也包括了map
2) 加入Function Call Cache功能
对一些结果和输入有确定关系的函数实行缓存,以提高运算速度,通过加入新的关键字cache实现,比如:
function cache abs(num)
{
if(num < 0)
return -num;
else
return num;
}
假设第一次调用的时候使用了
b = abs(-1);
那么这个函数会被实际调用,进行计算。
当第二次调用他时,引擎就会自动从缓存的数据中读出来,避免重复计算了:) 02 December Souline Script Engine神奇的Tony Huang又重出江湖啦~~~
兜了一圈又回到了Windows Live Space(以前叫msn space来着?)
Mr. W最近在做的是一个脚本引擎,其实也就是一个类似javascript的脚本,这也是我们的Souline Server Foundation的一个组件,起初只是想着要用它做一些金融计算,现在看了ror的教学视频后,决定干脆让它更加牛X点,就改称为Souline Script吧,呵呵
现在放一些我自己测试用的脚本,让大家尝尝鲜,呵呵:
1) TestVariable
RESULT: 5 _max = 2 + 6 / 2; _max 2) TestVariable3
RESULT: 2 i = 5; j = 3; (i % j) 3) TestBreak
RESULT: 1229 i = 1; max = 10000; for(j = 3; j < max; j = j + 2) { k = 1; for(l = 2; (l * l) < (j + 1); l = l + 1) if((j % l) == 0) { k = 0; break; } if (k == 1) i = i + 1; } i 4) TestFunction3
RESULT: 1229 function isPrime(a) { var i; for(i = 2; (i * i) < (a + 1); i = i + 1) if((a % i) == 0) return 0; return 1; } function countPrime(max)
{ var count; count = 0; for(i = 2; i < (max + 1); i = i + 1) if(1 == isPrime(i)) count = count + 1; return count; } countPrime(10000);
至于这个脚本的执行效率嘛,就基本只能算是马马虎虎啦,呵呵 名词解释:
Mr. W 我打游戏的时候的id是wzhjs,于是就被称为W了。。。
|
|
|