D vs C++
    , почти сурковская пропаганда: не пора ли C++ потихоньку готовиться к пенсии?
  ![]()  | 
Наши проекты:
 Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту  | 
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS | 
| [216.73.216.5] | 
 
 | 
		
  | 
    Правила раздела:
  | Страницы: (56) « Первая ... 40 41 [42] 43 44 ... 55 56 ( Перейти к последнему сообщению ) | 
    D vs C++
    , почти сурковская пропаганда: не пора ли C++ потихоньку готовиться к пенсии?
  | 
         
         
         
          
           Сообщ.
           #616
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата OpenGL @  У них же классы представлены ссылочной семантикой. Бред, конечно, но они привыкли. Пусть порадуются, чё.  А если у тебя в захвате переменная, содержащая данные в куче - она не скопируется что ли?  | 
    
| 
         
         
         
          
           Сообщ.
           #617
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          Ну разве что синтетику какую-нибудь попробовать. 
        
      Цитата OpenGL @  Скопируется при создании лямбды, а при копировании этой лямбды (например при передаче в функцию или сохранении в переменной) замыкания копироваться не будут. А разве должны?Не понял. А если у тебя в захвате переменная, содержащая данные в куче - она не скопируется что ли?  Цитата JoeUser @  Вероятнее всего мейнтейнер GDC. Ты можешь попробовать спросить у него самого по поводу этой проблемы, а то и помочь с ней. Кстати, можно под линем компилять код для вянды через wine, говорят все работаэ. Я вот задумался    Рано или поздно "новый" GCC (с поддержкой DLang) перекочует в mingw32. Сейчас в библиотеках runtime и phobos есть ошибки, приводящие к невозможности кросс-компиляции. На сколько я правильно разобрался - ошибки из-за неверно расставленных условий компиляции (нет понятия "целевой платформы", есть понятие используемой платформы, т.е. где компилируем/собираем - та и цель). Вопрос ... ну и кто будет (и вообще будет ли) разбираться с этой проблемой?   Цитата Qraizer @  Не забывай, что "у них" есть еще структуры, которые имеют семантику по значению.У них же классы представлены ссылочной семантикой. Бред, конечно, но они привыкли. А в передаче классов по ссылке есть некий смысл. Не могу точно утверждать, но лично у меня создалось впечатление, что большая часть объектов в плюсах обычно передается при помощи указателей/ссылок или же сами являются обертками вокруг указателей. Но это немного не имеет отношения к обсуждаемой теме, так как лямбды в D это не класс, это встроенный в язык тип. Встроенность еще дает возможность компилятору проводить некоторые оптимизации, например в случае если время жизни переменных замыкания гарантированно больше, чем время жизни самой лямбды, то память не аллоцируется вообще, а просто передается указатель на стековый фрейм содержащий переменные замыкания.  | 
    
| 
         
         
         
          
           Сообщ.
           #618
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата applegame @  Та не, речь не об этом. Речь о том, что переменная-объект всегда является ссылкой, так что любые присваивания просто копирую ссылку. При необходимости получить копию объекта это нужно заказать явно.А в передаче классов по ссылке есть некий смысл. Я не имею ничего против ссылочной семантики как таковой, но я категорически не приемлю смешанную семантику, когда в языке одни типы ссылочные, другие значения.  | 
    
| 
         
         
         
          
           Сообщ.
           #619
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата Qraizer @  Ну это тема отдельного холивора. Хотя как раз вот тут-то лично я склонен с тобой согласиться. Конечно не столь категорично, но таки мне не нравится эта особенность D. Но как показывает практика - не мешает. То есть раздражение чисто академическое. 	 Я не имею ничего против ссылочной семантики как таковой, но я категорически не приемлю смешанную семантику, когда в языке одни типы ссылочные, другие значения.   | 
    
| 
         
         
         
          
           Сообщ.
           #620
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          Это мешает обобщённого коду, заставляя применять метакод с ветвлениями по свойствам типа. Кроме того, винегрет в Дельфи со строками заставляет серьёзно задуматься о том, чтобы категоричность-таки была, просто во избежание прецедентов.   
        
       | 
    
| 
         
         
         
          
           Сообщ.
           #621
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата Qraizer @  Как именно? Я не наблюдал никаких помех. Пример если можно.Это мешает обобщённого коду, заставляя применять метакод с ветвлениями по свойствам типа. Цитата Qraizer @  Не готов говорить о Дельфи. D - не Дельфи.  Кроме того, винегрет в Дельфи со строками заставляет серьёзно задуматься о том, чтобы категоричность-таки была, просто во избежание прецедентов.   | 
    
