不同的程序实现可以有相同的程序语义吗?
Can different program implementations have the same program semantics?
所以对于任何给定的语言,如果我们两次实现相同的程序(即任何给定输入的相同输出),使用不同的语法(即使用 i++
而不是 i+1
)将这两个程序具有相同的语义?为什么?
如果我们使用不同的构造(即 Arrays
与 Arraylists
),这是否同样适用?
谢谢
是的。根据编程语言的不同,可以有具有相同语义的不同语法结构(的组合)。
例如,我们可以定义一种具有 3 种结构的编程语言:A
和 B
,两者在语义上是等价的,组合(例如 XY
用于任何 X
和 Y
其中任何一个可以是 A
、B
或其任何组合)。因此程序 A
等同于程序 B
。另外 AA
等于 AB
、BA
和 BB
等
此外,如果我们用 C
扩展语言,在语义上等同于 AA
,那么,例如,BC
等同于 AAA
等
So for any given language, if we implement the same program(i.e same output for any given input) twice, using different syntax (i.e. using i++ instead of i+1) will the two programs have the same semantics?
这个问题是同义反复。答案是肯定的。很明显。
如果两个不同的程序对所有可能的输入集产生相同的结果,那么它们确实具有相同的语义。根据定义1.
Why?
因为这就是 "same semantics" 的意思!
Does the same apply in case where we use different constructs (i.e. Arrays vs Arraylists)?
是的。
(一个数据结构可能会使用更多内存,并且这可能会导致一个版本出现 OOME 而不是另一个版本......对于某些输入数据集。但我会争辩说程序不会产生相同的结果所有可能的输入。)
请注意,这适用于所有实用的编程语言。任何只能以一种方式编写程序的编程语言...可能限制太多而无法使用。
1 - 好的,所以任何研究过编程语义的人在读到这篇文章时可能会很高兴。但我试图提供一种直观的解释,而不是具有良好数学基础的解释。课程用马……正如他们所说。
所以对于任何给定的语言,如果我们两次实现相同的程序(即任何给定输入的相同输出),使用不同的语法(即使用 i++
而不是 i+1
)将这两个程序具有相同的语义?为什么?
如果我们使用不同的构造(即 Arrays
与 Arraylists
),这是否同样适用?
谢谢
是的。根据编程语言的不同,可以有具有相同语义的不同语法结构(的组合)。
例如,我们可以定义一种具有 3 种结构的编程语言:A
和 B
,两者在语义上是等价的,组合(例如 XY
用于任何 X
和 Y
其中任何一个可以是 A
、B
或其任何组合)。因此程序 A
等同于程序 B
。另外 AA
等于 AB
、BA
和 BB
等
此外,如果我们用 C
扩展语言,在语义上等同于 AA
,那么,例如,BC
等同于 AAA
等
So for any given language, if we implement the same program(i.e same output for any given input) twice, using different syntax (i.e. using i++ instead of i+1) will the two programs have the same semantics?
这个问题是同义反复。答案是肯定的。很明显。
如果两个不同的程序对所有可能的输入集产生相同的结果,那么它们确实具有相同的语义。根据定义1.
Why?
因为这就是 "same semantics" 的意思!
Does the same apply in case where we use different constructs (i.e. Arrays vs Arraylists)?
是的。
(一个数据结构可能会使用更多内存,并且这可能会导致一个版本出现 OOME 而不是另一个版本......对于某些输入数据集。但我会争辩说程序不会产生相同的结果所有可能的输入。)
请注意,这适用于所有实用的编程语言。任何只能以一种方式编写程序的编程语言...可能限制太多而无法使用。
1 - 好的,所以任何研究过编程语义的人在读到这篇文章时可能会很高兴。但我试图提供一种直观的解释,而不是具有良好数学基础的解释。课程用马……正如他们所说。