Почему форматирование кода не является более распространенным?

29

Я читал Code Complete и в главе, посвященной макету и стилю, он предсказывал, что редакторы кода будут использовать какое-то форматированное форматирование текста. Это означает, что вместо кода, похожего на этот

Procedure ResolveCollisions
{ Performs a posteriori collision resolution through spatial partitioning algoritm }
(
  CurrentMap : SpriteContext,
  PotentialColliders: SpriteList
)
var Collider  : Sprite, 
    Collidee  : Sprite, 
    Collision : SpriteCollision
begin
  DoStuff();
end.

это может выглядеть примерно так:

Процедура ResolveCollisions

Выполняет апостериорное разрешение столкновений с помощью алгоритма пространственного разделения

параметры

  • CurrentMap : SpriteContext
  • PotentialColliders : SpriteList

Локальные переменные

  • Collider : Sprite
  • Collidee : Sprite
  • Collision : SpriteCollision
    DoStuff();

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

Кто-нибудь из вас видел подобный код с богатым форматированием или знаете, была ли идея когда-либо рассмотрена и в конечном итоге отклонена?

Питер Олсон
источник
8
Вы видели паутину Кнута? www-cs-staff.stanford.edu/~uno/cweb.html
Greyfade
12
Итак, теперь вы хотите Word в качестве редактора IDE?
5
вы никогда не боролись с Word, когда он делает странное форматирование, от которого просто невозможно избавиться. В вашем примере предполагается, что редактор скрывает некоторые части исходного кода. Как зритель, конечно, было бы неплохо, я думаю, как редактор, пожалуйста .. помилуйте мою бедную душу!
Newtopian

Ответы:

38

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

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

Однако для «статического» отображения кода вы можете легко украсить исходный код. Например, возьмите любой наполовину приличный конвертер source-> html и добавьте в таблицы стилей любые размеры и стили шрифтов, которые вам нравятся, и вы получите богато отформатированный код.

как зовут
источник
14

Простая причина: независимость редактора / инструмента.

Как только вы сделаете свой код «обогащенным» - он будет привязан к редактору, который вы использовали - или к тем, которые могут понимать богатый код. Все остальные редакторы, которые не могут справиться с богатством, покажут бред.

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

А как насчет контроля версий? Как бы вы сказали ему игнорировать все изменения в форматировании и видеть файлы измененными только тогда, когда есть какое-то "реальное" изменение.

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

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

treecoder
источник
28
Это не обязательно правда. Если редакторы могут выполнять подсветку синтаксиса, они,
безусловно
4
Emacs может быть настроен для этого, но изменение размера шрифта в IMO было бы пустой тратой экранного пространства.
Кевин Клайн
4
Если бы автору пришлось делать форматирование вручную, это было бы пустой тратой времени. Ясно, что текстовый редактор будет делать это автоматически, или, может быть, вы можете использовать таблицу стилей своего рода.
Питер Олсон
7
@greegit: редакторы не оставляют информацию о цвете в исходных файлах после завершения работы с ними, им не нужно оставлять другие метки форматирования, они могут восстанавливать их по требованию. Нет принципиальной разницы между подсветкой синтаксиса и форматированием синтаксиса. Если инструменты могут автоматически создавать изящные диаграммы классов и диаграммы UML из исходного кода, то инструмент может время от времени выделять жирный шрифт.
whatsisname
9
Этот ответ наверняка имеет много голосов за неправильность.
Джордан,
11

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

Майк Накис
источник
11

Почему его не существует? Там нет спроса / необходимости в этом.

Современные редакторы могут удовлетворить потребности программистов с подсветкой синтаксиса и некоторыми другими незначительными стилистическими опциями. Это уже не «богатый текст»?

user478148
источник
7
+1 Без спроса. Я бы не хотел так кодировать. Похоже, я печатаю этот отчет TPS в Word, а не пишу код.
1
@ Гленн Нельсон: я согласен. Я избегаю Word даже для ввода обычных документов, если могу (вместо этого я использую LaTeX). Мне нравится подсветка синтаксиса, но богатое форматирование кода может показаться мне навязчивым.
Джорджио
5

