E语言概览

Sina WeiboBaiduLinkedInQQGoogle+RedditEvernote分享




[陈怀临注:这次是真的matrixos同学的文章。上次是他的徒弟干的。。。希望同学们大胆假设,小心求证。。。但切记不要attack。。。]

e语言是基于c语言衍生出来的一种新型面向对象语言,向下完全兼容标准c语言语法,是matrix系统的基本程序设计语言,在这里,我们将只针对扩展的面向对象语法进行描述。

e语言所用到的文件类型:

1)      对象描述文件(***.d):描述一个类、对象或多个类、对象的文本文件,类、对象的定义都在该文件中实现。

2)      头文件(***.h):c语言完全等效的文件类型,可被对象描述文件、e源代码文件、以及汇编语言文件包含引用。

3)      e源代码文件(***.e):

4)      汇编语言文件(***.s):

5)      其它资源文件:(*.*):可以为一切类型文件。

类的定义:(类实际上就是一个库,在对象设计和编译时刻引用的库文件)

class className  <类继承列表>

{

head:   这个段是对象的基本信息特征之数据结构(有待具体标准化定义)

private: 这是私有数据段

int data;

public: 这是公共段

float   abc;

int protect ba;        protect关键字表示这个变量只能被外部读。

int Function();

byte   (& Dev1)[4096];               可读可写,按字节访问,4KB大小。
dword  protect (& Dev2)[256];   只读地址,按双字访问,256双字大小

interrupt: 这是中断服务程序挂接段

INT_16    : status intUartSend(int, void *);

INT_27    : status intTimer(int void *);

message: 这是消息函数段

MX_CLICK : status onClick(int, int, int, int);

WM_DOUBLECLICK  : status onDoubleClick(int, int, int, int);

event: 这是响应事件的函数段

EV_MOVE<parameters>    : status move (int, void *);

EV_HIT <parameters>      : status Hit(int, void *);

space: 这是存储空间定义段,定义对象运行所涉及的内存空间。

heap<memory: size=4096,unit=8>;

pool <memory: size=16MB,unit=4KB>;

Dev1<remap: globalBase=0xc0001000, size=4KB>;

Dev2<remap: globalBase=0xc0002000, size=4KB>;

compose组成这个类的实体模块文件。

xxx.e;

xxx.s;

xxx.a;

xxx.bmp;

option 编译这个类、或对象的选项。

};

对象的定义:

className objName

{

格式和类定义相同,但是,对象的定义优先级高于类的定义(遵循越是后期定义的变量,优先级越高的原则),例如:需要重定义的变量,函数,直接在本对象中进行重新定义即可,如下:

public:

char string[32];        在原有类的基础上,为本对象新定义一个新的变量。

重新定义对象运行所需内存空间。

space: 这是存储空间定义段,

heap <store=memory, unit=4, total=8KB>;

pool <store=memory, unit=2KB, total=32MB>;

};

我们也可以不需要类的支持,直接定义一个全新的对象:

object objXxx

{

head

private:

int  abc;

int Function();

………..

…..

space:

};

编译的时候,以对象定义为单位进行编译,生成相应的二进制对象实体文件:object.o,可供matrix系统进行装载。

E语言源代码文件(*.e):

*.e文件是一种文本文件,兼容标准c语言。在设计e语言程序时,我们完全可以按照c语言的语法,定义变量、函数,引用.h头文件,以及跟汇编文件混合编程等等。例如:

定义3个变量:

int   a, b, c;

定义3个函数:

void Func1()

{

a = b + c;

}

int Func2()

{

b = a + c;

return b;

}

status  Func3(int,  void *p)

{

。。。。。。。

。。。

return   status;

}

我们根据实际需要,在类、或对象定义文件中,把上面的函数或变量分配到合适的对象段,例如:

object Xxx

{

。。。。。

。。。

把变量b和Func1分配到对象公共段:

public:

int   b;

void  Func1();

把Func3跟一个消息挂钩:

message

WM_XXX : status  Func3(int,  void *p);

。。。。。

。。。

};

其他剩下的变量和函数,将在编译时自动分配到对象的私有段。因此,在.e文件中,函数和变量的定义以及各种运算、逻辑语法的表达,跟传统c语言几乎没什么区别。不同之处主要表现在e语言扩充的外界对象的访问和引用上面,下面简单介绍:

