Re: Про идентичность const
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 23.01.25 18:48
Оценка: 1 (1) +2 :)
Здравствуйте, Shmj, Вы писали:

S>В продолжение темы
Автор: Shmj
Дата: 22.01.25
, понял как лучше донести.


Тебе там в панамку напихали, сюда за добавкой пришел?
Маньяк Робокряк колесит по городу
Re[6]: Про идентичность const
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 23.01.25 19:17
Оценка: 1 (1) :)))
Здравствуйте, rg45, Вы писали:

R>Лучше бы язык поучил да поучился бы им пользоваться.


Ты чо, это удел рабов
Автор: Shmj
Дата: 23.01.25
. Он выше этого, он — творец
Маньяк Робокряк колесит по городу
Re[4]: Про идентичность const
От: Shmj Ниоткуда  
Дата: 24.01.25 08:28
Оценка: :))
Здравствуйте, пффф, Вы писали:

S>>Тут же не только в том дело, что объект не расходует память и это гарантированно. Важно что можно утверждать что объект не изменился и можно не вызывать повторно его методы.

П>Плюсовый компилятор и так это делает, если может доказать. А верить программисту на слово, который "мамой клянусь, объект константный, метод вернёт то же самое" компилятору никак нельзя

Чуть подправил код:

#include <iostream>

class MyClass {
public:
 int value;
    constexpr MyClass(int v) : value(v) {}
};

int main() {
    const MyClass* obj1 = new MyClass(5);
    const MyClass* obj2 = new MyClass(5);

    std::cout << "Address of obj1: " <<static_cast<const void*>(obj1) << std::endl;
    std::cout << "Address of obj2: " << static_cast<const void*>(obj2) << std::endl;

    return 0;
}


— тут есть гарантия что не нужно выделять память по 100 раз?
=сначала спроси у GPT=
Re[6]: Про идентичность const
От: Shmj Ниоткуда  
Дата: 24.01.25 08:36
Оценка: :)
Здравствуйте, rg45, Вы писали:

R>Вот ты непрошибаемый. Тебе не приходило в голову, что, если б не твои операции взятия адресов, то компилятор мог бы вообще не создавать никаких объектов? Вот тебе пример, обрати внимание на созданный машинный код:


R>https://godbolt.org/z/nrjM1rhMa


Ну вот этого я и ждал, лучше опозориться и узнать что-то полезное, чем с гордостью сохранять невежество.

А вот тут: https://www.programiz.com/online-compiler/6eYq7jWJZ85iG

#include <iostream>

class MyClass {
public:
    const int value;
    constexpr MyClass(int v) : value(v) {}
};

int main() {
    const MyClass* obj1 = new MyClass(5);
    const MyClass* obj2 = new MyClass(5);

    std::cout << "Address of obj1: " <<static_cast<const void*>(obj1) << std::endl;
    std::cout << "Address of obj2: " << static_cast<const void*>(obj2) << std::endl;
    
    delete obj1;
    delete obj2;

    return 0;
}


По идее же нет смысла создавать новый объект? А он вроде как создается: https://godbolt.org/z/9GaGa7eKn

P.S.
Добавил const — для поля — ничего не изменилось.
=сначала спроси у GPT=
Отредактировано 24.01.2025 8:39 Shmj . Предыдущая версия .
Re[7]: Про идентичность const
От: rg45 СССР  
Дата: 24.01.25 08:40
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Ну вот этого я и ждал, лучше опозориться и узнать что-то полезное, чем с гордостью сохранять невежество.


Дело в том, что у тебя это не единичный случай, а твой стиль. Вместо того, чтоб изучать предмет, ты строишь какие-то воздушные замки.

S>А вот тут: https://www.programiz.com/online-compiler/6eYq7jWJZ85iG


S>
S>#include <iostream>

S>class MyClass {
S>public:
S> int value;
S>    constexpr MyClass(int v) : value(v) {}
S>};

