Если операторы Ascii определены, то почему не символы Unicode? - PullRequest
12 голосов
/ 21 июля 2009

Я уверен, что присоединяюсь ко многим в том, что рад, что наконец-то появился мощный язык, тесно связанный с основной средой GUI / Database / Communication.

Я не был уверен, где опубликовать это, но здесь, кажется, лучшее место.

Мне нужно использовать символы символов Юникода в качестве операторов или имен функций. Я бы хотел синтаксический сахар, но он мне не нужен.

Гай Стил указал в «Связях ACM», что «*» был вынужденным выбором, когда он был принят из Ascii как множитель, но мое программное обеспечение работает в Unicode, поэтому я больше не привязан к Ascii.

!

$% & * + - / <=> @ ^ | ~:.

Часть локализации включает в себя местных программистов. Зачем ограничивать набор операторов, которые могут быть определены в F #? Это не ортогонально принятию C # и F # многих Unicode IsLetter в идентификаторах.

Кроме того, F #, вероятно, будет использоваться для символического манипулирования задачами логики, математики, физики и т. Д. Это значительно упрощает работу, если имеется прямое отображение на язык основных операторов. (F # и C # принимают много Unicode IsLetter? Так же как IsDigit '? Это - запрос разрешить Unicode IsSymbol? Как операторы с приоритетом, например, *, или, так как "+" является и унарным и двоичным оператором, Я мог бы смириться с приоритетом + и компенсировать разницу в скобках.

Примите во внимание специфические для предметной области потребности логиков, математиков, физиков и т. Д. Я бы лучше написал символьный дифференциатор или интегратор, используя математические символы, чем перестановки Ascii уже принятых операторов.

  • Логика: ∀ ∃ ⇒
  • Математика: ∑ ∫ ∂
  • Теория групп: ≤ ≥ ∈ ∉
  • Теория множеств: ⊆ ⊇ ⊃ ∪ ∩
  • Тензорные: ⊗

Я написал много языков на других языках, но поскольку F # тесно интегрирован с .Net, эта проблема создает особые проблемы без языковой поддержки:

Нетрудно сложить транслятор, который берет источник F # Unicode-оператора и построчно сопоставляет его с источником F # оператора Ascii.

Но при отладке, как мне убедиться, что программист все еще видит их непереведенный источник? И что они могут видеть значения переменных.

Операторы и их преобразование тривиальны. Но как мне убедиться, что перевод - это то, что компилируется, пока программист видит свой собственный источник? Если я правильно отображаю строку для строки, как я могу убедиться, что они все еще могут указывать на переменную и видеть ее значение?

Ответы [ 4 ]

2 голосов
/ 05 февраля 2013

Существует математическое (Unicode) расширение символа для F #, доступное в Visual Studio Gallery .

Это позволяет вам определять символы Юникода, например ::

let inline (~∑) xs = xs |> Seq.sum

let total = ∑myList
1 голос
/ 21 июля 2009

Вас может заинтересовать Project Fortress , который является новым функциональным языком программирования, который включает в себя набор символов Unicode (среди многих других функций). В частности, см. Страницу Математический синтаксис в Fortress , которая содержит пример кода.

1 голос
/ 22 июля 2009

Для интересного обсуждения по этой проверке: http://cs.hubfs.net/forums/thread/9690.aspx

1 голос
/ 21 июля 2009

Другие языки, такие как Scala, допускают использование операторов вне диапазона ASCII - математические символы (Sm) и другие символы (So)

...