Во многих статьях о сравнении языков программирования всегда нравится сравнивать производительность, синтаксис и модели ввода-вывода различных языков программирования. В этой статье будут сравниваться разные языки программирования и технологии с точки зрения умственной нагрузки. Из-за ограниченного языка программирования, в котором я хорош, если что-то не так, пожалуйста, поправьте меня.
память вне пределов
Например: язык 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