Почему некоторые общие стандарты были переопределены в F #? - PullRequest
2 голосов
/ 19 мая 2019

Я начал F # несколько дней назад, и я не понимаю, почему некоторые вещи, которые были распространены очень долго, были переопределены?

  • , например /* my comment */ встречается в нескольких языках итак было десятилетиями;была ли действительно причина для использования (* my comment *)?
  • с переменными, определенными с type variablename, такими как int i, также очень распространенным, было бы сложнее разобрать, чтобы оставить тип раньше, а непосле?
  • аналогично, почти во всех языках есть != для неравенства;менял его на <>, чтобы избежать столкновения с чем-то другим, или просто чтобы «быть другим»?
  • , используя <- с изменяемыми, но = для неизменяемого ... что за этим стоит?

Я уверен, что есть еще несколько человек.

Я не ищу «мнения» о том, хороши изменения или нет, но мне было бы интересно узнатьесли за ними есть какие-то конкретные аргументы, например, для облегчения синтаксического анализа и т. д., потому что мне любопытно посмотреть, перевешивает ли польза от этих изменений вред от несоблюдения общепринятых соглашений.

1 Ответ

10 голосов
/ 19 мая 2019

Я начал 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 на данный момент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...