1如果要在e语言中引用一个外界对象。

首先,定义一个对象别名,并为这个对象别名指定实际的对象实体,如下:

class  #objXxx  =  mx . com . uart

或,

object objType #objXxx  =  mx . com . uart

class objType 来自.d文件的对象和类的定义。)

然后在代码中,通过对象别名使用这个对象,例如:

objXxx . Buffer[0] = 0×12;          访问对象公共数据,向串口缓冲区写入一个数据。

Xxx  =  objXxx . GetBardRate();  调用对象函数,获取串口波特率。

SendMessage(objXxx, , , );            向对象发消息:

我们也可以不必定义对象别名,在代码中直接使用对象:

mx . com . uart . GetBardRate();

2)模糊对象引用:程序设计时,当我们不完全知道某个对象的类型或类库,但是知道这个对象的部分接口或成员,这时,我们也可以直接定义一个未知类型的对象别名:

object #objXxx  =  mx . Xxx;

然后通过这个对象别名访问该对象成员。这种模糊对象的引用,可以最大限度的不依赖类库和对象类型定义,使得e语言中对象使用更加灵活方便。

3)对象其它操作:

对象动态copy: 以一个对象为基础,可以在运行时复制出来其他很多相同对象个体。

对象动态move: 一个对象动态从一个matrix系统迁移到另一个matrix系统。

对象是matrix系统中最小的软件单位,一切复杂多样化的应用,都是由一个一个的对象组成,它们之间相互协作,达到实际的功能。

纯对象为基本的软件开发。

未完,待续。。。。。。。

(3个打分, 平均:3.67 / 5)

雁过留声

