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