Здравствуйте, mrozov, Вы писали:
M>Комрад, давай я попробую медленно и еще раз, может ты вдруг поймешь. Ты откажись на минуточку от концепции, что я дурак, я этим делом уже второй десяток лет занимаюсь, как-никак, кое-какие мозги у меня есть.
Похоже не только мозги, но и ещё какая-то каша в голове.
M>В DLinq-е есть возможность описать сложные sql-запросы посредством цепочки вызовов методов. Это доказывает, что SQL не предоставляет никаких принципиально новых возможностей по сравнению с процедурным языком программирования. Он просто сокращает и упрощает запись той же логики. А это, в свою очередь, и является основной частью определения того, что такое "синтаксический сахар". Так понятней?
Правильно.
M>В свою очередь функции являются элементарной надстройкой над asm-ом.
Абсолютно неверно. Например, C# не только не является надстройкой над MSIL, но даже не имеет никакого понятия что это такое.
... << RSDN@Home 1.2.0 alpha rev. 717>>
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, mrozov, Вы писали:
M>Очень хорошо. Правильно ли я понимаю, что в любом языке, поддерживающим ассемблерные вставки, синтаксическим сахаром является весь язык целиком? Если нет — то почему. Спасибо.
Потому что встроенный ассемблер и язык в который он встроен — это два разных человека. Встроенный ассемблер как правило сильно покоцан и не дотягивает до полноценного языка.
... << RSDN@Home 1.2.0 alpha rev. 717>>
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, mrozov, Вы писали:
M>Ну вот и получается, что сахар — это несущественное улучшение. Т.е. все сводится к полезности.
И что в этом плохого?
M>Например — c# и ключевое слово var. Многие его характеризуют, как синтаксический сахар. А между тем, оно избавляет от необходимости определять целый дополнительный класс. И где тут отличие от дженериков?
Никаких целых дополнительных классов var не определяет. Если ты об анонимных типах, то этим занимается ключевое слово new. Кстати, var не является синтаксическим сахаром хотя бы по той причине, что с его помощью можно определять конструкции, которые нельзя выразить другими средствами языка.
M>Брось, комрад. За этим термином не скрывается никакой высшей истины. Это просто эмоциональная оценка, как правило — достаточно личная.
Этот термин имеет прямое отношение к компиляторостроению и обозначает класс конструкций языка, которые можно заменить другими языковыми средствами того же самого языка. Заметь, не ассемблера, а именно того же самого языка. Понятное дело в этом нет ничего мифического.
... << RSDN@Home 1.2.0 alpha rev. 717>>
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, VladD2, Вы писали:
VD>Если серьезно, то "сахар" понятие расплывчатое. Многие вещи можно выразить через другие. Скажем циклы через рекурсию или один вид цикла через другой.
Не думаю, что всё так просто. Результат может быть не эквивалентным.
... << RSDN@Home 1.2.0 alpha rev. 717>>
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, Кодёнок, Вы писали:
Кё>— int? x вместо Nullable<int> x (подразумевает наличие Nullable, хотя то же самое можно реализовать и собственным классом)
Нельзя
... << RSDN@Home 1.2.0 alpha rev. 725 on Windows Vista 6.0.6000.0>>
Здравствуйте, Кодёнок, Вы писали:
Кё>Здравствуйте, Sinclair, Вы писали:
M>>>Может мне кто-нибудь объяснить, что такое "синтаксический сахар"? По-моему, это одно из самых идиотических понятий во всем IT. S>>Могу. Синтаксический сахар — это возможность выразить в компактном виде то, что и так есть в языке. S>>Например, using(...) и foreach() являются чистым сахаром, поскольку для них существует полный аналог в развернутом виде. S>>А генерики сахаром не являются, т.к. их нельзя превратить в аналогичный не-генерик код.
Кё>Я бы сказал по-другому: синтаксический сахар — это синтаксическая поддержка определенного программного (семантического) решения.
Кё>Например, Кё>— int? x вместо Nullable<int> x (подразумевает наличие Nullable, хотя то же самое можно реализовать и собственным классом)
Дело не в реализации. int? — это 100% синтаксический сахар, точно такой же, как и сам int по отношению к System.Int32. Кё>— do a; b; c вместо a >>= \_ -> b >>= \_ -> c (подразумевает использование обозначения >>=) Кё>- foreach, потому что рассчитывает на IEnumerable
Неа. С форичем всё еще хуже. Он не рассчитывает ни на какие IEnumerable. Он ведет себя так, как будто компилятор раскрывает "макрос" в соответствующий код, а потом уже его компилирует его. Так что это — сахар на 150%. Кё>- using, это синтаксическая поддержка для IDisposable Кё>Это называется синтаксическим сахаром как раз потому, что он поддерживает лишь один конкретный IDisposable, а для реализации освобождения ресурса на собственном механизме синтаксической поддержки уже нет.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Left2, Вы писали:
L>А я не согласен с цитатой. 3 кита ООП — это наследование, полиморфизм и инкапсуляция. Если первые 2 концепции реализуются в С (хоть и с лишней писаниной в случае полиморфизма), то инкапсулящия насколько я понимаю полноценно в C не реализуется.
Инкапсуляция с успехом достигается на С с помощью опережающих деклараций и интерфейстных фукнций. #include позволяет включать в файлы описание публичного интерфейса, а реализация скрывается в бинарной форме. Именно так обеспечивается инкапсуляция в ОС вроде Виндовс или Линукс (имеющих С-АПИ).
L>Это именно то что нельзя назвать синтаксическим сахаром — базовая концепция, которую должен поддерживать компилятор.
Как не смешно это звучит, но ООП действительно при некоторой натяжке можно назвать синтаксическим сахаром, а флуды о сахаре являются филосовскими (не имеющими практической пользы).
Что же касается С++, то его первый компилятор CFront был препроцессором в С. Так что функционально языки эквивалентны.
mrozov же говорит верно. Если быть принципиальным, то почти все абстракции являются сахаром для чего-то и наоборот почти весь сахар — это фичи нужные людям. Любые языки полные по Тьюригу теоритически позволяют написать любую программу. Вопрос только в том каков уровень абстракций языка, какие полдходы (парадигмы) можно в нем применять и какова (в результате) будет сложность написания программы на данном языке.
Вот взять упертых фанатиков С++ которые доказывают, что в паттерн-матичнге нет ничего интересного так как его видители в некоторой упрощенной форме можно эмулриовать.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
M>Это я все к тому, что любая идея, доведенная до своего логического завершения, превращается в абсурд. Поэтому и придавать много значения выяснению вопроса "а вот эта фича — это сахар или нет?" нет никакого смысла. Все относительно.
вот это — правильная мысль
можно кастрюлю назвать сковородкой-с-высокими краями, но ведь зачем-то называют кастрюлю кастрюлей.
и люди, которые часто пользуются посудой, через какое-то время, безошибочно начинают различать кастрюли и сковородки. без чёткого определения, прошу заметить! и с первого взгляда, зачастую
Здравствуйте, IT, Вы писали:
IT>Не думаю, что всё так просто. Результат может быть не эквивалентным.
Это уже детали. Факт в том, что сахар слишком неопределенное понятие. В трепологических целях его конечно использовать можно, но делать какие-то выводы на базе того что что-то является сахаро, а что-то нет я бы не стал.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Andrei N.Sobchuck, Вы писали:
ANS>Здравствуйте, mrozov, Вы писали:
M>>Очень хорошо. Правильно ли я понимаю, что в любом языке, поддерживающим ассемблерные вставки, синтаксическим сахаром является весь язык целиком? Если нет — то почему. Спасибо.
ANS>Не правильно. Хотя бы потому, что в общем случае в конструкциях языка ничего не говорится об ассемблере.
Ну причем тут это? Говорится-не говорится. Ну а если документацию подправить, тогда что?
В языке возможность есть? Есть. Выразить через нее все остальное можно? Можно.
Определение, которое бы однозначно сортировало фичи языка на сахар и не сахар можно?
Другой занятный вопрос. Допустим, в языке есть две конструкции для организации цикла — for и while.
Каждая может быть легко выражена через другую. Внимание — вопрос — которая из них сахар?
А дело-то в том, что твое формальное определение неформальной вещи неизбежно будет лишено логики. Потому что на самом деле и то и другое есть синтаксический сахар над cmp->jne А то, что в языке возможности напрямую использовать эту конструкцию нет — это детали имплементации.
Здравствуйте, IT, Вы писали:
IT>Абсолютно неверно. Например, C# не только не является надстройкой над MSIL, но даже не имеет никакого понятия что это такое.
А твой стол не имеет ни малейшего понятия о том, что он стол, а не табуретка. Это все — пустая демагогия.
По факту с#, как и все языки высокого уровня, является оберткой над машинными кодами.
В очередной раз прошу.
Определение того, что есть "синтаксический сахар" — в студию. Определение из википедии, к примеру, совершенно безумно и никак не соотносится с тем, о чем мне тут вещают господа теоретики и ты в том числе.
Затем, когда я это определение получу (хотя я уже и в этом начал сомневаться), я задам следующий вопрос — какой в этом понятии практический смысл вообще, и какой в нем смысл для тех, кто не пишет компиляторы, в частности. Собственно в этом-то и вопрос — и ни в чем ином.
Здравствуйте, mrozov, Вы писали:
M> какой в этом понятии практический смысл вообще, и какой в нем смысл для тех, кто не пишет компиляторы, в частности. Собственно в этом-то и вопрос — и ни в чем ином.
У хост-платформы есть возможности и ограничения. Фразу "синтаксический сахар" говорят, когда фича не привносит дополнительных возможностей и подлежат всем известным ограничениям платформы.
Например, если известно, что using это сахар для finaly+dispose, то можно предположить, что а) можно забыть использовать using и не получить ошибку компиляции; б) можно вызвать dispose 2 раза (раз самому, раз в using и получить ObjectDisposedException); в) можно не правильно реализовать метод dispose; г) вероятно может вылететь исключение, когда объект уже создан, но еще не присвоен временной переменной и dispose не будет вызван; д) можно отгрести проблемы с временем жизни и владением (например, в общем случае нельзя передавать объект в другой тред).
Здравствуйте, VladD2, Вы писали:
VD>Это уже детали. Факт в том, что сахар слишком неопределенное понятие. В трепологических целях его конечно использовать можно, но делать какие-то выводы на базе того что что-то является сахаро, а что-то нет я бы не стал.
По-моему, ты всё слишком драматизируешь. Ничего сложного и неопределённого в этом понятии нет. По крайней мере для меня. Если какую-либо конструкцию можно эквивалентно выразить другими языковыми средствами, то это сахар. Если нельзя, то нет. Честно говоря, я вообще не понимаю о чём этот топик
... << RSDN@Home 1.2.0 alpha rev. 717>>
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, mrozov, Вы писали:
IT>>Абсолютно неверно. Например, C# не только не является надстройкой над MSIL, но даже не имеет никакого понятия что это такое. M>А твой стол не имеет ни малейшего понятия о том, что он стол, а не табуретка. Это все — пустая демагогия.
Демагогия — это твоё следующее утверждение:
M>По факту с#, как и все языки высокого уровня, является оберткой над машинными кодами.
Только что ты нам песни пел о встроенном ассемблере, а теперь вдруг перешёл на машинные коды и обёртки. Сравниваем тёплое с мягким?
M>В очередной раз прошу. M>Определение того, что есть "синтаксический сахар" — в студию. Определение из википедии, к примеру, совершенно безумно и никак не соотносится с тем, о чем мне тут вещают господа теоретики и ты в том числе.
Определение тебе уже тут десять раз приводили. Попробую ещё раз.
Языковые конструкции, которые эквивалентно выражаются другими средствами того же самого языка, называются синтаксическим сахаром.
Обрати внимание на выделенное и подумай над ним.
M>Затем, когда я это определение получу (хотя я уже и в этом начал сомневаться), я задам следующий вопрос — какой в этом понятии практический смысл вообще, и какой в нем смысл для тех, кто не пишет компиляторы, в частности. Собственно в этом-то и вопрос — и ни в чем ином.
У меня складывается впечатление, что ты и сам отлично всё понимаешь, просто раз уж встрял в спор, то надо идти до конца.
... << RSDN@Home 1.2.0 alpha rev. 717>>
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, mrozov, Вы писали:
M>Другой занятный вопрос. Допустим, в языке есть две конструкции для организации цикла — for и while. M>Каждая может быть легко выражена через другую. Внимание — вопрос — которая из них сахар?
А ты сам попробуй подумать
... << RSDN@Home 1.2.0 alpha rev. 717>>
Если нам не помогут, то мы тоже никого не пощадим.
M>Может мне кто-нибудь объяснить, что такое "синтаксический сахар"? По-моему, это одно из самых идиотических понятий во всем IT.
Синтаксис, имеющий нулевое value, и существующий только потому, что создателю языка пришло в голову "а вот можно и так".
M>Синтаксическим сахаром, строго говоря, является ВСЕ, кроме команд ассемблера. Все конструкции всех языков высокого уровня легко и непринужденно укладываются в машинные коды.