tag:blogger.com,1999:blog-654279083390275842.post8497361649241971756..comments2024-03-19T12:22:43.654+03:00Comments on Размышлизмы eao197: [comp.prog] C++0x: Concepts R.I.P.eao197http://www.blogger.com/profile/17283739752119445290noreply@blogger.comBlogger6125tag:blogger.com,1999:blog-654279083390275842.post-69621459856719305932009-11-29T10:05:57.142+02:002009-11-29T10:05:57.142+02:002Boris: спасибо за точную ссылку.2Boris: спасибо за точную ссылку.eao197https://www.blogger.com/profile/17283739752119445290noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-25744844371768933442009-11-29T01:21:10.066+02:002009-11-29T01:21:10.066+02:00> Любая работающая сложная система может выраст...> Любая работающая сложная система может вырасти только из работающей простой системы.<br /><br /><a href="http://www.helloworld.ru/texts/comp/other/oop/ch01.htm" rel="nofollow">link</a> recovery:<br /><br />Любая работающая сложная система является результатом развития работавшей более простой системы... Сложная система, спроектированная "с нуля", никогда не заработает. Следует начинать с работающей простой системы".<br />(с) Gall, J. 1986. Systemantics: How Systems Really Work and How They Fail. Second Edition. Ann Arbor, MI: the General Systemantics Press, p.65.bsivkohttps://www.blogger.com/profile/11421382894372440954noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-44481548053082162582009-07-22T12:00:42.933+03:002009-07-22T12:00:42.933+03:00Всем программистам эта фича, вероятно, и не нужна ...Всем программистам эта фича, вероятно, и не нужна была. Но вот разработчики шаблонных библиотек (того же Boost-а) наверняка ее бы заюзали по самое нехочу.<br /><br />Концепты, на мой взгляд, чем-то похожи на контракты из Eiffel. Нигде больше они не прижились, да и польза их может подвергаться сомнению, но пониманию Eiffel-евского кода они способствуют очень сильно. Так что для хорошо написанного C++ного кода концепты могли бы стать дополнительной формой документирования и специфицирования требований к коду. Но только для хорошо написанного кода :)<br /><br />Гораздо важнее в истории с концептами другое. Концепты -- это исключительно теоритическая идея. Пока нигде не было реализовано ничего подобного, чтобы посмотреть на практике, во что же это все выльется. При этом сама идея концептов успела трансформироваться из достаточно простой (как раз то, что я описал) в очень сложную (до concept_map-ов). И все равно разработчики концептов не были довольны тем, что получалось.<br /><br />Т.е. на всю это бодягу было потрачено около 6-7 лет, но без однозначно хорошего результата. И здесь была опасность повторить ошибку прошлого стандарта -- включить в него раздел, который никогда не будет реализован (как exception specification и external templates). Но комитетчики молодцы, они смогли удержаться от такого решения. За что им огромный респект.<br /><br />В принципе, в коммерческой разработке, когда есть один руководитель проекта, такое решение выглядит нормальным и очевидным -- если проект не укладывается в срок, то нужно резать избыточные его части. Но здесь же нет единоличного руководства, а есть куча индивидумов с разными намерениями и целями. И они все же смогли придти к такому важному решению.eao197https://www.blogger.com/profile/17283739752119445290noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-53916633271813972522009-07-22T11:32:57.505+03:002009-07-22T11:32:57.505+03:00Спасибо. Укурка, конечно, та ещё. Но даже такая ме...Спасибо. Укурка, конечно, та ещё. Но даже такая мера не заставит программистов поголовно описывать все необходимые концепты и возможно возникновение ошибок обоих упомянутых тобой типов.1https://www.blogger.com/profile/06025845134551192940noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-6164280129365889132009-07-21T19:07:07.234+03:002009-07-21T19:07:07.234+03:00Сразу предупреждаю, что за концептами я следил изд...Сразу предупреждаю, что за концептами я следил издалека, поэтому всех тонкостей не знаю (в черновике стандарта концептам отводилось порядка 40 страниц). Объясню то, что сам понимаю.<br /><br />Пусть у нас есть шаблонная функция:<br /><br />template<class T> T square(T x)<br />{ return x * x; }<br /><br />С ее помощь мы можем легко возводить в квадрат все, что нам потребуется:<br /><br />square(1); // square<int>()<br />square(1.2); // square<double>()<br /><br />Но в существующем C++ никто не запрещает нам написать так:<br /><br />std::string a("abc");<br />square(a); // square<string>()<br /><br />И получить при компиляции кучу маловразумительных ошибок. С которыми придется долго разбираться для того, чтобы понять, что тип string не может использоваться со square, т.к. для string не определен оператор умножения.<br /><br />Концепты были призваны задавать ограничения типам параметров шаблонов. Чтобы компиляция обламывалась при попытке вызова square<string>(), а не при попытке компиляции square<string>(). И чтобы при этом были внятные сообщения о причине ошибки.<br /><br />Достигаться это должно было посредством приблизительно такой нотации:<br /><br />template<class T> where Multiplicable<T><br />square(T x) {return x * x;}<br /><br />Где Multiplicable -- это как раз имя концепта. А определяется концепт так:<br /><br />concept Multiplicable<T> {<br /> Var<T> x;<br /> x * x;<br />}<br /><br />Т.е. данный концепт задает условия: a) можно объявлять переменные типа T и b) переменные типа T можно перемножать.<br /><br />С использованием концептов попытка вызова square<string> должна привести к сообщению о том, что тип string не удовлетворяет условиям концепта Multiplicable.<br /><br />Но с концептами это еще вершина айсберга. Еще концепты планировалось использовать для выбора из нескольких перегруженных вариантов шаблонных функций. И еще там есть какие-то concept_map-ы, с которыми я, к счастью, ознакомиться еще не успел :)eao197https://www.blogger.com/profile/17283739752119445290noreply@blogger.comtag:blogger.com,1999:blog-654279083390275842.post-91558365915515518862009-07-21T16:15:00.614+03:002009-07-21T16:15:00.614+03:00А можно попросить коротко и по-русски изложить сам...А можно попросить коротко и по-русски изложить саму суть концептов? Исходя из того, что с понятием "шаблон" читатель уже знаком.1https://www.blogger.com/profile/06025845134551192940noreply@blogger.com