D поддерживает RAII, или я вас не так понял?
GC можно вообще отключить и вызывать те же самые malloc/free самостоятельно.
В стандартной библиотеке очень многие алгоритмы не вызывают аллокаций памяти.
Недавно добавили аттрибут nogc, который гарантирует, что блок кода не делает вызовов к GC.
Также появился std.experimental.allocator в котором собрано большое число аллокаторов, как раз для тех, кто не хочет использовать GC. Через пару версий станет стабильным std.allocator.
Я писал множество приложений, начиная от web-сайтов, заканчивая 3D движками на D. Сборщик мусора проблемой никогда не был, наоборот, входит в привычку не заботиться о delete и утечках памяти.
Извиняюсь, харбапарсер съел кавычки в примере.
Это я также к тому, что уменьшение размера кода способствует лучшей читабельности и надёжности.
Намного легче заметить ошибку в паре строк кода, чем, скажем, в десятке.
Я пишу на D свои проекты уже несколько лет.
Что для вас zero cost и почему его нет в D? Если оттранслировать C++ код 1 в 1 на D, то при компиляции получится одно и то же.
Детерменированности больше, чем в C++: то, что в C++ UB, в D вполне себе DB. Есть asm statements, которые позволяют писать специфичный код на ассемблере.
При этом сам язык намного мощнее. Возьмём для примера «мама мыла раму» => «раму мыла мама».
Типичное решение на C++(возьмём даже буст для упрощения, попробуете написать на STL?):
boost::copy(«мама мыла раму» | boost::adaptors::tokenized(boost::regex("\w+")) | boost::adaptors::reversed, std::ostream_itertor(std::cout, " "));
Решение на D:
мама мыла раму.split.retro.join().writeln;
А почему у того, кто делал термосъёмку, процессор не тротлился?
А вообще забавно: «да, наша система греется, но делает это только в синтетических тестах, 99% пользователей не будет этого замечать».
А если я хочу в течении продолжительного времени вычислять простые числа? Фейл?
GC можно вообще отключить и вызывать те же самые malloc/free самостоятельно.
В стандартной библиотеке очень многие алгоритмы не вызывают аллокаций памяти.
Недавно добавили аттрибут nogc, который гарантирует, что блок кода не делает вызовов к GC.
Также появился std.experimental.allocator в котором собрано большое число аллокаторов, как раз для тех, кто не хочет использовать GC. Через пару версий станет стабильным std.allocator.
Я писал множество приложений, начиная от web-сайтов, заканчивая 3D движками на D. Сборщик мусора проблемой никогда не был, наоборот, входит в привычку не заботиться о delete и утечках памяти.
Это я также к тому, что уменьшение размера кода способствует лучшей читабельности и надёжности.
Намного легче заметить ошибку в паре строк кода, чем, скажем, в десятке.
Что для вас zero cost и почему его нет в D? Если оттранслировать C++ код 1 в 1 на D, то при компиляции получится одно и то же.
Детерменированности больше, чем в C++: то, что в C++ UB, в D вполне себе DB. Есть asm statements, которые позволяют писать специфичный код на ассемблере.
При этом сам язык намного мощнее. Возьмём для примера «мама мыла раму» => «раму мыла мама».
Типичное решение на C++(возьмём даже буст для упрощения, попробуете написать на STL?):
boost::copy(«мама мыла раму» | boost::adaptors::tokenized(boost::regex("\w+")) | boost::adaptors::reversed, std::ostream_itertor(std::cout, " "));
Решение на D:
мама мыла раму.split.retro.join().writeln;
А вообще забавно: «да, наша система греется, но делает это только в синтетических тестах, 99% пользователей не будет этого замечать».
А если я хочу в течении продолжительного времени вычислять простые числа? Фейл?
Видео не вставилось :(