Почему синтаксический сахар иногда считается плохим? [закрыто]

Используйте плагин формы jQuery . Он поддерживает загрузку файлов HTML5 и может вернуться к скрытому iframe, если браузер слишком старый.

13
задан 3 revs, 2 users 100% 5 April 2012 в 14:04
поделиться

11 ответов

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

некоторые определенные примеры:

первым является c# (или Java) определенная, Автоматическая упаковка и блокировать/синхронизировать конструкция

private int i;
private object o = new object();

private void SomethingNeedingLocking(bool b)
{
    object lk = b ? i : o;
    lock (lk) { /* do something */ }
}

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

Несколько объявление переменной и указатели:

long* first, second;

ошибка классика А (хотя легкий для определения). Сахар нескольких переменных не будет соответствовать объявлению указателя.

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

i = i + 1;

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

Все вышеупомянутое (кроме, возможно, того блокировки/поля, которое компилятор действительно должен определить для Вас) случаи, где использование может быть прекрасным, или опытные программисты могут думать, что "это совершенно ясно мне", но объем для беспорядка существует, конечно, для программистов новичка или тех, которые перемещаются в другой синтаксис.

9
ответ дан 2 revs 6 April 2012 в 01:04
поделиться

Слишком много ненужного сахара просто добавляет чрезмерное увеличение размера к языкам. Я назвал бы имена, но затем я просто гореть.:) Кроме того, иногда язык использует синтаксический сахар вместо того, чтобы делать реальную реализацию. Например, существует язык, который должен остаться неназванным, чей "реализация дженериков" является просто тонким слоем синтаксического сахара.

8
ответ дан BobbyShaftoe 6 April 2012 в 01:04
поделиться

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

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

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

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

2
ответ дан Jeffrey L Whitledge 6 April 2012 в 01:04
поделиться

Ерунда. C и программисты Lisp используют синтаксический сахар все время.

Примеры:

  • a[i] вместо *(a+i)
  • '(1 2 3) вместо (quote 1 2 3)
5
ответ дан Johan Kotlinski 6 April 2012 в 01:04
поделиться

Синтаксический сахар вызывает рак точки с запятой. Alan Perlis

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

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

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

С уважением,

10
ответ дан Kwang Mark Eleven 6 April 2012 в 01:04
поделиться

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

я думаю, что имеет в виду большинство людей, когда они отклоняют "синтаксический сахар", то, что функция языка делает, что-то усложнило чрезмерно простой. Самым известным примером этого является Perl. Но так как я не эксперт по Perl, я дам Вам пример того, о чем я говорю в Python (взятый от этот вопрос ):

reduce(list.__add__, map(lambda x: list(x), [mi.image_set.all() for mi in list_of_menuitems]))

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

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

2
ответ дан Community 6 April 2012 в 01:04
поделиться

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

1
ответ дан Ed S. 6 April 2012 в 01:04
поделиться

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

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

1
ответ дан C. Dragon 76 6 April 2012 в 01:04
поделиться
  • 1
    @jgauffin: I' m не совсем уверенный, что Вы подразумеваете под " код TPL имеет к run". There' s никакой продолжение планирования , если that' s, что you' взгляды ре. – Stephen Cleary 27 May 2014 в 01:38

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

2
ответ дан Wayne Molina 6 April 2012 в 01:04
поделиться

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

1
ответ дан Antti Huima 6 April 2012 в 01:04
поделиться
  • 1
    Даже если it' s выполненный синхронно это займет больше времени, когда код TPL должен работать. Помните, it' s, поскольку OP указал на теоретический вопрос. – jgauffin 27 May 2014 в 01:09

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

0
ответ дан Svante 6 April 2012 в 01:04
поделиться
  • 1
    То, что я имею в виду, - то, что, если Вы сравниваете кода с помощью TPL и кода, делающего операции непосредственно, последний будет быстрее, поскольку TPL добавляет немного служебные (даже если it' s крошечный). – jgauffin 27 May 2014 в 01:39
Другие вопросы по тегам:

Похожие вопросы: