Здравствуйте, Sinclair, Вы писали:
S>Дело не в реализации. int? — это 100% синтаксический сахар, точно такой же, как и сам int по отношению к System.Int32.
Для подобного "сахара" есть четко детерминированное поняите type alias. В том же C# ты можешь подобную фигню и сам замутить:
using myint = System.Int32;
но к сожалению только на один файл.
А в других языках есть встроенные средства для их определения.
Более того, по
Кё>>— do a; b; c вместо a >>= \_ -> b >>= \_ -> c (подразумевает использование обозначения >>=) Кё>>- foreach, потому что рассчитывает на IEnumerable S>Неа. С форичем всё еще хуже. Он не рассчитывает ни на какие IEnumerable. Он ведет себя так, как будто компилятор раскрывает "макрос" в соответствующий код, а потом уже его компилирует его. Так что это — сахар на 150%.
А for по-твоему не сахар? Его тоже в терминах while нефига делать выразить. В прочем как и наоборот.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
VD>Сковорода и кострюля отличаются, главным образом, своим предназначением. Одна предназначена для жарки, а другая для варения. Отсюда и свойства. Одна из толстого метала, обычно с длинной ручкой и невысокими краями, а другая с высокими краями и более тонкими стенками. Если сделать сковороду с высокими стенками, или кастрюлю с низкими, то вряд ли кто-то сможет угадать на вид, что это такое. VD>И вообще, аналогии для доказательств не катят.
Воот!
"Сахарные" оппоненты тут начали бы рассуждать, а на столько ли толсто дно у этой конкретной сковороды, можно ли в кастрюле жарить и является ли тушение в сковородке разновидностью варки в кастрюле. И вообще, всё это — "синтаксический сахар" для ложки. А ложка — синтаксический сахар для вилки... и т.д.
Но по сути, всё это является пустым трёпом. Есть, конечно, некоторые "средние" варианты, но я более чем уверен что средний человек (а тем более, повар!) безошибочно различит 99% сковородок и кастрюль.
Что не так с аналогией? Она даже слишком хорошо подходит: все (по крайней мере, "повара") знают что такое "сахар"; приходит человек, который, в общем-то, в теме и начинает жонглировать словами, доказывая что через нечёткое определение всё можно назвать любым словом
А дело в чём — в том, что термины придумывают не для создания умного вида, а для того, чтобы они (термины) отделяли одни явления от других. Они помогают описать существующие вещи, предсказать или придумать новые. Люди, которые в данном споре понимают значение слова "сахар", используют это слово в парсерах, компиляторах и т.д. При чём, используют успешно! И не важно что, возможно, они не могут дать математически чёткого определения этому. Главное — что оно помогает, оно работает.
А вот "сахарные оппоненты" об этом сахаре только слышали, но пользы из этого никогда не извлекали. Вот и пытаются доказать что раз это не понадобилось им, значит это не нужно вообще — чертовски знакомо!
При нечётких определениях "нафилософствовать" и доказать можно вообще всё что угодно. Это простые тролли.
Здравствуйте, VladD2, Вы писали:
V> Мы смотрим на фичу как на некий шорткат для некого паттерна и называем это паттерном, но проблема в том, что та же конструкций в других условиях (или при другой точке зрения) может не быть реализована по средствам синтаксического сокращения.
Видишь ли, какая штука. Есть такое понятие, как "хорошо" и "плохо". Эти понятия невозможно формально определить. Они очень индивидуальны и отличаются для каждого индивидуума. Но они все равно полезны. Люди стремятся к хорошему и избегают плохого — в их понимании. Поэтому понятие "хорошо" имеет ценность.
Понятие "синтаксический сахар" никакой ценности не имеет.
Оно не имеет ценности при использовании фичи языка — потому что тут играют роль факторы удобства написания кода и скорости его работы (ну и некоторые другие). Что угодно — переносимость, наглядность и т.п. может иметь значение, но сахарность критерием не является.
Оно не имеет ценности при создании языка — по той же причине, собственно. Мне тут пытаются впаривать, что это понятие используется компиляторописателями — так вот, у меня для вас новость — конечно же НЕ используется. Используются совсем другие, имеющие куда более формальное определение. Исключения (наверное) бывают, но к счастью большинство из нас никогда не столкнется с продуктом работы таких "специалистов".
Т.е. это определение, не подходящее на роль класификатора в силу своей приблизительности и не подходящее на роль оценки, так как эта оценка сама по себе лишена смысла.
Здравствуйте, IT, Вы писали:
IT>По-моему, ты всё слишком драматизируешь. Ничего сложного и неопределённого в этом понятии нет. По крайней мере для меня. Если какую-либо конструкцию можно эквивалентно выразить другими языковыми средствами, то это сахар. Если нельзя, то нет. Честно говоря, я вообще не понимаю о чём этот топик
Мне кажется, кроме выразимости у сахара должно быть ещё какое то качество. Конструкции языка редко образуют достаточный и необходимый базис. Обычно базис бывает не полный, а переполненный.
Здравствуйте, IT, Вы писали:
IT>Здравствуйте, mrozov, Вы писали:
M>>Другой занятный вопрос. Допустим, в языке есть две конструкции для организации цикла — for и while. M>>Каждая может быть легко выражена через другую. Внимание — вопрос — которая из них сахар?
IT>А ты сам попробуй подумать
Я нашел ошибку в твоем определении. Я ее вскрыл и показал тебе. Что-нибудь еще, кроме смайликов и обвинений в демагогии или глупости продемонстрировать можешь?
Или может лучше сразу меня забанить за споры с модераторами?
Комрад — ну неужеди так сложно признать, что я, в сущности, прав? Тем более, что это даже не моя точка зрения, я ее честно спер из куда более авторитетного источника.
Здравствуйте, VladD2, Вы писали:
VD>>>Через if/goto, ну, еще присвоение нужно не забыть конечно, можно выразить все. Это полный по Тьюрингу набор конструкций. От того собственно все ассемблеры из них и состоят в осноном.
IT>>Причём тут ассемблеры?
VD>Притом, что ассемблеры являются надстройкой над маш.кодами которые в свою очередь являются набором базовых вычислительных примитивов плюс ряд оптимизаций. Исходя из твоего определения без проблем можно считать, что ассемблеры сахар для маш кодов (они же "эквивалентно выражаются другими средствами").
Ты плохо читал моё определение, если вообще читал. Я подчеркнул, что речь должна идти об одном и том же языке. Вы же с автором топика почему-то всё время скатываетесь на Тьюринга, ассемблер, железо и молекулы. Не надо этого делать. Попробуй оставаться в рамках одного языка и проблема сразу исчезнет.
VD> В вот тот же это самый язык или уже другой вопрос филосовский.
Это как раз самый главный момент.
IT>> Мы говорим о конкретном языке, в котором, например, switch не выразишь эквивалентно через if/goto, по той простой причине, что switch генерирует принципиально другой код.
VD>Через if, goto и присвоение можно выразить все. В том числе и свитч. Просто работы будет сильно больше.
Вырази. Возми и вырази, только не языком, а средсвами C#. Напиши код без switch, который сгенерирует тоже самое что и switch. А потом, если до тебя всё же не дойдёт, мы продолжим обсуждение.
VD>Так ее выполняет компилятор, автоматически, а так прийдется ее каждый раз проделывать вручную. Это тоже самое, что скажем использование foreach, но в случае ручной реализации foreach-а работы будет больше.
Это не тоже самое. Это принципиально невозможно.
VD>Скажу больше, goto легко заменят даже вызовы методов. В первых ассемблерах инструкций вроде call/ret не было.
Не надо про ассемблеры. Давай о C#. Сделай мне, пожалуйста, на C# эквивалентный вызов метода средствами goto.
VD>Так что реально под сахаром люди понимают некие языковые абстракции кажующеся им по каким-то причинам незначительными.
Люди под сахаром понимают прежде всего абстракции одного и того же языка, а не ассемблеры и молекулы.
IT>>Это оно для тебя неопределённое,
VD>А этого уже достоточно. Если термин понимается по разному разными людьми, то он никуда не годен и его лучше не использовать.
Это в случае, если он понимается по разному. В данном случае он просто кем-то НЕ понимается.
Неясность изложения обычно происходит от путаницы в мыслях.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, mrozov, Вы писали:
M>>>Другой занятный вопрос. Допустим, в языке есть две конструкции для организации цикла — for и while. M>>>Каждая может быть легко выражена через другую. Внимание — вопрос — которая из них сахар?
IT>>А ты сам попробуй подумать
M>Я нашел ошибку в твоем определении. Я ее вскрыл и показал тебе. Что-нибудь еще, кроме смайликов и обвинений в демагогии или глупости продемонстрировать можешь?
Если в определении найдена ошибка (что не есть факт), то его всегда можно подправить. Главное не это, главное — понимание сути. Что касается твоего твоего вопроса, на который ты сам же откался отвечать, то по моему мнению while более низкоуровневая конструкция, но это не важно. Влад вообще утверждает, что обе конструкции можно выразить через if/goto
M>Или может лучше сразу меня забанить за споры с модераторами?
А это тут причём? Это уже точно смахивает на демагогию.
M>Комрад — ну неужеди так сложно признать, что я, в сущности, прав? Тем более, что это даже не моя точка зрения, я ее честно спер из куда более авторитетного источника.
Видишь ли в чём дело. Называние источника авторитетным для меня уже давно не является критерием авторитетности. Я готов выслушать любые резонные мнения и суждения, а выводы об авторитетности я уж сделаю как-нибудь сам.
Неясность изложения обычно происходит от путаницы в мыслях.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, VladD2, Вы писали:
VD>Собственно тут как-то в Декларативном программировании проходил язык в котром база как раз и состояли из этих трех вещей. Далее в языке был реализовано декларативное объявление конструкций и уже через это дело и базовые операторы был раскручен не хилый язык мало чем уступающий Немерлу (ну, разве что сырая реализация). Да и сам Немерле в базе это match, =, def и вызов. Остальное практически все на макросах.
А не подскажешь дополнительной информации?
Ну, например, как давно, или примерное название. А то так не найду, а посмотреть хочется.
Здравствуйте, VoidEx, Вы писали:
VD>>Собственно тут как-то в Декларативном программировании проходил язык в котром база как раз и состояли из этих трех вещей. Далее в языке был реализовано декларативное объявление конструкций и уже через это дело и базовые операторы был раскручен не хилый язык мало чем уступающий Немерлу (ну, разве что сырая реализация). Да и сам Немерле в базе это match, =, def и вызов. Остальное практически все на макросах.
VE>А не подскажешь дополнительной информации? VE>Ну, например, как давно, или примерное название. А то так не найду, а посмотреть хочется.
Не помню. Помню только что Гапертон по нему проходился. И помню, что там мощьный постоитель парсеров использовался.
Думаю, если задать вопрос на том форуме, то ссылочку подкинут.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Не помню. Помню только что Гапертон по нему проходился. И помню, что там мощьный постоитель парсеров использовался.
VD>Думаю, если задать вопрос на том форуме, то ссылочку подкинут.
Здравствуйте, VladD2, Вы писали:
VD>А for по-твоему не сахар? Его тоже в терминах while нефига делать выразить. В прочем как и наоборот.
Согласен. Правда, сахар for ничуть не слаще, чем сахар while. Вот using значительно слаще по отношению к try/finally:dispose.
Вообще, можно ввести цельную систему специй. Тут где-то уже соль упоминали Вот и получается, что for/while — это кетчуп/майонез.
int? — это такой типа ванилин, а вот using — нормальная глюкоза.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, IT, Вы писали:
IT>Ты плохо читал моё определение, если вообще читал. Я подчеркнул, что речь должна идти об одном и том же языке. Вы же с автором топика почему-то всё время скатываетесь на Тьюринга, ассемблер, железо и молекулы.
Я хорошо читал. Потому и говорил не об cmp, mov и т.п., а о goto, if и присвоении. Эта база есть почти в любом языке и ее достаточно для эмуляции любых фич. Если бы это было не так, то на первых Васиках нельзя было бы программировать.
Исходя из твоего определения все кроме этих инструкций можно считать сахаром.
Дело тут не в моих докапываниях, а в том, что ты сам не можешь дать точного определения данному термину.
На самом деле, в это определение нужно добавить еще одну фаруз. Что-то вроде: "Вносящее несущественные изменения в язык.". Но такое определение само по себе очень сильно зависит от IMHO-в.
VD>> В вот тот же это самый язык или уже другой вопрос филосовский.
IT>Это как раз самый главный момент.
Он опять же не детерминирован. Скажем если взять базовый Немерле (без единого макроса), то это будет сильно другой язык. Но с некоторой натяжкой все макросы есть ни что иное как синтаксический сахар.
VD>>Через if, goto и присвоение можно выразить все. В том числе и свитч. Просто работы будет сильно больше.
IT>Вырази. Возми и вырази, только не языком, а средсвами C#.
А что есть какие-то проблемы? Я когда-то писал на дремучем Васике. Тем набор инструкций был шире только на инструкции "go sub <номер строки>" и exit sub, но до этого Васики и их не имели.
IT> Напиши код без switch, который сгенерирует тоже самое что и switch.
Поясни, плиз, что мне помешает это сделать? Ну, кроме объемов и запутаности получаемого кода? switch-и строются по двум принципам: на базе вложенных ифоф и на базе таблиц переходов. Обе концепции переписываются на if+goto+присоение. Машинный код будет полностью идетниченый. Не говоря уже о семантике.
IT> А потом, если до тебя всё же не дойдёт, мы продолжим обсуждение.
Пожалуй я не буду его продолжать. Не охота доказывать базовые вещи и боростья с какими-то домыслами.
VD>>Так ее выполняет компилятор, автоматически, а так прийдется ее каждый раз проделывать вручную. Это тоже самое, что скажем использование foreach, но в случае ручной реализации foreach-а работы будет больше.
IT>Это не тоже самое.
Что не тоже самое?
IT>Это принципиально невозможно.
Что невозможно?
IT>Это в случае, если он понимается по разному. В данном случае он просто кем-то НЕ понимается.
И ты конечно уверен, что понимашь все хорошо и лучше все?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, _pk_sly, Вы писали:
__>Но по сути, всё это является пустым трёпом. Есть, конечно, некоторые "средние" варианты, но я более чем уверен что средний человек (а тем более, повар!) безошибочно различит 99% сковородок и кастрюль.
Он еще выделит такие вещи как: казан для плова, котелок для похода, горшок для тушения, ковш для варки и т.п. И все это он сделал бы по внешнему виду.
__>Что не так с аналогией?
То что нет никаких освнований полагать, что верность утверждений в этой аналогии хоть как-то сочетается с верностью утверждений в другой области.
__> Она даже слишком хорошо подходит: все (по крайней мере, "повара") знают что такое "сахар"; приходит человек, который, в общем-то, в теме и начинает жонглировать словами, доказывая что через нечёткое определение всё можно назвать любым словом
У сахар есть формула и вид ристалической решотки. Так что жанглеру можно быстро указать на то, что он занимается софистикой. А вот в синтаксическом сахаре все зависит от оценки человека. Это эмоциональная оценка, а не факт.
__>А дело в чём — в том, что термины придумывают не для создания умного вида, а для того, чтобы они (термины) отделяли одни явления от других. Они помогают описать существующие вещи, предсказать или придумать новые. Люди, которые в данном споре понимают значение слова "сахар", используют это слово в парсерах, компиляторах и т.д. При чём, используют успешно! И не важно что, возможно, они не могут дать математически чёткого определения этому. Главное — что оно помогает, оно работает.
Я не видел, чтобы серьзные компиляторщики бросались пдобными словами. Обычно речь идет о фичах. У компиляторщиков как раз все прсото. Им просто нет нужды делить что-то на фичи и сахар.
__>А вот "сахарные оппоненты" об этом сахаре только слышали, но пользы из этого никогда не извлекали. Вот и пытаются доказать что раз это не понадобилось им, значит это не нужно вообще — чертовски знакомо!
Это переверание чужих слов. Лично я полностью уверен, что термин "синтаксический сахар" понимается разными людьми по разному. Причем он постоянно приводит к спорам. И споры эти в общем-то не очем. Ведь, как говорится, хоть горшком назови, только в печь не ставь.
__>При нечётких определениях "нафилософствовать" и доказать можно вообще всё что угодно. Это простые тролли.
Дык тот-то и оно. 90% данного (и не только) форуима будут тролить и изворачиваться лиш бы не принять неприятные им вещи.
Менять свое мнение при обоснованных возражениях умеют очень не многие. Большинство или упирается рогом в очевидных ситуациях, или соглашаются с любой чущью ведя себя как флюгер на верту.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Sinclair, Вы писали:
VD>>А for по-твоему не сахар? Его тоже в терминах while нефига делать выразить. В прочем как и наоборот. S>Согласен. Правда, сахар for ничуть не слаще, чем сахар while.
А... точно. Чтобы жанглирование терминами было по красивше, а софистика по гуще, нада еще обсудить вопрос сладости сахара .
S> Вот using значительно слаще по отношению к try/finally:dispose.
О, да. Особенно если сравнивать с директивой using открывающую пространство имен.
S>Вообще, можно ввести цельную систему специй. Тут где-то уже соль упоминали Вот и получается, что for/while — это кетчуп/майонез.
S>int? — это такой типа ванилин, а вот using — нормальная глюкоза.
Ага, а LINQ — это глютаминат натрия .
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, _pk_sly, Вы писали:
__>все себе представляют лопату, но точными определениями никто не занимается. даже в толковых словарях найдёшь только примерное описание.
Не надо песен. У лопат даже спецификации есть. И что-это такое тоже совершенно ясно. Просто это широкий класс.
__>поспорим что не определишь (по крайней мере с первого раза) _математически точно_ "лопату"? я найду изъян.
Лопата определяется логически точно. Просто термин настолько очевидный и распространненный, что таких точных определений на практике не требуется.
А вот обсуждаемый термин отнюдь не очевиден и не имеет точного определения. В его определении имеется недетерминизм. Он основан на вкусах конкретных личностей.
__>ну так чем ты здесь занимаешься тогда?
Пытается обяснить довольно примитивные вещи, которые массы как всегда недоганяют. Попробуй поиспользовать этот "термин" при отстаивании своего мнения и сразу увидишь, что его каждый использует как хочет.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали: __>>все себе представляют лопату, но точными определениями никто не занимается. даже в толковых словарях найдёшь только примерное описание. VD>Не надо песен. У лопат даже спецификации есть. И что-это такое тоже совершенно ясно. Просто это широкий класс. __>>поспорим что не определишь (по крайней мере с первого раза) _математически точно_ "лопату"? я найду изъян. VD>Лопата определяется логически точно. Просто термин настолько очевидный и распространненный, что таких точных определений на практике не требуется.
термин — очевидный и распространненный. но ненаучный. не математический и (если угодно) не логический.
именно поэтому я готов поспорить что далеко не каждый простой человек сможет дать на 100% точное его определение.
более того, готов поспорить, что для выведения точного определения, даже непростым людям пришлось БЫ (если бы они стали заниматься этой глупостью) потратить далеко не одну неделю, попутно уточняя спецификации попутных терминов.
любое слёту данное определение будет либо не необходимым либо недостаточным.
__>> Она даже слишком хорошо подходит: все (по крайней мере, "повара") знают что такое "сахар"; приходит человек, который, в общем-то, в теме и начинает жонглировать словами, доказывая что через нечёткое определение всё можно назвать любым словом
VD>У сахар есть формула и вид ристалической решотки. Так что жанглеру можно быстро указать на то, что он занимается софистикой. А вот в синтаксическом сахаре все зависит от оценки человека. Это эмоциональная оценка, а не факт.
Влад Ты хочешь сказать, что то, что мы кладём в чай, элементарно описывается формулой и кристаллической решёткой?
Это далеко не так.
Ну, это к слову.
Хочу сказать, что при желании можно придраться к любому слову. Потому что это — не математика.
VD>Я не видел, чтобы серьзные компиляторщики бросались пдобными словами. Обычно речь идет о фичах. У компиляторщиков как раз все прсото. Им просто нет нужды делить что-то на фичи и сахар.
А зачем "бросаться"? Просто, в процессе работы, он у себя где-то в уголке может отметить: "это — сахар", "это — соль", например.
Если это кого-то раздражает, вслух можно не говорить
__>>А вот "сахарные оппоненты" об этом сахаре только слышали, но пользы из этого никогда не извлекали. Вот и пытаются доказать что раз это не понадобилось им, значит это не нужно вообще — чертовски знакомо! VD>Это переверание чужих слов. Лично я полностью уверен, что термин "синтаксический сахар" понимается разными людьми по разному. Причем он постоянно приводит к спорам. И споры эти в общем-то не очем. Ведь, как говорится, хоть горшком назови, только в печь не ставь.
я, в принципе, о том и говорю..
если термин помогает, он имеет право на существование.
даже нечёткий.
вообще, эта беседа мне напоминает объяснение С++-нику о пользе замыканий, о continuations, о list comprehensions и т.д.
Здравствуйте, VladD2, Вы писали:
VD>Я хорошо читал. Потому и говорил не об cmp, mov и т.п., а о goto, if и присвоении. Эта база есть почти в любом языке и ее достаточно для эмуляции любых фич. Если бы это было не так, то на первых Васиках нельзя было бы программировать.
По-моему, тут ты не прав.
Вот это:
struct A { int x, y; };
не выражается через if/else/goto. Зато вот это (псевдокод):
interface X
{
void foo (int x, int y);
};
элементарно выражается средствами того же языка (пусть это будет Си++):
class X
{
public:
virtual ~X() = 0 {}
virtual void foo (int x, int y) = 0;
};
Так что interface в данном случае — синтаксическия сахар, а вот struct — нет. Да, конечно, использование такой структуры можно заменить на обычные переменные, но само объявление структуры — нет. Т.е. сделать синтаксическое преобразование кода
A a; a.x = 45;
В такой:
int a_x; int a_y; a_x = 45;
компилятор может только при знании объявления этой структуры, а не просто так, т.е. это уже не просто синтаксическое преобразование.
Разве нет?