S>int main() {
S>    const MyClass* obj1 = new MyClass(5);
S>    const MyClass* obj2 = new MyClass(5);

S>    std::cout << "Address of obj1: " <<static_cast<const void*>(obj1) << std::endl;
S>    std::cout << "Address of obj2: " << static_cast<const void*>(obj2) << std::endl;
    
S>    delete obj1;
S>    delete obj2;

S>    return 0;
S>}
S>


S>По идее же нет смысла создавать новый объект? А он вроде как создается: https://godbolt.org/z/9GaGa7eKn


Ты прикалываешься, что ли? Ты явно создаешь два объекта в динамической памяти, а компилятор должен вместо двух объектов создать один? С какого перепуга?

Я уже молчу, что за такой код нужно подсрачниками гнать из профессии.
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 24.01.2025 8:44 rg45 . Предыдущая версия .
Re[8]: Про идентичность const
От: Shmj Ниоткуда  
Дата: 24.01.25 08:45
Оценка: :)
Здравствуйте, rg45, Вы писали:

R>Ты прикалываешься, что ли? Ты явно создаешь два объекта в динамической памяти, а компилятор должен вместо двух объектов создать один? С какого перепуга?


Если объекты константные, не подлежат изменению, абсолютно одинаковые — то зачем два раза выделять память?

R>Я уже молчу, что за такой код нужно подсрачниками гнать из профессии.


А как еще продемонстрировать проблему? Смартпоинтеры будут рабоать так же.

Если конструируете UI-дерево, добавляете в список одинаковые const-объекты — они постоянно будут создаваться заново.
=сначала спроси у GPT=
Отредактировано 24.01.2025 8:56 Shmj . Предыдущая версия . Еще …
Отредактировано 24.01.2025 8:46 Shmj . Предыдущая версия .
Re[9]: Про идентичность const
От: rg45 СССР  
Дата: 24.01.25 09:02
Оценка: +1
Здравствуйте, Shmj, Вы писали:

S>Если объекты константные, не подлежат изменению, абсолютно одинаковые — то зачем два раза выделять память?


Во-первых, нет здесь никаких константных объектов. Ты ссылаешься на них как на константные, но создаются они как неконстантные. Снятие константности через const_cast и использование этих объектов как неконстантных вполне правомерно.

S>А как еще продемонстрировать проблему? Смартпоинтеры будут рабоать так же.


Так если ты не можешь продемонстрировать проблему, может, и проблемы никакой нет?

S>Если конструируете UI-дерево, добавляете в список одинаковые const-объекты — они постоянно будут создаваться заново.


У тебя есть все возможности для того, чтобы решить эту проблему собственными силами.

Вообще, ты подбешивать уже начинаешь. Иди учи матчасть.
--
Справедливость выше закона. А человечность выше справедливости.
Re[9]: Про идентичность const
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 24.01.25 09:04
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Если конструируете UI-дерево,


Задача весьма редкая


S>добавляете в список одинаковые const-объекты —


Не добавляй. Делай копию shared_ptr'а. Лучше продумывай архитектуру.


S>они постоянно будут создаваться заново.


Это не слишком дорого. А сколько будет времени тратится на проверку, что такой объект уже создан?

В общем, ты опять какую-то херню придумал
Маньяк Робокряк колесит по городу
Re[5]: Про идентичность const
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 24.01.25 09:07
Оценка: +1
Здравствуйте, Shmj, Вы писали:


S>- тут есть гарантия что не нужно выделять память по 100 раз?


Зачем два раза создавать объект в куче? Твои гениальные предложения сводятся к тому, что у вас на дарте думать не принято, и в компилятор в попытках исправить то, что вы там наколбасите, придумали эту странную оптимизацию На плюсах разработчик обычно достаточно опытный, и продумывает архитектуру, и у него одинаковых неизменяемых объектов просто не будет
Маньяк Робокряк колесит по городу
Re[10]: Про идентичность const
От: Shmj Ниоткуда  
Дата: 24.01.25 09:11
Оценка:
Здравствуйте, rg45, Вы писали:

