Сравнительное исследование скорости языка C & Rust с использованием популярных алгоритмов сортировки.
Си, хозяин черепахи-ниндзя
« C необычный, ошибочный и имеет огромный успех .»
C, один из наиболее устоявшихся языков программирования, является императивным языком компьютерного программирования общего назначения, появившимся еще в 1969 году. Деннис Ричи - это отец языка программирования C. В 1989 году Американский национальный институт стандартов и Международная организация по стандартизации разработали новые согласованные стандарты для C. Это все еще универсальный и широко используемый язык программирования, созданный как простой низкоуровневый язык программирования, работающий на разных платформах.
Популярные бытовые устройства, такие как микроволновые печи, стиральные машины и цифровые фотоаппараты, с каждым днем становятся все более совершенными. Эти знания обеспечивают микропроцессор, операционная система и программное обеспечение, содержащиеся в этих машинах. Эти программы не только должны работать эффективно, но и работать с небольшим объемом памяти. Неудивительно, что такие программы написаны на C.
Основные части популярных операционных систем, таких как Windows, UNIX, Linux, по-прежнему написаны на C. Это связано с тем, что даже сегодня, когда дело доходит до производительности (скорости выполнения), ничто не может сравниться с C (но не с этого момента). Более того, если нужно расширить операционную систему для работы с новыми устройствами, необходимо написать программы драйверов устройств. Эти программы написаны исключительно на C.
Язык C имеет огромное влияние на ИТ-индустрию и по-прежнему играет жизненно важную роль.
Ржавчина, потенциальный соперник во всех областях
Rust - это мультипарадигмальный язык программирования, ориентированный на производительность и безопасность, особенно на безопасный параллелизм. Rust синтаксически похож на C ++ и обеспечивает безопасность памяти без использования сборки мусора, а за счет использования системы проверки заимствования.
Первоначально Rust был разработан Грейдоном Хоаром из Mozilla Research.
Rust в основном фокусируется на следующих вещах:
1. Параллелизм.
2. Безопасность.
3. Скорость.
Безопасность памяти
Основным преимуществом Rust является то, что он гарантирует во время компиляции, что ваше приложение будет защищено от разыменования нулевых или висячих указателей. Rust также затрудняет утечку памяти.
Производительность
Язык Rust не имеет сборщика мусора (GC) по замыслу. Rust будет знать, когда переменная выходит за пределы области видимости или ее время жизни заканчивается во время компиляции, и, таким образом, вставляет соответствующие инструкции LLVM / сборки для освобождения памяти. Это улучшает производительность во время выполнения.
Многопоточность
В Rust потоки автоматически «изолированы» друг от друга из-за владения. Запись может происходить только тогда, когда поток имеет изменяемый доступ, либо владея данными, либо имея их изменяемое заимствование. В любом случае поток гарантированно будет единственным, имеющим доступ в данный момент.
Поддержка веб-сборки
Веб-сборка помогает выполнять алгоритмы с высокой интенсивностью вычислений в браузере, на встроенных устройствах или где-либо еще. Он работает со скоростью собственного кода. Rust может быть скомпилирован в веб-сборку для быстрого и надежного выполнения.
Сравнение скорости C и Rust
Методология
Подход к сравнению скорости этих двух языков заключается в написании наиболее популярных алгоритмов сортировки и их запуске для разных диапазонов элементов и сравнении того, на каком языке сортировка элементов занимает больше всего времени. Я использую следующий алгоритм сортировки: -
4. Шелл-сортировка.
5. Сортировка кучей.
Выше приведена временная сложность популярных алгоритмов сортировки, глядя на сложность наихудшего случая, мы можем иметь приблизительное представление о том, какой метод сортировки будет работать хуже между собой.
Пузырьковая сортировка имеет наихудшую сложность O (N²) и, безусловно, будет работать хуже, чем другие методы сортировки. Результирующая матрица, которую мы будем генерировать, также поможет нам понять сложность наихудшего случая с точки зрения времени, сравнив время, необходимое для сортировки элементов.
Итак, я написал все вышеперечисленные 5 алгоритмов как на C, так и на Rust. Для ввода я использую массив целых чисел и заполняю этот массив случайными числами с помощью функции генератора случайных чисел rand () в C и rand :: Rng в Rust. Этот массив предоставляется в качестве входных данных для алгоритмов сортировки, а выходные данные записываются в матрицу. Тестирование работоспособности алгоритмов для трех диапазонов 1000, 10000 и 100000 элементов.
Эта установка выполнялась в течение 100 итераций, и для генерации выходной матрицы выполняется усреднение.
Настройка для сравнения производительности
Конфигурация системы, в которой была выполнена и запущена вышеуказанная настройка: -
macOS Catalina
MacBook Pro (16 дюймов, 2019 г.)
Процессор: - 8-ядерный Intel Core i9 с тактовой частотой 2,3 ГГц
Память: - 16 ГБ, 2667 МГц, DDR4
clang версии 12.0.0 (флаг оптимизации -O3)
rustc 1.45.2 (флаг оптимизации - выпуск)
Статистика производительности
Ниже приведены сгенерированные выходные матрицы: -
Из выходной матрицы ясно видно, что результаты в некоторой степени совпадают. Для каждого метода сортировки и диапазона входных массивов в некоторых случаях лучше работает Rust, а в некоторых случаях - лучше C. В более низких диапазонах элементов (1000 элементов) Rust работает лучше, за исключением сортировки вставкой. Для диапазона в 10000 элементов C лучше работает для каждого метода сортировки.
На гистограммах также показано, что результаты почти одинаковы во всех случаях.
Вы можете попробовать реализовать это в своей собственной системе.
Github Ссылка проекта: - https://github.com/imrushabh/C_vs_Rust
Заключение
Довольно сложно сказать, какой язык быстрее, потому что это зависит от случая. Но мы можем сказать, что Rust является конкурентом C с точки зрения скорости, и он быстрее многих других популярных языков, таких как Java и Python. Rust предоставляет множество функций, таких как скорость, безопасность памяти и параллелизм, и является открытым исходным кодом, мы можем использовать Rust для создания широкого спектра новых программных приложений, таких как игровые движки, операционные системы, файловые системы, компоненты браузера и движки моделирования. для виртуальной реальности. В ближайшее время мы обязательно увидим Rust повсюду !!!