Ментальное бремя языков программирования

программист Язык программирования

Во многих статьях о сравнении языков программирования всегда нравится сравнивать производительность, синтаксис и модели ввода-вывода различных языков программирования. В этой статье будут сравниваться разные языки программирования и технологии с точки зрения умственной нагрузки. Из-за ограниченного языка программирования, в котором я хорош, если что-то не так, пожалуйста, поправьте меня.

память вне пределов

Например: язык 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

Резюме

图片描述