首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >翻译语言的哪些功能可以不具备呢?

问翻译语言的哪些功能可以不具备呢?
EN

Stack Overflow用户
提问于 2010-03-25 15:17:43
回答 5查看 1K关注 0票数 7

解释语言通常更高级,因此具有动态类型(包括动态创建没有声明的新变量)、臭名昭著的eval和许多其他使程序员的生活更容易的特性--但是为什么编译语言也不能有这些特性呢?

我指的不是运行在VM上的像Java这样的语言,而是那些编译成二进制语言的语言,比如C(++)。

我现在不打算列出一个列表,但是如果您要问我指的是哪些特性,请查看PHP、Python、Ruby等所提供的功能。

  • 解释语言的哪些共同特性不能/不存在于编译语言中?为什么?
EN

回答 5

Stack Overflow用户

发布于 2010-03-25 15:32:27

无论源代码是编译到本机二进制文件,还是某种中间语言(Java /IL),还是解释的,都绝对是语言的特性。这只是一个实现的问题。

实际上,您可以为同一种语言提供编译器和解释器,例如

  • Haskell: GHC <-> GHCI
  • C: gcc <-> ch
  • VB6 : VS IDE <-> VB6编译器

某些语言特性,如eval或dynamic类型,可能会显示出所谓的“动态语言”和静态语言之间的区别,但是如何运行这一点永远不是首要问题。

票数 4
EN

Stack Overflow用户

发布于 2010-03-25 15:23:24

最初,解释语言的最大好处之一是调试。这样,在寻找程序不工作的原因时,您可以获得非常准确和详细的信息。然而,大多数编译器已经变得足够先进,不再是太大的交易了。

另一个主要的好处(无论如何,在我看来)是,使用解释语言,您不需要等待永恒的项目编译来测试它。

票数 0
EN

Stack Overflow用户

发布于 2010-03-25 15:28:05

例如,由于我认为非常明显的原因,您不可能做eval:确切地说,您将如何实现它?使运行时包含编译器的完整副本?每次您想要计算一个字符串时(记住每次都可能是不同的!)您会将字符串保存到文件中,在其上运行编译器以生成DLL/shared,然后加载DLL/shared并调用您的代码?你不明白为什么这可能有点不切实际吗?)

您可以在动态语言中发现这样的事情,如果没有基本上在幕后运行解释器,那么在静态代码中是无法做到的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2516754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档