我觉得他似乎再说:无论我们怎么努力,不可能完全达到最完美的抽象形式。对于性能的考虑依然会存在。比如,我们依然还是需要static unbound,用来在不需要runtime多态场合获得最好的性能。关键是,static和runtime unbound组合把抽象惩罚限制在我们可以接受的范围内。但抽象惩罚依然还会存在。比如,static concept和runtime concept之间的互动可能会是件比较麻烦的事情。如果我们只用runtime unbound,事情会简单得多。但是,由于两种concept足够接近抽象的本质,所产生的抽象惩罚我们还是可以承受的。或许将来也会有某种语言,不再考虑性能的问题,单纯使用runtime unbound,就像现在的java把对象彻底虚化那样,以获得更简单的抽象体系。对抽象惩罚的容忍程度,可能也会根据不同的应用和用户不断变化的吧。
不管怎么样,我的感觉是:现在的gp领域就像黄石公园地下的大熔岩池,酝酿着威力巨大的爆发。
btw1:老大的那份论文能给我一份吗?拜读一下。
btw2:看到又有人管我叫"老莫",就好象又回到了小学时代。:P
On Dec 7, 2007 12:53 PM, 莫华枫 <longsh...@gmail.com> wrote:我觉得他似乎再说:无论我们怎么努力,不可能完全达到最完美的抽象形式。对于性能的考虑依然会存在。比如,我们依然还是需要static unbound,用来在不需要runtime多态场合获得最好的性能。关键是,static和runtime unbound组合把抽象惩罚限制在我们可以接受的范围内。但抽象惩罚依然还会存在。比如,static concept和runtime concept之间的互动可能会是件比较麻烦的事情。如果我们只用runtime unbound,事情会简单得多。但是,由于两种concept足够接近抽象的本质,所产生的抽象惩罚我们还是可以承受的。或许将来也会有某种语言,不再考虑性能的问题,单纯使用runtime unbound,就像现在的java把对象彻底虚化那样,以获得更简单的抽象体系。对抽象惩罚的容忍程度,可能也会根据不同的应用和用户不断变化的吧。
不管怎么样,我的感觉是:现在的gp领域就像黄石公园地下的大熔岩池,酝酿着威力巨大的爆发。
我觉得他不是这个意思。首先,他认同侵入式的接口(以及比如内建类型、值类型、有限精度整数)的确是面向性能的折衷,最直观的形式应该是像现在的concept这样的非侵入式接口(而且还要是动态的——不然他写这篇论文干嘛?)。然后,他指出一个事实,就是由于串行编程还有很大空间,所以通过折衷抽象机制来减小抽象惩罚从而获得性能的做法仍有用武之地,因此,C++里面的一动一静、一侵入一非侵入、一OO一GP的分野依然不会消除。
(不过像Java/C#这类处于应用层面的语言迟早会把老旧的interface踢进垃圾箱,走向ruby那样的duck typing。)
btw1:老大的那份论文能给我一份吗?拜读一下。
已发:-)
btw2:看到又有人管我叫"老莫",就好象又回到了小学时代。:P
What's the story like? :)
On Dec 7, 2007 1:06 PM, pongba <pon...@gmail.com> wrote:On Dec 7, 2007 12:53 PM, 莫华枫 <longsh...@gmail.com> wrote:我觉得他似乎再说:无论我们怎么努力,不可能完全达到最完美的抽象形式。对于性能的考虑依然会存在。比如,我们依然还是需要static unbound,用来在不需要runtime多态场合获得最好的性能。关键是,static和runtime unbound组合把抽象惩罚限制在我们可以接受的范围内。但抽象惩罚依然还会存在。比如,static concept和runtime concept之间的互动可能会是件比较麻烦的事情。如果我们只用runtime unbound,事情会简单得多。但是,由于两种concept足够接近抽象的本质,所产生的抽象惩罚我们还是可以承受的。或许将来也会有某种语言,不再考虑性能的问题,单纯使用runtime unbound,就像现在的java把对象彻底虚化那样,以获得更简单的抽象体系。对抽象惩罚的容忍程度,可能也会根据不同的应用和用户不断变化的吧。
不管怎么样,我的感觉是:现在的gp领域就像黄石公园地下的大熔岩池,酝酿着威力巨大的爆发。
我觉得他不是这个意思。首先,他认同侵入式的接口(以及比如内建类型、值类型、有限精度整数)的确是面向性能的折衷,最直观的形式应该是像现在的concept这样的非侵入式接口(而且还要是动态的——不然他写这篇论文干嘛?)。然后,他指出一个事实,就是由于串行编程还有很大空间,所以通过折衷抽象机制来减小抽象惩罚从而获得性能的做法仍有用武之地,因此,C++里面的一动一静、一侵入一非侵入、一OO一GP的分野依然不会消除。
(不过像Java/C#这类处于应用层面的语言迟早会把老旧的interface踢进垃圾箱,走向ruby那样的duck typing。)虽说踢是早晚的事,不过还是需要过程的。这不,csdn论坛上有人文章都没仔细,就开始踹门了。
btw1:老大的那份论文能给我一份吗?拜读一下。
已发:-)收到,谢了。btw2:看到又有人管我叫"老莫",就好象又回到了小学时代。:P
What's the story like? :)呵呵,那时候几个玩得好的叫我"老莫" 。而我老爸在单位里,人家叫他"小莫"。:-D
在 07-12-7,莫华枫<longsh...@gmail.com> 写道:
我刚才想到。实际上程序员选择语言,就是在评估对抽象和性能之间的关系。应用层面的程序员忍受不了c/c++的抽象惩罚,转而使用python、ruby。而性能对他们没什么关系。最底层开发的程序员无所谓抽象如何,关键是性能好。因而侧重于C。两者都需要的,那么C++相对更合适。两者都无所谓的,就...
现在的程序员对抽象惩罚越来越敏感,而对性能越来越麻木。所以就导致了越来越多的程序员选择Java之类的语言。
现在在runtime concept方面的努力,则是力图再不损失什么性能的情况下,消除一些抽象惩罚,以迎合程序员的这种心理。
我不同意。我是 C++ 的死忠。虽然我反对 C++ 的现状,但是我忠于 C++ 的精神。
C++ 的精神是什么?就是完美主义。我们坚信"零开销"原则。我们决不妥协!
对我们来说,问题不在于有没有必要"零开销",而在于能不能做到"零开销"。Bjarne
老大不用遮遮掩掩说什么"降低抽象惩罚",把话挑明吧,一切抽象惩罚都可以绝对的、完全的避免!
在 07-12-7,Atry<pop....@gmail.com> 写道:
struct A {
void xxxx();
};
struct IA {
virtual void xxxx() = 0;
};
struct AImplementIA : A, IA {};
就目前的 C++ 而言,AImplementIA并没有实现 IA::xxxx 方法,但假若 C++ 允许这样实现的话,那么问题就解决了。
在 07-12-7,pongba<pon...@gmail.com> 写道:
不过,C++确实为了抽象付出了代价,而且,在可以预见的将来,这些代价还会继续付出。最明显的例子就是所谓的虚表机制。本来希望能够通过一次间接常数时间解决问题,结果在时间和空间上都付出了代价。看看Java的Escape优化,或者更早的Eiffel的全局分析。其实,C++很多代价的付出在于对环境作出的妥协,而现在环境已经改变,完全可以不再付出了。