D vs C++
    , почти сурковская пропаганда: не пора ли C++ потихоньку готовиться к пенсии?
  ![]()  | 
Наши проекты:
 Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту  | 
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS | 
| [216.73.216.5] | 
 
 | 
		
  | 
    Правила раздела:
  | Страницы: (56) « Первая ... 15 16 [17] 18 19 ... 55 56 ( Перейти к последнему сообщению ) | 
    D vs C++
    , почти сурковская пропаганда: не пора ли C++ потихоньку готовиться к пенсии?
  | 
         
         
         
          
           Сообщ.
           #241
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          Затем: 
        
      ![]() ![]() template<typename A, typename B> auto hellSum(A a, B b) -> decltype(a + b);  | 
    
| 
         
         
         
          
           Сообщ.
           #242
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
        ![]() ![]() #include <iostream> using namespace std; class C { }; class D: public C { }; class B { }; class A {     bool var; public:      A(bool var) : var(var) {}     C operator*(const B& b) { return C(); }     D operator+(const B& b) { return D(); }     bool get_var() { return var; } }; template<typename A, typename B> auto hellArithmetics(A a, B b) -> decltype(a * b) { /* auto - C or D */       if(a.get_var()) {          return a * b;       }       return a + b; } int main() {     A a1(true);     A a2(false);     B b;     C c1 = hellArithmetics(a1, b);     C c2 = hellArithmetics(a2, b);     return 0; }  | 
    
| 
         
         
         
          
           Сообщ.
           #243
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата Qraizer @  Все прекрасно. Информация дается в комментариях, а не в безумном decltype, который, кстати, может содержать трехэтажные конструкции. Эту работу, ИМХО, может и должен делать компилятор. Особенно есди учесть, что интерфейсы шаблонов функций без тела этих функций полезны в C++ чуть более, чем никогда. Очень информативно увидеть в интерфейсе просто auto без информации о реализации. Добавлено Мяут-Настоящий, что это? Типа пример зачем нужен decltype? Он не нужен: http://dpaste.dzfl.pl/4333f7a197f7 ![]() ![]() class C { }; class D: C { }; class B { }; class A {     bool m_var;     this(bool var) { m_var = var; }     C opBinary(string op: "*")(const B b) { return new C(); }     D opBinary(string op: "+")(const B b) { return new D(); }     bool var() { return m_var; } }; auto hellArithmetics(A, B)(A a, B b) {     if(a.var) {         return a * b;     }     return a + b; } int main() {     auto a1 = new A(true);     auto a2 = new A(false);     auto b = new B;     C c1 = hellArithmetics(a1, b);     C c2 = hellArithmetics(a2, b);     return 0; }  | 
    
| 
         
         
         
          
           Сообщ.
           #244
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата applegame @  Функция должна вернуть несколько значений, и хочется чтобы доступ к значениям был бы как к полям структуры, а не по индексу, как в обычном плюсовом кортеже. А почему не объявить структуру и не вернуть её из функции? Изврата захотелось? Типа Это через какую только жопу гланды не выдирают вместо того, чтобы сделать функции, возвращающие несколько значений, как, например, в Go. Впрочем, хотите через жопу - получите. Гораздо лучше дишных извращений на пустом месте.  | 
    
| 
         
         
         
          
           Сообщ.
           #245
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата MyNameIsIgor @  У меня таких функций вагон и маленькая тележка, извратом будет как раз объявлять вагон и маленькую тележку структур.А почему не объявить структуру и не вернуть её из функции? Изврата захотелось? Цитата MyNameIsIgor @  О да, это же какая жопа написать packTuple!(...) или просто tuple(...), если обычного кортежа достаточно.Это через какую только жопу гланды не выдирают вместо того, чтобы сделать функции, возвращающие несколько значений, как, например, в Go. Цитата MyNameIsIgor @  Это простите, херня, никакого отношения к сабжу не имеющая.Впрочем, хотите через жопу - получите. Гораздо лучше дишных извращений на пустом месте.  Вы батенька, как всегда, пукаете в лужу. "Если C++ что-то не умеет, то это не нужно" - вот ваш девиз. Научитесь уже отвечать по существу.  | 
    
