Почему так много языков программирования?

Компьютерное программирование

Существует более 250 языков программирования. Некоторые из них широко используются в деловом мире, такие как C ++, Java, JavaScript, Ruby и Python. Другие в основном академические, такие как Лисп. Тем не менее, другие неясны и эзотеричны. Вы можете спросить: «Почему так много языков программирования?»

Это очень похоже на вопрос: «Почему существует так много областей математики? У нас есть алгебра, зачем нам геометрия, исчисление и механика жидкости?» Каждый язык программирования нацелен на решение конкретной проблемы. Несколько языков могут решить одну и ту же проблему, но каждый подойдет к ней по-своему.

Вот некоторые из основных отличий в языках программирования.

Разборчивость и ремонтопригодность

Некоторые языки легче читать человеку, что облегчает совместную работу одного программиста над кодом другого программиста. Например, Python имеет репутацию легко читаемого. Он обеспечивает строгий отступ строк для определения своих блоков кода, что позволяет легко взглянуть на программу и выяснить ее структуру. Другие языки также допускают отступы, но как стилистический выбор, а не как требование.

В отличие от этого, Perl — это язык, который позволяет программисту писать одну и ту же программу разными способами, но цель программы может быть не сразу понятна другому читателю. Такая программа может быть удобна для написания, но сложна для понимания и редактирования кем-то еще.

Спектакль

Некоторые языки интерпретируются, а некоторые компилируются. Скомпилированная программа должна быть обработана препроцессором, компилятором и компоновщиком, прежде чем она может быть выполнена компьютером. Это специализированное промежуточное программное обеспечение выполняет лексический анализ, переводя программу на машинный язык. Он также может оптимизировать получающиеся инструкции, ища умные способы заставить программу работать быстрее.

Скомпилированные программы обычно работают лучше, чем интерпретируемые программы. Например, C, C ++ и Objective-C — это языки, которые компилируются в очень быстрый машинный код. Видеоигры и системное программное обеспечение часто пишутся на этих языках, чтобы выжать из процессора все биты производительности.

С другой стороны, программы с интерпретируемым языком запускаются программным обеспечением, называемым интерпретатором, которое выполняет инструкции программы без предварительной компиляции их в машинный код. Хотя интерпретатор иногда анализирует программу на промежуточном языке, что приводит к некоторой оптимизации, производительность никогда не бывает такой же быстрой, как скомпилированный машинный код.

Одним из основных преимуществ интерпретируемых языков является их потенциал для интерактивного развития. Поскольку вся программа не нуждается в компиляции, прежде чем она может быть выполнена, код может выполняться в интерактивном режиме. Вы знакомы с этим, если вы когда-либо использовали командную строку вашей операционной системы: вы вводите команду и видите результаты. Такой интерфейс называется REPL или «read-eval-print-loop». REPL позволяет вам выполнять команды (или блоки команд) индивидуально и просматривать результаты. Lisp, Perl, Python, NodeJS, Ruby и JavaScript являются примерами интерпретируемых языков, которые можно запускать в REPL.

Интерактивные командные интерфейсы, такие как командная строка Windows и bash, также считаются интерпретируемыми языками. Программы на этих «языках» называются пакетными файлами или сценариями оболочки.

Особые случаи использования

Часто языки особенно хороши при написании определенных типов программ. Например, NodeJS предназначен для написания однопоточных приложений для Интернета. Его неблокирующий файловый ввод / вывод позволяет программам продолжать работать («не блокироваться»), пока они ожидают передачи необходимых данных.

Другим примером является язык программирования R, который специализируется на статистическом анализе. Программы, написанные на R, используют встроенные аналитические тесты и модели, а также инструменты для эффективной обработки огромных объемов данных.

Простота прототипирования

Некоторые языки допускают быстрое создание прототипов: программист может «начать писать» и строить компонент на компоненте, пока программа не будет полностью сформирована.

Например, сайт Reddit изначально был написан на Лиспе. После запуска Reddit весь сайт был переписан на Python по многим причинам, как техническим, так и логистическим. Хотя рефакторинг всего кода был серьезной задачей, владельцы сайта не выразили сожаления. В своем блоге 2005 года они отметили, что Lisp позволяет им создавать что-то, не зная точно, чем это станет.

Доступные библиотеки

Обычно, когда вы начинаете новый программный проект, вы не хотите заново изобретать колесо. То есть вы не хотите писать функции для общих задач, таких как вычисление квадратного корня или поиск первого вхождения символа в строке. По этой причине почти каждый язык программирования предоставляет набор стандартных библиотек общих функций. Программисты могут предпочесть язык из-за библиотек, которые он предоставляет.

Например, стандартные библиотеки C предоставляют высокопроизводительные функции для многих низкоуровневых системных операций. Perl предоставляет много надежных библиотек, а также CPAN-репозиторий модулей для загрузки и использования в вашей программе. Python предоставляет широкий спектр встроенных функций и модулей практически для всего под солнцем. Clojure, Lisp-подобный язык, который работает на JVM, извлекает выгоду из своей способности запускать код из обширных существующих библиотек объектов и методов Java.

Безопасность

Не все языки пригодны для написания безопасного кода. Например, язык программирования C славится наличием функций (или их отсутствием), которые могут привести к разрушительным уязвимостям, таким как разыменование нулевого указателя. Другие языки пытаются решить эти проблемы с более строгими правилами.

Например, некоторые языки накладывают ограничения на то, какие операции могут выполняться с различными типами данных. Самые строгие из этих языков иногда называют «строго типизированными», и они могут обеспечить спокойствие программистам, которые отдают приоритет безопасности и стабильности при разработке программного обеспечения. Примеры строго типизированных языков: Rust, Nim, Ocaml и Haskell.

Языки также могут накладывать ограничения на «изменчивость», способность объекта данных изменять состояние. Вместо объектов, значения которых перезаписаны, эти языки предпочитают «неизменяемые» объекты: значения в памяти, которые нельзя изменить без явного исключения. Неизменяемые объекты вызвали интерес, так как многоядерные процессоры получили широкое распространение из-за их тенденции продвигать «безопасность потоков». В поточно-ориентированной программе более одного процессора могут работать с одним набором данных, что значительно снижает риск ошибок. Языки, которые устанавливают приоритеты неизменяемых объектов, включают Rust и Clojure.

Поддержка сообщества

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

Выразительность

При написании программы мысли и способности программиста «говорить» через этот язык. В результате программисты предпочитают языки, на которых им удобно выражать себя. Однако трудно определить, что делает язык и программист хорошо работающими вместе. В конечном счете, единственный способ узнать, на каком языке вам удобно, — это использовать разные языки для разных проектов и сравнить их для себя.

Ссылка на основную публикацию
Adblock
detector