通常这是一个巧合。
编程语言随着时间的推移而发展,并且编译器和解释器的技术也得到了改进。随着主流计算平台功能的增强,底层处理的效率(即编译时间,解释开销,执行时间等)也不再那么重要。
语言语法确实会产生影响-例如,Pascal经过精心设计,因此可以使用单遍编译器-即对源代码进行一次遍历,并且您具有可执行的机器代码。另一方面,Ada对此并不重视,而且众所周知,Ada编译器很难编写-大多数都需要多次通过。(我多年前使用的一个非常好的Ada编译器是8遍编译器。您可能会想到,它非常慢。)
如果您查看诸如Fortran(已编译)和BASIC(已解释或已编译)之类的旧语言,则它们具有非常严格的语法和语义规则。[在使用BASIC的情况下,那就不是Bills旧的BASIC,您需要在此之前返回原始版本。
另一方面,看一下诸如APL(很多有趣的东西)之类的其他东西,它具有动态类型。它通常也被解释,但是也可以被编译。
宽松的语法是一种困难的语法-如果这意味着您具有可选的东西或可以推断出的东西,那么这意味着该语言具有足够的丰富性,可以将其剔除。再说一次,BASIC早在多年前,当“ LET”语句变为可选语句时!
您现在看到的许多想法(例如,无类型或动态类型)实际上是非常古老的-最早出现在1970年代或1980年代初期。它们的使用方式以及这些思想的使用语言已经发生了变化和增长。但从根本上说,许多新事物实际上是穿着新衣服打扮的旧东西。
这是我脑中浮现的一些例子:
- APL:动态类型。一般解释。来自1960年代/ 1970年代。
- 基本:强类型或动态类型。解释或编译。1970年代及以后。
- Fortran:强类型。已编译。1960或更早。
- Algol68:强打字。已编译。1960年代。
- PL / 1:强打字。已编译。1960年代。
- 帕斯卡:强打字。已编译。1970年代。(但是在1980年代,有一些P-System编译器与JIT编译器非常相似!)
- DEC早期对Fortran的某些实现和其他实现进行了部分编译和部分解释。
- Smalltalk:动态键入。编译为解释的字节码。1980年代。
- 序言:更加陌生。功能性。已编译(Turbo Prolog,有人吗?)。1980年代。
- C:强(哈哈)打字。已编译。今天是1960年代。
- 艾达:超级强打字。已编译。1980年代。
- Perl:动态打字。(强语法)。解释。1990年代(?)。
我可以继续。
- Nitpickers角落:许多解释语言在加载/读入源代码时被标记化或“字节编译”。这使解释器的后续操作更加简单。有时,您可以保存代码的字节编译版本。有时候你做不到。它仍然被解释。
更新:因为我不够清楚。
键入可能有很大差异。
编译时固定静态类型很常见(例如,C,Ada,C ++,Fortan等)。在这里,您可以声明TYPE的事物,并且永远都是这样。
动态类型化也是可能的,其中事物选择分配给它的类型。例如,PHP和一些早期的BASIC,以及APL,您将在其中为变量分配一个整数,此后便是整数类型。如果以后给它分配了一个字符串,则它是一个字符串类型。等等。
然后是松散类型,例如PHP,您可以在其中做一些真正奇怪的事情,例如为变量分配数字整数(带引号的字符串),然后向其添加数字。(例如,“ 5” + 5将得出10)。这是一块奇异的土地,但有时也非常非常有用。
但是这些是设计成语言的功能。该实现只是实现了这一点。