为什么新的编程语言将类型转移到另一方?

Ing*_*nix 5 programming-languages

如果你看看Rust,Go,Swift,TypeScript和其他几个,并将它们与C/C++进行比较,我注意到的第一件事是类型如何移动位置.

int one = 1;
Run Code Online (Sandbox Code Playgroud)

比较:

let one:int = 1;
Run Code Online (Sandbox Code Playgroud)

我的问题:为什么?

对我个人来说,这是一个奇怪的阅读类型说明符,因为我很习惯他们在左边.因此,我感兴趣的是为什么类型说明符被移动 - 而这不仅仅是一个,而是许多现代/新语言在桌面上.

Eri*_*ert 22

对我来说,就个人而言,这是很奇怪的读取类型说明符,因为我很习惯他们在左边

英语是最好的语言,因为它是唯一一种语言,我认为它们的语言顺序相同.人们想知道为什么有人会说法语,所有的话都是错误的!

因此,我感兴趣的是为什么类型说明符被移动 - 而这不仅仅是一个,而是许多现代/新语言在桌面上.

我注意到你忽略了使用这种模式的许多旧语言的存在.立即浮现在Visual Basic(20世纪90年代中期).

Function F(x As String) As Object
Run Code Online (Sandbox Code Playgroud)

帕斯卡,20世纪70年代:

var
  Set1 : set of 1..10;
Run Code Online (Sandbox Code Playgroud)

简单类型的lambda演算,一种在计算机之前发明的编程语言,在20世纪40年代:

?x:S.?y:T:S-->T-->S
Run Code Online (Sandbox Code Playgroud)

整个ML家庭.我可以继续 有很多非常古老的语言使用正确的约定类型.

但我们可以比20世纪40年代更老.当你在数学中说f : Q --> R,你将左边的函数名称和右边的类型 - 从Q到R的映射.当你说x∈R表示x是真实的时,你就把这个类型放在右边."右侧的类型"早于C的左侧类型几个世纪.这不是什么新鲜事!

事实上,"左侧的类型"语法是奇怪的!这对你来说似乎很自然,因为你碰巧在你的成长岁月中使用了一种使用这种惯例的语言.

由于种种原因,正确语法的类型要优越得多.一些:

var x : int = 1;
function y(z : int) : string { ... }    
Run Code Online (Sandbox Code Playgroud)

强调x是变量,y是函数.如果类型出现在左侧并且您看到,int y那么直到稍后您才知道它是函数还是变量.这使得程序更难以阅读,这已经够糟糕了.作为一名编译器开发人员,让我告诉你,这个类型在C#左边是非常不方便的.(我可以指出C#语法如何处理类型位置的许多不一致.)

另一个原因:在"右侧输入"语法中,您可以使类型可选.如果你有

var x : int = 1;
Run Code Online (Sandbox Code Playgroud)

然后你可以很容易地说"好吧,我们可以推断int,所以消除它"

var x = 1;
Run Code Online (Sandbox Code Playgroud)

但如果int在左边,那么你做什么?

反过来说:你提到TypeScript.TypeScript是逐渐类型化的JavaScript.JavaScript中的约定已经存在

var x = 1;
function f(y) { }
Run Code Online (Sandbox Code Playgroud)

鉴于此,显然更容易修改现有代码和整个语言,在右侧引入可选类型元素,而不是将"var"和"function"关键字替换为类型.

还要考虑定位.当你说:

int x = 1;
Run Code Online (Sandbox Code Playgroud)

那么必须保持一致的两件事 - 类型和初始化器 - 尽可能地分开.与var x : int = 1;他们并排.并在

int f() {
   ...
   ...
   return 123;
}
Run Code Online (Sandbox Code Playgroud)

我们得到了什么?返回逻辑上尽可能地向右移动,那么为什么函数声明尽可能地将返回的类型移动到左边?"使用右侧语法的类型我们有这个很好的流程:

function f(x : string) : int 
{ ... ... ... return 123; }
Run Code Online (Sandbox Code Playgroud)

函数调用会发生什么?声明的流程现在与控制流程相同:左边的东西 - 形式参数的初始化 - 首先发生,右边的东西 - 生成返回值 - 最后发生.

我可以继续指出C风格如何完全倒退,但是已经很晚了.总结:首先,右侧的类型几乎在所有可能的方式都是优越的,其次,它非常非常老.使用此惯例的新语言是与传统实践一致的语言.

  • 这应该是有史以来最好的答案。我可能不同意右边的类型是优越的,但我绝对明白你的观点。说真的,很好的答案 - 希望我能接受两次:)。基本上我几乎是瞎子。所以我的屏幕放大视野很小。因此,当我阅读左侧的类型时,我知道会发生什么。我还可以按类型查找内容。但是 - 从长远来看,这更多是个人的事情。:) (2认同)