Language agnostic 程序设计语言之间的关系

Language agnostic 程序设计语言之间的关系,language-agnostic,Language Agnostic,我想知道以下问题: 它是什么意思?可以 它可以用数学来定义吗?它是 与子集/超集相关 初等集合论中的概念 几乎所有现有的语言 用一些小的语言实现/编写 低级语言的数量?对于 例如,大多数语言都是书面的吗 在C中?C++是用C?< /P>编写的 这两者之间有什么关系吗 实施关系与管理 网络的子集/超集概念 语言 在语言特征方面,有些 语言比其他语言有更多的含义。 在某些情况下,有些人拥有所有 其他一些特征,比如,, C++是否具有C?< /P>的所有特征? 这两者之间有什么关系吗 子集/超集关系

我想知道以下问题:

  • 它是什么意思?可以 它可以用数学来定义吗?它是 与子集/超集相关 初等集合论中的概念
  • 几乎所有现有的语言 用一些小的语言实现/编写 低级语言的数量?对于 例如,大多数语言都是书面的吗 在C中?C++是用C?< /P>编写的 这两者之间有什么关系吗 实施关系与管理 网络的子集/超集概念 语言

  • 在语言特征方面,有些 语言比其他语言有更多的含义。 在某些情况下,有些人拥有所有 其他一些特征,比如,, C++是否具有C?< /P>的所有特征? 这两者之间有什么关系吗 子集/超集关系 特性集和 之间的子集/超集关系 语言

  • 还有其他方面需要考虑吗 刻画 语言
  • 谢谢和问候

  • 尽管术语和一般概念来自集合论(如果将编程语言定义为多个集合,则可以使用术语文字,并查看其中一些集合之间的子集/超集关系),对于所有实际用途来说,这个定义都要非正式得多:如果在L2中有效的程序在L1中也有效,那么L1语言就是L2语言的超集
  • 不要把语言与语言实现混为一谈。C++只是一个抽象的规范,但它已经以多种方式实现了——首先是C++,现在是C++。但是基本上,是的,因为L的第一个实现不能用L来写,所以你必须用别的东西来写。其他语言通常是一种广泛使用的成熟语言。在解释器/VMS的情况下,通常是C或C++用于原始速度,并具有对内存管理的控制。
  • 很少有“多”或“少”,总是有“不同”。C++是在C语言之上的,因此它具有它的大多数特征。但是即使在这种情况下,我们也没有真正的超集关系,而不是“更多”的特性——C++没有C的所有特征(至少,至少)——只是想到C99,可变长度数组来给出一个具体的例子。要成为另一种语言的完整超集,一种语言当然需要支持该语言的所有部分。在这种情况下,我想人们确实可以说它有“更多”的特性
  • 不计其数。选择你的,发挥你的想象力。然而,它们很少有用或有趣

  • 形式语言有一个严格的定义——语言L1是语言L2的子集,当且仅当L1的每个格式良好的公式都是L2的格式良好的公式

    在编程语言的情况下,“格式良好的公式”意味着语法上有效的程序,您可能希望也可能不希望您对“子集”的定义不仅表示L1的有效程序也是L2的有效程序,而且表示它在L2中与L1中具有相同的语义。由于C和C++都具有未定义行为的语义概念,所以你也可以说,对于L1是L2的子集,只需要每个具有定义行为的语法有效的程序在L2中都是有效的,并且具有相同的定义行为——不需要L1中的UB的每个程序也在L2中都有UB。形式语言不定义语义,只定义语法,这就是为什么它不是第一个定义的一部分

    C++不是真正的C超集,编写C++程序的有效C++程序很容易,可能是C++中保留C中未预留的一些关键字的最明显的方式,因此,使用<代码>新< /C> >作为变量名的有效C程序不是有效的C++。在实践中,人们谈论一种稍微模糊的语言是超集的概念,并且可能说C++是“几乎”C的超集,这意味着许多有效的C程序也是有效的C++。当然,松散的概念可能导致错误(通信和编程)

    当您试图更改语言(创建新版本)同时保持所谓的“向后兼容性”时,子集的正确定义非常重要。要使新版本与旧版本真正向后兼容,新版本的实现应该完全像以前一样运行旧版本中的每个程序(至少在语言定义的范围内),因为这意味着用户可以更新到新版本,并且所有旧程序仍能工作(至少,假设他们只依赖于保证的行为)这同样适用于库API,只是你不担心整个语言,只担心与接口的交互

    “某种语言是另一种语言的子集/超集”是什么意思

    在语法上,如果在语言a中有效的每个程序在语言B中也有效,则语言a是语言B的子集。在语义上,如果它是语法子集,则它是子集,并且每个有效的a程序在语言B中也表现出相同的行为

    它能在数学中定义吗?它与初等集合论中的子集/超集概念有关吗

    语法子集:如果
    p_A
    是语言A中所有有效程序的集合,
    p_B
    是语言B中所有有效程序的集合,那么语言
    A
    就是语言
    B
    的语法子集,如果
    p_A
    p_B
    的子集

    语义子集:让
    A(p)
    成为描述A语言中程序
    p
    行为的函数,而
    B(p)
    则是描述B语言中程序
    p
    行为的函数。A是B的子集,当且仅当定义了
    A(p)
    的所有
    p
    时,
    B(p)
    也被定义,并且
    A(p)=B(p)

    几乎所有现有语言都是用少数低级语言实现/编写的吗

    当然,这取决于你对“几乎所有”的定义