忽然想到一个问题,如果我们不扩充C++运行时,能否实现真编译的模板?

fixopen 2005-12-09 03:17:08
RT
...全文
547 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
vollin 2006-01-24
  • 打赏
  • 举报
回复
我的意思是,不要改变语言,而只加入新的库,让使用这个库的一些特殊对象具有一些特殊的特征。
这样只要有相应的库,我们就可以使用更多的设计手段,或模式。就能够提高效率。
vollin 2006-01-24
  • 打赏
  • 举报
回复
UP,我个人觉得如果要实现运行时,可以采用公用基类的办法;如果要为此而变成解释语言,那就不是C++了。
zeusnchen 2006-01-17
  • 打赏
  • 举报
回复
C++的template是在编译时实现generalization的
楼主事实上是希望在C++中添加一种新的支持泛型编程的机制(运行时?或至少事后编译阶段)
fbms3 2006-01-10
  • 打赏
  • 举报
回复
感觉云山雾罩的.
nicknide 2006-01-08
  • 打赏
  • 举报
回复
暂时不行, 也感觉没有必要。
Kid4you 2006-01-08
  • 打赏
  • 举报
回复
语言的用途不一样.
ruodeer 2006-01-07
  • 打赏
  • 举报
回复
编译器和模板??
lexchou 2006-01-07
  • 打赏
  • 举报
回复
C++的模版是在编译期进行特化的
C#的模版是在运行期进行特化的
java的不清楚,但按照行面的描述,也应该是编译期进行特化的
Dev 2006-01-07
  • 打赏
  • 举报
回复
同意 XiaoDingDangKM(小叮当)

编译和解释没有绝对的界限,是为了达到某些目的而采取的手段。我觉得编译的目的就是能把所有能确定的东西先确定下来,解决效率问题,而解释是解决通用性的问题。编译程序中也有解释成份,如C++中运行时虚函数地址的解析。解释中也有编译,VB中有伪编译和真编译。

C++把不真编译模版,也许考虑的就是效率问题。而C#、 java为什么看上去可以实例化,不把它当作负担,因为他们本身就是解释语言。

^_^
XiaoDingDangKM 2006-01-05
  • 打赏
  • 举报
回复
要实现“真”编译,我认为只有将模板中的确定因素预编译,不确定因素待运行时解释,最后合成一个确定大小、地址、合理的可执行模块。如果抽不出可预编译因素,也就等于运行时解释。效率不敢恭维!其实真而不真。最终底层是cpu指令序列,而指令是要求有确切参数的(地址、大小等)。
当然有一种真编译有点意义,那就是先完成词法分析、语法分析等处理,运行时就不需要这些费时的过程。剩下的就是具体类型代入后的语义分析、目标码生成。我不知道java、.net还有其它高招吗?
泛型编程是一种抽象编程,抽象是需要实例化的,实例化是需要解释的。何为真?
foochow 2005-12-31
  • 打赏
  • 举报
回复
板凳,学习!
firingme 2005-12-31
  • 打赏
  • 举报
回复
这个应该不是compile time和run time之间的差别,而是compiler和linker之间的差别。
fixopen 2005-12-30
  • 打赏
  • 举报
回复
另外,你是否也同意,如果不扩充C++Runtime,C++的模板就不能真编译?
fixopen 2005-12-30
  • 打赏
  • 举报
回复
Dev(东方云龙)的回答上了正轨.
不过我有一事不明,你是如何区分哪些工作应该是编译期的,而另一些是运行期的?
Dev 2005-12-28
  • 打赏
  • 举报
回复
当然不可以的。除非你使用一个动态的解释机,那就是你提过就是所谓的CLI的强大,把编译期的工作放到运行期去做,你要衡量代价有多大。其实没有多大的意义。

^_^
fixopen 2005-12-26
  • 打赏
  • 举报
回复
不知道什么原因,我总是看不到能让我觉得有希望的回复。说实话,我觉得C++语言不扩充运行时,是没有办法实现模板的真编译的。

baickl(chenzg)说的关于基类什么的,我觉得与模板编译没有关系。
baickl 2005-12-17
  • 打赏
  • 举报
回复
模板只有被实例化时才会生成目标代码,不然编译器不知道他的具体类型,怎么生成目标代码啊?
Java和C#应该是有默认基类对象的,他们的任何对象类型都有一个默认的基类,这是编译器级别的实现.C++,也可以做到这点,但是你不可能要求每个用你的开发库的人,都创建基于你的基类的类.
xenix 2005-12-16
  • 打赏
  • 举报
回复
偶个人的看法是模版是用来控制编译器的语言,正如宏是控制预处理器的语言一样,这个跟 runtime 系统毫无关系.
xili 2005-12-12
  • 打赏
  • 举报
回复
原来竟然是 runtime. 受教.
fixopen 2005-12-12
  • 打赏
  • 举报
回复
运行时本身就是一个名词,最基本的意思是程序处于活动状态的时间段,后来用来代表程序运行时所依赖的支持环境,C和C++都是只需要最小运行时支持的语言,而Java和C#则需要强大的运行时。Python等动态语言的运行时就更为强大了。
加载更多回复(14)
一键编译完成即可用于中文和英文的语音合成 C++是一种面向对象的计算机程序设计语言,由美国AT&T贝尔实验室的本贾尼·斯特劳斯特卢普博士在20世纪80年代初期发明并实现(最初这种语言被称作“C with Classes”带类的C)。它是一种静态数据类型检查的、支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、泛型程序设计等多种程序设计风格。 图片 C++是C语言的继承,进一步扩充和完善了C语言,成为一种面向对象的程序设计语言。C++这个词在中国大陆的程序员圈子中通常被读做“C加加”,而西方的程序员通常读做“C plus plus”,“CPP”。 在C基础上,一九八三年又由贝尔实验室的Bjarne Strou-strup推出了C++C++进一步扩充和完善了C语言,成为一种面向 对象的程序设计语言。C++目前流行的编译器最新版本是Borland C++ 4.5,Symantec C++ 6.1,和Microsoft Visual C++ 2012。C++提出了一些更为深入的概念,它所支持的这些面向对象的概念容易将问题空间直接地映射到程序空间,为程序员提供了一种与传统结构程序设计不同的思维方式和编程方法。因而也增加了整个语言的复杂性,掌握起来有一定难度。 图片 C++由美国AT&T贝尔实验室的本贾尼·斯特劳斯特卢普博士在20世纪80年代初期发明并实现(最初这种语言被称作“C with Classes”带类的C)。开始,C++是作为C语言的增强版出现的,从给C语言增加类开始,不断的增加新特性。虚函数(virtual function)、运算符重载(Operator Overloading)、多重继承(Multiple Inheritance)、模板(Template)、异常(Exception)、RTTI、命名空间(Name Space)逐渐被加入标准。

3,882

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