作者reader (读者)
看板CSSE
标题Re: [讨论] 编译问题
时间Tue Feb 22 00:24:40 2005
※ 引述《Eventis (何逸凡)》之铭言:
: ※ 引述《reader (读者)》之铭言:
: : 执行是 A::f() 才合乎 first-order function, 这正是它奥妙的地方。
: : 如果只是 function pointer 就简单太多了。
: : 传统的编译程式是做不到的。你可以想像它是「执行时期的巨集函数」。
: : 有这个东西,就不需要丑陋的 iterator 了。用 iterator 不见得一定
: : 比较快,但是程式码变丑太多了。
: 那不就是等於到linking的时候才能判断在命名空间是否定义过@@?
: 又,如果宣告不是又多又长的话,
: 也许用hash function的负担反而比较重?
如果是 32/64 bits hash function, 负担应该就不会比较重,
例如着名的 FNV, 也不过就是乘法和 XOR, 此後就能大大减少
名称比对的需求。
而如果在连结期间就能确定的话,那已是比较静态的状况了,
其实只比 template 复杂一点。当然那是万一程式语言流行时
别人要伤脑筋的事情,一开始当然是用没效率的方式,例如:
void f() = { printf("%d", i); }
void loop(int n, void f()) {
for(int i = 0; i < n; i++) f();
}
loop(100, f);
=>
typedef void F(vars&);
void f(vars& t) { printf("%d", t["i"]); }
void loop(int n, F f) {
vars t;
for(t["i"] = 0; t["i"] < n; t["i"]++) f(t);
}
loop(100, f);
这大概是最白烂的做法了。但很多情况是得在执行时期处理的。
: : 现在 C++ 不过是把巨集语言合并到程式语言当中 (template),一堆人
: : 就在那边大呼小叫说是什麽革命性发展的,弄个什麽泛型化程式设计就
: : 觉得世界被改变了,实在是眼光太过短浅。那叫「本来就应该这样」。
: 说到这个,java终於有template了.
: 可喜可贺可喜可贺...........(好像不重要,装傻中....XD)
就现在 Java 程式的主流写法而言,恐怕还得等好一阵子才能渐渐
流行吧。
嗯,我不知道,基本上我只拿 Java 做点小东西小案子。
: : 有太多东西该做了,例如内建的网路功能,使这样的程式语言将可以在
: : 网路上互通,程式码可以在机器之间移动复制和定址,分散式运算可以
: (比rpc或web service更powerful的功能?
: @@.....这个很难以想像>.<)
这这... 我从来没觉得 rpc 或 web service 强大或好用过...
五年前申请一半的专利就是网路软体元件自动耦合连结了... 而在
十年前,我的天才学弟去留学前的临别笔记,也就提到了,到现在
我想做的东西,只怕还没超过他当年的规划和想像太多。
基本上,只要有一个最基本的支援平台,这一点也不困难。
正如同我们需要 graphics platform 於是有了视窗系统,有一个
network platform, 也完全是理所当然的。
而要做 GUI 不可避免地需要 OOPL, 要做网路平台,自然也会需要
可以有效承载新观念的程式语言。
这东西我不做别人也会做,只是看哪个组织有力量也有想法而已。
就像世界上不可能只有一个 Alan Kay 想做 GUI 一样,就看是谁
有那个机会了。
: : 完全平顺自然地达成。至於多执行绪更是最最基本的。这样才起码像是
: : 一个二十一世纪的程式语言。
: 虽然C++语言本身与基本函式库没有提供,
: 可是这些功能或技术要做到,在一般的情况下并没有太大的问题.
: (或者是发展的人觉得写不出更好的0.0?)
完全内建和外加是不一样的。这要做过才知道,如果系统中的物件都
能自主动作,程式设计的概念都会不一样了。
而当这些物件可以游走於不同机器时,在程式设计上却会是一模一样,
当物件能够自行昇级改版,我们还是可以使用同样的程式码持续性地
运作时,那麽它的威力就更会显现出来。
这才是物件导向理论的原本想像,今天大家所认知的物件导向其实是
缩水版...
内建 multi-threading 机制,而且是有效地内建,我个人认为是新的
程式语言最需要的基础设计,好用不好用,影响很大的。
不过 C++ 这种静态系统的成功,也证明了只能使用 interpreter 的
高阶程式语言,能够应用的范围有限、效能不足,是不能担当大任的。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.222.173.26