Это уже существует для LaTeX в режиме AucTeX для Emacs. Заголовки разделов больше по размеру, суб- и верхние индексы изменяются соответствующим образом, и вы даже можете иметь небольшие предварительные просмотры математики (и, возможно, других сред, таких как Algorithmic).

Это нормально для LaTeX , поскольку отображение кода на выходе, как правило , гораздо проще, чем в других программах; Я думаю, что я не хотел бы этого вообще для более универсальных языков.

Другое дело Emacs может сделать , это заменить символы , как ->и forallс и , соответственно , в Haskell. Существует мало причин, по которым подобные вещи нельзя распространять на форматирование, как вы предлагаете, за исключением того, что в Haskell это вообще не нужно.

Тихон Джелвис
источник
2

Некоторое время назад я задал этот вопрос о форматировании кода, спрашивая, хотят ли программисты форматировать их код при вводе.

Мой вопрос касался только аспекта форматирования с отступом, но некоторые ответы вполне могут относиться к форматированию кода в целом. Общее мнение в ответах говорит о том, что программисты выступают против потери абсолютного контроля над способом представления своего кода.

Мой личный опыт был совсем другим. Хотя я обычно использую общедоступные инструменты, иногда мне нужно написать XSLT в моем собственном редакторе. Этот редактор форматирует код по мере ввода текста с помощью отступа на левом поле, поэтому у меня нет проблем с нежелательным пробелом (существенным в XSLT) и позволяет моему коду переноситься по словам, но при этом все еще поддерживается форматирование. Я нахожу этот опыт вполне естественным, стиль форматирования контролируется только контекстом и положением перевода строки (этот опыт особенно полезен при использовании сенсорных устройств ввода).

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

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

pgfearo
источник
2

Также в более чем нескольких языках (Haskell, Ruby, Python, Erlang, CoffeeScript и некоторых других) важен отступ. Так что, если вы меняете размеры шрифта, это может быть очень сложно понять.

В основном это традиция. Я профессионально программирую в течение почти 20 лет, и я подозреваю, что это сведет меня с ума. Я пишу книги в Emacs или VI с docbook, поэтому я не фанат WYSIWIG

Захари К
источник
2

CWEB Кнута делает это, но работает только для C / C ++ и Pascal. - Вы должны взглянуть на это, хотя ... это довольно аккуратно. Есть две программы: ctangleи cweaveкоторые объединяют / разделяют файлы CWEB в TeX и C соответственно.

veryfoolish
источник
1
nowebработает практически с любым возможным языком. И есть множество специализированных систем грамотного программирования, доступных для многих других языков (lhs и так далее). Некоторые языки имели возможность набора текста с начала 1960-х годов - см. En.wikipedia.org/wiki/Stropping_(programming)
SK-logic
3
@ SK-logic - Arrgh, пожалуйста, не напоминай мне об ужасе грамотного программирования . Превращая каждый быстрый просмотр кода в утомительный и длительный просмотр документов , критикуя каждый последний поворот фразы и неуместную запятую. Почему некоторые части оборонной промышленности думали, что это хорошая идея, я никогда не узнаю. Я не думаю, что редакторы WYSIWYG сделали бы это лучше.
Марк Бут
@ Марк Бут, все может превратиться в ужас, если все сделано неправильно. Грамотное программирование - отличный инструмент в сочетании с правильной дисциплиной. Я понятия не имею, как я смогу комментировать мой код с помощью сложных формул, графиков и графиков в формате TeX без грамотного инструмента программирования. И код не будет более читабельным и поддерживаемым без таких аннотаций.
SK-logic
2

Кто-нибудь из вас видел подобный код с богатым форматированием или знаете, была ли идея когда-либо рассмотрена и в конечном итоге отклонена?

Конечно. Xcode поддерживает стили помимо простой окраски для другого синтаксиса:

исходный код со стилизованным текстом

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

Тем не менее, вы не хотите переусердствовать со стилями - любой текст, исходный код или что-то еще может быть сложнее читать, когда стили слишком сильно различаются. В частности, я думаю, что смешивание размеров отвлекает, и все, что приводит к тому, что столбцы не выстраиваются в линию, раздражает. Есть причина, по которой большинство программистов все еще используют моноширинные шрифты.

