На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (57) « Первая ... 54 55 [56] 57   ( Перейти к последнему сообщению )  
> D vs C++ , почти сурковская пропаганда: не пора ли C++ потихоньку готовиться к пенсии?
    Цитата Qraizer @
    Во-первых, это сделано в твоём собственном листинге вверху. Я даже проверил, визуалка тоже так умеет.
    Визуалка видимо инлайнит. Если разнести эти функции, то такую оптимизацию в плюсах в принципе невозможно будет сделать.
    Но в целом фигня. Мне бы плюсики с синтаксисом и метапрограммированием дешки и я, наверное, был бы счастлив.
    Сообщение отредактировано: applegame -
      Цитата applegame @
      Если разнести эти функции, то такую оптимизацию в плюсах в принципе невозможно будет сделать.

      А с -flto?
        Цитата applegame @
        Визуалка видимо инлайнит
        Та не. Если её не одёрнуть __declspec(), она вообще в компайл-тайм константу 20 высчитывает.
          Цитата Qraizer @
          Та не. Если её не одёрнуть __declspec(), она вообще в компайл-тайм константу 20 высчитывает.
          Ну поэтому я и одергивал, компилятор D тоже так делает.
            Полюбуйтесь как плюсовой std::function безбожно сливает встроенным дешным лямбдам:
            C++: https://godbolt.org/z/jzo4aGfGb
            D: https://godbolt.org/z/senjvanrW

            Сравните ассемблерный выхлоп функции bar и самой лямбды.
            Сообщение отредактировано: applegame -
              Ну и раст тогда уж вдогонку
              Сообщение отредактировано: OpenGL -
                Цитата applegame @
                Сравните ассемблерный выхлоп функции bar и самой лямбды.

                Я ничего не понимаю в ассемблере.

                Ocaml, Go.
                  applegame, поясни за scope в данном кейсе, плиз.
                    Цитата D_KEY @
                    applegame, поясни за scope в данном кейсе, плиз.
                    Это чит :)
                    scope гарантирует компилятору, что лямбда не утечет за пределы скоупа функции. Соответственно компилятор может вместо аллоцирования замыкания на куче, просто передать в функцию указатель на контекст на стеке и указатель на функцию лямбды.
                      В телегу написал, но повторюсь тут ... Ну так за 5 (пять) лет появилось чо-то в D, с помощью которого можно без напряга гуячить и кроссплатформить?!!!
                        Мертвый же язык. А так вроде были биндинги для gtk и qt
                          :-?
                            В смысле «мёртвый»? Вообще проектов нет, что ли?

                            Добавлено
                            Цитата applegame @
                            Полюбуйтесь как плюсовой std::function безбожно сливает встроенным дешным лямбдам:
                            ...
                            :huh:

                            Добавлено
                            Удивили козла капустой. :D Нефик в ГНУсных портах работать:
                            ExpandedWrap disabled
                              #include <functional>
                               
                              class Foo {
                              public:
                                  virtual void foo(std::function<void()> f);
                              };
                               
                              int bar(Foo* foo, int a, int b, int c, int d) {
                                  int e;
                                  foo->foo([&] { e = a + b + c + d; });
                                  return e;
                              }
                            ExpandedWrap disabled
                              _TEXT   SEGMENT
                              _<e>$ = 8                                               ; size = 4
                              _<a>$ = 12                                              ; size = 4
                              _<b>$ = 16                                              ; size = 4
                              _<c>$ = 20                                              ; size = 4
                              _<d>$ = 24                                              ; size = 4
                              ??0<lambda_ac228c855dc2c6ed19d01a392d90130f>@@QAE@AAH0000@Z PROC ; <lambda_ac228c855dc2c6ed19d01a392d90130f>::<lambda_ac228c855dc2c6ed19d01a392d90130f>, COMDAT
                              ; _this$ = ecx
                              ; File D:\Work\CPP\2del\q.cpp
                              ; Line 10
                                      mov     eax, DWORD PTR _<e>$[esp-4]
                                      mov     DWORD PTR [ecx], eax
                                      mov     eax, DWORD PTR _<a>$[esp-4]
                                      mov     DWORD PTR [ecx+4], eax
                                      mov     eax, DWORD PTR _<b>$[esp-4]
                                      mov     DWORD PTR [ecx+8], eax
                                      mov     eax, DWORD PTR _<c>$[esp-4]
                                      mov     DWORD PTR [ecx+12], eax
                                      mov     eax, DWORD PTR _<d>$[esp-4]
                                      mov     DWORD PTR [ecx+16], eax
                                      mov     eax, ecx
                                      ret     20                                      ; 00000014H
                              ??0<lambda_ac228c855dc2c6ed19d01a392d90130f>@@QAE@AAH0000@Z ENDP ; <lambda_ac228c855dc2c6ed19d01a392d90130f>::<lambda_ac228c855dc2c6ed19d01a392d90130f>
                              _TEXT   ENDS
                              ; Function compile flags: /Ogtpy
                              ;       COMDAT ??R<lambda_ac228c855dc2c6ed19d01a392d90130f>@@QBE@XZ
                              _TEXT   SEGMENT
                              ??R<lambda_ac228c855dc2c6ed19d01a392d90130f>@@QBE@XZ PROC ; <lambda_ac228c855dc2c6ed19d01a392d90130f>::operator(), COMDAT
                              ; _this$ = ecx
                              ; File D:\Work\CPP\2del\q.cpp
                              ; Line 10
                                      mov     eax, DWORD PTR [ecx+16]
                                      mov     edx, DWORD PTR [ecx+12]
                                      push    esi
                                      mov     esi, DWORD PTR [eax]
                                      mov     eax, DWORD PTR [ecx+8]
                                      add     esi, DWORD PTR [edx]
                                      add     esi, DWORD PTR [eax]
                                      mov     eax, DWORD PTR [ecx+4]
                                      add     esi, DWORD PTR [eax]
                                      mov     eax, DWORD PTR [ecx]
                                      mov     DWORD PTR [eax], esi
                                      pop     esi
                                      ret     0
                              ??R<lambda_ac228c855dc2c6ed19d01a392d90130f>@@QBE@XZ ENDP ; <lambda_ac228c855dc2c6ed19d01a392d90130f>::operator()
                              _TEXT   ENDS
                              ; Function compile flags: /Ogtpy
                              ;       COMDAT ?bar@@YAHPAVFoo@@HHHH@Z
                              _TEXT   SEGMENT
                              _e$ = -4                                                ; size = 4
                              _foo$ = 8                                               ; size = 4
                              _a$ = 12                                                ; size = 4
                              _b$ = 16                                                ; size = 4
                              _c$ = 20                                                ; size = 4
                              _d$ = 24                                                ; size = 4
                              ?bar@@YAHPAVFoo@@HHHH@Z PROC                            ; bar, COMDAT
                              ; File D:\Work\CPP\2del\q.cpp
                              ; Line 8
                                      push    ecx
                              ; Line 10
                                      sub     esp, 40                                 ; 00000028H
                              ; File C:\VS2022\VC\Tools\MSVC\14.44.35207\include\functional
                              ; Line 855
                                      lea     ecx, DWORD PTR _e$[esp+44]
                              ; File D:\Work\CPP\2del\q.cpp
                              ; Line 10
                                      mov     eax, esp
                              ; File C:\VS2022\VC\Tools\MSVC\14.44.35207\include\functional
                              ; Line 855
                                      mov     DWORD PTR [eax], OFFSET ??_7?$_Func_impl_no_alloc@V<lambda_ac228c855dc2c6ed19d01a392d90130f>@@X$$V@std@@6B@
                                      mov     DWORD PTR [eax+4], ecx
                                      lea     ecx, DWORD PTR _a$[esp+40]
                                      mov     DWORD PTR [eax+8], ecx
                                      lea     ecx, DWORD PTR _b$[esp+40]
                                      mov     DWORD PTR [eax+12], ecx
                                      lea     ecx, DWORD PTR _c$[esp+40]
                                      mov     DWORD PTR [eax+16], ecx
                                      lea     ecx, DWORD PTR _d$[esp+40]
                                      mov     DWORD PTR [eax+20], ecx
                              ; File D:\Work\CPP\2del\q.cpp
                              ; Line 10
                                      mov     ecx, DWORD PTR _foo$[esp+40]
                              ; File C:\VS2022\VC\Tools\MSVC\14.44.35207\include\functional
                              ; Line 978
                                      mov     DWORD PTR [eax+36], eax
                              ; File D:\Work\CPP\2del\q.cpp
                              ; Line 10
                                      mov     eax, DWORD PTR [ecx]
                                      call    DWORD PTR [eax]
                              ; Line 11
                                      mov     eax, DWORD PTR _e$[esp+4]
                              ; Line 12
                                      pop     ecx
                                      ret     0
                              ?bar@@YAHPAVFoo@@HHHH@Z ENDP                            ; bar
                              _TEXT   ENDS


                            P.S. Это VS2022, если что. Банальный ключик-O2
                            Сообщение отредактировано: Qraizer -
                              Цитата Qraizer @

                              P.S. Это VS2022, если что. Банальный ключик-O2

                              Кто людям помогает - тот тратит время зря!!! Хорошими делами прославиццо незя!!! (С)

                              Добавлено
                              Цитата Qraizer @
                              P.S. Это VS2022, если что. Банальный ключик-O2

                              Ой, отлегло от души ... 12 мин искал, где можно Qraizer'а попытаться обидеть, и вот настал момент!!! :lol:

                              user posted image
                                Не, посоны!!! По-чесноку ... я знаю поговорку "На дураков не обижаются" ... Но я хотя бы попытался :lol:
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (57) « Первая ... 54 55 [56] 57 


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.1584 ]   [ 15 queries used ]   [ Generated: 15.06.26, 23:39 GMT ]