| 
         
         
         
          
           Сообщ.
           #622
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          Та обсуждалось уже мульён раз. Типичный пример: тебе нужна локальная копия объекта, и толи = писать, то ли .clone() заранее ты знать не можешь. Для объектов классов = не сделает тебе копию, в результате модификации будут отражены на оригинале, для объектов неклассов .clone() просто провалится.  
        
      Добавлено Цитата applegame @  За D я тут и не говорю. Говорю за Дельфи. У них там хренова туча типов строк, какие-то объекты, какие-то не объекты, кто-то по сути POD, кто-то объект с состоянием, кто-то сам собой владеет и подсчитывает свои экземпляры, за кем-то надо следить самому, иначе утекут ресурсы, кому-то явно нужно командовать подсчитывать, кому-то если скомандуешь, расфигачишь пол-программы неопределённым поведением. Та ну их нахрен.  Не готов говорить о Дельфи. D - не Дельфи.  | 
    
| 
         
         
         
          
           Сообщ.
           #623
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата Qraizer @  Дак в плюсах тоже самое: для указателей нужно вызывать clone, а для неуказателей =. Можно представить, что класс D это что-то вроде shared_ptr. 	 Та обсуждалось уже мульён раз. Типичный пример: тебе нужна локальная копия объекта, и толи = писать, то ли .clone() заранее ты знать не можешь. Для объектов классов = не сделает тебе копию, в результате модификации будут отражены на оригинале, для объектов неклассов .clone() просто провалится.   | 
    
| 
         
         
         
          
           Сообщ.
           #624
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата applegame @  Дак в плюсах тоже самое: для указателей нужно вызывать clone, а для неуказателей =. Зачем?   ![]() ![]() template<typename T> void foo(const T & x) {     T a = x; } В случае указателей ты получишь копию указателя. Все одинаково, какой бы тип не был. Единственное, что не совсем логично в плюсах в плане типов - это ссылки. Добавлено Неужели в D нельзя написать аналог такого кода?  | 
    
| 
         
         
         
          
           Сообщ.
           #625
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата D_KEY @  В твоем примере не указатель, а ссылка. Зачем?  Добавлено Цитата D_KEY @  Для классов нет. Для структур можно.  Неужели в D нельзя написать аналог такого кода?  | 
    
| 
         
         
         
          
           Сообщ.
           #626
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата applegame @  Цитата D_KEY @  В твоем примере не указатель, а ссылка.Зачем?  Мой пример будет работать для любого T, даже если этот T будет указателем.  | 
    
| 
         
         
         
          
           Сообщ.
           #627
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          Код аналогичный твоему: 
        
      ![]() ![]() void foo(T)(const ref T x) {   T t = x; } В случае указатели или класса будет сделана копия указателя / указателя на класс, в остальных случаях копия самого объекта. Добавлено Цитата D_KEY @  Неправильно он будет работать, читай пост Qraizerа, он хочет именно копию объекта, а не копию укпзателя на него. 	 Мой пример будет работать для любого T, даже если этот T будет указателем.  | 
    
| 
         
         
         
          
           Сообщ.
           #628
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата applegame @  Код аналогичный твоему: ![]() ![]() void foo(T)(const ref T x) {   T t = x; } В случае указатели или класса будет сделана копия указателя / указателя на класс, в остальных случаях копия самого объекта. Вот и появляются исключения на ровном месте. Для обобщенного кода куда проще, когда поведение одинаковое(концептуально). Добавлено Цитата applegame @  Непрпвильно он будет работать, читай пост Qraizerа, он хочет именно копию объекта, а не копию укпзателя на него. Указатель - самостоятельный тип. И его значение будет скопировано. Как и для любого другого типа.  | 
    
| 
         
         
         
          
           Сообщ.
           #629
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата D_KEY @  Какие исключения? Мой код делает ровно тоже самое, что и твой.Вот и появляются исключения на ровном месте. Для обобщенного кода куда проще, когда поведение одинаковое(концептуально).  Цитата D_KEY @  И? Ты как-то влез в наш разговор не разобрпвшись о чем речь, Крайзер не хотел копию указателя, он хотел копию объекта, иначе зачем он clone() упомянул. И если ты хочешь некую обобщеную функцию придется метакодить, чтобы отличить указатель от значения.  Указатель - самостоятельный тип. И его значение будет скопировано. Как и для любого другого типа.  | 
    
| 
         
         
         
          
           Сообщ.
           #630
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата applegame @  И? Ты как-то влез в наш разговор не разобрпвшись о чем речь Думаю, что это ты неверно понял оппонента. Цитата  Крайзер не хотел копию указателя, он хотел копию объекта Ты C++ забыл? Указатель является самостоятельным типом и его объект содержит адрес. Добавлено В C++ у тебя везде семантика значений. В D одни типы обладают семантикой значений, а другие - ссылочные. Добавлено Цитата applegame @  Цитата D_KEY @  Какие исключения? Мой код делает ровно тоже самое, что и твой.Вот и появляются исключения на ровном месте. Для обобщенного кода куда проще, когда поведение одинаковое(концептуально).  Мой код всегда создаёт копию значения типа T. Твой - нет.  |