История изменений
Исправление archie, (текущая версия) :
Судя по статье, некий Алексей Вересов - бездарный идиот. Изучи себе сначала C и C++, а потом Rust. Тогда возможно станет ясно, для чего нужен Rust и какие застарелые проблемы копролита из 70-х он решает.
-
Декларативные макросы мощнее и безопаснее, чем примитивные сишные дефайны с убогим текстовым копипастом. В частности, они решают проблемы вроде необходимости обмазывания скобками имен параметров или скрытия имен переменных. Почитай, что такое гигиенические макросы. Приводить в качестве недостатка раста хелловорлд с
println!
это вообще смешно. Сложность базового хелловорлда имеет значение разве что при первоначальном обучении программированию. И здесь ни Rust, ни C, ни C++ не пригодны в качестве самого первого языка при обучении. Дырявый сишныйprintf
вообще априори небезопасен и никак не проверяет соответствие форматной строки и параметров. Ну да,println!
в расте реализуется через встроенные средства компилятора, но и в сишке проверки параметровprintf
намертво зашиваются в компилятор. Например через уродский костыль__attribute__ ((format (printf, 2, 3)))
в GCC. -
В подавляющем большинстве случаев автовыведение типов работает корректно, потому оно и сделано умолчальным. Если скажем, автовыведение срабатывает в 95% случаев, нахрена его отключать ради 5% неоднозначностей? Чтобы что? В большинстве современных языков есть автовыведение типов, как минимум для локальных переменных. Это тупо удобно. Даже в C23 и то завезли новый старый
auto
. -
Писать функции в любом порядке проще и удобнее. Например сначала функция
main
, затем вспомогательные функции, вызываемые изmain
, затем вспомогательные функции, вызываемые из предыдущих и т.д. Зачем писать горы бессмысленного мусора с предварительными объявлениями функций? Где пруфы, что именно возможность писать функции в любом порядке замедляет компиляцию раста? Компиляторы C/C++ тоже получились тормозные и многопроходные, но при этом все равно требуют писать forward декларации. И чо, стоила ли игра свеч в итоге? -
Что тебя удивляет в семантике перемещения? Крестовики тоже обмазываются всякими
std::unique_ptr
для достижения подобного эффекта. Только в расте этот синтаксический мусор не нужен и компилятор отслеживает use-after-move/free, а в крестах даже полоумные указатели ничего не гарантируют и оставляют широкие возможности для простреливания ног. -
Про сборщик мусора там очевидное вранье и манипуляция. В Rust нет недерминированного сборщика мусора типа Java, C# и прочих языков с GC. Речь идет только о детерминированном RAII и подсчете ссылок. С тем же успехом можно заявить, что C++ - это тоже язык со сборщиком мусора, ведь там есть
std::shared_ptr
. -
Раст - он так же про параллелизм, как и C/C+.
-
В старом треде писали, что автор ниасилил включить оптимизацию растокода, вот и получился громоздкий ассемблерный код. Касаемо скорости - где пруфы, что оптимизированный растокод медленнее оптимизированного сишного? Где бенчмарки и вообще хоть какие-нибудь цифры? Размер ассемблерного выхлопа никак не связан с производительностью полученного кода. Более того, бывает так, что более громоздкий код работает быстрее. Например при инлайнинге.
-
После сишки/крестов что угодно покажется счастьем. Даже раст.
Исправление archie, :
Судя по статье, некий Алексей Вересов - бездарный идиот. Изучи себе сначала C и C++, а потом Rust. Тогда возможно станет ясно, для чего нужен Rust и какие застарелые проблемы копролита из 70-х он решает.
-
Декларативные макросы мощнее и безопаснее, чем примитивные сишные дефайны с убогим текстовым копипастом. В частности, они решают проблемы вроде необходимости обмазывания скобками имен параметров или скрытия имен переменных. Почитай, что такое гигиенические макросы. Приводить в качестве недостатка раста хелловорлд с
println!
это вообще смешно. Сложность базового хелловорлда имеет значение разве что при первоначальном обучении программированию. И здесь ни Rust, ни C, ни C++ не пригодны в качестве самого первого языка при обучении. Дырявый сишныйprintf
вообще априори небезопасен и никак не проверяет соответствие форматной строки и параметров. Ну да,println!
в расте реализуется через встроенные средства компилятора, но и в сишке проверки параметровprintf
намертво зашиваются в компилятор. Например через уродский костыль__attribute__ ((format (printf, 2, 3)))
в GCC. -
В подавляющем большинстве случаев автовыведение типов работает корректно, потому оно и сделано умолчальным. Если скажем, автовыведение срабатывает в 95% случаев, нахрена его отключать ради 5% неоднозначностей? Чтобы что? В большинстве современных языков есть автовыведение типов, как минимум для локальных переменных. Это тупо удобно. Даже в C23 и то завезли новый старый
auto
. -
Писать функции в любом порядке проще и удобнее. Например сначала функция
main
, затем вспомогательные функции, вызываемые изmain
, затем вспомогательные функции, вызываемые из предыдущих и т.д. Зачем писать горы бессмысленного мусора с предварительными объявлениями функций? Где пруфы, что именно возможность писать функции в любом порядке замедляет компиляцию раста? Компиляторы C/C++ тоже получились тормозные и многопроходные, но при этом все равно требуют писать forward декларации. И чо, стоила ли игра свеч в итоге? -
Что тебя удивляет в семантике перемещения? Крестовики тоже обмазываются всякими
std::unique_ptr
для достижения подобного эффекта. Только в расте этот синтаксический мусор не нужен и компилятор отслеживает use-after-free, а в крестах даже полоумные указатели ничего не гарантируют и оставляют широкие возможности для простреливания ног. -
Про сборщик мусора там очевидное вранье и манипуляция. В Rust нет недерминированного сборщика мусора типа Java, C# и прочих языков с GC. Речь идет только о детерминированном RAII и подсчете ссылок. С тем же успехом можно заявить, что C++ - это тоже язык со сборщиком мусора, ведь там есть
std::shared_ptr
. -
Раст - он так же про параллелизм, как и C/C+.
-
В старом треде писали, что автор ниасилил включить оптимизацию растокода, вот и получился громоздкий ассемблерный код. Касаемо скорости - где пруфы, что оптимизированный растокод медленнее оптимизированного сишного? Где бенчмарки и вообще хоть какие-нибудь цифры? Размер ассемблерного выхлопа никак не связан с производительностью полученного кода. Более того, бывает так, что более громоздкий код работает быстрее. Например при инлайнинге.
-
После сишки/крестов что угодно покажется счастьем. Даже раст.
Исходная версия archie, :
Судя по статье, некий Алексей Вересов - бездарный идиот. Изучи себе сначала C и C++, а потом Rust. Тогда возможно станет ясно, для чего нужен Rust и какие застарелые проблемы копролита из 70-х он решает.
-
Декларативные макросы мощнее и безопаснее, чем примитивные сишные дефайны с убогим текстовым копипастом. В частности, они решают проблемы вроде необходимости обмазывания скобками имен параметров или скрытия имен переменных. Почитай, что такое гигиенические макросы. Приводить в качестве недостатка раста хелловорлд с
println!
это вообще смешно. Сложность базового хелловорлда имеет значение разве что при первоначальном обучении программированию. И здесь ни Rust, ни C, ни C++ не пригодны в качестве самого первого языка при обучении. Дырявый сишныйprintf
вообще априори небезопасен и никак не проверяет соответствие форматной строки и параметров. Ну да,println!
в расте реализуется через встроенные средства компилятора, но и в сишке ошибки компиляции проprintf
намертво зашиваются в компилятор. Например через уродский костыль__attribute__ ((format (printf, 2, 3)))
в GCC. -
В подавляющем большинстве случаев автовыведение типов работает корректно, потому оно и сделано умолчальным. Если скажем, автовыведение срабатывает в 95% случаев, нахрена его отключать ради 5% неоднозначностей? Чтобы что? В большинстве современных языков есть автовыведение типов, как минимум для локальных переменных. Это тупо удобно. Даже в C23 и то завезли новый старый
auto
. -
Писать функции в любом порядке проще и удобнее. Например сначала функция
main
, затем вспомогательные функции, вызываемые изmain
, затем вспомогательные функции, вызываемые из предыдущих и т.д. Зачем писать горы бессмысленного мусора с предварительными объявлениями функций? Где пруфы, что именно возможность писать функции в любом порядке замедляет компиляцию раста? Компиляторы C/C++ тоже получились тормозные и многопроходные, но при этом все равно требуют писать forward декларации. И чо, стоила ли игра свеч в итоге? -
Что тебя удивляет в семантике перемещения? Крестовики тоже обмазываются всякими
std::unique_ptr
для достижения подобного эффекта. Только в расте этот синтаксический мусор не нужен и компилятор отслеживает use-after-free, а в крестах даже полоумные указатели ничего не гарантируют и оставляют широкие возможности для простреливания ног. -
Про сборщик мусора там очевидное вранье и манипуляция. В Rust нет недерминированного сборщика мусора типа Java, C# и прочих языков с GC. Речь идет только о детерминированном RAII и подсчете ссылок. С тем же успехом можно заявить, что C++ - это тоже язык со сборщиком мусора, ведь там есть
std::shared_ptr
. -
Раст - он так же про параллелизм, как и C/C+.
-
В старом треде писали, что автор ниасилил включить оптимизацию растокода, вот и получился громоздкий ассемблерный код. Касаемо скорости - где пруфы, что оптимизированный растокод медленнее оптимизированного сишного? Где бенчмарки и вообще хоть какие-нибудь цифры? Размер ассемблерного выхлопа никак не связан с производительностью полученного кода. Более того, бывает так, что более громоздкий код работает быстрее. Например при инлайнинге.
-
После сишки/крестов что угодно покажется счастьем. Даже раст.