Другой вопрос заключается в том, следует ли использовать стилизованный текст как часть самого синтаксиса языка. Например, должен ли компилятор использовать тот факт, что некоторый текст имеет определенный стиль, чтобы определить, является ли текст объявлением функции? Поначалу это может показаться странным, но языки вроде Python и Fortran уже используют отступ в качестве синтаксиса. Тем не менее, я думаю, что более вероятно, что мы продолжим видеть стиль, управляемый синтаксисом, а не наоборот. Есть много преимуществ, которые дает возможность использовать простой текст (более простые компиляторы, независимость от платформы, предпочтения программиста), и другие традиции развивались, чтобы сделать код читаемым в отсутствие стилей (отступ, пустые строки, символы маркера и функции редактора, такие как свертывание кода и навигационные меню).

Калеб
источник
1

Я думаю, что богатое форматирование исходного кода не очень популярно, потому что оно предназначено для ввода информации, где структура и значение гораздо важнее (и также легче набирать). Fontification, дополнительные специальные символы и пробелы просто добавляют ненужный визуальный шум. Это может быть подходящим для сгенерированной документации, хотя.

Никогда не прекращается пламенная война на одну и ту же тему в мире наборов между теми, кто предпочитает WYSIWYG-редакторы (например, MS Word), и такими системами, как TeX (LaTeX).

В целом однозначного ответа нет. Все зависит от инструментов, вариантов использования и личных предпочтений.

Олег Колосов
источник
1

Такие инструменты, как Doxygen или JavaDoc, уже позволяют форматировать код в расширенном текстовом формате. Они также добавляют гипертекст кода для просмотра. Вам не нужно вставлять специальные теги для базового форматирования.

Это не WYSIWYG, хотя.

mouviciel
источник
0

Я боюсь сказать, что это существует.

В прошлом я работал над неким кодом Centura (также известным как Gupta или SQL / Windows - старый код « 4GL »). На самом деле было невозможно редактировать код Centura в стандартном редакторе, таком как блокнот, до необходимого уровня форматирования.

Хотя может показаться, что было бы неплохо отформатировать исходный файл следующим образом, разработка показалась мне довольно сложной и болезненной.

Кроме того, форматирование часто вызывало проблемы при объединении в системе контроля версий.

Майкл Арнелл
источник
0

В дополнение к другим ответам я хотел бы отметить, что помимо технических трудностей использования богатого форматирования, это также объект личных предпочтений.

Если вы редактируете простой текст, вы можете выбрать шрифты и цвета, которые вам нравятся, и они устанавливаются автоматически. Если бы вы редактировали форматированный текст, что, если вам просто не нравятся определенные цвета и шрифты, которые устанавливаются вручную?

Корвин
источник
1
Я не думаю, что это правда. Я почти уверен, что если бы программисты использовали форматированный текст, был бы генератор, который сделал бы какую-то семантическую разметку, которая описывает структуру программы, а затем настраиваемую пользователем таблицу стилей, которая содержала бы информацию о шрифте и цвете.
Питер Олсон
@PeterOlson, тогда вы не сможете читать программы без таблицы стилей, так как вы просто не узнаете назначение текстовых строк. Это означает, что никто не мог показать или написать что-либо при личной встрече. Напротив, в настоящее время шрифты и цвета являются полностью необязательными и взаимозаменяемыми без какого-либо ущерба для смысла.
Корвинус
0

Я думаю, что это потому, что никто еще не разделил чтение кода и написание кода. По крайней мере, это не стало мейнстримом. Иногда вам приходится читать код, к которому вы давно обращались, или код, созданный другими разработчиками. Вам, вероятно, придется потратить много времени, пока не будете готовы изменить один байт в этом источнике. Это может быть режим «чтения», который может делать все, что нужно для облегчения понимания (размер шрифта, переформатирование, дополнительный сценарий, супер-сценарий и т. Д.). Когда вы будете готовы, редактор может переключиться в режим «записи» и быть менее ограничительным и более подчиняющимся «правилу наименьшего удивления»

Maksee
источник