作者reader (读者)
看板CSSE
标题[讨论] 编译问题
时间Mon Feb 21 09:38:02 2005
其实我一直想发展一个程式语言,源头可上溯自 14 年前的类似
HTML+XML+PHP 的设计,但後来因为接案子,就搞起 GUI 和 OO
了。
後来常常觉得这又是一次与历史错身而过,不过就算当时想做,
大概也是做不出来的,或只能做出一个很丑陋的东西,历史总是
有着它的规律的。何况从十八岁以来,我从来没有安定的收入,
再多的想法,总是要受限於软体专案或事业经营的问题,没钱就
接案,有钱就创业,失败又再来,这样要做出什麽东西,也真是
天方夜谭。
到了四年前,又提出过一次简化版的规划,某企业还满支持的,
给了我一个在中国的软体团队支援,可是沟通不良,两岸的编程
观念和很多东西都差异很大,最後又失败了一次,当然,也是跟
我当时还是以经营企业为主有很大关系,那年头有技术的人总是
被期望着做创业家的,何况那也的确算是我的本行,从十六岁就
开始准备的事情。
这几天手上的案子大多了结或接近结束,不知道为什麽,又开始
想起这个程式语言的想法。传言中,一个黑客有所谓的四不朽:
作业系统、程式语言、图形使用者介面和电脑病毒。当然,能够
做好其中两项就算是伟大的黑客了 ─ 我大概是对此有点中毒了。
想了一想,现在实在是没有做不出来的道理,古代要搞 symbol
table 还算是个技术,但现在随便做都有,如果不拚效能的话,
并没有什麽不好做的。
不过,技术上还是有一些麻烦的地方,例如我现在想做的东西,
有四个层级混在一起: macro layer, script layer, op-code
layer, native-code layer. 另外有 cross language 的特性,
也不是容易的东西。
直接写执行档编译程式大概没办法,不过写 compile to C++ 的
编译程式则应该可以。
但是,我却发现要处理 first-order function 还真是不容易,
想像中它可以编译为 op-code 再执行,但是命名空间的冲突,
却显然不是那麽容易处理,如果用字串来找寻函数和变数,那样
效率就跟 script 相差无几了,但要怎样才能不用,这就有一点
让人感到头脑发昏了。
用 C++-like 表示法来看就可以知道了:
struct A {
void f() { ... }
void g(void t()) { t(); }
};
void f() { ... }
void g(void t()) { t(); }
void main() {
A a;
void b() = { f(); }
g(b); // 执行 f()
a.g(b); // 执行 A::f() 还是 f() ??
}
也就是说,恐怕免不了要制作一套很麻烦的机制,才能有效处理
这样的问题。
如果像上例,预先知道 b() 的内容,当然还简单一些,但是还得
考虑到 script 的状况呢。唉唉。
或者还有什麽好的办法吗?
--
※ 编辑: reader 来自: 61.222.173.26 (02/21 10:19)
1F:推 Eventis:执行的应该是f()吧@@ 61.62.49.43 02/21
2F:→ Eventis:不是已经将function pointor传进去了吗@@? 61.62.49.43 02/21