R>Во-первых, нет здесь никаких константных объектов. Ты ссылаешься на них как на константные, но создаются они как неконстантные. Снятие константности через const_cast и использование этих объектов как неконстантных вполне правомерно.


Хорошо, покажите как создавать константные объекты. Может я не правильно создаю?

R>У тебя есть все возможности для того, чтобы решить эту проблему собственными силами.


Для этого нужно все одинаковое контролировать вручную.
=сначала спроси у GPT=
Re[10]: Про идентичность const
От: Shmj Ниоткуда  
Дата: 24.01.25 09:14
Оценка: :)
Здравствуйте, Marty, Вы писали:

S>>Если конструируете UI-дерево,

M>Задача весьма редкая

В Flutter — основной фреймворк Dart — это постоянно далается. Причем посмотрите как — вроде бы императивно, но выглядит как JSON — практически декларативно, но с возможностью при необходимости спуститься до императивности.

Убеждение что UI лучше описывать на XML а не на ЯП — только лишь вера, ни на чем не основанная.

S>>добавляете в список одинаковые const-объекты —

M>Не добавляй. Делай копию shared_ptr'а. Лучше продумывай архитектуру.

Вручную слишком сложно контролировать.

M>Это не слишком дорого. А сколько будет времени тратится на проверку, что такой объект уже создан?


Так по словарю во время компиляции проверить — не долго. Даже 1 млн. объектов будут за секунду в словаре найдены.
=сначала спроси у GPT=
Re[11]: Про идентичность const
От: rg45 СССР  
Дата: 24.01.25 09:15
Оценка: +1
Здравствуйте, Shmj, Вы писали:

S>Хорошо, покажите как создавать константные объекты. Может я не правильно создаю?


Для начала, мне бы хотелось бы убедиться, что ты правильно понимаешь этот термин. То, что ты лепишь к конструктору "constexpr", а потом создаёшь объект в динамической памяти, указывает на то, что у тебя в голове полная каша. Я тебе уже сказал: иди учи матчасть.
--
Справедливость выше закона. А человечность выше справедливости.
Re[6]: Про идентичность const
От: Shmj Ниоткуда  
Дата: 24.01.25 09:16
Оценка: :))
Здравствуйте, Marty, Вы писали:

M>Зачем два раза создавать объект в куче? Твои гениальные предложения сводятся к тому, что у вас на дарте думать не принято, и в компилятор в попытках исправить то, что вы там наколбасите, придумали эту странную оптимизацию На плюсах разработчик обычно достаточно опытный, и продумывает архитектуру, и у него одинаковых неизменяемых объектов просто не будет


Два раза создавать не нужно — достаточно одного раза, т.к. объект не изменяется и всем хватит ссылки на одно и то же.

А вручную это контролировать не удобно.
=сначала спроси у GPT=
Re[7]: Про идентичность const
От: rg45 СССР  
Дата: 24.01.25 09:21
Оценка: +2
Здравствуйте, Shmj, Вы писали:

S>А вручную это контролировать не удобно.


Ну да. Что-то не заладилось с дизайном и ты решил прогнуть под это дело компиляторы, комитет и вообще весь мир. Молодец.
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 24.01.2025 9:21 rg45 . Предыдущая версия .
Re[12]: Про идентичность const
От: Shmj Ниоткуда  
Дата: 24.01.25 09:23
Оценка: :))
Здравствуйте, rg45, Вы писали:

R>Для начала, мне бы хотелось бы убедиться, что ты правильно понимаешь этот термин. То, что ты лепишь к конструктору "constexpr", а потом создаёшь объект в динамической памяти, указывает на то, что у тебя в голове полная каша. Я тебе уже сказал: иди учи матчасть.


