Во многих статьях о сравнении языков программирования всегда нравится сравнивать производительность, синтаксис и модели ввода-вывода различных языков программирования. В этой статье будут сравниваться разные языки программирования и технологии с точки зрения умственной нагрузки. Из-за ограниченного языка программирования, в котором я хорош, если что-то не так, пожалуйста, поправьте меня.
память вне пределов
Например: язык C, C++ (C с классом)C/C++
Памятью можно манипулировать напрямую, но программирование должно столкнуться с проблемой нехватки памяти. После того, как произойдет выход за пределы памяти, программа сразуcore dump
, разработчик должен использоватьgdb
Инструмент анализирует причину ошибок памяти. Если выход за пределы памяти случайный, например, из-за проблем с синхронизацией данных, это произойдет раз в сотни миллионов раз. Это очень сложно решить, и требуются даже лучшие специалисты. чтобы найти причину проблемы.
Умственная нагрузка: 10
современныйC++
при условииSTL
Библиотека содержит большое количество контейнеров, дополнительноC++
Поддержка ссылочного синтаксиса, больше не нужно напрямую управлять указателем, что снижает риск ошибок чтения и записи памяти. использовать современныеC++
стиль программирования, чтобы избежать этой проблемы. Но из-заC++
Неполное удаление указателей с синтаксического уровня недостаточно тщательно.
макрос
C/C++
Программы часто используют предопределенные макросы для реализации некоторой логики, что приводит к ухудшению читаемости. В некоторых случаях использование макросов вложено несколько раз, что становится чрезвычайно трудно читать после раскрытия.Умственная нагрузка: 6
Таким образом, вC/C++
рекомендуется вenum
илиstatic inline
Функции вместо макросов.
управление памятью
Такие как: язык C, C++
C/C++
язык, который требует ручного управления памятью,malloc/new
Запрашиваемая память должна быть такой же, какfree/delete
Используйте в парах. Если вы забудете освободить выделенную память, произойдет утечка памяти.Умственная нагрузка: 8
Java/PHP/Go
ждатьGC
Язык программирования, не требующий ручного управления памятью и не вызывающий утечек памяти из-за ошибок в коде.Умственная нагрузка: 0
Числовой тип
C/C++/GO
и другие языки программирования, предоставляющие знаковые, беззнаковые целые числа и типы с плавающей запятой,8/16/32/64
Целые числа разного размера. Во время программирования требуется дополнительная обработка, чтобы избежать числового переполнения.Умственная нагрузка: 6
PHP/Java
и другие языки программирования, целое число по умолчанию имеет знакint64
, снижение умственной нагрузки. В общих бизнес-проектах трудно иметь больше, чем2^63
числа, вы не столкнетесь с проблемами. Но если вы занимаетесь научными вычислениями,int64
Удовлетворить спрос сложно. существуетPHP
над2^63
Нижележащий слой будет преобразован в плавающий, и расчет потеряет точность.Умственная нагрузка: 1
а такжеPython
Целые числа имеют неограниченную длину и могут выполнять числовые вычисления с любым количеством цифр.Умственная нагрузка: 0
ограничения типа
Java
является статически строго типизированным языком программирования, поэтому в программировании существуют ограничения типов, которые в некоторых случаях могут быть не особенно удобны. подобноJSON
Сериализация. При взаимодействии переменных разных типов может потребоваться явное преобразование типов.Умственная нагрузка: 2
PHP/JS
Это динамический язык программирования со слабой типизацией, и базовый тип автоматически выполняет неявное преобразование типов. Программировать удобнее.Умственная нагрузка: 0.
сопровождение проекта
В крупномасштабных проектах или при рефакторинге существующих систем, а также когда код проекта меняет разработчиков, слабые типы создают проблемы с удобством сопровождения и читабельностью, а такжеJava/Go/C++
Такие статически типизированные языки программирования могут обнаруживать проблемы во время компиляции. А динамические, слабо типизированные языки могут генерировать ошибки времени выполнения из-за рефакторинга или других операций обслуживания, увеличивая умственную нагрузку.Умственная нагрузка: 5
многопоточное программирование
Java/C++/Go
Обеспечивает многопоточное параллельное программирование и программирование без блокировки, и при программировании будут проблемы с синхронизацией данных. следовательноНеобходимо заблокировать критические ресурсы. И неправильная операция блокировки приведет к взаимоблокировке и конкуренции за горячую точку. От разработчиков требуется исключительно высокое качество, иначе трудно сделать это правильно и хорошо выполнить, что может отнять много ума.Умственная нагрузка: 10
утечка памяти
УдалитьPHP(php-fpm)
другие языки программирования и технологии (включаяPHP + Swoole
), все из которых имеют длительный жизненный цикл в серверных программах. Операции с глобальными/статическими переменными могут привести к утечке дескрипторов памяти или ресурсов. Будьте осторожны при программировании.Умственная нагрузка: 3
а такжеPHP(php-fpm)
Он недолговечен, и вся память и дескрипторы освобождаются сразу после завершения запроса, не беспокоясь об утечках.Умственная нагрузка: 0
Тайм-аут ввода-вывода
синхронная блокировкаIO
Языки и методы программирования моделей при столкновении с медленнымIO
Может привести к зависанию всего процесса или потока. В крайних случаях все процессы/потоки будут зависать, что приведет к недоступности онлайн-сервисов. Разработчики должны обратить особое внимание на настройкиIO
Тайм-аут операции, чтобы избежать блокировки процесса/потока, вызванной медленными запросами.Умственная нагрузка: 2
и асинхронныйIO
изGo/Node.js/Swoole
и т. д. Не нужно беспокоиться об этом.Умственная нагрузка: 0
Резюме