LINUX.ORG.RU

История изменений

Исправление archie, (текущая версия) :

Судя по статье, некий Алексей Вересов - бездарный идиот. Изучи себе сначала C и C++, а потом Rust. Тогда возможно станет ясно, для чего нужен Rust и какие застарелые проблемы копролита из 70-х он решает.

  1. Декларативные макросы мощнее и безопаснее, чем примитивные сишные дефайны с убогим текстовым копипастом. В частности, они решают проблемы вроде необходимости обмазывания скобками имен параметров или скрытия имен переменных. Почитай, что такое гигиенические макросы. Приводить в качестве недостатка раста хелловорлд с println! это вообще смешно. Сложность базового хелловорлда имеет значение разве что при первоначальном обучении программированию. И здесь ни Rust, ни C, ни C++ не пригодны в качестве самого первого языка при обучении. Дырявый сишный printf вообще априори небезопасен и никак не проверяет соответствие форматной строки и параметров. Ну да, println! в расте реализуется через встроенные средства компилятора, но и в сишке проверки параметров printf намертво зашиваются в компилятор. Например через уродский костыль __attribute__ ((format (printf, 2, 3))) в GCC.

  2. В подавляющем большинстве случаев автовыведение типов работает корректно, потому оно и сделано умолчальным. Если скажем, автовыведение срабатывает в 95% случаев, нахрена его отключать ради 5% неоднозначностей? Чтобы что? В большинстве современных языков есть автовыведение типов, как минимум для локальных переменных. Это тупо удобно. Даже в C23 и то завезли новый старый auto.

  3. Писать функции в любом порядке проще и удобнее. Например сначала функция main, затем вспомогательные функции, вызываемые из main, затем вспомогательные функции, вызываемые из предыдущих и т.д. Зачем писать горы бессмысленного мусора с предварительными объявлениями функций? Где пруфы, что именно возможность писать функции в любом порядке замедляет компиляцию раста? Компиляторы C/C++ тоже получились тормозные и многопроходные, но при этом все равно требуют писать forward декларации. И чо, стоила ли игра свеч в итоге?

  4. Что тебя удивляет в семантике перемещения? Крестовики тоже обмазываются всякими std::unique_ptr для достижения подобного эффекта. Только в расте этот синтаксический мусор не нужен и компилятор отслеживает use-after-move/free, а в крестах даже полоумные указатели ничего не гарантируют и оставляют широкие возможности для простреливания ног.

  5. Про сборщик мусора там очевидное вранье и манипуляция. В Rust нет недерминированного сборщика мусора типа Java, C# и прочих языков с GC. Речь идет только о детерминированном RAII и подсчете ссылок. С тем же успехом можно заявить, что C++ - это тоже язык со сборщиком мусора, ведь там есть std::shared_ptr.

  6. Раст - он так же про параллелизм, как и C/C+.

  7. В старом треде писали, что автор ниасилил включить оптимизацию растокода, вот и получился громоздкий ассемблерный код. Касаемо скорости - где пруфы, что оптимизированный растокод медленнее оптимизированного сишного? Где бенчмарки и вообще хоть какие-нибудь цифры? Размер ассемблерного выхлопа никак не связан с производительностью полученного кода. Более того, бывает так, что более громоздкий код работает быстрее. Например при инлайнинге.

  8. После сишки/крестов что угодно покажется счастьем. Даже раст.

Исправление archie, :