constexpr к конструктору — а как мне еще обозначить что не нужно 100 раз выделять память и хватит одного экземпляра на всю программу для всех. const — конструкторов нет. Поля сделал const. Что еще нужно?
=сначала спроси у GPT=
Re[13]: Про идентичность const
От: rg45 СССР  
Дата: 24.01.25 09:28
Оценка:
Здравствуйте, Shmj, Вы писали:

S>constexpr к конструктору — а как мне еще обозначить что не нужно 100 раз выделять память и хватит одного экземпляра на всю программу для всех. const — конструкторов нет. Поля сделал const. Что еще нужно?


Ещё нужно на монитор подышать и посидеть на клавиатуре.
--
Справедливость выше закона. А человечность выше справедливости.
Re[13]: Про идентичность const
От: rg45 СССР  
Дата: 24.01.25 09:33
Оценка: -1 :)
Здравствуйте, Shmj, Вы писали:

S>constexpr к конструктору — а как мне еще обозначить что не нужно 100 раз выделять память и хватит одного экземпляра на всю программу для всех. const — конструкторов нет. Поля сделал const. Что еще нужно?


Про паттерны проектирования слышал, что-нибудь? Если нет, то это время пришло.
--
Справедливость выше закона. А человечность выше справедливости.
Re[11]: Про идентичность const
От: rg45 СССР  
Дата: 24.01.25 09:35
Оценка:
Здравствуйте, Shmj, Вы писали:

R>>У тебя есть все возможности для того, чтобы решить эту проблему собственными силами.


S>Для этого нужно все одинаковое контролировать вручную.


На С++ и так постоянно гонят, представляю, что начнется, если компиляторы начнут ещё делать то, о чём их не просят.
--
Справедливость выше закона. А человечность выше справедливости.
Re[14]: Про идентичность const
От: Shmj Ниоткуда  
Дата: 24.01.25 09:39
Оценка:
Здравствуйте, rg45, Вы писали:

S>>constexpr к конструктору — а как мне еще обозначить что не нужно 100 раз выделять память и хватит одного экземпляра на всю программу для всех. const — конструкторов нет. Поля сделал const. Что еще нужно?


R>Про паттерны проектирования слышал, что-нибудь? Если нет, то это время пришло.


Никаким паттерном ты этого не решишь. Можно создать объект и после этого проверить если уже такой существует в словаре — то не включать в словарь повторно. Но для этого придется сначала создать и выполнять проверки на этапе выполнения.

Если бы в C++ была возможность создать константный объект + компилятор бы понимал что нет смысла дублировать их — было бы куль.
=сначала спроси у GPT=
Re[15]: Про идентичность const
От: rg45 СССР  
Дата: 24.01.25 10:09
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Никаким паттерном ты этого не решишь. Можно создать объект и после этого проверить если уже такой существует в словаре — то не включать в словарь повторно. Но для этого придется сначала создать и выполнять проверки на этапе выполнения.


Паттерны проектирования — это про подходы к проектированию, а не про этапы выполнения или компиляции. Многие из распространенных паттернов имеют решения как на этапе выполнения, так и на этапе компиляции. И ты бы это знал, если меньше словоблудил, а больше уделял внимания изучению языка и практике.

Да и стремление всё на свете впихнуть в компайл-тайм нездоровое само по себе. Попахивает преждевременной оптимизацией.

S>Если бы в C++ была возможность создать константный объект + компилятор бы понимал что нет смысла дублировать их — было бы куль.


А если бы у бабушки была борода, то она была бы дедушкой.
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 24.01.2025 13:45 rg45 . Предыдущая версия . Еще …
Отредактировано 24.01.2025 10:34 rg45 . Предыдущая версия .
Отредактировано 24.01.2025 10:18 rg45 . Предыдущая версия .
Отредактировано 24.01.2025 10:15 rg45 . Предыдущая версия .
Отредактировано 24.01.2025 10:12 rg45 . Предыдущая версия .
Отредактировано 24.01.2025 10:11 rg45 . Предыдущая версия .
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.