Я начал F # несколько дней назад, и я не понимаю, почему некоторые вещи, которые были распространены очень долго, были переопределены?
- например / * мой комментарий * /распространен в нескольких языках и был таким на протяжении десятилетий;Была ли действительно причина, чтобы пойти с (* мой комментарий *)?
F♯ в значительной степени основан на OCaml, который основан на Caml, который основан на Standard ML, который являетсяоснован на ML, на который повлиял ISWIM, на который повлияли ALGOL-60 и LISP.
(*
/ *)
- синтаксис комментариев ML.ML был разработан в начале 1970-х годов.Тем не менее, использование скобок для комментариев еще старше, например, Паскаль использовал {*
/ *}
, Алгол-68 использовал {
/ }
, а размещение комментариев в скобках рядом с уравнениями или доказательствами было сделано гораздо дольше, прежде чемthat.
Newspeak, который является довольно новым языком, также использует, например, (*
/ *)
.
- с переменными, определенными с помощью 'type variablename'Такие, как 'int i', также очень распространены, было бы сложнее разобрать, чтобы оставить тип до, а не после?
Наличие типа, следующего за именем, также очень распространенотак что «обычное» не очень хорошая причина.Преимущество наличия типа после имени, например, синтаксис для выводимых типов становится просто «опустить тип», в то время как большинству языков, которые ставят тип перед именем, необходим некоторый «псевдотип».Например, в Java и C♯ вы должны сказать var foo
, в C ++ auto foo
и т. Д.
Обратите внимание, что многие современные языки следуют этому синтаксису, например, Swift, Julia, а также подсказки типов Python,Что еще более важно, Kotlin, Scala, TypeScript и Go, все из которых расположены прямо в синтаксисе семейства C, имеют тип после идентификатора.
- аналогично, почти во всех языках, которые выиметь! = для неравенства;менял его на <>, чтобы избежать столкновения с чем-то другим, или просто чтобы «быть другим»?
Опять же, <>
используется на нескольких языках, некоторые из них очень широко-используется, например, SQL, также Pascal и его наследники (Modula-2, Oberon, Delphi).Algol-68 использовал ≠
(современные реализации используют /=
, равенство ≡
или =
), Haskell использует /=
, как современные реализации Algol-68.Mathematica использует =!=
, а Scala также использует его для равенства типа (но использует !=
для значений).
Во многих основных языках равенство и связывание легко путаются (например, в C ==
против =
).Делать их заметно разными - это преимущество.(В C некоторые стандарты кодирования требуют условных кодов Йоды для предотвращения распространенных ошибок.)
- с использованием <- с изменяемыми значениями, но = для неизменяемых ... в чем причинаэто? </li>
Связывание постоянной, неизменной «переменной» (в математическом смысле) и изменение мутабельной ссылки - это две принципиально разные операции.Имеет смысл визуально различать их.
←
использовался для обозначения мутации привязки в математике еще до того, как программирование существовало.Он также используется в Smalltalk (когда ←
был удален из ASCII, они заменили его на :=
, который также используется в Паскале, например).
Итак, вкратце, я бы бросил вызовпредпосылка вашего вопроса: F♯ не переопределял вещи, которые были распространены очень долго, он использовал уже существующие определения , которые были распространены очень долго.
Обратите внимание, что многое из этогосводится к знакомству.Лично я выучил BASIC, Pascal и Rexx в качестве моих первых языков, а затем Smalltalk и Eiffel.В университете мы изучали Python, Haskell и Java.Мой текущий любимый язык - Ruby.
Когда я впервые столкнулся с Java, он выглядел невероятно странным для меня, и у меня все еще есть проблемы с синтаксисом в стиле C, хотя я почти исключительно читаю инаписать ECMAScript на данный момент.