嗨,大家好,我还活着……
开发的日子很辛苦,也很充实,所有的一切,都将成为美好的记忆。
加载中…
加载中…
加载中…
加载中…嗨,大家好,我还活着……
开发的日子很辛苦,也很充实,所有的一切,都将成为美好的记忆。
标签:
杂谈 |
OrcK 语言是一种尝试,我现在正在尝试新的语言。
新的语言是 ASM 和 LISP 的混合物。
例:
(call (cd $root '' system out println) ('hello world'))
25号那天,FS2内存文件系统完成,测试了。
今天添加了push pop cd等几个函数,封装成dll,在VS60下运行成功,但是在devcpp上怎么也通不过编译,直到现在还没闹清是怎么回事。
无奈,只得在文档中写上“VS60中测试通过”,在devcpp上我就不管了。
对本系统感兴趣的可以回帖。
把OrcK实现成一个API或许更有市场,如此来说,用C语言比较好,因为速度快。
把OrcK定位到AI,速度将是第二位的,那么,用Java比较好,因为库类多。
把OrcK实现成带AI的API?用C还是Java?
另外,如何扩展?API需要扩展,AI也需要扩展。
搜索类型为string的变量的名字,把它们的值打印出来,用正则表达式是这样写的:
root =~ m( (<) var ($1) type.string(#0) )
foreach $x ($1){
}
(<)
($1) 命名捕捉,捕捉内容存到$1中
(#0) 有0个子结点,即对应结点没有子结点
foreach $x ($1)
(未完、待续)
OrcK语言包括语言层和实现层。语言层是各种字面替换,实现层是实际的代码。已经实现的OrcK语言可以作为语言层,正在完成的FS2可以作为实现层的载体。由代码print:a**b生成Lisp代码(print (pow a b))生成对应的FS2原语,形成一棵树。
基本思路就是这样。例子包括两个,一个是print var:hello.value另一个是调用Perl语言的先out再system的例子。
按照最初的设计,内核应该不会算术运算,因为是纯符号逻辑,而数学运算是复杂的符号逻辑,应该等到以后再实现。那么当务之急是什么呢?应该是实现记忆,把代码和数据和程序都记忆下来,这是最重要的。至于数学运算、文本处理那些东西都是已经成形了的东西,可以从其他语言中借来。
所以,程序包括语言层和实现层,这没的说。还包括外部程序,例如“计算器”程序、“正则表达式”程序等等,用来完成不同的任务。而OrcK语言的核心只是用来记忆,并且用记忆组织程序的各个模块。
把函数复制到需要它的地方,修改一下,然后运行。
(Copy-Modify-Run)
既然数据可以MOV来MOV去,为什么代码不行呢?调用函数时的参数列表,返回值,返回地址
都是对函数或函数所处环境的修改。如:r=fun(a,b)可以写成
copy this,fun
set {ret-addr},next
set {ret-value},r
set {para1},a
set {para2},b
goto this
fun:...
返回值和返回地址都可以解释成参数,参数可以解释成对函数体的修改,就是CMR中的M。
结点是文件系统中的文件和文件夹。
△模块内编译,模块外解释,用一段文字描述一个模块。模块内编程,用C就不错,模块间编程,可以使用Basic,描述模块的功能,推荐使用OrcK。
模块应该是域,域是结点的集合,结点构成图,如果直接在结点上编程,就能避开词法分析和语法分析,这么做的代价是程序异常难懂。以前的说法是“在树上编程”,这么说容易引起误解,让人们认为程序员都是属猴子的,不太雅观。所以改变了说法:在结点上编程。这么一来,表达更加确切,因为结点可以构成图,而树只是图的一个子集。
人工智能应该是解释的,这么做主要是为了实现运行时修改代码。而如果全是解释的,那效率又难以保证,所以选择了“模块内编译,模块外解释”这种做法。
△修改代码,然后执行
cout<<'input a number:'
cin>>this.for.%1
goto this.for
for(i=0;i<%1;i++){
}
△灵活的函数调用
i.asnumber=5 --> fun_0037(i,5)
标签:
it |
终于可以把我开发的两个作品合二为一了。基于文件系统的编程语言,这是搞程序设计、人工智能等的必不可少的工具。外国有Ruby on Rails,我这里有OrcK on FS2,我本想写作OrcK @ FS2的,可是它可能会被误以为是个邮箱,所以就没这么写。FS2不是别的,是一个文件系统,OrcK是一种编程语言。不过设想中的OrcK是一种解释型的语言,传统的OrcK是一种翻译语言,借用C++的编译器。新的设想中,OrcK应该可以在运行时修改自己。因为代码和数据一样,都是结点,结点即传统文件系统中的文件或文件夹。既然文件可以修改,那么结点也可以执行创建、修改、删除等操作。既然代码和数据都是结点,那么修改代码也是理所当然的了。修改数据大家并不陌生,但是在运行时修改代码,然后再运行,不仅你没尝试过,我也没有。我以前只是使用Perl编过一个脚本,生成另一个程序,然后执行,用print和system命令完成的。现在的OrcK语言依然需要解释器,把程序一行一行地解释执行,其间修改一下子也是大势所趋。
关于变量和函数的共同点,我想它们都是一种替换,是一种域。A=3中,把A替换成3不言而喻。在fun(3,4)中,除了要替换代码,还要处理参数列表,复杂一些。如果只是这点区