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