发布阴阳八卦语言
发布阴阳八卦语言
发布阴阳八卦语言
发布阴阳八卦语言,阴阳八卦语言其实包含着两种语言——阴阳语言和八卦语言。
阴阳语言所做的事情是在代码的阴阳两界转换,文本型代码属于阳界,人易读,二进制型代码属于阴界,机器易读。
阴阳语言编译器所做的事情是把db xxxx;dd xxxxx,xx;dw xxxx……之类的代码变成二进制的,就这一件事。任何二进制文件格式都可以用阴阳语言来描述,如coff,pe,elf,a.out,还有*.doc,*.dat,*.*……。
八卦语言功能类似ASM,语法类似C/C++,而且ASM码与机器码间的映射关系可以在程序中完全自定义,一句ASM翻译成什么样的机器码完全是自己动态定义的,这样八卦语言可以支持任何CPU。
八卦语言编译器支持的CPU如下:
intel 80x86,8088,4004,Pentium xxx,celeron xxx,Itanium 1/2,Xeon ,Xeon MP, ……
Sun SPARC xxx,UltraSPARC IIIi, UltraSPARC III,UltraSPARC IV ……
IBM POWER 970 ,POWER 970 FX ,cell ……
Cray xxxx,SGI xxxx,Motorolar xxxxx
………………
对了,还有:
支持java虚拟机,.net虚拟机(这个有难度,因为代码中包含名字,但却仍然是可行的)
支持所有的嵌入式系统,
支持想象中的CPU,
支持任何已知的CPU及未知的CPU,
支持任何已经设计出来的CPU及任何尚未设计出来的CPU。
(注意:如果某种CPU指令是不能被写出来的那么可能就支持不了)
支持一切可写的CPU指令集,
还可以再怎么说呢?我刚才还想起来了一些,现在却想不起来了,
……
哈哈,写到这里,我自己都笑的肚子疼啦,怎么这么好玩呢,简直成了娱乐八卦啦。
不过原理其实很简单,就是正交完备字符串变换子集就可以了。
(是不是已经有人这样做了?我记得TASM可以用宏支持MMX、SSE,不过TASM是不是达到完备程度就不知道了)
八卦语言把代码编译成{dx xxx....}格式,传给阴阳语言,阴阳语言再灵活的套上pe,elf,a.out……各种格式,从而可以在一个系统下生成任何其他系统下的代码。
而且这样还可以很容易的支持同一程序中包含许多种类的CPU代码,这样的程序可以把不同的部分运行在不同的CPU上,这对于计算机集群是很有用的。
很舒服的是:八卦语言用类C/C++的{}做区域,不用begin end格式——还是{}这种象形文字来的比英文字母强。
还有更好的呢,在八卦语言中,ASM也可以模板啦,我把C++那一套模板机制也引进ASM中。还有宏机制也大大增强,其实我一直就感觉到宏的能力远远比模板能力强,只不过人们远远没发现宏的能力。比如说C++ Templates中的meta programming,那么别扭的用递归实现了循环,但是我直接用宏做循环编译不行吗?类似MASM中的循环编译。C++ Templates尽管是 turning complete的,但不可否认的是表义能力太弱了,这样的代码往往很难写与维护。我在设计太极语言时是这样考虑的,专门用一种语言本身来控制代码生成之描述,那么用什么语言呢——就用太极语言本身。其实在太极语言编译器中是用解释运行的太极语言程序在控制太极语言的编译,于是能让代码自己描述自己的编译,比如说
char * str="aaaaaa";
explain
(
int n=f(str);
if(n<10)
{
int fc(int a,int b)
{
return a+b;
}
}
else
{
int fc(int a,int b)
{
return a-b+f("taiji");
}
}
);
int f(char * str)
{
return str[0];//return strlen(str);也行。想怎么写就怎么写。
}
explain表示其后()中的编译时会被解释执行,与条件编译比较相似。
这里的f函数既会被解释执行又会在编译时生成代码。
还有循环编译,等等,总之,是把整个太极语言的本身嵌入太极语言的编译描述过程中去,实现自描述型编译。
而这部分的实现是在独立的一遍预编译中,往八卦语言上一套,就是用太极语言描述八卦语言的编译。往阴阳语言上一套,就是用太极语言描述阴阳语言的编译。
(稍有一些小改动)
当然解释运行以控制编译的太极语言为了实现与完全编译的太极语言嵌入区分,有一些接口上的小改动。
还有一点,在太极语言中函数与类名字空间是一个“集合”,而在C/C++中却是一个“向量”。
C/C++中的函数与类必须先定义或声明再使用,这就有了顺序,所以是一个向量(好象并不怎么严格)。而在太极语言中是这样设计的:一个编译单位中前后函数与类都是可见的,从而使用函数与类都不必先定义或声明,只要它在这个编译单位中会出现就可以了,所以是集合。
还有太极语言的类成员函数可以不必在类中声明(虚函数除外)。
在类中声明成员函数有一个缺点是如果有变动必须更改两个地方,违背了“唯一性原则”。而且这样往类中添加成员函数时很困难,比如我想往CString中添加一个成员函数又不改动MFC库怎么办?只要在语言中添加这么一个规则就可以了:类成员函数可以不必在类中声明(虚函数除外)。
当然使用时在编译单位中一定要有这个类成员函数的声明
比如
-----------
//mycstring.h
int CString::fc(...);
....
--------------
-------------
//1.u
....
include("mfc/CString.h");
include("mycstring.h");
....
CString a;
a.fc(...);
-------------
当然了这样仍然要保持mycstring.h与mycstring.cpp中的CString::fc同形,如果有更改了还是要改两个地方,但是这个却可以非常容易的用工具自动同步,比类中声明的同步要容易的多。
(更多关于太极语言的介绍请见我以前的文章)
太极语言——八卦语言——阴阳语言,这就实现了完整的一套编译系统。
八卦语言八面玲珑,是非常容易自定义的,可以做任何CPU的ASM。
阴阳语言我一开始设计时还没想到直接套用太极语言描述的宏编译系统,那时设计了一些“阴阳怪调”的东西,比如各种校验码的生成等等,后来直接套用太极语言描述的宏编译系统,这些就都用嵌入式函数来做了。
一会我把八卦语言的x86机器配置文件发上来,可以支持MMX和SSE的。
问题点数:0、回复次数:0Top




