Здравствуйте, so5team, Вы писали:
S>Почему 5, а не 10? Или не 3?
Потому что после 3 проблемы заканчиваются обычно.
Хотел тебе написать по каждой, но влом. Могу только сказать, что у тебя какие-то личные счёты с С++, твои проблемы — надуманные, а новички у тебя занимаются вуду-программированием(so-программированием) не понимая что происходит в разных точках кода, а иногда не понимая что они вообще хотят от того что написали.
Здравствуйте, so5team, Вы писали:
S>>>Какие-то вещи в C++ хотелось бы поправить. Правила инициализации переменных, например. K>>Что с ними не так?
S>Их слишком много и они не очевидны. S>
Здравствуйте, so5team, Вы писали:
S>Это и подразумевалось в двух примерах выше.
Просто в общем случае — это разный синтаксис вызова одного и того же конструктора.
А со списком инициализации — вызов разных конструкторов, что дает дополнительный повод внимательно рассматривать скобочки в коде.
Здравствуйте, so5team, Вы писали:
S>Здравствуйте, YuriV, Вы писали:
YV>>Это должен оптимизировать компилятор, а это константа при любой форме передачи.
S>
YV>>Это не опечатки, а нормальное использование оптимизирующего компилятора. Для программиста без разницы каким образом попала константа в функцию.
S>
S>Матчасть подучите.
Того же вам советую, коуч нашёлся. Актор фреймворк он написал, и сразу в боги.
Здравствуйте, YuriV, Вы писали:
YV>Того же вам советую
Т.е. это знание матчасти вам подсказывает, что вот здесь:
template<typename T>
void f(const T & a) {...}
"а это константа при любой форме передачи." (c)
А вот здесь то же самое знание матчасти не позволяет вам заметить непреднамеренного копирования:
void f(const std::string v); // Хотели &, но забыли.
"Для программиста без разницы каким образом попала константа в функцию." -- действительно, есть лишняя копия (и другие побочные эффекты) или нет, для программиста же без разницы.
Это объяснить не так уж и сложно (мне приходилось это делать). Принципиальное отличе в том, что, при инстанцировании, в первом случае тип T выводит компилятор, а во втором случае задает явно сам программист (ну и далее рассказ про perfect forwarding).
Остальные примеры также объясняются довольно просто.
--
Не можешь достичь желаемого — пожелай достигнутого.
Здравствуйте, rg45, Вы писали:
R>Это объяснить не так уж и сложно (мне приходилось это делать). Принципиальное отличе в том, что, при инстанцировании, в первом случае тип T выводит компилятор, а во втором случае задает явно сам программист (ну и далее рассказ про perfect forwarding).
Простите, а в чем смысл вашего комментария? Вы мне это объясняете? Или вы мне объясняете как лучше косяки в дизайне C++ объяснять новичкам?
Ну так остается присоединиться к T4r4sB: "спасибо, мы в курсе"
По факту же в языке есть rvalue reference и universal reference, используются для совершенно разных задач, но внешне выглядят одинаково. Выяснить что есть что можно только исходя из контекста. Вот это и нужно просто запомнить.
R>Остальные примеры также объясняются довольно просто.
А еще лучше было бы, если бы объяснять не приходилось.
И если в результатов экспериментов с Carbon или cppfront получится язык, в котором все эти тонкости не придется объяснять (по крайней мере в первые 10 лет их существования), то это будет просто здорово. ИМХО.
Здравствуйте, so5team, Вы писали:
R>>Это объяснить не так уж и сложно (мне приходилось это делать). Принципиальное отличе в том, что, при инстанцировании, в первом случае тип T выводит компилятор, а во втором случае задает явно сам программист (ну и далее рассказ про perfect forwarding).
S>Простите, а в чем смысл вашего комментария? Вы мне это объясняете? Или вы мне объясняете как лучше косяки в дизайне C++ объяснять новичкам?
Мой комментарий — это ответ на ваш вопрос (предложение): "Попробуйте объяснить новичку...". Мне показалось, что вы хотите сказать, что это объяснить слишком сложно, я в свою очередь выражаю мнение, что это не так уж и сложно и предлагаю подход к объяснению, который заходит достаточно легко, по моему опыту. Что вам кажется нелогичным? И как можно по-другому интерпретировать то, что я написал?
P.S. "Косяки в дизайне C++" вы пытаетесь обосновать сложностью объяснения некоторых фич языка новичкам. Но ваше обоснование выглядит не очень убедительным, на мой взгляд. А других обоснований у вас нет, насколько я могу судить. Следовательно и сам вывод о косяках в дизайне — это просто ваша эмоциональная оценка, не более.
--
Не можешь достичь желаемого — пожелай достигнутого.
Здравствуйте, rg45, Вы писали:
R>Мой комментарий — это ответ на ваш вопрос (преложение): "Попробуйте объяснить новичку". Мне показалось, что вы хотите сказать, что это объяснить сложно
Я не говорил про сложность, речь шла про то, что какие-то вещи приходится просто предлагать запомнить и все, логичного объяснения мне лично не ведомо. Вот же полная цитата:
А вот когда новичкам что-то в C++ объясняешь, то временами приходится прибегать к приему "просто запомните и все".
R>Что вам кажется нелогичным?
Нелогичным в ваших словах или нелогичным в некоторых аспектах языка C++?
Ваши слова логичны, но мне было непонятно как они соотносятся с моими примерами.
R>И как можно по-другому интерпретировать то, что я написал?
Как минимум, двумя вариантами:
a) вы объясняете разницу между universal reference и rvalue reference лично мне, предполагая, что я ее не знаю;
b) вы приводите мне пример объяснения, которое можно дать новичку, чтобы рассказать чем отличаются universal reference от rvalue reference.
R>P.S. "Косяки в дизайне C++" вы пытаетесь обосновать сложностью объяснения некоторых фич языка новичкам.
Нет. На мой взгляд, в языке есть свои косяки. Какие-то из них влияют на сложность языка (сильно), какие-то нет (или не сильно).
Вот те же universal references и rvalue references. На мой взгляд, явный косяк языка в том, что и для тех, и для других использовали одинаковую лексему. Задействовали бы, скажем, @@ или ^^ для обозначения universal references, было бы проще.
Universal initialization syntax сделан так, что невольно задаешься вопросом: что это было, диверсия или, что хуже, глупость?
Вот такая запись: T obj();, как по мне, так косяк. И то, что он такой же древний, как сам C++, его не оправдывает.
И да, я понимаю, что все решения в C++ были обоснованы. И ко многим из них можно применять оправдание "на тот момент лучшего никто придумать так и не смог" или "не смогли предугадать всех последствий". Но это не отменяет того факта, что косяки разной степени тяжести в языке есть. А вот возможностей от них избавиться, с учетом того, что одно из основных преимуществ C++ -- это совместимость, не так уж и много.
R>Следовательно и сам вывод о косяках в дизайне — это просто ваша эмоциональная оценка, не более.
Это уж как угодно. Просто я один из тех немногих, кто в C++ остается, использует C++ с удовольствием и не имеет с C++ проблем. Очень многие из тех, с кем я работал или просто общался уже давным-давно из С++ ушли и довольны. Меня C++ не особо напрягает. А вот то, что новички (особенно не зеленая молодежь, а разработчики со стажем в других языках) осваивают C++ не очень легко, для меня лично объективная реальность. Если у вас не так, то остается только позавидовать вашим условиям.
Здравствуйте, so5team, Вы писали:
R>>Мой комментарий — это ответ на ваш вопрос (преложение): "Попробуйте объяснить новичку". Мне показалось, что вы хотите сказать, что это объяснить сложно
S>Я не говорил про сложность, речь шла про то, что какие-то вещи приходится просто предлагать запомнить и все, логичного объяснения мне лично не ведомо. Вот же полная цитата: S>
А вот когда новичкам что-то в C++ объясняешь, то временами приходится прибегать к приему "просто запомните и все".
Ну я именно это и понял как "объяснить слишком сложно, поэтому просто запомните". А как это по-другому можно понять?
--
Не можешь достичь желаемого — пожелай достигнутого.
А вот когда новичкам что-то в C++ объясняешь, то временами приходится прибегать к приему "просто запомните и все".
R>Ну я именно это и понял как "объяснить слишком сложно, поэтому просто запомните". А как это по-другому можно понять?
Тем, что у меня нет логичного объяснения почему так. Ну, например, почему для rvalue references и universal references не были взяты разные лексемы. Логичного объяснения у меня нет.
А вообще это отсылка к бородатому анекдоту времен СССР:
Грузин, учитель русского языка, на уроке в грузинской школе:
— Запомнитэ, дэты, в русском языке слова "ложька", "вилька" и "талерька" пишутся без мяхкого знака, а "сол" и "фасол" с мяхкым. Проста запомнитэ это и всё, патамушто понят это нивазможна!
Ну и т.к. это всего лишь анекдот, то в словах есть только доля шутки.
S>Тем, что у меня нет логичного объяснения почему так.
Ну вот я и рассказал о том самом логичном объяснении.
S>Ну, например, почему для rvalue references и universal references не были взяты разные лексемы. Логичного объяснения у меня нет.
Потому что нет в языке C++ никаких "universal references", можете воспользоваться поиском по стандарту языка, если не верите. Есть правила type matching и reference collapsing при выведении шаблонных параметров из фактических параметров функции. Возможно, эти правила и не самые простые и потребуют некоторого напряжения внимания. Но это не тот случай, который невозможно объяснить.
--
Не можешь достичь желаемого — пожелай достигнутого.
Здравствуйте, rg45, Вы писали:
S>>Тем, что у меня нет логичного объяснения почему так.
R>Ну вот я и рассказал о том самом логичном объяснении.
Я все еще не понимаю зачем, потому что разницу в приведенных мной примерах я понимаю.
S>>Ну, например, почему для rvalue references и universal references не были взяты разные лексемы. Логичного объяснения у меня нет.
R>Потому что нет в языке C++ никаких "universal references"
Здравствуйте, so5team, Вы писали:
S>>>Тем, что у меня нет логичного объяснения почему так.
R>>Ну вот я и рассказал о том самом логичном объяснении.
S>Я все еще не понимаю зачем, потому что разницу в приведенных мной примерах я понимаю.
Ну вот вы сами пишете: "понимаю, но объяснить не могу". Вот я и рассказвал о том, как можно объяснить, чтоб было понятно другим. Я в свою очередь не понимаю, чего вы не понимаете, по-моему, все предельно ясно.
R>>Потому что нет в языке C++ никаких "universal references" S>"жопа есть, а слова нет" (с)
Этот термин был введен Мейерсом, как раз как один из способов объяснения новых фич языка. Но в последствии не прижился, поскольку, похоже, больше запутывал, чем объяснял. То есть, "жопа" не пригодилась.
--
Не можешь достичь желаемого — пожелай достигнутого.