D vs C++
, почти сурковская пропаганда: не пора ли C++ потихоньку готовиться к пенсии?
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [18.97.14.85] |
|
|
Правила раздела:
| Страницы: (57) « Первая ... 54 55 [56] 57 ( Перейти к последнему сообщению ) |
D vs C++
, почти сурковская пропаганда: не пора ли C++ потихоньку готовиться к пенсии?
|
Сообщ.
#826
,
|
|
|
|
Цитата Qraizer @ Визуалка видимо инлайнит. Если разнести эти функции, то такую оптимизацию в плюсах в принципе невозможно будет сделать.Во-первых, это сделано в твоём собственном листинге вверху. Я даже проверил, визуалка тоже так умеет. Но в целом фигня. Мне бы плюсики с синтаксисом и метапрограммированием дешки и я, наверное, был бы счастлив. |
|
Сообщ.
#827
,
|
|
|
|
Цитата applegame @ Если разнести эти функции, то такую оптимизацию в плюсах в принципе невозможно будет сделать. А с -flto? |
|
Сообщ.
#828
,
|
|
|
|
Цитата applegame @ Та не. Если её не одёрнуть __declspec(), она вообще в компайл-тайм константу 20 высчитывает. Визуалка видимо инлайнит |
|
Сообщ.
#829
,
|
|
|
|
Цитата Qraizer @ Ну поэтому я и одергивал, компилятор D тоже так делает. Та не. Если её не одёрнуть __declspec(), она вообще в компайл-тайм константу 20 высчитывает. |
|
Сообщ.
#830
,
|
|
|
|
Полюбуйтесь как плюсовой std::function безбожно сливает встроенным дешным лямбдам:
C++: https://godbolt.org/z/jzo4aGfGb D: https://godbolt.org/z/senjvanrW Сравните ассемблерный выхлоп функции bar и самой лямбды. |
|
Сообщ.
#832
,
|
|
|
|
|
Сообщ.
#833
,
|
|
|
|
applegame, поясни за scope в данном кейсе, плиз.
|
|
Сообщ.
#834
,
|
|
|
|
Цитата D_KEY @ Это чит applegame, поясни за scope в данном кейсе, плиз. ![]() scope гарантирует компилятору, что лямбда не утечет за пределы скоупа функции. Соответственно компилятор может вместо аллоцирования замыкания на куче, просто передать в функцию указатель на контекст на стеке и указатель на функцию лямбды. |
|
Сообщ.
#835
,
|
|
|
|
В телегу написал, но повторюсь тут ... Ну так за 5 (пять) лет появилось чо-то в D, с помощью которого можно без напряга гуячить и кроссплатформить?!!!
|
|
Сообщ.
#836
,
|
|
|
|
Мертвый же язык. А так вроде были биндинги для gtk и qt
|
|
Сообщ.
#837
,
|
|
|
|
|
|
Сообщ.
#838
,
|
|
|
|
В смысле «мёртвый»? Вообще проектов нет, что ли?
Добавлено Цитата applegame @ Полюбуйтесь как плюсовой std::function безбожно сливает встроенным дешным лямбдам: ... Добавлено Удивили козла капустой. Нефик в ГНУсных портах работать:![]() ![]() #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; } ![]() ![]() _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 |
|
Сообщ.
#839
,
|
|
|
|
Цитата Qraizer @ P.S. Это VS2022, если что. Банальный ключик-O2 Кто людям помогает - тот тратит время зря!!! Хорошими делами прославиццо незя!!! (С) Добавлено Цитата Qraizer @ P.S. Это VS2022, если что. Банальный ключик-O2 Ой, отлегло от души ... 12 мин искал, где можно Qraizer'а попытаться обидеть, и вот настал момент!!! ![]() |
|
Сообщ.
#840
,
|
|
|
|
Не, посоны!!! По-чесноку ... я знаю поговорку "На дураков не обижаются" ... Но я хотя бы попытался
|