Синтаксический сахар против функции

В С# (и Java) строка представляет собой немного больше, чем массив char с сохраненной длиной и несколькими способами, на которые наложено. Аналогично, объекты (ссылки и ценности в стороне) объекты немного больше, чем прославленные структуры с наследованием и добавлены интерфейсы.

На одном уровне эти дополнения кажутся ясными чертами и улучшениями для себя. На другом уровне они чувствуют себя маргинальным обновлением от статуса "синтаксического сахара".

Чтобы принять эту идею дальше, рассмотрим (у меня могут быть некоторые детали неправильные, но точка остается):

transistor
elementary logic gate
compound gate
  |         |
 ALU    flip-flop
   |    |       |
   | register  RAM
   | |
   CPU
   microcode
   assembly
   C
   C++
   | |
MSIL JavaScript
C#   jQuery

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

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

11
07 сент. '09 в 20:47
источник поделиться
10 ответов

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

Вы правы, когда говорите, что объекты на самом деле являются прославленными структурами с методами и наследованием. Это, однако, всего лишь детализация реализации. Какие объекты позволяют думать иначе. Вы можете более легко относиться к объектам реального мира, когда думаете об объектах. То же самое произошло, когда еще больше назад во времени, мы перешли от использования перехода к процедурному программированию. Под капотом процессор все еще держит jmp'ing от OP до OP, но мы могли бы думать о другом, более черном ящике.

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

23
07 сент. '09 в 21:06
источник

Синтаксический сахар является особенностью.

12
07 сент. '09 в 20:54
источник

Когда изменение дает значение? Я закодирован в ассемблере. Я переключился на C и посмотрел на результат компилятора. Этот код был 95 +% так же хорош, как мой ручной ассемблер, и писать было намного проще. Для меня это обеспечило ценность, поэтому я бы сказал, что это не сахар.

С++ помогает перевести мои объектно-ориентированные мысли в код. Пока накладные расходы не очень высоки, я думаю, что это особенность.

Я практичный. "Если я вижу это ценным", это мой ответ

5
07 сент. '09 в 21:07
источник

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

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

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

5
07 сент. '09 в 20:52
источник

Кажется, что синтаксический хирург - это синтаксис, который ничего не меняет в отношении способностей языка, а использование другой конструкции выполняет точно то же самое. Строка (мышление на Java) - это не просто синтаксический сахар над массивом char. Массив char является изменяемым (в содержании, если не в длину). Вы не можете сделать массив char неизменным с существующей функцией языка без массива String.

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

3
07 сент. '09 в 21:21
источник

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

Мой пример будет выражением Lambda, пишущий цикл foreach не требует больших усилий, но с помощью .Foreach() уверен тоже хорошо; против переписывания всего класса HttpRequest самостоятельно. Один из них синтаксический, один из них - особенность. Оба сэкономят время, одно намного большее, чем другое.

2
07 сент. '09 в 20:52
источник

"Синтаксический сахар" - это функция, которая вам не нравится

2
07 сент. '09 в 20:59
источник

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

Некоторые конструкции могут быть однозначно рассмотрены как синтаксический сахар. Например, в VB.NET для проверки того, были ли две ссылки не равными, требуется If Not (ref1 Is Ref2), но более новые версии языка позволяют If ref1 IsNot Ref2. Ничего не может быть выражено в новом синтаксисе, который не может быть выражен в старом, но новый синтаксис чище, не вводит никаких двусмысленностей, и единственная причина, почему его не использовать, - это если код должен быть обратно совместим со старыми версиями языка.

Некоторые конструкции могут быть немного сложнее определить как сахар. В частности, если язык добавляет конструкции, которые будут работать идентично существующей конструкции при использовании с другими типами, но не скомпилируют с другими, такие конструкции могут служить средством проверки типа времени компиляции, которого раньше не было. В этом свете обычно можно рассматривать генераторы Java. Можно добавить Cat в ArrayList<Cat> так же легко, как и ArrayList; то, что добавляет ArrayList<Cat>, является защитой для отклонения Dog во время компиляции. Поскольку ограничения времени компиляции не позволяют писать любую программу, которая не может быть записана без них, некоторые люди могут рассматривать их как синтаксический сахар. С другой стороны, несмотря на то, что проверка типов выполняется во время компиляции, а не во время выполнения, ее все равно можно рассматривать как одно из заданий программы.

1
24 июня '14 в 21:08
источник

"лень - двигатель прогресса" Этот процесс остановится, когда вы сможете сразу сопоставить идеи с машиной.

0
07 сент. '09 в 20:58
источник

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

Что касается аспектов языкового дизайна и вашего примера с strings и char-arrays, я бы сказал, что это не должно быть ни функцией, ни сахаром, а просто выражать в базовом синтаксисе языков ( LOP - языковое программирование). Общие понятия (typeclasses, metaprogramming и т.д.) Позволяют вам выражать много новых и полезных конструкций самостоятельно, не дожидаясь появления новой функции для языка. Просто посмотрите на возможности метапрограммирования Haskell или С++.

0
07 сент. '09 в 21:11
источник

Посмотрите другие вопросы по меткам или Задайте вопрос