2010-07-14 3 views
3

Я работаю на языке программирования общего назначения. В дополнении к современным требованиям поддержки Unicode в строках и идентификаторах, я рассматриваю поставки альтернативных вариант написания некоторых операторов, а именно:Языки программирования, которые используют специальные символы

  • реляционные ( для <=>=!=)

  • побитовых и Setwise ( для &|)

  • Логическое (¬ для &&||!)

  • Стрелки ( для ->=>)

Я знаю, что APL и Fortress делают использование специальных символов — и бывших часто насмешек об этом —, но они оба очень ориентированы на академическое и научное использование. Имеют ли специальные персонажи какое-либо место на современном, неакадемическом языке?

+10

Пожалуйста, используйте символ снеговика (U + 2603) как способ указать, что объект должен быть заморожен (сделан неизменным). На каждом языке программирования должен быть снеговик. –

+3

@fuzzy леденец: Нет. У меня есть мой ответ. @ Jon Skeet: Пасхальное яйцо чередует правописание на 'const', здесь я прихожу. –

+0

Вы пытаетесь создать что-то менее читаемое, а Perl не я? Признай это! ;-) – Rook

ответ

6

Специальные символы имеют любое место на современном неакадемическом языке?

Да,но потому что на большинстве настольных компьютеров поддержка специальных символов еще ужасно (плохие редакторы, плохие шрифты, вы называете это),

  • Вы лучше планировать десять лет вперед.
  • Лучше быть очень уверен, что есть хороший, годный для использования альтернативный вариант использования только символов ASCII.

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

Некоторые люди, такие как постпроцессор, то есть красивый принттер, который принимает последовательности символов ASCII и отображает их как нечто другое. Хотя я всегда находил этот стиль ужасно запутанным, он довольно популярен и успешный среди некоторых программистов Haskell.

+0

Похоже, что WEB & CWEB от Дональда Кнута будет другим примером постобработки для создания специальных персонажей, не так ли? Конечно, они делают гораздо больше, чем преобразование '<=' в '≤'. –

+0

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

4

По-моему, им не место в языке, но определенно принадлежит по умолчанию препроцессор. Однако вы можете столкнуться с проблемой APL-клавиатуры. (и возможной визуальной двусмысленности).

Ограниченный пример этого в качестве предварительной/пост-обработки будет сцеженным кодом.

+0

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

2

Это интересная концепция, но разве вы не беспокоитесь о том, что несколько написаний одной и той же вещи сделают синтаксический анализ кода более сложным, особенно для IDE? Не говоря уже о дополнительном времени, затраченном на обучение тому, что означают эти символы для новых программистов? Если вы поддерживаете unicode и, возможно, другие языки (переменные на японском?), Они создают еще один слой непостижимости. Кроме того, насколько полезны вы нашли их логическую противоположность, C trigraph (http://en.wikipedia.org/wiki/Digraphs_and_trigraphs#C)? :-)

+0

С моей текущей настройкой добавление альтернативных написаний для операторов тривиально, и редакторы действительно должны знать только, что существуют альтернативные варианты написания, а не синонимы.Я намерен поддерживать не только неанглийские переменные, но и ключевые слова * (например, ChinesePython). Мне вообще не нужны триграфы, но в настоящее время на клавиатуре почти гарантированно есть символы, необходимые для C. Единичные символы взяты из математики и должны быть * проще * запомнить. Например, мне потребовалось некоторое время, чтобы сломать моего дислексического друга его привычкой писать '= <' вместо '<=' из-за симметрии с '> ='. –

+0

@ Возможно, ваш друг программист-программист? –

+0

@Norman: Поскольку я видел все, что он написал, и поскольку ничто из этого не было ни в чем другом, кроме Java, C++ или VHDL, я почему-то сомневаюсь. Но вы никогда не знаете, к чему приходят люди, когда никто не смотрит. –

0

Мне очень нравится использовать правильные символы. Однако для того, чтобы использовать, я бы действительно хотел, чтобы клавиатура имела дополнительные клавиши пунктуации, которые будут использоваться для них. И пока мы на нем, все, как { } () " ? + *, все тоже должны быть на своих же клавишах.

+3

Нам нужна клавиатура программистов. – GONeale

+1

@GONeale: Ад да. Некоторое время назад я сдался и изменил раскладку клавиатуры, поменял цифры символами и другие общие символы сдвига со своими сменными аналогами. Это сделало мои кодирующие миры более быстрыми и удобными. –

0

Не уверен относительно языка общего назначения, но у них есть место в DSL для домена, где они разумны. И это, безусловно, можно сделать на некоторых современных языках. Пример в Scala см. В разделе this blog post.

2

Специальные символы и являются зарезервированными словами в Scala. используется для введения привязок генераторов, тогда как используется в определениях функций для разделения списков параметров из тела функции.

Примеры:

for { 
    word ← List("Hello", "World") 
    character ← word 
} println(character) 

val square = (x: Int) ⇒ x * x 

Следует отметить, что в Scala компилятор позволяет также ASCII альтернативы вышеуказанных символов (т.е. <- и =>).

1

Тот язык, который я уже использовал, который опирается на не-ASCII символов TI-BASIC, который использует для назначения, // для сравнения, имеет встроенные константы π и , а функции и т.д.

На ПК я сомневаюсь, что я бы использовал не-ASCII-операторы много, просто потому, что гораздо быстрее ввести !=, чем искать в карте символов.

+1

Ах! Я забыл об этом. Единственная причина, по которой они могут с ним справиться, - это специализированная клавиатура, в сочетании с тем, что пользователи соглашаются с тем, что скорость ввода на калькуляторе низкая. –

2

Isabelle (теоретический прорыв) позволяет использовать последовательности команд в стиле LaTeX в качестве допустимых входных данных. Затем различные интерфейсы делают соответствующие вещи, чтобы превратить их в специальные символы. Хорошим результатом этого является то, что он по-прежнему является просто ванильным текстом ASCII, но у вас могут быть все симпатичные симпатичные символы отображения, которые вы ожидаете в редакторе, который знает об этих символах.

Смежные вопросы