| 
         
         
         
          
           Сообщ.
           #246
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата applegame @  У меня таких функций вагон и маленькая тележка И зачем? Цитата applegame @  извратом будет как раз объявлять вагон и маленькую тележку структур Нет, это будет явная декларация. Цитата applegame @  Это простите, херня Не прощаю. А за нецензурную брань модератор взыщет. Цитата applegame @  никакого отношения к сабжу не имеющая Т.е. если что-то сделали иным способом, нежели ваш, то к теме это отношения не имеет? ![]() Цитата applegame @  Вы батенька, как всегда, пукаете в лужу А вы продолжаете нюхать ![]() Цитата applegame @  "Если C++ что-то не умеет, то это не нужно" - вот ваш девиз Нет, я лишь предлагаю делать по-уму. Уже посмотрели как возвращаются несколько значений в Go? Это во-первых. Во-вторых, вы плюсы на уровне второклашки то не осилили, откуда вам знать, что они могут?  | 
    
| 
         
         
         
          
           Сообщ.
           #247
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата applegame @  Молодец! Сам упомянул компилятор. А ну-ка, покажи, как компилятор разгребёт комменты. И с чего он вообще будет это делать. В Плюсах auto с последующим decltype введены для упрощения квалификацированных идентификаторов, каковые становятся возможны только после списка параметров, а отнюдь не для автовывода типа результата. Автовывод, конечно, есть, но для частных случаев.Все прекрасно. Информация дается в комментариях, а не в безумном decltype, который, кстати, может содержать трехэтажные конструкции. Эту работу, ИМХО, может и должен делать компилятор. Цитата applegame @  Та ладно. И как давно это так? Даже без extern template это встречалось нередко. Интерфейс интерфейсом, но параметризация шаблонов отнюдь не ограничивается пользовательскими желаниями, нередко эта параметризация выбирает платформенные специализации, а в этом случае обычная раздельная компиляция вполне применима и легко реализуется.  Особенно если учесть, что интерфейсы шаблонов функций без тела этих функций полезны в C++ чуть более, чем никогда.  | 
    
| 
         
         
         
          
           Сообщ.
           #248
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата applegame @  Вспомнил про затихший холиворчик. Продолжу продвижение D. Функция должна вернуть несколько значений, и хочется чтобы доступ к значениям был бы как к полям структуры, а не по индексу, как в обычном плюсовом кортеже. Вот эта маленькая магия сама объявляет структуру с полями названными как переменные переданные в параметры и заполняет ее значениями из этих же переменных. Структура объявляется внутри функции (кстати, а плюсы так умеют?), а значит не гадит в глобальную область видимости. Рекурсивный миксин плюс немножко статической рефлексии. Дешево, сердито и красиво, плюсики так не умеют и вряд ли когда сумеют: http://dpaste.dzfl.pl/d09ce6ded86b ![]() ![]() template packTuple(ARGS...) {     template Decls(alias value, ARGS...) {         mixin("typeof(value)" ~ __traits(identifier, value) ~ ";");         static if(ARGS.length) mixin Decls!ARGS;     }     struct Tuple {         mixin Decls!ARGS;     }     auto packTuple() { return Tuple(ARGS); } } auto foo() {     int fieldInt = 10;     string fieldString = "test";     return packTuple!(fieldInt, fieldString); } void main() {     auto result = foo();     assert(result.fieldInt == 10);     assert(result.fieldString == "test"); } Не очень понял, что ты этим выиграл. Коллеги твои вряд ли будут довольны. Да и ты сам через полгодика не обрадуешься.  | 
    
| 
         
         
         
          
           Сообщ.
           #249
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата applegame @  Информация дается в комментариях, а не в безумном decltype В комментариях? Информация о типах? В языке со статической типизацией? Мда.. А как же самодокументируемость? Нет, я за возможность как указания типа, так и явного decltype/typeof. Кстати, в D же это возможно, о чем ты споришь? В C++14 обязательность decltype уходит.  | 
    