Судя по статье, некий Алексей Вересов - бездарный идиот. Изучи себе сначала C и C++, а потом Rust. Тогда возможно станет ясно, для чего нужен Rust и какие застарелые проблемы копролита из 70-х он решает.

  1. Декларативные макросы мощнее и безопаснее, чем примитивные сишные дефайны с убогим текстовым копипастом. В частности, они решают проблемы вроде необходимости обмазывания скобками имен параметров или скрытия имен переменных. Почитай, что такое гигиенические макросы. Приводить в качестве недостатка раста хелловорлд с println! это вообще смешно. Сложность базового хелловорлда имеет значение разве что при первоначальном обучении программированию. И здесь ни Rust, ни C, ни C++ не пригодны в качестве самого первого языка при обучении. Дырявый сишный printf вообще априори небезопасен и никак не проверяет соответствие форматной строки и параметров. Ну да, println! в расте реализуется через встроенные средства компилятора, но и в сишке проверки параметров printf намертво зашиваются в компилятор. Например через уродский костыль __attribute__ ((format (printf, 2, 3))) в GCC.

  2. В подавляющем большинстве случаев автовыведение типов работает корректно, потому оно и сделано умолчальным. Если скажем, автовыведение срабатывает в 95% случаев, нахрена его отключать ради 5% неоднозначностей? Чтобы что? В большинстве современных языков есть автовыведение типов, как минимум для локальных переменных. Это тупо удобно. Даже в C23 и то завезли новый старый auto.

  3. Писать функции в любом порядке проще и удобнее. Например сначала функция main, затем вспомогательные функции, вызываемые из main, затем вспомогательные функции, вызываемые из предыдущих и т.д. Зачем писать горы бессмысленного мусора с предварительными объявлениями функций? Где пруфы, что именно возможность писать функции в любом порядке замедляет компиляцию раста? Компиляторы C/C++ тоже получились тормозные и многопроходные, но при этом все равно требуют писать forward декларации. И чо, стоила ли игра свеч в итоге?

  4. Что тебя удивляет в семантике перемещения? Крестовики тоже обмазываются всякими std::unique_ptr для достижения подобного эффекта. Только в расте этот синтаксический мусор не нужен и компилятор отслеживает use-after-free, а в крестах даже полоумные указатели ничего не гарантируют и оставляют широкие возможности для простреливания ног.

  5. Про сборщик мусора там очевидное вранье и манипуляция. В Rust нет недерминированного сборщика мусора типа Java, C# и прочих языков с GC. Речь идет только о детерминированном RAII и подсчете ссылок. С тем же успехом можно заявить, что C++ - это тоже язык со сборщиком мусора, ведь там есть std::shared_ptr.

  6. Раст - он так же про параллелизм, как и C/C+.

  7. В старом треде писали, что автор ниасилил включить оптимизацию растокода, вот и получился громоздкий ассемблерный код. Касаемо скорости - где пруфы, что оптимизированный растокод медленнее оптимизированного сишного? Где бенчмарки и вообще хоть какие-нибудь цифры? Размер ассемблерного выхлопа никак не связан с производительностью полученного кода. Более того, бывает так, что более громоздкий код работает быстрее. Например при инлайнинге.

  8. После сишки/крестов что угодно покажется счастьем. Даже раст.

Исходная версия archie, :

Судя по статье, некий Алексей Вересов - бездарный идиот. Изучи себе сначала C и C++, а потом Rust. Тогда возможно станет ясно, для чего нужен Rust и какие застарелые проблемы копролита из 70-х он решает.

  1. Декларативные макросы мощнее и безопаснее, чем примитивные сишные дефайны с убогим текстовым копипастом. В частности, они решают проблемы вроде необходимости обмазывания скобками имен параметров или скрытия имен переменных. Почитай, что такое гигиенические макросы. Приводить в качестве недостатка раста хелловорлд с println! это вообще смешно. Сложность базового хелловорлда имеет значение разве что при первоначальном обучении программированию. И здесь ни Rust, ни C, ни C++ не пригодны в качестве самого первого языка при обучении. Дырявый сишный printf вообще априори небезопасен и никак не проверяет соответствие форматной строки и параметров. Ну да, println! в расте реализуется через встроенные средства компилятора, но и в сишке ошибки компиляции про printf намертво зашиваются в компилятор. Например через уродский костыль __attribute__ ((format (printf, 2, 3))) в GCC.

  2. В подавляющем большинстве случаев автовыведение типов работает корректно, потому оно и сделано умолчальным. Если скажем, автовыведение срабатывает в 95% случаев, нахрена его отключать ради 5% неоднозначностей? Чтобы что? В большинстве современных языков есть автовыведение типов, как минимум для локальных переменных. Это тупо удобно. Даже в C23 и то завезли новый старый auto.

  3. Писать функции в любом порядке проще и удобнее. Например сначала функция main, затем вспомогательные функции, вызываемые из main, затем вспомогательные функции, вызываемые из предыдущих и т.д. Зачем писать горы бессмысленного мусора с предварительными объявлениями функций? Где пруфы, что именно возможность писать функции в любом порядке замедляет компиляцию раста? Компиляторы C/C++ тоже получились тормозные и многопроходные, но при этом все равно требуют писать forward декларации. И чо, стоила ли игра свеч в итоге?

  4. Что тебя удивляет в семантике перемещения? Крестовики тоже обмазываются всякими std::unique_ptr для достижения подобного эффекта. Только в расте этот синтаксический мусор не нужен и компилятор отслеживает use-after-free, а в крестах даже полоумные указатели ничего не гарантируют и оставляют широкие возможности для простреливания ног.

  5. Про сборщик мусора там очевидное вранье и манипуляция. В Rust нет недерминированного сборщика мусора типа Java, C# и прочих языков с GC. Речь идет только о детерминированном RAII и подсчете ссылок. С тем же успехом можно заявить, что C++ - это тоже язык со сборщиком мусора, ведь там есть std::shared_ptr.

  6. Раст - он так же про параллелизм, как и C/C+.

  7. В старом треде писали, что автор ниасилил включить оптимизацию растокода, вот и получился громоздкий ассемблерный код. Касаемо скорости - где пруфы, что оптимизированный растокод медленнее оптимизированного сишного? Где бенчмарки и вообще хоть какие-нибудь цифры? Размер ассемблерного выхлопа никак не связан с производительностью полученного кода. Более того, бывает так, что более громоздкий код работает быстрее. Например при инлайнинге.

  8. После сишки/крестов что угодно покажется счастьем. Даже раст.