【发布时间】:2011-03-29 14:00:42
【问题描述】:
在谈到编程语言的特性时,例如Programming Language Comparison 和D Language Feature Comparison Table,我想知道“特性”这个概念属于或讨论的语言的哪个方面?
- Semantics,
- 语法
- 还是别的什么?
感谢和问候!
【问题讨论】:
在谈到编程语言的特性时,例如Programming Language Comparison 和D Language Feature Comparison Table,我想知道“特性”这个概念属于或讨论的语言的哪个方面?
感谢和问候!
【问题讨论】:
这只是一种直觉,我不是语言理论专家或任何东西。我会说在编程语言中添加一个特性意味着两者兼而有之
IsExpr : "is" "(" someKindOfExpression ")")【讨论】:
x 增加 1 是一样的,不管它是 ++x,@ 987654324@ 或 inc(x))。但是也有足够多的语法火焰战,所以... ;)
这完全取决于您所说的“功能”是什么意思,以及它是如何实现的。一些特性,比如 Java 的泛型,只不过是语法糖——所以这是一个“语法特性”。由于type erasure,生成的字节码不受使用Java 泛型的影响。这允许与前通用(例如 Java 1.5)字节码向后兼容。
其他语言特性比句法级别更深入,例如 C# 的泛型,它使用 reification 实现以提供 "first-class" generic objects。
【讨论】:
class Foo<T> { public T x; } 不同于 class Foo<T extends Bar> { ... },两者都不同于 class Foo { int x; }。而且语法上的差异是最小的。
我认为编程语言“特性”的概念并没有明确的分离,因为运行时环境提供了许多特性,如垃圾收集 (Java) 或模式匹配 (Haskell)。所以,通常我会说编程语言 - 语法 - 本身没有提供任何功能。它只是确定语言的规则(语法)。由于行为是由代码(由语法通过遵守其规则产生)被解释的方式决定的,因此编程语言特性是一个语义方面。
【讨论】:
case x of () -> () 只是语法上有效的 Haskell,因为有模式匹配。