【问题标题】:Are features of programming languages a concept in semantics, syntax or something else?编程语言的特性是语义、语法还是其他方面的概念?
【发布时间】:2011-03-29 14:00:42
【问题描述】:

在谈到编程语言的特性时,例如Programming Language ComparisonD Language Feature Comparison Table,我想知道“特性”这个概念属于或讨论的语言的哪个方面?

感谢和问候!

【问题讨论】:

    标签: programming-languages


    【解决方案1】:

    这只是一种直觉,我不是语言理论专家或任何东西。我会说在编程语言中添加一个特性意味着两者兼而有之

    1. 为某些情况或构造添加语义(例如,“Is-expressions 根据以下五十条规则根据模板参数的类型是否与某些类型匹配返回布尔值:...”)
    2. 定义属于它的语法(例如在语法中添加IsExpr : "is" "(" someKindOfExpression ")"

    【讨论】:

    • 谢谢!但是,当谈论独立于特定语言的语言特征时,例如,在比较几种语言可能或可能没有共同的特征时,语言语法是否仍然起作用?
    • @Tim:在讨论这个问题时,很多人都关注语义,因为语法对程序员来说被认为不太重要(将x 增加 1 是一样的,不管它是 ++x,@ 987654324@ 或 inc(x))。但是也有足够多的语法火焰战,所以... ;)
    【解决方案2】:

    这完全取决于您所说的“功能”是什么意思,以及它是如何实现的。一些特性,比如 Java 的泛型,只不过是语法糖——所以这是一个“语法特性”。由于type erasure,生成的字节码不受使用Java 泛型的影响。这允许与前通用(例如 Java 1.5)字节码向后兼容。

    其他语言特性比句法级别更深入,例如 C# 的泛型,它使用 reification 实现以提供 "first-class" generic objects

    【讨论】:

    • 泛型不是“语法特性”。它们带有大量的语义规则,而不是轻量级的规则。即使它们只存在于编译时。
    • 那么你是说Java泛型是语法和语义的结合?
    • 当然。 class Foo<T> { public T x; } 不同于 class Foo<T extends Bar> { ... },两者都不同于 class Foo { int x; }。而且语法上的差异是最小的。
    【解决方案3】:

    我认为编程语言“特性”的概念并没有明确的分离,因为运行时环境提供了许多特性,如垃圾收集 (Java) 或模式匹配 (Haskell)。所以,通常我会说编程语言 - 语法 - 本身没有提供任何功能。它只是确定语言的规则(语法)。由于行为是由代码(由语法通过遵守其规则产生)被解释的方式决定的,因此编程语言特性是一个语义方面。

    【讨论】:

    • 但是这些特性被定义为编程语言的一部分,不管它们是如何实现的(例如在编译时与运行时)。许多特性都带有一些语法,如果没有这些特性,语言中就没有这些语法 - case x of () -> () 只是语法上有效的 Haskell,因为有模式匹配。
    • @delnan 很好的例子,但“case x of () -> ()”只是 Haskell 语法生成的一个可能的“句子”。你和我通过在心理上评估语义来理解它的含义。要成为编程语言的有用功能,必须评估/解释语法。但我只是在这里吹毛求疵;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多