我几天前开始使用F#,但我不明白为什么重新定义了一些很长时间以来很普遍的事情?
/* my comment */,在几种语言中很常见,几十年来一直如此。真的有理由去(* my comment *)吗?type variablename(例如,int i这也是很常见的),难于解析该类型之前和之后的类型吗?!=不平等现象;是<>为了避免与其他事物发生冲突或只是“变得与众不同” 而进行了更改?<-与可变项一起使用,但=不可变..其背后的原因是什么?我敢肯定还有其他几个。
我不是在寻找有关更改是否良好的“意见”,但我很想知道它们背后是否存在某些特定的推理,例如简化解析等,因为我想知道这些变化的好处大于不遵循普遍采用的公约的危害。
Jör*_*tag 11
我几天前开始使用F#,但我不明白为什么重新定义了一些很长时间以来很普遍的事情?
- 例如/ *我的评论* /在几种语言中很常见,并且几十年来一直如此。是否真的有理由去(*我的评论*)?
F?是高度基于OCaml的,而OCaml是基于Caml的,Caml是基于标准ML的,而标准ML是基于ML的,而ML受了ISWIM的影响,而ISWIM受了ALGOL-60和LISP的影响。
(*/ *)是ML的注释语法。ML是在1970年代初期设计的。但是,使用括号进行注释的年龄更大,例如Pascal使用了{*/ *},Algol-68使用了{/ },并且在此之前将注释放在等式或证明旁边的括号中的时间已经更长了。
例如,Newspeak是一种很新的语言,它也使用(*/ *)。
- 用“类型变量名”定义的变量(例如“ int i”)也很常见,难于解析该类型之前还是之后都不保留类型?
使类型跟随名称也很常见,因此“ common”并不是一个很好的理由。在名称之后使用类型有很多优点,例如,推断类型的语法就变成了“省略类型”,而大多数将类型放在名称之前的语言则需要某种“伪类型”。例如,在Java和C?中,您必须说var foo在C ++中auto foo,依此类推。
请注意,许多现代语言都遵循此语法,例如Swift,Julia和Python的类型提示。更重要的是,全部位于C语法族中的Kotlin,Scala,TypeScript和Go的类型都在标识符后面。
- 同样,在几乎所有语言中,不等式都有!=;是将其更改为<>以避免与其他事物发生冲突,还是只是“与众不同”?
再次,它<>被用于多种语言,其中一些语言被广泛使用,例如SQL,还有Pascal及其后续语言(Modula-2,Oberon,Delphi)。使用过的Algol-68 ?(现代实现方式use /=,equals ?或=),Haskell的使用方式/=与现代Algol-68实现方式相同。Mathematica使用=!=,Scala还将其用于不等式类型(但!=用于值)。
在许多主流语言中,平等和绑定很容易混淆(例如,在C ==vs.中=)。使它们明显不同是一个优势。(在C语言中,某些编码标准要求使用Yoda条件语句来防止常见错误。)
- 使用<-和可变变量,但=表示不可变..它背后的原因是什么?
绑定常数,不变的“变量”(在数学意义上)和使可变引用可变是两个根本不同的操作。从视觉上区分它们是有意义的。
?自从甚至在程序设计还没有存在之前,就已经被用来表示数学绑定的变异。它也用在Smalltalk中(例如?,从ASCII中删除后,他们用替换了它:=,例如Pascal中也使用了)。
简而言之,我想挑战您提出这个问题的前提:F?没有重新定义很长一段时间内常见的事物,而是使用了很长一段时间内已经存在的已有定义。
请注意,很多原因归结为熟悉。我个人最初学习的语言是BASIC,Pascal和Rexx,随后是Smalltalk和Eiffel。在大学里,我们学习了Python,Haskell和Java。我目前最喜欢的语言是Ruby。
当我初次接触Java时,它对我来说看起来非常奇怪,即使现在我几乎只读写ECMAScript,我仍然难以克服C风格的语法。