Многие статьи по сравнению языков программирования всегда любят сравнивать производительность, синтаксис и модель ввода-вывода различных языков программирования. В этой статье мы сравним различные языки программирования и технологии с точки зрения умственной нагрузки. Поскольку я хорошо разбираюсь в ограниченном языке программирования, если что-то не так, добро пожаловать, чтобы исправить.
Недостаточно памяти
Например: Язык C, C + + (C с классом) C/C++ Памятью можно управлять напрямую, но программирование должно сталкиваться с проблемой переполнения памяти. В случае переполнения памяти программа напрямую дамп ядра , разработчикам необходимо использовать gdb Инструменты для анализа причин ошибок памяти. Если перерасход памяти носит спорадический характер, например, из-за проблем с синхронизацией данных, это произойдет один раз в сотни миллионов раз, что очень трудно решить. Для этого даже требуются лучшие эксперты, чтобы найти причину проблемы.
Умственная нагрузка: 10
современный C++ При условии ВСЕ ЕЩЕ Библиотека содержит большое количество контейнеров C++ Поддерживает ссылочный синтаксис, больше не нуждается в указателе прямой операции, снижает риск ошибок чтения и записи в памяти. Используйте современный C++ Стиль программирования может избежать этой проблемы. Но из-за C++ Указатель не полностью удален с уровня грамматики, что недостаточно тщательно.
макрос
C/C++ Программа часто использует предопределенные макросы для реализации некоторой логики, что приводит к плохой читаемости. В некоторых случаях использование нескольких макросов будет вложенным, что становится чрезвычайно трудным для чтения после расширения. Психическое бремя: 6
Поэтому в C/C++ Рекомендуется использовать перечисление или статическую встроенную функцию вместо макроса.
управление памятью
Например: язык C, C++
C/C++ Язык требует ручного управления памятью, malloc/новый Запрошенная память должна соответствовать освободить/удалить Использовать в парах. Если вы забудете освободить запрошенную память, произойдет утечка памяти. Умственная нагрузка: 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 + Swool ), длительный жизненный цикл в серверных программах. Операции с глобальными/статическими переменными могут привести к утечкам памяти или ресурсов. Обратите внимание на программирование. Психическое бремя: 3
и PHP(php-fpm) Он недолговечен, и вся память и дескрипторы будут освобождены сразу после окончания запроса, поэтому не нужно беспокоиться об утечке. Умственная нагрузка: 0
Время ожидания ввода-вывода
Синхронный блок Ввода-вывода Язык программирования и технология модели, при возникновении определенного медленного ВВОДА-вывода Приводит к зависанию всего процесса или потока. В крайних случаях все процессы/потоки зависают, в результате чего онлайн-службы становятся недоступными. Разработчикам необходимо обратить особое внимание на настройки ввода-вывода Тайм-аута операции, чтобы избежать блокировки процессов/потоков, вызванной медленными запросами. Психическое бремя: 2
И асинхронный ВВОД Из Go/Node.js/Swool Не беспокойтесь об этом. Умственная нагрузка: 0