|
|
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
White OwlSashaMercuryНо как в таком случае решать проблемы namespace pollution (нарушение пространства имён) ? Пойми одну простую вещь: С++ разрабатывается не по факту, а теоретиками. Здрасте, приехали... Вообще-то трудно найди другой такой практически-ориентированный язык, как С++. Если бы речь шла о Java, то я бы понял, да, она такая (одно тупое отсутствие unsigned уже многого стоит), но о С++ ну никак такого нельзя сказать. White Owl Теоретикам кажется что "может быть полезно то, может быть полезно сё". И они эту придумку сразу же запихивают в стандарт. Все радуются, но никто не использует. Да, теоретически проблема namespace pollution может случиться. Когда-нибудь в будущем. В реальности она еще никогда не случалась, но теоретически она может случится. О, как Анатолий был прав!! White OwlА на практике, вот лениво мне изобретать велосипед. Я беру фреймворк А и начинаю использовать объявленные в нем примитивы. Все чудесно и замечательно. Все функции, классы и константы объявленные внутри фреймворка это namespace A. В каком случае мне понадобится namespace B? Только в одном: если я захочу использовать одновременно с фреймворком A использовать фреймворк B. И тогда, если оба фреймворка содержат примитив foo() мне надо будет указывать из какого именно пространства имен я хочу вытаскивать это foo(). А теперь покажи мне такую пару фреймворков которые надо дополнять друг другом? Например, весь BOOST... Но с тобой на самом деле спорить бессмысленно, ты просто поставил себе в мозгу барьер, и все аргументы будут от него отскакивать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2015, 21:39 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
White OwlВсе эти шаблоны, неймспейсы, исключения, переопределение операторов - это всё нафиг не нужно. Весь этот синтаксический сахар только добавляет в код нечитабельности и возможностей ошибиться. Отлично, ты вообще думаешь, что пишешь ? С++ задуман так, что ты можешь расширять язык новыми типами данных. Как это делать без переопределения операций? Как реализовать тип std::complex без перегрузок операторов ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2015, 21:43 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
White Owl... Вот "Си-с-классами" это хорошо. Все остальное можно смело удалять. Все эти шаблоны, неймспейсы, исключения, переопределение операторов - это всё нафиг не нужно. Весь этот синтаксический сахар только добавляет в код нечитабельности и возможностей ошибиться. Поддерживаю. "Си с сисклассами это норм", а "Си с шаблонами" редкое говно получилось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2015, 22:10 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
Коллеги. Горячие эстонские модераторы. С наступающей тяпницей. Пыщ. Как обещал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2015, 22:14 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
Я тоже считаю, что шаблоны в С++ появились зря, ну или в таком виде зря, но они реально прижились и решают много проблем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2015, 22:14 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
В продолжение темы namespaces. В настоящее время существует определённое засилье ns в исходном коде Java/.Net. Здесь думаю что проблема - в отсутствии альтернатив и в неверных рекомендациях. Там где можно было добавить префикс - создавали package. В результате имеем тонны кода где Document в пределах 1 classfile может быть в роли xml-документа, pdf-документа и еще бох весть каких пакетах. Большая часть учебных примеров не компилируется просто по причине лени авторов которые не удосужились привести секцию imports. А ведь кроме import есть еще и dependency в формате maven/gradle/ivy. Где ошибёшся мажорной версией - не собирается. Ужасны также рекомендации "столпов". Эккеля, Шилдта и Хорстмана. Что у них по поводу ns? Они рекомендуют {web-domain-name}.{technology-name}. Или + {author-name}. Или {email}. Это же ужас! Вы себе представляете если нужно конкурирующее имя Document в 1-й функции в качестве аргумента указать ru.sql.xml.parser.mayton.Document. а в качестве другого аргумента такую-же колбасу. Причём принципиально несократимую. И ни алиас не синоним не работает! Нету typedef! Но так исторически сложилось что С++ практически не имеет того ns-hell. В бусте и СТД имена компактны. Не создают проблем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2015, 22:44 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
MasterZivВообще-то трудно найди другой такой практически-ориентированный язык, как С++. Если бы речь шла о Java, то я бы понял, да, она такаяТы ж не подменяй понятия. Одно дело практическое использование и другое дело грамматика языка. С точки зрения грамматики, лично меня Java полностью удовлетворяет. У меня в ней есть большие претензии к стандартным и популярным библиотекам, но с точки зрения грамматики Java очень хороша. А С++ с точки зрения грамматики - не хорош. Слишком много не нужных сущностей в нем. Но для практически ориентированных задач, если (не нужно делать версию для Андроида) я всегда предпочту С++ (а лучше Си). Исключительно по причине того что существующие фреймворки для C++ более разумно организованы чем их кузены для Java. MasterZivО, как Анатолий был прав!!Да, он прав. Если меня запустить преподом в класс С++, то ученики выйдут ярыми сторонниками Си. MasterZivWhite OwlА на практике, вот лениво мне изобретать велосипед. Я беру фреймворк А и начинаю использовать объявленные в нем примитивы. Все чудесно и замечательно. Все функции, классы и константы объявленные внутри фреймворка это namespace A. В каком случае мне понадобится namespace B? Только в одном: если я захочу использовать одновременно с фреймворком A использовать фреймворк B. И тогда, если оба фреймворка содержат примитив foo() мне надо будет указывать из какого именно пространства имен я хочу вытаскивать это foo(). А теперь покажи мне такую пару фреймворков которые надо дополнять друг другом? Например, весь BOOST...Да? Ты хочешь сказать, что весь boost это фреймворк который сам дает программисту такой мизер что в дополнение к boost надо обязательно брать еще один фреймворк? А зачем тогда boost нужен? MasterZivНо с тобой на самом деле спорить бессмысленно, ты просто поставил себе в мозгу барьер, и все аргументы будут от него отскакивать.Ну почему же. Если ты сумеешь показать мне удобное использование namespace'ов, и чтобы оно было во первых необходимо, а во вторых удобнее чем префиксы - я признаю что namespace это хорошая придумка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2015, 23:14 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
MasterZivWhite OwlВсе эти шаблоны, неймспейсы, исключения, переопределение операторов - это всё нафиг не нужно. Весь этот синтаксический сахар только добавляет в код нечитабельности и возможностей ошибиться. Отлично, ты вообще думаешь, что пишешь ? С++ задуман так, что ты можешь расширять язык новыми типами данных. Как это делать без переопределения операций?Методами конечно. Зачем переопределять синтаксис? MasterZivКак реализовать тип std::complex без перегрузок операторов ?Это не правильный вопрос. Правильный вопрос будет: как реализовать тип "комплексное число"? Например так: https://msdn.microsoft.com/en-us/library/system.numerics.complex(v=vs.110).aspx?cs-save-lang=1&cs-lang=cpp#code-snippet-1 Или так: http://introcs.cs.princeton.edu/java/97data/Complex.java.html Или перевести компилятор в режим С99, подключить complex.h и воспользоваться стандартным типом данных. Не, если ты уже пишешь с использованием библиотеки std, то std::complex конечно будет напрашивающимся вариантом. Но если std по каким-то причинам (хотя бы религиозным) недоступна, то всегда можно сделать тип "комплексное число" по методу показанному для первокурсников Принстона. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2015, 23:31 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
White OwlMasterZivНо с тобой на самом деле спорить бессмысленно, ты просто поставил себе в мозгу барьер, и все аргументы будут от него отскакивать.Ну почему же. Если ты сумеешь показать мне удобное использование namespace'ов, и чтобы оно было во первых необходимо, а во вторых удобнее чем префиксы - я признаю что namespace это хорошая придумка.мы похожее уже обсуждали в контексте перегрузки методов. Тебя ведь не напрягает, что классы у тебя будут называться: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. тебя ведь не убедишь, что так понятней и читабельней: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ты же скажешь: "ну и что?" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2015, 23:33 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
egorychWhite Owlпропущено... Ну почему же. Если ты сумеешь показать мне удобное использование namespace'ов, и чтобы оно было во первых необходимо, а во вторых удобнее чем префиксы - я признаю что namespace это хорошая придумка.мы похожее уже обсуждали в контексте перегрузки методов. Тебя ведь не напрягает, что классы у тебя будут называться: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. тебя ведь не убедишь, что так понятней и читабельней: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ты же скажешь: "ну и что?"Скажу. Потому что одними определениями дело не ограничивается. Классы надо не только определить, их еще и использовать надо. И получается что если я захочу одновременно использовать оба представленных View, то в первом случае я буду писать: Код: plaintext 1. 2. А во втором случае я буду писать: Код: plaintext 1. 2. либо Код: plaintext 1. 2. 3. Ты точно уверен что используя namespace мы получили громадный выигрыш? И вообще что мы получили выигрыш хоть какой-нибудь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2015, 23:44 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
egorychты же скажешь: "ну и что?" А если ты решишь использовать свои классы вот так: Код: plaintext 1. 2. 3. 4. то получишь верный путь к "стрельбе по собственным ногам". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2015, 00:05 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
WhiteOwlИ получается что если я захочу одновременно использовать оба представленных Viewбудет такое место в программе, да. Ровно одно, в классе CentralWidget, и выглядеть оно будет примерно так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ;-)) это и к разговору о шаблонах относится, но ты и их не любишь ведь ;-)) White OwlТы точно уверен что используя namespace мы получили громадный выигрыш? И вообще что мы получили выигрыш хоть какой-нибудь?ну представь, что у тебя в этих классах методов по 15 в каждом. Ты файлы реализации хорошо представляешь себе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2015, 00:06 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
White Owlegorychты же скажешь: "ну и что?" А если ты решишь использовать свои классы вот так: Код: plaintext 1. 2. 3. 4. то получишь верный путь к "стрельбе по собственным ногам".ну уж нет, я фабрику нарисую. Банду четырёх читали, чай ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2015, 00:09 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
egorychWhiteOwlИ получается что если я захочу одновременно использовать оба представленных Viewбудет такое место в программе, да. Ровно одно, в классе CentralWidget, и выглядеть оно будет примерно так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ;-)) Ты все еще уверен что namespace дали тебе большой выигрыш? egorychну представь, что у тебя в этих классах методов по 15 в каждом. Ты файлы реализации хорошо представляешь себе?А как реализация класса будет зависеть от того как класс именован??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2015, 00:14 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
White OwlТы все еще уверен что namespace дали тебе большой выигрыш? ... А как реализация класса будет зависеть от того как класс именован??? ну ок Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2015, 00:34 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
egorychну оки даже здесь уже есть ошибка, найди её, попробуй-ка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2015, 00:38 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
White OwlТы ж не подменяй понятия. Одно дело практическое использование и другое дело грамматика языка. С точки зрения грамматики, лично меня Java полностью удовлетворяет. У меня в ней есть большие претензии к стандартным и популярным библиотекам, но с точки зрения грамматики Java очень хороша. А С++ с точки зрения грамматики - не хорош. Слишком много не нужных сущностей в нем. Как друг к другу соотносятся сущности и грамматика ? Я не очень понимаю. Ну и лучше язык для программиста, чем язык для хорошей грамматики. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2015, 00:58 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
White OwlКак это делать без переопределения операций?Методами конечно. Зачем переопределять синтаксис? [/quot] Чтобы формулы писать удобно было. И читать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2015, 01:01 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
Не, ребята, Совыча мы не переубедим.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2015, 01:07 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
egorychпродолжать? не? до прикладной логики мы пока ещё даже не добралисьДа, если ты будешь использовать using namespace то, все эти имена слегка сократятся и может быть будет чуть легче читать. Однако! Вот открыл ты в своем любимом текстовом редакторе/среде два файла, View из одного пространства имен и View из другого. В обоих файлах у тебя в первой же строке (после include) стоят using namespace delivery::transport; и using namespace delivery::accounts; Оба файла промотаны на определение методов void View::setModel( const Model &value ) {}. В одном классе этот метод глючит, в другом нет.... А теперь быстро скажи: метод какого класса ты сейчас правишь? А если не мотать на начало файла? egorychи даже здесь уже есть ошибка, найди её, попробуй-каЗачем я ее буду искать? Компилятор найдет. Или ты думаешь что используя namespace ты от этой ошибки застрахован? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2015, 01:20 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
MasterZivWhite OwlТы ж не подменяй понятия. Одно дело практическое использование и другое дело грамматика языка. С точки зрения грамматики, лично меня Java полностью удовлетворяет. У меня в ней есть большие претензии к стандартным и популярным библиотекам, но с точки зрения грамматики Java очень хороша. А С++ с точки зрения грамматики - не хорош. Слишком много не нужных сущностей в нем. Как друг к другу соотносятся сущности и грамматика ? Я не очень понимаю. Ну и лучше язык для программиста, чем язык для хорошей грамматики.Под "сущностями" я имел в виду языковые, алгоритмические, структурные концепции. То из чего ты конструируешь свою программу. Может слово "сущность" не очень подходит, но не могу сейчас придумать более лучшее. Примеры таких сущностей: namespace, exception, template, interface, class, union, thread, list, array, hash, socket... в языке для каждой из них может быть а может не быть поддержка на уровне грамматики. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2015, 01:30 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
White OwlВ обоих файлах у тебя в первой же строке (после include) стоят using namespace delivery::transport; и using namespace delivery::accounts; Оба файла промотаны на определение методов void View::setModel( const Model &value ) {}. В одном классе этот метод глючит, в другом нет.... А теперь быстро скажи: метод какого класса ты сейчас правишь? А если не мотать на начало файла?даже в DOS-редакторах был заголовок окна, вообще то. Это - помимо дополнительных подсказок, которые в студии распиханы на каждом углу. Но ты ведь и студии не любишь же )) White Owlegorychи даже здесь уже есть ошибка, найди её, попробуй-каЗачем я ее буду искать? Компилятор найдет. Или ты думаешь что используя namespace ты от этой ошибки застрахован?не найдёт, компилятору всё равно, что в функцию swap объекты передаются по значению, а не по ссылке. Ему это не мешает. Я думаю, что делать ревью кода, не загромождённого повсеместными префиксами типа DeliveryTransport, MegaNevedomaFignya и прочими - удобней и эффективней, а неймспейсы позволяют мне избавиться от этой проблемы. Всё ещё не пользуетесь пространствами имён? Тогда мы идём к вам! ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2015, 09:41 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
MasterZivНе, ребята, Совыча мы не переубедим....барьер, да, ты прав ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2015, 09:42 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
Друзья, да мы в топах ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2015, 11:14 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. К сожалению некоторые врем у меня не было возможности ответить. И всё-таки по терминологии. Это важный вопрос BS говорит о трёх вещах(как я понял): 1. class definition - определение, интерфейс типа данных определенного пользователем 2. class declaration - объявление, интерфейс типа данных определённого пользователем 3. representation - представлениея, реализация типа данных определенного пользователем p225,226 BS ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2015, 08:59 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39042947&tid=2018842]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
159ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
| others: | 200ms |
| total: | 470ms |

| 0 / 0 |
