|
|
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. BS говорит, важно понять концепцию, детали не должны быть на первом месте. Думаю что он прав. Не уверен что полностью понял концепцию, для того чтобы её понять мне потребуется поучаствовать в каком-нибудь серьёзном проекте, нужен опыт, нужен не один год, и я это прекрасно понимаю. Но что-то мне стало понятно. Потому я стал тщательнее разбираться в деталях. Использую книги BS, немного Лафоре, и конечно стандарт С++. Я пробовал читать книгу Павловской, которую мне советовали, но BS мне нравится больше. Возникли некоторые вопросы, подскажите пожалуйста 1. Согласно стандарту классом в С++ будут являться объекты объявленные с ключевыми словами class, struct, union. При этом, согласно стандарту члены классы объявленные в классе с характеристикой типа class по умолчанию имеют access contol типа private, в случае иной характеристики(struct или union) объекты класса объявленные по умолчанию имеют access contol типа public. 1.1 Почему BS не оставил в языке только один class-key ? Думаю что это связано с совместимостью программ на С и С++, но не уверен в это. Потому что в таком случае объекты struct и union можно было оставить как и ранее, и не говорить что это классы, хотя с другой стороны, struct и union по сути типы определяемые пользователем, потому всё логично. Но я правильности в своих рассуждений я не могу быть уверен. 1.2 Несмотря на то, что стандартом строго определен access contol членов класса по умолчанию существует возможность указать их в самостоятельно. Как вы поступаете в своих программах на С++ ? 1.3 Существуют ли скрытые проблемы связанные со структурами и объединениями связанные с новой трактовкой данных элементов в С++ при переносе программ из С на С++ ? 1.4 Часто ли вы определяете объекты union в своих программах? 2. Что такое пространство имён, и зачем оно нужно я понимаю. И мне нравится этот механизм. Мне кажется что каждый объект программы (каждый пользовательский класс) должен быть описан с использованием данного механизма. Это точно не будет ошибкой, и всегда может потребоваться при расширении программы. Используете ли вы данный механизм в своих программах ? Как часто ? 3. BS говорит -объявление класса, далее о том, что исторически сложилась фраза определение класса, а позже говорит представление класса. Как говорите вы ? 4. Существует ли стандарт в котором дано определение того, что такое ООП ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2015, 03:58 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
SashaMercuryBS говорит, важно понять концепцию, детали не должны быть на первом месте. Думаю что он прав. Не уверен что полностью понял концепцию, для того чтобы её понять мне потребуется поучаствовать в каком-нибудь серьёзном проекте, нужен опыт, нужен не один год,И нужно много языков. SashaMercury1.1 Почему BS не оставил в языке только один class-key ? Думаю что это связано с совместимостью программ на С и С++, но не уверен в это. Потому что в таком случае объекты struct и union можно было оставить как и ранее, и не говорить что это классы, хотя с другой стороны, struct и union по сути типы определяемые пользователем, потому всё логично. Но я правильности в своих рассуждений я не могу быть уверен.Для упрощения реализации. SashaMercury1.2 Несмотря на то, что стандартом строго определен access contol членов класса по умолчанию существует возможность указать их в самостоятельно. Как вы поступаете в своих программах на С++ ?По нужде и желанию. SashaMercury1.3 Существуют ли скрытые проблемы связанные со структурами и объединениями связанные с новой трактовкой данных элементов в С++ при переносе программ из С на С++ ? Из Си в С++? Нет перенос структур вполне прозрачен. Но вообще-то, программы из Си в С++ никто не переносит. Не, бывают конечно идиоты которым делать нечего, и студенты которые сдают лабы лишь бы тройку получить - те да, те переносят. Вернее пытаются... SashaMercury1.4 Часто ли вы определяете объекты union в своих программах?При нужде бывает. Но нужда возникает очень редко. Но бывает. SashaMercury2. Что такое пространство имён, и зачем оно нужно я понимаю. И мне нравится этот механизм. Мне кажется что каждый объект программы (каждый пользовательский класс) должен быть описан с использованием данного механизма. Это точно не будет ошибкой, и всегда может потребоваться при расширении программы. Используете ли вы данный механизм в своих программах ? Как часто ?Никогда. Это абсолютно бессмысленный механизм. Сделан под давлением моды, но реальной пользы он не несет. В пространстве имен был-бы смысл, если бы в одном проекте использовались несколько "пространств", но в С++ проще и традиционней использовать библиотеки. Каждая библиотека это уже "пространство имен". В итоге единственным фреймворком где это самое пространство имен используется является один единственный std. SashaMercury3. BS говорит -объявление класса, далее о том, что исторически сложилась фраза определение класса, а позже говорит представление класса. Как говорите вы ? Как надо, так и говорим. Определение и представление это не синонимы, это две разные вещи. SashaMercury4. Существует ли стандарт в котором дано определение того, что такое ООП ?Нет. Но существуют учебники. Читай про Simula & SmallTalk. Первая реализация ООП в Simula, но SmallTalk вывел ООП в люди. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2015, 05:50 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
White Owl Никогда. Это абсолютно бессмысленный механизм. Сделан под давлением моды, но реальной пользы он не несет. В пространстве имен был-бы смысл, если бы в одном проекте использовались несколько "пространств", но в С++ проще и традиционней использовать библиотеки. Каждая библиотека это уже "пространство имен". В итоге единственным фреймворком где это самое пространство имен используется является один единственный std. Но как в таком случае решать проблемы namespace pollution (нарушение пространства имён) ? В Си стандартом фактически предлагается использование префиксов, в С++ предложили такой выход. White Owl По нужде и желанию. Т.е. вы можете писать по-разному ? От чего это например зависит ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2015, 07:34 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
SashaMercury1.1 Почему BS не оставил в языке только один class-key ? Думаю что это связано с совместимостью программ на С и С++, но не уверен в это. Потому что в таком случае объекты struct и union можно было оставить как и ранее, и не говорить что это классы, хотя с другой стороны, struct и union по сути типы определяемые пользователем, потому всё логично. Но я правильности в своих рассуждений я не могу быть уверен. SashaMercury, Вы можете задать этот вопрос самому BS - он отвечает, проверено ) Собственно, встречный вопрос: а зачем ему было их убирать? Напомню, в "самых истоках" C++ назывался "C with classes". Это было сделано, чтобы "заполучить" большую аудиторию программистов на С, а также большой объем кода (библиотек и пр.), который бы облегчал разработку на новом языке. А для этого нужно было обеспечить на сколько возможно полную совместимость с С. Что делать, если новые возможности сломают обратную совместимость? Это же потеря всех преимуществ. Классы. Изменение ограничения доступа по умолчанию (c public на private) - это ломающее обратную совместимость изменение. Но оно отражает переход от парадигмы "пользователь по умолчанию видит всё" к парадигме "пользователь видит только то, что мы ему явно разрешили (специфицировав публичный интерфейс)". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2015, 09:11 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
White OwlSashaMercury4. Существует ли стандарт в котором дано определение того, что такое ООП ?Нет. Но существуют учебники. Читай про Simula & SmallTalk. Первая реализация ООП в Simula, но SmallTalk вывел ООП в люди. Не существует научного доказательства которое делает ООП более правильной методологией разработки. Нет также сравнительных практик или оценок качества ПО которые говорят о том что одно и то-же приложение написанное в ООП стиле лучше чем не-ООП. Скорее наоборот. Миру являет бесконечное разнообразие опенсорцного ПО которое было написано без использования ООП и тем не менее занесено в "жемчужины" кодо-строения. Да и само ООП в изложении различных авторов явно плывёт. Один термин "наследование" чего стоит. Это одна из тем бесконечных холиваров. Особенно когда новичёк начинает проводить параллели между inheritance и наследованием в генетике. Epic fail. Эпичны также топики о наследовании квадрата от прямоугольника. С моей точки зрения более интересным объектом для исследования являются макросы Lisp, монады, комбинаторы и прочие сущности мира ФП. Они просты и гениальны в своей сути. Я ООП воспринимаю просто как объективную реальность и "джентльменские" договрённости о кодинге внутри проекта. У меня нет амбиций в части ООП и я легко соглашаюсь с альтернативными методами декларации чего-либо в ООП коде. Просто я не видя изменений оценки o(n) считаю что речь идёт просто о косметике или о внешнем виде исходника. Из учебной программы ВУЗ-ов можно спокойно убрать ООП и это не изменит качество и разнообразие кода выпускников этого ВУЗа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2015, 09:13 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
SashaMercury1.2 Несмотря на то, что стандартом строго определен access contol членов класса по умолчанию существует возможность указать их в самостоятельно. Как вы поступаете в своих программах на С++ ? Это зависит от. Страуструп говорит, что сейчас оставил бы только public и private. Protected в настоящее время слишком часто используется неправильно и приводит к плохому дизайну. SashaMercury1.3 Существуют ли скрытые проблемы связанные со структурами и объединениями связанные с новой трактовкой данных элементов в С++ при переносе программ из С на С++ ? Что такое Новая Трактовка? Лучше, если на пальцах и с примерами. А то не пойму, о чем речь. SashaMercury1.4 Часто ли вы определяете объекты union в своих программах? Этот объект по определению не может использоваться часто. Их законное использование - экономия памяти при необходимости хранить два "больших", но примерно соразмерных объекта в одном участке памяти (не одновременно!). Типичный (и, наверное, самый распространённый) пример: small string/buffer optimization. - переносимая реализация разных интерфейсов ("побитового" доступа) к "сырым данным". "Вытащить бинарь" можно и другими способами, но вот все они будут не столь переносимы (и могут то работать, то не работать, например, в зависимости от ключей компиляции, например, выравнивания и пр.). - попытка "ручного" полиморфизма, когда хранится значение и "флаг типа значения", используемый при его интерпретации. SashaMercury2. Что такое пространство имён, и зачем оно нужно я понимаю. И мне нравится этот механизм. Мне кажется что каждый объект программы (каждый пользовательский класс) должен быть описан с использованием данного механизма. Это точно не будет ошибкой, и всегда может потребоваться при расширении программы. Используете ли вы данный механизм в своих программах ? Как часто ? Как говорит тот же Страуструп, всякий новый инструмент проходит этап своего чрезмерного и неправильного использования. Просто люди (разработчики) так учатся его использовать. Если есть возможность, это не значит, что так надо делать всегда. Если есть ружьё, это не значит, что нужно выстрелить себе в ногу. SashaMercury3. BS говорит -объявление класса, далее о том, что исторически сложилась фраза определение класса, а позже говорит представление класса. Как говорите вы ? Что-то у вас сумбурно. В С (да и С++) есть понятие definition и declaration, которые наиболее часто переводят на русский как определение и объявление. Также есть связанное с ним понятие forward declaration. Так вот, эти понятия позволяют программисту отделить описание (интерфейса, declaration) от определения/реализации (definition), что есть хорошо. Объявление позволяет - выделить объявления в заголовочные файлы, при включении библиотек в проект не компилировать библиотеку всякий раз, как вы её включаете (справедливости ради, в новом стандарте С++17 для этих целей предлагаются модули) - компилятору провести синтаксическую проверку Вашего кода, не требуя наличия реализации чужих зависимостей. Иными совами, декларация (объявление) - это просто введение соответствующего имени (и его атрибутов) в пространство имён. Определение - это точно указанная реализация. Понятно, что объявление и определение могут быть совмещены (особенно для коротких тривиальных функций). Ну и до кучи ещё один термин - создание экземпляра класса (создание объекта). Понятно, что у Вас будет (почти всегда) не один экземпляр класса, хотя только одно объявление и определение. Про "представление класса". Очень сложно без контекста понять, о чём у Вас идёт речь, т.к. этот термин используется очень часто , и при том с разным смыслом. Без хрустального шара я бы сказал вам посмотреть паттерны (шаблоны проектирования) Model-View-Controller, Facade, Decorator. Эти термины существуют без привязки к языку, хотя и чаше всего встречаются в контексте Java... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2015, 09:50 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
White OwlSashaMercury2. Что такое пространство имён, и зачем оно нужно я понимаю. И мне нравится этот механизм. Мне кажется что каждый объект программы (каждый пользовательский класс) должен быть описан с использованием данного механизма. Это точно не будет ошибкой, и всегда может потребоваться при расширении программы. Используете ли вы данный механизм в своих программах ? Как часто ?Никогда. Это абсолютно бессмысленный механизм. Сделан под давлением моды, но реальной пользы он не несет. В пространстве имен был-бы смысл, если бы в одном проекте использовались несколько "пространств", но в С++ проще и традиционней использовать библиотеки. Каждая библиотека это уже "пространство имен". В итоге единственным фреймворком где это самое пространство имен используется является один единственный std.во, и пространства имён ему не угодили ))) эти то чем провинились? SashaMercury - не слушай WhiteOwl, пространства имён полезны и удобны. Позволяют сократить код, разнести прикладную логику по собственным модулям и явно определяют зависимости между классами. Ну и облегчают именование программных объектов. Я пользуюсь постоянно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2015, 10:29 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
SashaMercury1.2 Несмотря на то, что стандартом строго определен access contol членов класса по умолчанию существует возможность указать их в самостоятельно. Как вы поступаете в своих программах на С++ ?если я пишу простую POD-структуру, то использую правило доступа по умолчанию, во всех остальных случаях предпочитаю разбивать класс на логические куски, и для каждого прописывать явно уровни доступа: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2015, 10:38 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
SashaMercury1.1 Почему BS не оставил в языке только один class-key ? Думаю что это связано с совместимостью программ на С и С++, но не уверен в это. Потому что в таком случае объекты struct и union можно было оставить как и ранее, и не говорить что это классы, хотя с другой стороны, struct и union по сути типы определяемые пользователем, потому всё логично. Но я правильности в своих рассуждений я не могу быть уверен.правильно рассуждаешь. Потом почитай дизайн и эволюция С++ , там он отвечает на подобные вопросы, ну и вообще познавательно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2015, 10:42 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
egorychWhite Owlпропущено... Никогда. Это абсолютно бессмысленный механизм. Сделан под давлением моды, но реальной пользы он не несет. В пространстве имен был-бы смысл, если бы в одном проекте использовались несколько "пространств", но в С++ проще и традиционней использовать библиотеки. Каждая библиотека это уже "пространство имен". В итоге единственным фреймворком где это самое пространство имен используется является один единственный std.во, и пространства имён ему не угодили ))) эти то чем провинились? SashaMercury - не слушай WhiteOwl, пространства имён полезны и удобны. Позволяют сократить код, разнести прикладную логику по собственным модулям и явно определяют зависимости между классами. Ну и облегчают именование программных объектов. Я пользуюсь постоянно. В dotNet кажется уже ввели а в Java только в фазе обсуждений т.н. модуляризация или модульность Classes. Это еще один из векторов деления функционала. Скорее всего ориентированного на быструю загрузку ядра системы и прикладного кода а также на улучшение процесса управления исходным кодом на уровне merge GIT/SVN/Mercurial. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2015, 10:56 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
Марк, а разве в Java не package решает эту проблему ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2015, 10:59 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
BagaBaga, Это зависит от. Страуструп говорит, что сейчас оставил бы только public и private. Protected в настоящее время слишком часто используется неправильно и приводит к плохому дизайну. Полностью поддерживаю. На одном из скрам-митингов в Java-проекте мы потратили несколько часов яростных споров по поводу protected в части одного рефакторинга. Я был удручён. Был фикс во внутренние документы касающиеся Code-Style agreement внутри team. И мы решили отказаться от явного использования protected в данном проекте (в некотором скоупе). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2015, 11:02 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
По 1.2 есть куда более простой и очевидный ответ - класс у которого все private в общем случае полностью бесполезен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2015, 11:28 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
SashaMercuryМарк, а разве в Java не package решает эту проблему ? Ммм.... не уверен. Я навскидку не помню первоисточник. Но для начала лучше почитать эту статью http://www.javaworld.com/article/2878952/java-platform/modularity-in-java-9.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2015, 11:37 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
SashaMercury1.4 Часто ли вы определяете объекты union в своих программах? Как класс, с методами - редко, но бывает. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2015, 12:53 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
White OwlНикогда. Это абсолютно бессмысленный механизм. Используется в качестве костыля для получения internal linkage типов в новых стандартах. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2015, 12:57 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
egorychне слушай WhiteOwl Из тех что я видел, это лучший совет по изучению С++. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2015, 12:58 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
SashaMercury1.1 Почему BS не оставил в языке только один class-key ? Думаю что это связано с совместимостью программ на С и С++, но не уверен в это. Именно поэтому. SashaMercuryПотому что в таком случае объекты struct и union можно было оставить как и ранее, и не говорить что это классы, хотя с другой стороны, struct и union по сути типы определяемые пользователем, потому всё логично. Но я правильности в своих рассуждений я не могу быть уверен. А как тогда от них наследоваться, если это не классы ? SashaMercury1.2 Несмотря на то, что стандартом строго определен access contol членов класса по умолчанию существует возможность указать их в самостоятельно. Как вы поступаете в своих программах на С++ ? Абы как. чаще всего в больших классах есть три секции , private/protected/public, где и описываются соответств. члены. Часто такие секции дублируются отдельно для данных. Иногда секции множатся. Ничего страшного нет. SashaMercury1.3 Существуют ли скрытые проблемы связанные со структурами и объединениями связанные с новой трактовкой данных элементов в С++ при переносе программ из С на С++ ? Нет. Даже если есть проблемы -- они не скрытые, а явные. :-) SashaMercury1.4 Часто ли вы определяете объекты union в своих программах? Очень редко. UNION-ы должны быть POD, и не должны быть членами не POD классов (кажется, так по стандарту), поэтому их применение весьма ограничено в C++, фактически оно сводится к тем функциям, которые возложены на UNION в языке C. SashaMercury2. Что такое пространство имён, и зачем оно нужно я понимаю. И мне нравится этот механизм. Мне кажется что каждый объект программы (каждый пользовательский класс) должен быть описан с использованием данного механизма. Это точно не будет ошибкой, и всегда может потребоваться при расширении программы. Используете ли вы данный механизм в своих программах ? Как часто ? Ну, пространство std используется очень часто. Также часто пространства boost-а. Но вообще пространства имён нужны как воздух только для библиотечного кода, повторноиспользуемого. Там это-- must. Но и то, до введения стандарта было настругано дофигища кода, и он как-то работал без неймспейсов. Некоторые люди по старой традиции их вообще не используют в своём коде. Так что очень всё зависит от проекта. SashaMercury3. BS говорит -объявление класса, далее о том, что исторически сложилась фраза определение класса, а позже говорит представление класса. Как говорите вы ? Это я не понял. Есть предварительное объявление класса, определение класса и реализация (методов и членов) класса. SashaMercury4. Существует ли стандарт в котором дано определение того, что такое ООП ? Нет. Существует стандарт, где дано определение, что такое ООП с точки зрения С++. А так в разных языках очень разные бывают объектные модели. Некоторые очень прикольные. :-) Например, модель питона не подразумевает ограничений на состав членов класса, эти члены могут добавляться находу во время работы программы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2015, 14:28 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
SashaMercuryНо как в таком случае решать проблемы namespace pollution (нарушение пространства имён) ? В Си стандартом фактически предлагается использование префиксов, в С++ предложили такой выход. Я хочу заметить, что " использование префиксов " в С не может решить данную проблему. Проблема -- это возможное нарушение ODR при использовании множества объектных модулей и библиотек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2015, 14:33 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
SashaMercuryНо как в таком случае решать проблемы namespace pollution (нарушение пространства имён) ? Пойми одну простую вещь: С++ разрабатывается не по факту, а теоретиками. Теоретикам кажется что "может быть полезно то, может быть полезно сё". И они эту придумку сразу же запихивают в стандарт. Все радуются, но никто не использует. Да, теоретически проблема namespace pollution может случиться. Когда-нибудь в будущем. В реальности она еще никогда не случалась, но теоретически она может случится. А на практике, вот лениво мне изобретать велосипед. Я беру фреймворк А и начинаю использовать объявленные в нем примитивы. Все чудесно и замечательно. Все функции, классы и константы объявленные внутри фреймворка это namespace A. В каком случае мне понадобится namespace B? Только в одном: если я захочу использовать одновременно с фреймворком A использовать фреймворк B. И тогда, если оба фреймворка содержат примитив foo() мне надо будет указывать из какого именно пространства имен я хочу вытаскивать это foo(). А теперь покажи мне такую пару фреймворков которые надо дополнять друг другом? SashaMercuryWhite Owl По нужде и желанию.Т.е. вы можете писать по-разному ? От чего это например зависит ?От нужды и желания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2015, 18:36 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskyegorychне слушай WhiteOwl Из тех что я видел, это лучший совет по изучению С++.Злые вы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2015, 18:39 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
maytonС моей точки зрения более интересным объектом для исследования являются макросы Lisp, монады, комбинаторы и прочие сущности мира ФП. Они просты и гениальны в своей сути. Я ООП воспринимаю просто как объективную реальность и "джентльменские" договрённости о кодинге внутри проекта. Я предполагаю, ты так думаешь потому, что хорошо знаешь ООП. А функциональщину пока не очень, вот она тебе и кажется круче. Если бы наоборот, ты варился в предыдущие годы в мире ФП, а лишь недавно попробовал ООП, то высказывал бы (возможно) противоположные мысли: Я ФП воспринимаю как объективную реальность... С моей точки зрения более интересны наследование, полиморфизм... maytonИз учебной программы ВУЗ-ов можно спокойно убрать ООП и это не изменит качество и разнообразие кода выпускников этого ВУЗа. А вот с этим я согласен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2015, 21:01 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
maytonВ dotNet кажется уже ввели а в Java только в фазе обсуждений т.н. модуляризация или модульность Classes. Эмм... Имеются в виду частичные (разделённые) классы - partial class? Это здорово облегчает совмещение автогенерированного кода с написанным вручную. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2015, 21:04 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
White OwlAnatoly Moskovskyпропущено... Из тех что я видел, это лучший совет по изучению С++.Злые вы. А ты сам виноват. Приобрёл себе репутацию закоренелого олдскульного сишника -- так теперь не жалуйся. Я и сам старый сишник, но зачем же жить всё время устарелыми категориями? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2015, 21:31 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
MasterZivА ты сам виноват. Приобрёл себе репутацию закоренелого олдскульного сишника -- так теперь не жалуйся.Я не жалуюсь, я хихикаю. MasterZivЯ и сам старый сишник, но зачем же жить всё время устарелыми категориями?Потому что в новых смысла нет. Вот "Си-с-классами" это хорошо. Все остальное можно смело удалять. Все эти шаблоны, неймспейсы, исключения, переопределение операторов - это всё нафиг не нужно. Весь этот синтаксический сахар только добавляет в код нечитабельности и возможностей ошибиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2015, 21:39 |
|
||
|
Некоторые вопросы о программировании на 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 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
MasterZivSashaMercuryНо как в таком случае решать проблемы namespace pollution (нарушение пространства имён) ? В Си стандартом фактически предлагается использование префиксов, в С++ предложили такой выход. Я хочу заметить, что " использование префиксов " в С не может решить данную проблему. Проблема -- это возможное нарушение ODR при использовании множества объектных модулей и библиотек. Почему не может ? Я думал что как раз наоборот, решает. Например, имена всех переменных из библиотек Си начинаются с префикса _, более того, в стандарте де-факто оговаривается этот факт. Де-факто, потому что как мы убедились ранее это закон можно нарушить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2015, 09:06 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
Марк, зачитался вашей пламенной речью :) У Анатолия странный класс. Спасибо всем за советы C: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2015, 09:17 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
Кстати, как вы называете класс иначе ? Мне не нравится этот термин. Объект, или определяемый пользователем тип звучат лучше. Но может быть есть что-то ещё. А почему вообще "класс" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2015, 09:24 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
SashaMercury1. class definition - определение, интерфейс типа данных определенного пользователем 2. class declaration - объявление, интерфейс типа данных определённого пользователем 3. representation - представлениея, реализация типа данных определенного пользователемну, он же там пишет, прямо где ты выделил, что по историческим резонам, бла-бла-бла первое - это синоним второго. Что, впрочем, в русскоязычной традиции совсем не так. Я, например, привык, что definition - это то, что он здесь назвал repsentation, причём последний термин для меня новость ))). Стандарт надо смотреть, на самом деле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2015, 09:35 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
SashaMercuryКстати, как вы называете класс иначе ? Мне не нравится этот термин. Объект, или определяемый пользователем тип звучат лучше. Но может быть есть что-то ещё. А почему вообще "класс" ?мне нравится термин "тип", потому что в С++ это действительно - тип, с полностью определяемой семантикой, в том числе и за счёт того, что можно переопределить необходимые операторы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2015, 09:38 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
egorychSashaMercury1. class definition - определение, интерфейс типа данных определенного пользователем 2. class declaration - объявление, интерфейс типа данных определённого пользователем 3. representation - представлениея, реализация типа данных определенного пользователемну, он же там пишет, прямо где ты выделил, что по историческим резонам, бла-бла-бла первое - это синоним второго. Что, впрочем, в русскоязычной традиции совсем не так. Я, например, привык, что definition - это то, что он здесь назвал repsentation, причём последний термин для меня новость ))). Стандарт надо смотреть, на самом деле. Я так и понял. Выше мне говорили противоположные вещи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2015, 09:47 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
SashaMercuryА почему вообще "класс" ? Наверно с легкой руки переводчиков книжек. Они много чего наизобретали в русскоязычной терминологии. Сейчас еще автопереводчики "помогают". В C#, например, ушли от "класса" к "типу", но появились "значимые и ссылочные типы", долго голову ломал чего бы это значило, пока не понял что просто корявый перевод ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2015, 09:52 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
SashaMercuryMasterZivпропущено... Я хочу заметить, что " использование префиксов " в С не может решить данную проблему. Проблема -- это возможное нарушение ODR при использовании множества объектных модулей и библиотек. Почему не может ? Я думал что как раз наоборот, решает. Например, имена всех переменных из библиотек Си начинаются с префикса _, более того, в стандарте де-факто оговаривается этот факт. Де-факто, потому что как мы убедились ранее это закон можно нарушить. Именно потому , что закон легко нарушить. Ты не можешь гарантировать, что все глобальные имена в программе у тебя будут уникальными, особенно если используешь много сторонних библиотек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2015, 13:13 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Код: plaintext 1. 2. 3. 4. 5. Here are "forward declaration" of a class and its "definition". Understood? Representation is a little trickier to explain. Assume there is some object in real life (for example a date). Someone created a class Date for you and you are using it. You do not care how this class done internally, you have a documentation, you know which methods are exposed - you are using this class. Right now, the object 'date' of real life is represented by the class 'Date'. Then you decided to create your own class Date to replace the old one. You do so by mimicking the old class, in order to not rewrite the usage of the class in all your programs. Now you have two (someone's Date and your Date) representations of the same real-life object, which do different representations of the same logical object in computer's memory. You can also try looking up the definition of the word in encyclopedia. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2015, 15:08 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
White OwlSashaMercury, Код: plaintext 1. 2. 3. 4. 5. Here are "forward declaration" of a class and its "definition". Understood? Representation is a little trickier to explain. Чё эт ты, раскладку клавиатуры вовремя не успел переключить ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2015, 16:49 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
SashaMercuryКстати, как вы называете класс иначе ? Мне не нравится этот термин. Объект, или определяемый пользователем тип звучат лучше. Но может быть есть что-то ещё. А почему вообще "класс" ? Некоторые протаскивают понятие "прототип". Еще иногда в качестве interface пишут "стеретип". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2015, 17:45 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
SashaMercuryКстати, как вы называете класс иначе ? Мне не нравится этот термин. Объект, или определяемый пользователем тип звучат лучше. Но может быть есть что-то ещё. А почему вообще "класс" ? Не надо иначе. В С++ класс - это устоявшееся название для пользовательского типа. Особенно учитывая что в синтаксисе именно так эта сущность и зовется. Объект - это не тип и не класс, а экземпляр типа в рантайме. В С++ это разные вещи. И в стандарте объектом зовется именно экземпляр, т.е. область памяти с известной о ней информации о типе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2015, 18:30 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
В Scala ввели понятие trait. Вместо интерфейса. Зачем надо - ХЗ. Еще не разбирался. Идеология ть ее так. Подготавливают почву значить для адептов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2015, 18:32 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
В Обероне - "модули" вместо классов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2015, 19:18 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
maytonВ Обероне - "модули" вместо классов.А в Перле - пакеты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 02:13 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
White OwlSashaMercury, Код: plaintext 1. 2. 3. 4. 5. Here are "forward declaration" of a class and its "definition". Understood? Representation is a little trickier to explain. Assume there is some object in real life (for example a date). Someone created a class Date for you and you are using it. You do not care how this class done internally, you have a documentation, you know which methods are exposed - you are using this class. Right now, the object 'date' of real life is represented by the class 'Date'. Then you decided to create your own class Date to replace the old one. You do so by mimicking the old class, in order to not rewrite the usage of the class in all your programs. Now you have two (someone's Date and your Date) representations of the same real-life object, which do different representations of the same logical object in computer's memory. You can also try looking up the definition of the word in encyclopedia. На w такие серьезные вопросы смотреть не буду. В целом она мне не нравится, и пользуюсь ей крайне редко. Для того чтобы объяснить что такое представление класса лучше всего подходит/требуется именно такая ситуация ? Вот что говорит стандарт С++. 9.1 Class name 1. p216 A class definition introduces a new type. Нет замечаний о том, даётся ли только интерфейс класса, либо более. 2. p216-217 A class declaration introduces the class name into the scope where it is declared and hides any class, variable, function, or other declaration of that name in enclosing scope. Далее идут рассуждения об области видимости, не более. Да и определение того что такое class declaration дано в контексте области видимости. А ещё ниже приведён такой пример. p219 A simple example of s calss definition is Код: plaintext 1. 2. 3. 4. 5. 6. Once this definition has been given, the declaration Код: plaintext 1. ... Таким образом можно сделать вывод о том, что declaration понимается стандартом только в контексте области видимости и объявлении экземпляров класса. Пока никакой информации о repersentation нет вообще. Зато в 9.3 Member function 1. Function declared in the definition of a class, excluding those declared with a friend specifier are called member function of that class. Далее 2.A member function may be defined in its class definition, in which case it is an inline member function, or it maybe defined outside of its class definition if it has already been declared but not defined in its class definition. Можно сделать следующие выводы: 1. class definition есть определение нового пользовательского типа данных. 2. class definition может содержать в себе как прототипы member functions так и реализации member functions. 3. термин class declaration имеет отношение к области видимости, и объявлению объектов классов 4. термин class representation не имеет специального значения согласно стандарту С++. Если кто-то не согласен с данными выводами, скажите об этом пожалуйста ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 03:04 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskySashaMercuryКстати, как вы называете класс иначе ? Мне не нравится этот термин. Объект, или определяемый пользователем тип звучат лучше. Но может быть есть что-то ещё. А почему вообще "класс" ? Не надо иначе. В С++ класс - это устоявшееся название для пользовательского типа. Особенно учитывая что в синтаксисе именно так эта сущность и зовется. Объект - это не тип и не класс, а экземпляр типа в рантайме. В С++ это разные вещи. И в стандарте объектом зовется именно экземпляр, т.е. область памяти с известной о ней информации о типе. В таком случае согласен и принимаю это название ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 03:07 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
[quot SashaMercury4. термин class representation не имеет специального значения согласно стандарту С++.[/quot]во, так и есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 09:26 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
Сашик давай качай скиллы в 3D-графике. Кури векторные операции. Фигли тут ковырять грязь из под ногтей... Всё равно земля крутится и солнце светит. От того что класс незвать не классом ничо не изменится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 18:31 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Марк, мне кажется что я не многим смогу помочь вам в сравнении программ на Си, С++ и Java. Если у вас возникнут конкретные вопросы по математике в том топике, то всегда обращайтесь :) Последнюю половину прошедшей недели я потратил на ту программу-поздравление, и потому ООП не занимался. Но сегодня утром продолжил. У меня вновь возникли вопросы, подскажите пожалуйста 1. BS пишет: The protection of private data relies on restriction of the use of the class member names. It can therefore be circumvented by address manipulation and explicit type conversion. But this, of course, is cheating. C++ protects against accident rather than deliberate circumvention(fraud). Only hardware can protect against malicious use of general-purpose language, and even that is hard to do in realistic systems. 1.1 Это значит что проверка доступа к полям класса осуществляется на уровне синтаксического анализа ? 1.2 Приведите пожалуйста простой пример манипуляций с адресами, что позволит получить доступ к закрытым полям класса ? 1.3 Как осуществляется защита от злонамеренного доступа к закрытым полям класса ? 2.1 Правильный ли вывод: При разработке ПО желательно инициализировать объекты при их создании. В ООП каждый объект должен быть проинициализирован при создании. Можно ли считать это одной из важны деталей ООП ? 2.2 В каком-то случае мы решили что создадим объект и только потом проинициализируем. Что делать с дополнительными затратами на инициализацию при создании объекта, в которой нет необходимости. 2.3 Существуют ли вообще проблемы в серьёзных программах с конструкторами, и, в частности, с конструкторами по умолчанию ? 2.4 Почему синтаксис конструктора по умолчанию отличается от синтаксиса функции-члена без параметров ? Неужели сахар. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2015, 09:01 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЗдравствуйте. Марк, мне кажется что я не многим смогу помочь вам в сравнении программ на Си, С++ и Java. Если у вас возникнут конкретные вопросы по математике в том топике, то всегда обращайтесь :) Вопросы есть. Создатель приложения Пол Гекберт (без названия) которое я назвал CardRaytracer был хитёр и использовал упрощённую модель мира. В частности я не нашёл матрицу аффинных преобразований для камеры и для объектов. Еще опытным путём установил что шары ортогональны к направлению квадратной плитки и это действительно хардкод. Независимо их крутить безе переделки ПО невозможно. Могу предположить что ориентируя объекты вдоль орт X,Y,Z Пол Гекберт получал нулевые коэффициенты матриц и просто выбрасывал из модели мира целые куски уравнений. Таким образом он упрощал объём кода. Собственно вопросы. 1) Где находится камера ? Куда она ориентирована? 2) Базовые трансформации объектов. Шары. Плиточный пол. Точечный источник света. Где. Как. Как управлять? Где pivot ? Где масштаб ? Где углы поворота по эйлеру. Или матрица ВСЕХ трансформаций. 3) Ambient (горизонт, небо). Как управлять. У меня нет планов менять базовую постановку. Ребята наколбасили огромный объём кода вручную. И этот результат будет зафиксирован как финальный. Но на будущее хотелось-бы узнать пару технических приёмов и возможно заюзать их в Game Development-е. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2015, 09:28 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
SashaMercury1.1 Это значит что проверка доступа к полям класса осуществляется на уровне синтаксического анализа ? Проверка происходит на этапе синтаксического анализа, т.к. обращение на недоступной 'private'-области с точки зрения проверки ничем не отличается от доступа, например, к несуществующему члену. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2015, 10:04 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
SashaMercury1.2 Приведите пожалуйста простой пример манипуляций с адресами, что позволит получить доступ к закрытым полям класса ? Код: 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. SashaMercury1.3 Как осуществляется защита от злонамеренного доступа к закрытым полям класса ? Никак. Этот код - UB, и в любой момент может выстрелить в ногу написавшего. С++ пытается предотвратить случайный выстрел, но если кто-то очень упорен, и говорит компилятору "не лезь, я знаю, что делаю" ... в конце-концов, это его. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2015, 10:16 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
SashaMercury wrote >>1.2 Приведите пожалуйста простой пример манипуляций с адресами, что позволит получить доступ к закрытым полям класса ?[/quot] Код: plaintext 1. 2. 3. 4. >>1.3 Как осуществляется защита от злонамеренного доступа к закрытым полям класса ? мозг )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2015, 10:33 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
SashaMercury1.3 Как осуществляется защита от злонамеренного доступа к закрытым полям класса ? Pimpl . SashaMercury2.3 Существуют ли вообще проблемы в серьёзных программах с конструкторами, и, в частности, с конструкторами по умолчанию ? Из сегодняшнего: есть базовый класс, в котором один конструктор с одним параметром, для которого указано значение по умолчанию, и есть производный класс, у которого нетривиальный конструктор без параметров. Явного вызова конструктора предка в производном классе нет. gcc компилит нормально, вижуал студия ругается, мол, no accessible constructor. SashaMercury2.4 Почему синтаксис конструктора по умолчанию отличается от синтаксиса функции-члена без параметров ? Неужели сахар. Синтаксис конструкторов вообще отличается: во-первых, у них нет имён, во-вторых, как следствие первого, у них нельзя взять адрес или явно вызвать. Зачем это сделано - тут уже простор для спекуляций. Вон в Дельфи это не так, и вроде никаких особых проблем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2015, 19:17 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
SashaMercury2.1 Правильный ли вывод: При разработке ПО желательно инициализировать объекты при их создании. В ООП каждый объект должен быть проинициализирован при создании. Можно ли считать это одной из важны деталей ООП ? Хорошим тоном сейчас является RAII . Предполагается, что для отказа от данного принципа в каждом конкретном случае должны быть очень веские и явно и четко формулируемые причины. Одной из таких может быть "дороговизна" операции инициализации. Как говорится, делайте так, если у Вас нет _веских_ причин делать иначе... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2015, 21:39 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
MozokSashaMercury1.3 Как осуществляется защита от злонамеренного доступа к закрытым полям класса ? Pimpl . Я не уверен, что именно защита от "целеустремлённого настойчивого буратины". Для особо настойчивых просто добавляется необходимость взятия ещё одного адреса расчёта смещения. Мне кажется, что гораздо более существенными фишками этой техники являются (b) adding new data members to the private struct does not affect binary compatibility; (c) the header file containing the class declaration only needs to #include those other files needed for the class interface, rather than for its implementation. One side benefit is that compilations are faster because the header file changes less often. . Что, собственно, есть способ отделения интерфейса от реализации (без болезней типа необходимости пересобрать всё-всё только из-за изменения одной строчки в хедере). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2015, 21:44 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. BS пишет: A constructor is recognized by having the same name as the class itself. И не только он, многие говорят о том, что конструктор имеет имя класса которому он принадлежит. Однако в стандарте действительно(как сказал выше Mozok ) сказано: Constructor do not have names. Согласно стандарту существует специальный синтаксис объявления конструктора. Не читал далее, но вероятнее всего такой синтаксис существует для всех special member function. Mozok, всё что вы сказали, я понял, несмотря на то, что не до конца понимаю причину некоторых вещей, но она видимо глубже нежели анализ конструкторов. Но вы также говорите что нельзя конструктор явно вызывать. Как я понял, реализация может неявно определить все или некоторые special member function в том случае, если они не определены явно разработчиком. В таком случае, если программист явно определяет, fe, default constructor, он и будет явно вызываться при создании объекта без использования параметров. Разве в данном случае это не будет явным вызовом конструктора по умолчанию ? Читая стандарт, мне показалось что смысловая нагрузка слов: имплицитно и эксплицитно в контексте ООП в С++ несколько иная. Или ошибаюсь ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2015, 02:52 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЗдравствуйте. BS пишет: A constructor is recognized by having the same name as the class itself. И не только он, многие говорят о том, что конструктор имеет имя класса которому он принадлежит. Однако в стандарте действительно(как сказал выше Mozok ) сказано: Constructor do not have names. Согласно стандарту существует специальный синтаксис объявления конструктора.И что тебя смущает? В одном случае говорится про определение, в другом про представление. SashaMercuryКак я понял, реализация может неявно определить все или некоторые special member function в том случае, если они не определены явно разработчиком.Реализация ничего определить не может. По определению самой реализации. А вот компилятор действительно делает реализацию всех недостающих обязательных членов класса. SashaMercury В таком случае, если программист явно определяет, fe, default constructor, он и будет явно вызываться при создании объекта без использования параметров. Разве в данном случае это не будет явным вызовом конструктора по умолчанию ?Не существует "конструктора по умолчанию". Есть просто разные конструкторы, с параметрами и без. А какой из них будет вызван зависит от уже от того как ты будешь создавать объект. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2015, 05:27 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
White OwlSashaMercuryЗдравствуйте. BS пишет: A constructor is recognized by having the same name as the class itself. И не только он, многие говорят о том, что конструктор имеет имя класса которому он принадлежит. Однако в стандарте действительно(как сказал выше Mozok ) сказано: Constructor do not have names. Согласно стандарту существует специальный синтаксис объявления конструктора.И что тебя смущает? В одном случае говорится про определение, в другом про представление. В стандарте нет определения того, что такое представление, что вы имеете ввиду и почему используете этот термин ? Меня смущает, что слова name и constructor находятся в одном предложении, и это не предложение Constructor do not have names. И такое не только у BS. В стандарте чётко написано: Constructors do not have names. A special declarator syntax is used to declare or define the constructor. Потому не надо ассоциировать имя класса и конструктор. У конструктора нет имени, существует только синтаксис определения и объявления конструктора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2015, 06:40 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
White Owl Реализация ничего определить не может. По определению самой реализации. А вот компилятор действительно делает реализацию всех недостающих обязательных членов класса. Тогда как вы переведёте такую фразу, fe: ISO/IEC N3242=11-0012 12.1 Special member functionsThe implementation will implicitly declare these members functions for some class types when the program does not explicitly declare them. The implementation will implicitly defined them if they are odr-use. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2015, 06:47 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
White Owl Не существует "конструктора по умолчанию". В стандарте описан default constructor. A default constructor for a class X is constructor of class X that can be called without an argument. Единственное что меня смущает, я выделил красным. Видимо реализация языка в VS не совсем корректная, ибо они реализовали не can be, a must be. Такой код, например, выдаст ошибку на этапе компиляции Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2015, 07:52 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
Скобки убери, тогда скомпилируется. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2015, 08:02 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
Нет, я не так понял. В стандарте написано о том, что вызов может быть без аргументов. Так он и должен быть без аргументов. Но и синтаксис вызова должен быть иной. Вот так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2015, 08:02 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
Dima TСкобки убери, тогда Код: plaintext 1. 2. 3. Безусловно. Изначально подумал что и такой синтаксис должен работать Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2015, 08:06 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
SashaMercuryИзначально подумал что и такой синтаксис должен работать Код: plaintext 1. Тоже вполне нормальный код - объявление функции, возвращающей X. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2015, 09:28 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
wstSashaMercuryИзначально подумал что и такой синтаксис должен работать Код: plaintext 1. Тоже вполне нормальный код - объявление функции, возвращающей X. Вероятно поэтому синтаксис использования конструктора по умолчанию имеет такой вид X x.3048 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2015, 10:02 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
SashaMercuryВероятно поэтому синтаксис использования конструктора по умолчанию имеет такой вид X xне вероятно - очевидно )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2015, 10:06 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
Читаю топик и меня не покидает ощущение вязкого затягивающего кошмара. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2015, 11:20 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
maytonЧитаю топик и меня не покидает ощущение вязкого затягивающего кошмара. Почему ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2015, 12:27 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
SashaMercuryВ стандарте нет определения того, что такое представление, что вы имеете ввиду и почему используете этот термин ? Термин «представление» в мире С++ не используется. Есть «объявление (declaration)» и «определение (definition)». Они могут совпадать в коде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2015, 12:34 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
SashaMercuryНо вы также говорите что нельзя конструктор явно вызывать. Можно и так всегда делают. Более того: - Можно вызвать конструктор повторно. - Конструктор можно явно вызвать для произвольного участка памяти. - Можно явно вызвать деструктор. Но это редко нужно и требует серьезного обоснования и глубоких знаний. SashaMercuryВ таком случае, если программист явно определяет, fe, default constructor, он и будет явно вызываться при создании объекта без использования параметров. Что такое «fe»? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2015, 12:40 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
SashaMercurymaytonЧитаю топик и меня не покидает ощущение вязкого затягивающего кошмара. Почему ? Обычно топик заканчивается либо решением проблемы. Либо каждый для себя делает выводы. А тут - философский пинг-понг. Что то тип: Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2015, 14:28 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
[quot mayton Код: plaintext 1. 2. 3. 4. 5. 6. [/quot]тебе отсыпать опилок? ;) у меня свежие есть ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2015, 14:29 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
petrav- Можно вызвать конструктор повторно. Это как? Надеюсь, не имелся в виду вызов конструкторов по цепочке, как в Java. petrav- Конструктор можно явно вызвать для произвольного участка памяти. И это как? placement new не предлагать, это вызов operator new, а не коструктора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2015, 18:47 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
Так placement new и есть только вызов конструктора. n4527.pdf§18.4.1.3 Placement forms These functions are reserved, a C++ program may not define functions that displace the versions in the Standard C++ library. ... void* operator new(std::size_t size, void* ptr) noexcept; Returns: ptr. Remarks: Intentionally performs no other action. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2015, 18:58 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
Mozokpetrav- Можно вызвать конструктор повторно. Это как? Надеюсь, не имелся в виду вызов конструкторов по цепочке, как в Java. petrav- Конструктор можно явно вызвать для произвольного участка памяти. И это как? placement new не предлагать, это вызов operator new, а не коструктора. placement new -- это как раз вызов конструктора, а не operator new. operator new -- это создание объекта в памяти (выделение памяти) и затем его инициализация путём вызова одного из конструкторов. placement new -- напротив, только инициализация объекта в памяти путём вызова одного из конструкторов . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2015, 19:00 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
Mozokpetrav- Можно вызвать конструктор повторно. Это как? Надеюсь, не имелся в виду вызов конструкторов по цепочке, как в Java. petrav- Конструктор можно явно вызвать для произвольного участка памяти. И это как? placement new не предлагать, это вызов operator new, а не коструктора. Вот так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Я, правда, считал, что можно напрямую вызвать конструктор как-то так: Код: plaintext 1. Не компилируется, но это ничего не меняет. Что там с цепочками в Яве я не знаю. :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2015, 21:05 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
petravЧто там с цепочками в Яве я не знаю. :( Что за цепочки? "Method chaining"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2015, 22:04 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
maytonpetravЧто там с цепочками в Яве я не знаю. :( Что за цепочки? "Method chaining"? Я не знаю что имелось в виду. Нужно уточнить у Mozok. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2015, 22:23 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
petravmaytonпропущено... Что за цепочки? "Method chaining"? Я не знаю что имелось в виду. Нужно уточнить у Mozok. Как дела кст. Заходи в наш бенчмарк. Прокашляем вопросы перформанса на сях. Заодно обсудим планы на будущее. Бенчмарк I/O и использование memory. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2015, 22:25 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
wstТак placement new и есть только вызов конструктора. MasterZivplacement new -- это как раз вызов конструктора, а не operator new. Ну началось. Так и знал. placement new - это всего лишь способ передать дополнительные аргументы в функцию выделения памяти. Даже если используется неперегружаемая версия, как у petrav в примере, объект полностью создаётся с нуля в указанной области, а не просто вызывается конструктор. Отличие в вызове констукторов предков и полей. Код: 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. maytonЧто за цепочки? "Method chaining"? Имелось в виду Код: plaintext 1. Оно же delegating constructors. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2015, 23:16 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
MozokДаже если используется неперегружаемая версия, как у petrav в примере, объект полностью создаётся с нуля в указанной области, а не просто вызывается конструктор. Отличие в вызове констукторов предков и полей. После таких слов даже Ваш код рассматривать не хочется. Вызов конструктора — это и есть создание объекта с нуля. Других вариантов нет. Не рассматриваем сгенерированное исключение в конструкторе — это отдельная тема. Отличия в вызове конструкторов предков и полей данных нет никакого. Конструктор конструирует объект. В данной области памяти. С вызовом конструкторов предков и полей. И всё. Просто new перед этим выделяет память для объекта, а в случае placement new мы сами обязаны выделить память. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 01:28 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
Mozok... А не… Всё же посмотрел Ваш код. Там вы дважды допустили утечку памяти. Плюс, возможно, в конце уронили приложение — зависит от реализации класса std::string — хотя тут могут быть тонкости. Это к Московскому. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 01:36 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
maytonpetravпропущено... Я не знаю что имелось в виду. Нужно уточнить у Mozok. Как дела кст. Заходи в наш бенчмарк. Прокашляем вопросы перформанса на сях. Заодно обсудим планы на будущее. Бенчмарк I/O и использование memory. Как дела? Я две недели на южном море был. Хорошо что ты не ответил в нашем споре о применимости языков. Пустой был спор. А какой такой «наш бенчмарк»? Это тема «Тяпничный бенчмарк CPU (part-1)» в разделе «Программирование», где вы меряетесь производительностью .NET и Java? Ну так в этом споре С++ заведомого в более выигрышном положении (раза в два-три). Если, конечно, узкое горлышко в алгоритме не винчестер и не магнитная лента (для бекапов). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 01:55 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
BagaBagaMozokпропущено... Pimpl . Я не уверен, что именно защита от "целеустремлённого настойчивого буратины". Для особо настойчивых просто добавляется необходимость взятия ещё одного адреса расчёта смещения. Мне кажется, что гораздо более существенными фишками этой техники являются (b) adding new data members to the private struct does not affect binary compatibility; (c) the header file containing the class declaration only needs to #include those other files needed for the class interface, rather than for its implementation. One side benefit is that compilations are faster because the header file changes less often. . Что, собственно, есть способ отделения интерфейса от реализации (без болезней типа необходимости пересобрать всё-всё только из-за изменения одной строчки в хедере). Почитал по той ссылке в w. Т.о. непрозрачный указатель есть объявление незавершенного типа содержащего все data memberы в header, с его дальнейшим определением в другом месте. Но как это поможет ? Определение класса, даже в том случае если содержит только адрес незавершенного типа со всеми data members, разве не позволит получить адрес этого объекта с его data members ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 02:13 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
Хотя, скажу честно, идея с использованием непрозрачных указателей мне кажется очень даже симпатичной. Вы используете данную технологию в своих реальных программах ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 02:16 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
maytonОбычно топик заканчивается либо решением проблемы. Либо каждый для себя делает выводы. А тут - философский пинг-понг. Марк, у нас такого тут нет :) petrav Что такое «fe»? :) for example. Редко, но такое сокращение можно встретить. Как правило сокращают используя латинское e. g.(exempli gratia), но мне почему-то больше нравится первый вариант :) PS Прошу всех ни в коем случае не ругаться вновь по поводу прошлых обсуждений касаемо Java и других вещей не связанных с ООП на С++. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 02:26 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
SashaMercuryПочитал по той ссылке в w. Т.о. непрозрачный указатель есть объявление незавершенного типа содержащего все data memberы в header, с его дальнейшим определением в другом месте. Но как это поможет ? Определение класса, даже в том случае если содержит только адрес незавершенного типа со всеми data members, разве не позволит получить адрес этого объекта с его data members ? Pimpl. Это указатель не на «незавершенный тип/класс» и уж тем более не «непрозрачный указатель». Так не говорят. Это указатель на «предобъявленный класс/тип». Вот так: Код: plaintext 1. 2. И теперь можно оперировать указателями и ссылками на объекты класса Foo. До тех пор пока в данной единице компиляции ты не начал создавать объекты класса Foo или вызывать его методы. В С++ не существует способа защиты памяти объектов класса. Всегда можно грязными методами достучаться до чего угодно. При желании. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 02:34 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
petrav Это указатель не на «незавершенный тип/класс» и уж тем более не «непрозрачный указатель». Так не говорят. Это указатель на «предобъявленный класс/тип». Но ведь существует в стандарте определение incomplete type, потому так и перевёл. Тогда уж лучше говорить оперируя английскими терминами, чтобы не запутаться в переводе слов в России ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 02:46 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
petravЭто указатель не на «незавершенный тип/класс» и уж тем более не «непрозрачный указатель». Так не говорят. Это указатель на «предобъявленный класс/тип». Точнее даже «предобъявленный тип» не говорят. Говорят «предобъявленный класс», «предобъявленный union» и «предобъявленная стуктура». ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 02:48 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
SashaMercurypetrav Это указатель не на «незавершенный тип/класс» и уж тем более не «непрозрачный указатель». Так не говорят. Это указатель на «предобъявленный класс/тип». Но ведь существует в стандарте определение incomplete type, потому так и перевёл. Тогда уж лучше говорить оперируя английскими терминами, чтобы не запутаться в переводе слов в России Ну, Вам нужно стать уважаемым автором книг по С++ на русском языке. Или хотя бы уважаемым переводчиком. Тогда сможете повлиять на лексику С++ в русском изложении. А то так и появляются фразы «представление в С++» и никто не может понять что это. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 02:59 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
petrav А то так и появляются фразы «представление в С++» и никто не может понять что это. Ну это собственно появилось у BS :) Но в стандарте такого термина действительно нет. Выше я приводил цитаты как из стандарта так и из BS ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 05:32 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
[quot SashaMercury]BagaBagaпропущено... ... Почитал по той ссылке в w. Т.о. непрозрачный указатель есть объявление незавершенного типа содержащего все data memberы в header, с его дальнейшим определением в другом месте. Но как это поможет ? Определение класса, даже в том случае если содержит только адрес незавершенного типа со всеми data members, разве не позволит получить адрес этого объекта с его data members ? SashaMercury, вам надо использовать любую хорошую (т.е. от классиков) русскоязычную книгу (перевод, конечно же), а то вас с вашей терминологией или не поймут вовсе, или поймут неправильно. Компилятору нужно знать сигнатуры тех объектов, с которыми он работает. Реализацию ему знать необязательно (не везде). Для того, чтобы ввести что-то в пространство имён, используется forward declaration (по-русски оно звучит как "предварительное объявление" или, иногда, ооочень иногда именуемое также как "опережающее объявление"). Именно это вы и видите. Внутри класса сделано локальное предварительное объявление типа. Если угодно, включая любой заголовочный файл вы тем самым вводите в свое пространство имен множество предварительных объявлений. Где-то в другом месте обязана находиться реализация (не обязательно, к стати, в исходниках - это вполне могут быть бинарные библиотеки). Так вот, это предварительное объявление позволяет компилятору убедиться в синтаксической правильности программы. Если же вы обманули компилятор и не дали ему реализации - на вас заругается линкер на этапе линковки объектных файлов, или, в более разумном случае, тот же компилятор пропоет про что-нибудь 'not found', но _на_более_поздних_этапах. Механизм предварительных объявлений позволяет отделить объявления (интерфейс) от определения (реализации) и избежать необходимости кучу раз перекомпилировать один и тот же код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 08:26 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
petravНу так в этом споре С++ заведомого в более выигрышном положении (раза в два-три). Если, конечно, узкое горлышко в алгоритме не винчестер и не магнитная лента (для бекапов). Это сарказм был по поводу "винчестер и магнитная лента" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 08:45 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
BagaBaga, понял, спасибо. У меня есть книга BS на русском языке (хотя английский там несложный, и я предпочитаю английский вариант). Посмотрю что написано в ней(в русском варианте). Есть Лафоре и Павловская, кроме того. Но лучше у BS. У него лучше всего написано ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 09:16 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
maytonpetravНу так в этом споре С++ заведомого в более выигрышном положении (раза в два-три). Если, конечно, узкое горлышко в алгоритме не винчестер и не магнитная лента (для бекапов). Это сарказм был по поводу "винчестер и магнитная лента" ? Даже интересно где же ты в моих словах заподозрил сарказм? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 13:59 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
SashaMercurypetrav А то так и появляются фразы «представление в С++» и никто не может понять что это. Ну это собственно появилось у BS :) Но в стандарте такого термина действительно нет. Выше я приводил цитаты как из стандарта так и из BS Страуструп использует термин «представление»? Не верю. :-Р ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 14:00 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
petravmaytonпропущено... Это сарказм был по поводу "винчестер и магнитная лента" ? Даже интересно где же ты в моих словах заподозрил сарказм? У меня просто слов нет. По поводу магнитной ленты. Я не знаю где. В какой предметной области. В каких задачах. У разработчика на С++ вдруг вдруг внезапно (!) появится задача что-то кодить и иметь в виду устройством вывода /dev/st или ему подобное. В скобках замечу что я сам бэкапил много чего но это задачи рода админских а не девелоперских. Поэтому мне остаётся только всплеснуть руками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 14:15 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
maytonpetravпропущено... Даже интересно где же ты в моих словах заподозрил сарказм? У меня просто слов нет. По поводу магнитной ленты. Я не знаю где. В какой предметной области. В каких задачах. У разработчика на С++ вдруг вдруг внезапно (!) появится задача что-то кодить и иметь в виду устройством вывода /dev/st или ему подобное. В скобках замечу что я сам бэкапил много чего но это задачи рода админских а не девелоперских. А кто по твоему разработал инструменты (программы) которыми пользуются админы? АС Пушкин — лётчик? Я могу ошибаться, но насколько я знаю магнитная лента и сейчас живее всех живых. Очень дёшево и очень надёжно для огромных объёмов данных. Бекапы корпоративного уровня. Но очень медленно. maytonПоэтому мне остаётся только всплеснуть руками. Да уж. Магнитная лента — старый конь борозды не портит . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 14:50 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
mayton, Но ты не понял основного моего посыла. Магнитная лента настолько медленная, что операции с ней можно даже на Яве программировать. :) Ну это типа шутка. Ты знаком с интернет-мемом «Ява не тормозит»? Про ту машину слышал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 14:53 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
mayton, Кстати вспомнил еще одну область применения магнитной ленты и ферромагнитной проволки. Бортовой самописец . Последнее время, правда, заменяется на флешки. Но вот усилят нам санкции и такой же как я человек в России будет на Си/С++ писать драйвер для устройства с магнитной лентой. Будет даже надёжнее флешки, например, в плане устойчивости к радиации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 15:18 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
petravКстати вспомнил еще одну область применения магнитной ленты и ферромагнитной проволки. Бортовой самописец . Последнее время, правда, заменяется на флешки. да ты шо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 15:47 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
petravmayton, Но ты не понял основного моего посыла. Магнитная лента настолько медленная, что операции с ней можно даже на Яве программировать. :) Ну это типа шутка. Я не знаю. Мне кажется ты живёшь где-то в 1997 году. Твоё представление о Java базируется на срезе состояния этого проекта в далёком прошлом. Java сегодня обеспечивает пропускную способность в мегафлопах приближённую к С++ и это даёт возможность применять ее для бизнес-процессов. Почитай ради интереса про Disruptor к примеру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 16:38 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
petravmayton Кстати вспомнил еще одну область применения магнитной ленты и ферромагнитной проволки. Бортовой самописец . Последнее время, правда, заменяется на флешки. Но вот усилят нам санкции и такой же как я человек в России будет на Си/С++ писать драйвер для устройства с магнитной лентой. Будет даже надёжнее флешки, например, в плане устойчивости к радиации. Я возможно покажусь консервативным но я за то чтобы писать на проволоку. Когда речь идёт о восстановлении инфы из этих ваших чёрных ящиков то аналоговая (по сути) запись даёт возможность восстановить хоть что-то. Да и катушка с проволокой от удара об землю остаётся катушкой. Флешка в самописце - это игра в рулетку. Наеб..тся и вообще ни бита не восстановят. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 17:02 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
maytonpetravmayton, Но ты не понял основного моего посыла. Магнитная лента настолько медленная, что операции с ней можно даже на Яве программировать. :) Ну это типа шутка. Я не знаю. Мне кажется ты живёшь где-то в 1997 году. Твоё представление о Java базируется на срезе состояния этого проекта в далёком прошлом. Java сегодня обеспечивает пропускную способность в мегафлопах приближённую к С++ и это даёт возможность применять ее для бизнес-процессов. Я с тобой абсолютно согласен (кроме приближения к С++). Но я в который раз тебе указываю на некоторую узость твоего мировосприятия. Это ни в коем случае не намёк на дилетантизм! Но ты всё меряешь и воспринимаешь только в контексте бизнес-процессов (энтерпрайз), а мир программирования гораздо шире. Я уж не говорю про то, что в энтерпрайзе производительность никогда не была ключевой проблемой. А в тех подзадачах энтерпрайза где всё же нужна производительность — там почти всё написано на С++ (MS SQL, MySQL, MongoDB). maytonПочитай ради интереса про Disruptor к примеру. Да зачем? Всё равно это сугубо вторично по сравнению с С++. И я много лет программировал на C#, так что не жду каких-то откровений ни в виртуальных машинах, ни тем более в каком-то Disruptor. А .NET — это просто улучшенная Ява. (показал язык:) Каждой задаче — свой инструмент. Я совершенно не против ВМ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 17:06 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
petravЯ могу ошибаться, но насколько я знаю магнитная лента и сейчас живее всех живых. Очень дёшево и очень надёжно для огромных объёмов данных. Бекапы корпоративного уровня. Но очень медленно. Она живее всех живых я гарантирую это. По поводу скорости. В смежном форуме по ораклу обсуждалась тема как уберечь пул стриммеров в ленточной библиотеке от перемотки назад. Основной трабл был в том что ленточная библиотека была .... кхм... как-бе это сказать. Слишком быстрой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 17:07 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
petravДа зачем? Всё равно это сугубо вторично по сравнению с С++. И я много лет программировал на C#, так что не жду каких-то откровений ни в виртуальных машинах, ни тем более в каком-то Disruptor. А .NET — это просто улучшенная Ява. (показал язык:) А в чём она улучшеная? Назови метрику. Или какой-то индекс. По чём она лучше? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 17:11 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
"Чем ява". Есть у человека пунктик - можно вытесать кол на его голове, но пунктик всё равно останется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 17:19 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
petravmayton, Но ты не понял основного моего посыла. Магнитная лента настолько медленная, что операции с ней можно даже на Яве программировать. :) Ну это типа шутка. Ленивый человек всегда оправдание найдет, лишь бы ничего нового не изучать и не использовать. maytonЯ не знаю. Мне кажется ты живёшь где-то в 1997 году. Твоё представление о Java базируется на срезе состояния этого проекта в далёком прошлом. Java сегодня обеспечивает пропускную способность в мегафлопах приближённую к С++ и это даёт возможность применять ее для бизнес-процессов. Почитай ради интереса про Disruptor к примеру. - Пропускная способность ( bandwidth ) измеряется в гигабайтах/гигабитах в секунду , но не в мегафлопах. - В мегафлопсах измеряется производительность ( performance ). - На синтетических теста BLAS(Linpack/Lapack/HPL/...), где не требуется многократное выделение памяти и по которым меряется количество мегафлопсов, ява никогда по производительности не показывала меньше мегафлопсов, чем С++ . - Дизраптор (disruptor) оптимизированный конвейерный кольцевой буфер, который обеспечивает минимальную задержку ( latency ), но не имеет отношения ни к производительности, ни к пропускной способности, т.к. показывает их значения в разы меньше теоретической. Bandwidth, latency и performance - 3 разных характеристики системы, которые обеспечиваются разными подходами и измеряются разными тестами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 17:21 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
Вася Уткин, спасибо бро. Даже не знаю что еще сказать. К слову я прекрасно знаю в чём меряется perfromance и скорость канала. Просто я в душе поэт и люблю метафоры. По Disruptor я так понимаю ты, как и я посмотрел видео презентацию в youtube? P.S. Зарегайся что-ли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 17:27 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
а так хорошо всё начиналось, Страуструпа обсуждали, конструкторы, placement new... И вдруг опять они со своей Жабой тут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 17:30 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
maytonpetravДа зачем? Всё равно это сугубо вторично по сравнению с С++. И я много лет программировал на C#, так что не жду каких-то откровений ни в виртуальных машинах, ни тем более в каком-то Disruptor. А .NET — это просто улучшенная Ява. (показал язык:) А в чём она улучшеная? Назови метрику. Или какой-то индекс. По чём она лучше? Метрики, индексы и магия сейчас не рулят. Сейчас рулят танковые клинья и ковровые бомбардировки. © Гоблин. :) Ну я же там написал «показал язык:)». Понятно, что шуткой было моё заявление, мол .NET — это улучшенная Java. Ты очень серьёзный человек. Но в каждой шутке есть доля правды. Спорить об этом я не могу. С языка C# спрыгнул более 5-ти лет назад. Про Java только читал. Но считается, что .NET производительнее, а C# гибче чем Java. Ну попробуем. - Есть ли в Java инструмент аналогичный C# Reflection? - Есть ли в Java прямой доступ к памяти? Аналог unsafe в C#. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 17:34 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
Вася Уткин- На синтетических теста BLAS(Linpack/Lapack/HPL/...), где не требуется многократное выделение памяти и по которым меряется количество мегафлопсов, ява никогда по производительности не показывала меньше мегафлопсов, чем С++ . Ну-ну. Вы издеваетесь? Уже и память выделять не нужно? Про union и RAII мне уже отвечали, что они не нужны. Что не попроси от явистов — нам это не нужно! Меньше у них мегафлопсов не было, видите ли. Ваш беспилотный автомобиль, управляемый программой на Яве, на крейсерской скорости въехал в бетонную стену. Вот тогда и появился интернет-мем «Java не тормозит». ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 17:41 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
egorychа так хорошо всё начиналось, Страуструпа обсуждали, конструкторы, placement new... И вдруг опять они со своей Жабой тут. Начинай (точнее продолжай), я поддержу! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 17:42 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
Ничего не будет. Прошу прощения за свои посты не по теме. Давно не видел Летчика Петрава. Соскучился. Дальше - только в контексте С++. P.S. А если кто и меня на том поймает. Руби Чапая.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 17:52 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
maytonНичего не будет. Слился. Стыдно. (Шутка:). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 17:55 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
petrav, дуй сюда. Ждём уже неделю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 17:59 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
maytonpetrav, дуй сюда. Ждём уже неделю. Я ничего не понимаю в трассировке лучей, кроме школьной программы про отражение и преломление лучей между средами с разными оптическими свойствами. Постановка твоей задачи кажется странной. Искусственный тест, который ты очень долго искал. И нашёл. Во… Почему не вычисление числа Пи методом Монте-Карло, например? Почему не на видеокарте? Что именно ты так долго искал, а я нашёл за 3-ри секунды? Может я ошибаюсь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 18:18 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
Из уважения к топик-стартеру. Давай не будем здесь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 18:28 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
Администрация Сообщества, прошу вас удалить примерно 20-25 последних сообщений не связанных с С++. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2015, 01:48 |
|
||
|
Некоторые вопросы о программировании на C++
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Модератор: Мы решили сделать по-другому. Твои супермегатопики не о чём и обо всём на свете закрываем, на каждый следующий вопрос создавай отдельный топик, где тебе будет выдан после отдельного обсуждения отдельный ответ. Или не будет, ну так это уж как получится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2015, 10:56 |
|
||
|
|

start [/forum/topic.php?all=1&fid=57&tid=2018842]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
155ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
158ms |
get tp. blocked users: |
1ms |
| others: | 239ms |
| total: | 601ms |

| 0 / 0 |