| 
         
         
         
          
           Сообщ.
           #250
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата D_KEY @  Уже больше времени прошло, и никаких проблем. Удобно, всем наоборот нравится. Я же не везде его пихаю. Там где название типа действительно важно, я указываю его явно. Но в проекте много всяких хелперов, мелких вспомогательных функций и шаблонов, где в общем-то глубоко начхать на название типа. Название функции говорит само за себя, а в комментах описано, что именно она возвращает.Не очень понял, что ты этим выиграл. Коллеги твои вряд ли будут довольны. Да и ты сам через полгодика не обрадуешься.  Цитата D_KEY @  Зачем о типах? Описание возвращаемого значения и все. Тип не важен. Типы пусть знает и проверяет компилятор.В комментариях? Информация о типах? В языке со статической типизацией? Мда.. Одно из преимуществ D, что он при желании позволяет писать в стиле динамических языков. Автоматическое выведение типов, auto и прочие радости. Легкость работы с динамическими языками, но при этом типизация статическая, что позволяет ошибки с типами находить compile-time. Можно до последнего цепляться за древний уродливый стиль с громоздкими иерархиями классов, тоннами типов объявленных явно и т.п., но это прошлый век. Даже сам C++ эволюционирует, внезапно, может и не совсем по пути D, но явно в туже сторону Цитата D_KEY @  Обязательность и напрягает. Представь что функция возвращает тип, который можно вывести, но только этот тип будет занимать три строчки кода. Информативность таких кракозябров (особенно в C++) - нулевая. Какая-нибудь лямбда со страшной сигнатурой. А может и не лямбда, может быть функтор, да что угодно, главное что callable. Плевать на тип, главное, что потом с этим значением можно делать.Кстати, в D же это возможно, о чем ты споришь? В C++14 обязательность decltype уходит. Цитата D_KEY @  Ага, я же говорю дрейфуем туда, куда D ушел уже давным давно. 	 В C++14 обязательность decltype уходит.   | 
    
| 
         
         
         
          
           Сообщ.
           #251
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          Так о толку то от твоего "давным давно"?  
        
        Эволюционное развитие - один из козырей C++. Принимается новый стандарт, я обновляю компилятор и, возможно, добавляют флажок поддержки нового стандарта в свой проект и начинаю применять новые полезные для меня фишки, ничего не переписывая и ничего не ломая. Добавлено Цитата applegame @  Цитата D_KEY @  Зачем о типах? Описание возвращаемого значения и все. Тип не важен.В комментариях? Информация о типах? В языке со статической типизацией? Мда.. Имена полей - это тоже информация о типе. Добавлено Возможно, ты и прав, но лично я никакого профита от D не вижу... Даже от Go больше потенциальной пользы, как мне кажется. За счёт простоты. Хотя и от него я не в восторге.  | 
    
| 
         
         
         
          
           Сообщ.
           #252
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          http://habrahabr.ru/post/183488/ 
        
      Цитата D_KEY @  Дело вкуса, наверное. Для меня профит прост: один и тот же код я пишу на C++ значительно медленнее, чем на D.Возможно, ты и прав, но лично я никакого профита от D не вижу... Даже от Go больше потенциальной пользы, как мне кажется. За счёт простоты. Хотя и от него я не в восторге. C++ гораздо "многословнее", а метапрограммирование заметно запутаннее. P.S. Вот кстати статейка на хабре в тему - http://habrahabr.ru/post/183488/  | 
    
| 
         
         
         
          
           Сообщ.
           #253
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          Так на Питоне задачи ещё быстрее решаются  
        
        вопрос в том, какие возможности ты имеешь, сколько готовых(своих и сторонних) решений можешь применить, скольким людям это будет понятно и результат какого качества ты получишь.   | 
    
| 
         
         
         
          
           Сообщ.
           #254
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата D_KEY @   В C++14  Кстати, а он действительно "14" будет? Или они опять слишком оптимистичны?     | 
    
| 
         
         
         
          
           Сообщ.
           #255
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата OpenGL @  Кстати, а он действительно "14" будет? Или они опять слишком оптимистичны? Ну может как раз до C++0xF дотянут. =)  |