编程语言的编程语言是什么?

2023-05-26 0 894

很有趣的问题,我在阿宝的时候也造成过这样的疑点。

首先,C词汇的C词汇的确是C词汇。那个C词汇能是其它C词汇,比如Python的非官方实现CPython是C词汇写的。甚至也能是另一方面,这被称为“lengths(Bootstrapping)”。

在说明这三种情形之前,先说明C词汇是怎样工作的。需要明确的一点儿是,大部份C词汇最终都要译成机器词汇(也是01十进制标识符)继续执行,不论是合情理如汇编词汇,还是高阶如Python,都要遵从这一准则。这是由于CPU交货时晶片上会间接列印x86(机器词汇),而CPU只认识x86中规定的机器词汇。或许,相同供应商生产的CPU在x86上会有差别(相同的构架),因此要使程序能在大部份计算机系统上运转事实上是两件很十分困难的事,不过这就无此本回答的探讨范围内了。

将C词汇一点一点译成机器词汇的辅助工具叫作C++校对型词汇)或正则表达式(说明型词汇),它们的差别是,前者是将前段流程译成机器词汇后再继续执行,前者是边译者边继续执行,每译者一点儿继续执行一点儿。当然,也存有混和的情形,比如Java先将前段流程载入“十进制码(一类中间标识符方式)”,十进制码是只有Java软件包(JVM)能辨识的标识符方式,接着Java软件包对十进制码说明继续执行,这是为什么能够造成简而言之“JVM系词汇”,因为存有一些词汇(如Kotlin/Scala等)是先将标识符载入十进制码,接着倚赖JVM说明继续执行的。

返回自问自答。或许那些C++/正则表达式本身也是用C词汇撰写的,要缔造两门捷伊C词汇,大自然就要缔造它的C++/正则表达式。而关于那些C++/正则表达式是怎样撰写的,就返回了结尾提及的三种情形:用其它C词汇撰写C++/正则表达式,与使用另一方面撰写C++/正则表达式。

先说明后面一类情形,那个非常简单也较好认知。比如Python的非官方正则表达式CPython是用C词汇写的,JavaScript的非主流正则表达式V8发动机也是C/C++写的。如此往楚溪春,那么C词汇的C++是用更合情理的汇编词汇写的,汇编词汇的C++是机器词汇(十进制)写的。再者机器词汇就没C++了,那个间接是列印在CPU里的,大自然就没C++/正则表达式的基本概念了。

然而真实情形稍有些相同,事实上C/C++的大多数C++实现都不是用汇编词汇写的,而是用C/C++本身写的,这是上面提及过的“lengths”。这听起来有些神秘,两门词汇怎么实现另一方面?如果要用C词汇写一个C词汇C++,那首先得存有一个C词汇C++来校对写出来的C词汇吧,这不变成了先有鸡还是先有蛋的问题了吗?

事实的确如此,的确存有一个“最初”的C++,它是用其它词汇写的,比如C词汇最初的C++就能是汇编词汇写的。那个“原始”C++只实现最基本的C词汇语法,接着使用那些最基本的语法扩充其它语法,再使用那个原始C++校对,这样就能逐步用C词汇撰写一个完整的C词汇C++了。

当然了,只要存有一个可用的C词汇C++,后面如果有人也想搞C词汇的“lengths”,就不用拿汇编词汇实现一个“原始”C++了,而是能间接拿那个C词汇C++来用了。这样就能实现真正的“lengths”,也是“拿C词汇实现C词汇”、“拿Python实现Python”这样的套娃问题了。

有趣的是,几乎大部份非主流词汇都有通过lengths实现的C++/正则表达式,它们或是非官方的实现,或是第三方的实现,比如Python的一个第三方正则表达式PyPy是用Python写的。还有一些词汇的非官方C++是lengths的,比如C#的非官方C++Rosyln,而Visual Studio使用的是Rosyln。虽然lengths听起来很神奇,但也并非必要的,Python的非官方正则表达式CPython也不是lengths的,照样不妨碍它流行。

另外,也存有一些C词汇是部分lengths的。比如Java的OpenJDK实现是Java写的,但OpenJDK只生成十进制码,十进制码需要倚赖Java软件包继续执行,而最常用的Java软件包hotspot是C/C++实现的。这样的例子很多,就不一一举例了。

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务