Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Programming languages 为什么新的编程语言会将类型转移到另一边?_Programming Languages - Fatal编程技术网

Programming languages 为什么新的编程语言会将类型转移到另一边?

Programming languages 为什么新的编程语言会将类型转移到另一边?,programming-languages,Programming Languages,如果你看看Rust、Go、Swift、TypeScript和其他一些,并将它们与C/C++进行比较,我注意到的第一件事是类型如何移动位置 int one = 1; 与之相比: let one:int = 1; 我的问题:为什么 对我个人来说,阅读类型说明符太离谱是很奇怪的,因为我已经习惯了它们在左边。因此,我感兴趣的是,为什么类型说明符会被移动——这不是一种情况,而是许多现代/新语言的情况。如果你进行网络搜索,不难找到新语言的开发人员用他们自己的话回答这个问题。例如,Go开发人员在这方面有自

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

int one = 1;
与之相比:

let one:int = 1;
我的问题:为什么


对我个人来说,阅读类型说明符太离谱是很奇怪的,因为我已经习惯了它们在左边。因此,我感兴趣的是,为什么类型说明符会被移动——这不是一种情况,而是许多现代/新语言的情况。

如果你进行网络搜索,不难找到新语言的开发人员用他们自己的话回答这个问题。例如,Go开发人员在这方面有自己的观点,在他们的语言博客上也有自己的观点。许多程序员已经习惯了类似C的语言,以至于任何一种选择都显得很奇怪,所以这个问题经常出现

然而,您可能会认为C类型声明语法本身充其量也很奇怪。指针和函数类型的类似于模式的特性很快变得笨拙和不直观,并且从来没有作为任何更通用的模式匹配工具的一部分开发,也没有开发成任何类型的模式匹配工具。为了熟悉,它们或多或少地被许多后续的类C语言所采用,但该特性本身更像是一个失败的实验,为了向后兼容,我们不得不接受它

从C类型语法中解脱出来的一个好处是,它使在更多的地方使用类型比只使用声明更容易。如果可以方便地将类型放置在任何有意义的地方,则可以将类型用作注释,如中所述

对我个人来说,阅读类型说明符太离谱是很奇怪的,因为我非常习惯它们在左边

英语是最好的语言,因为我认为它是唯一一种语言,单词的顺序是一样的。有人想知道为什么会有人说法语,而且单词的顺序都不对

因此,我感兴趣的是,为什么类型说明符会被移动——这不是一种类型说明符的情况,而是摆在桌面上的许多现代/新语言的情况

我注意到,您忽略了许多使用此模式的旧语言的存在。VisualBasic(1990年代中期)立即浮现在脑海中

Function F(x As String) As Object
帕斯卡,1970年代:

var
  Set1 : set of 1..10;
简单输入lambda演算,一种在计算机出现之前于20世纪40年代发明的编程语言:

λx:S.λy:T:S-->T-->S
整个ML家族。我可以继续。有很多非常古老的语言使用正确约定的类型

但我们可以比20世纪40年代老得多。当你在数学中说f:Q-->R时,你把函数名放在左边,把类型——从Q到R的映射——放在右边。当你说x的时候∈R表示x是实数,你把类型放在右边。“右边的类型”比C中左边的类型早了几个世纪。这不是什么新鲜事

事实上,“左边的类型”语法很奇怪!这对你来说很自然,因为你在成长过程中碰巧使用了一种使用这种习惯的语言

出于多种原因,右侧语法中的类型要优越得多。只有几个:

var x : int = 1;
function y(z : int) : string { ... }    
强调x是一个变量,y是一个函数。如果类型出现在左侧,并且您看到
int y
,则直到稍后您才知道它是函数还是变量。这使得程序更难让人阅读,这已经够糟糕的了。作为一名编译器开发人员,让我告诉您,C#中的类型位于左侧是非常不方便的。(我可以指出C#语法在处理类型位置时存在许多不一致之处。)

另一个原因:在“右边的类型”语法中,您可以使类型成为可选的。如果你有

var x : int = 1;
然后你可以很容易地说“好吧,我们可以推断出int,然后消除它”

但是如果int在左边,你会怎么做

反过来说:你提到了打字脚本。TypeScript是一种逐渐类型化的JavaScript。JavaScript中的约定已经过时了

var x = 1;
function f(y) { }
考虑到这一点,显然,在右侧引入可选类型元素比用类型替换“var”和“function”关键字更容易修改现有代码和整个语言

还要考虑定位。当你说:

int x = 1;
那么,必须一致的两件事——类型和初始值设定项——尽可能地分开。与
var x:int=1它们是并排的。而且

int f() {
   ...
   ...
   return 123;
}
我们有什么?返回在逻辑上尽可能向右,那么为什么函数声明会将返回的类型尽可能向左移动呢?“对于向右的类型语法,我们有一个很好的流程:

function f(x : string) : int 
{ ... ... ... return 123; }
函数调用中会发生什么?声明流现在与控制流相同:左边的事情——形式参数的初始化——首先发生,右边的事情——返回值的生成——最后发生


我可以进一步指出C风格是如何完全倒退的,但现在已经晚了。总结:第一,右边的类型在几乎所有可能的方面都是优越的,第二,它非常非常古老。使用这种惯例的新语言是与传统做法一致的。

看看w这里的类型是在UML.even,当C++是显性的UML时,将类型按不同的顺序排列。嗯……这些问题的答案都没有提到Curry Howard Isomorphism(其中代码< A:A/<代码>将意味着A是命题A或A类型A的证明)。我不会说这个实验失败了;失败的实验是我们从中学不到任何东西的实验。希望我们从实验中学到了人类可读的a型
function f(x : string) : int 
{ ... ... ... return 123; }