“E语言概览”有29个回复

  1. 陈怀临 于 2012-03-21 9:30 下午

    估计是血雨腥风。。。大家都要控制情绪。塞塞。。。

  2. matrixos 于 2012-03-21 10:16 下午

    首席,我想再说明一下,两次的文章都是我写的,只是上次跟网友的评论骂战,是他们自己在瞎闹,这次我喊他们不要评论我的文章,让暴风雨来得更猛烈些吧,谢谢大家,:))

  3. azsoarsky 于 2012-03-21 10:28 下午

    想法很赞,但看到代码,就像一锅煮哦~~~很纠结的样子。
    能不能分层呢?底层重实现、上层重抽象概念。

  4. lenky 于 2012-03-21 10:43 下午

    LZ e语言的编译器难道是传说中的gcc?

  5. kevint 于 2012-03-21 10:54 下午

    e语言已经被另一个大骗子用了
    估计你得改名字了。

    其他不想说啥了。呵呵

  6. Jie 于 2012-03-21 11:08 下午

    楼主要设计一门新语言的主要关心的是什么? 效率? OO? 或者其它新鲜玩意儿.

    不知道是什么勇气让楼主决定去兼容C. 这个决定没有深入考虑!~ 为了平滑利用现有的开源软件?

    楼主想以后在自己的简历只写一句”I wrote E”, 需要做的工作还多!
    package, module, concurrency…

    楼主应该先去接触一下Lua, Erlang. 玩精通之后再考虑E Language的设计.
    我非常怀疑楼主现在是否有资格或者有能力去设计一门新的计算机语言.

  7. beans 于 2012-03-21 11:18 下午

    matrixos的e语言果然很深奥,居然从c语言直接发展到e语言,都不需要期间的d语言了。

    我提个问题,您上一篇关于matrix操作系统的大作中提到了神秘的dss段,这个dss段和您的e语言有什么神秘联系呢?

  8. beans 于 2012-03-21 11:27 下午

    请各位不要孤立的看问题,如果只看这个e语言的文章是没什么意思的。请先看下面的链接,楼主徒弟发表的matrixos操作系统以及后面大量讨论。
    重点提示:matrix徒弟号称matrixos写的代码符合了某个公司的编码规范,里面包含了大量的注释,将6千行代码直接注释成6万行.~

    http://www.tektalk.org/2012/03/06/%E5%85%A8%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%EF%BC%8C%E7%9F%A9%E9%98%B5%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F-2/

  9. 无语 于 2012-03-22 12:42 上午

    E语言要配合E-cpu,亲你定义一下E-cpu体系吧,这样就弄成全套的了

  10. 大家都无语 于 2012-03-22 12:48 上午

    这哥们 应该进娱乐圈!

  11. shuyong 于 2012-03-22 2:06 上午

    这是一个新的语言呢,还是一个面向嵌入式的封装包呢。

  12. beans 于 2012-03-22 2:19 上午

    matrix,你真得了解一下”汉澳”操作系统和”器普”编译器。你们风格真的很像。
    人家那哥们儿好歹还弄了个公司整这些东西。
    我记得5,6年前吧,那哥们还很活跃呢,经常到各大技术论坛发帖吹牛。
    开始也被大伙臭骂,后来斑竹就会直接将他发的帖子转到joke版~

  13. hh 于 2012-03-22 2:36 上午

    推荐一本书吧,《程序设计语言理论基础》

  14. 张俊杰 于 2012-03-22 4:58 上午

    先把BNF写清楚。

  15. Eety 于 2012-03-22 5:24 上午

    还真有耐心。
    中国古谚:三人成虎
    戈培尔的宣传理论:谎言重複一千遍即是真理。
    huanghuihuang,or matrix or matrixos,your hearts go on。

  16. matrixos 于 2012-03-22 6:51 上午

    感谢各位热心的评论,貌似首席说的血雨腥风还不是很够,哈哈,我本人是硬件行业出身,对软件的知识不够专业,但是,我会用最简洁,最俗气的语言来尽量把一件事情描述得简单、通俗易懂,希望大家给予批评指正,在下不甚感激,虚心接受各位大师的指点。
    matrix系统会持续的研发下去,不久的将来,demo一定会呈现在大家眼前。

  17. aishu 于 2012-03-22 8:02 上午

    12楼的,
    他估计都不知道BNF 是啥东西

  18. 陈怀临 于 2012-03-22 8:27 上午

    Programming Language是CS里面比较难的一个部分。Of all those Turing aware winner是, most are from PL sector.

  19. 抓狂 于 2012-03-22 8:43 上午

    弯曲版芙蓉

  20. foo 于 2012-03-22 3:08 下午

    二级脑残,首席的水平日下

  21. yunhaid 于 2012-03-22 7:17 下午

    一句话,装B的语言

  22. beans 于 2012-03-22 8:04 下午

    matrixos,你目前耗时3年写了6千行代码的调度器外加5万多行注释。
    那估计你这系统写完之后,注释总量至少也要几百万行吧?这真是一项牛b的大工程!你确定你自己能完成?不需要再多收几个徒弟?就是不能帮你写代码,帮着写点注释也是好的啊。

  23. yx_wh 于 2012-03-23 1:11 上午

    70、80年代的时候,MIT设计了Lisp Machine,可以以与机器语言比美的速度执行lisp这门高级语言的代码。Richard Stallman的传记里面也提到过这个东东。
    可是你想想,为什么lisp machine后来完蛋了呢?为什么RMS这么一个喜欢lisp的人,他的GNU EMacs是底层C+上层lisp而不是底层lisp+上层lisp呢?

  24. zhaorui 于 2012-03-23 1:23 上午

    建议弯曲开设 joke 版

  25. 有勇气 于 2012-03-23 6:22 下午

    楼主勇气可嘉 前次发的帖还没忽悠几下 就被人揭了老底 这此居然还敢来 还什么徒弟 真够搞笑的 真当别人都傻吗

  26. appleleaf-fake 于 2012-03-23 9:01 下午

    这个一句话就可以讲清楚,就是把一些OO语言的事件机制,和一些对象通信机制(而且这个破东东还只支持本地通信)实现在了内核里而已。

  27. 阿峰 于 2012-03-24 6:51 下午

    这下歪曲成了民科走秀的集中营了~~~干脆整点气功、永动机、初等数学解哥赫巴德、茄子皮绿豆汤来……

  28. TX 于 2012-03-25 2:32 上午

    建议楼主抓紧搞个E语言编程范式出来,怎么用,有什么优势

  29. dddd 于 2012-03-25 7:22 上午

    28楼注意自己智力水平。