【问题标题】:Can different program implementations have the same program semantics?不同的程序实现可以有相同的程序语义吗?
【发布时间】:2016-03-08 12:34:28
【问题描述】:

所以对于任何给定的语言,如果我们两次使用不同的语法(即使用i++而不是i+1)实现相同的程序(即任何给定输入的相同输出),这两个程序是否具有相同的语义?为什么? 如果我们使用不同的构造(即Arrays vs Arraylists),这同样适用吗?

谢谢

【问题讨论】:

    标签: semantics


    【解决方案1】:

    是的。根据编程语言的不同,可能存在(组合)具有相同语义的不同语法结构。

    例如,我们可以定义一种具有 3 个构造的编程语言:AB,它们在语义上是等效的,以及组合(例如,XY 用于任何 XY,其中任何一个这些可以是AB 或其任何组合)。因此程序A 等价于程序B。另外AA 等于ABBABB 等。

    此外,如果我们用C 扩展语言,它在语义上等同于AA,那么,例如,BC 等同于AAA 等等。

    【讨论】:

    • 所以不确定它是否具有相同的语义?
    • @Rakim 你是什么意思?
    • 你说的取决于编程语言。所以我猜“不同的构造 - 相同的语义”规则并不总是适用。编辑:我想我明白了你的意思。您正在谈论我们可以根据给定语言实现相同事物的不同方式
    • @Rakim 是的。这将包括所有允许您指定超过 2 个语义不同的程序的编程语言。
    • @Rakim 我的意思是所有可以编写两个或多个具有不同语义的程序的编程语言。
    【解决方案2】:

    所以对于任何给定的语言,如果我们两次实现相同的程序(即任何给定输入的相同输出),使用不同的语法(即使用 i++ 而不是 i+1)这两个程序会具有相同的语义吗?

    这个问题是同义反复。答案是肯定的。很明显。

    如果两个不同的程序对所有可能的输入集产生相同的结果,那么它们确实具有相同的语义。根据定义1

    为什么?

    因为这就是“相同语义”的意思!

    这同样适用于我们使用不同结构(即数组与数组列表)的情况吗?

    是的。

    (一个数据结构可能会使用更多内存,这可能会导致一个版本的 OOME 而不是另一个版本……对于某些输入数据集。但是我会争辩说,这些程序不会对所有可能的结果产生相同的结果输入。)

    请注意,这适用于所有实用的编程语言。任何一种编程语言,其中的程序只能以一种方式编写......可能过于严格而无法使用。


    1 - 好的,所以任何学习过编程语义的人在读到它时都可能会很适合。但我试图提供一个直观的解释,而不是一个具有良好数学基础的解释。课程用马……正如他们所说。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-18
      • 1970-01-01
      • 2021-09-28
      • 1970-01-01
      • 2019-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多