Введение
Языки программирования используются для управления поведением машины (часто компьютера). Как и естественные языки, языки программирования подчиняются правилам синтаксиса и семантики. Существуют тысячи языков программирования, и каждый год создаются новые. Лишь немногие языки становятся достаточно популярными, чтобы их использовали больше нескольких человек, но профессиональные программисты могут использовать десятки языков за свою карьеру. Большинство языков программирования не стандартизированы международным (или национальным) стандартом, даже широко используемые, такие как Perl или Standard ML (несмотря на название). Примечательные стандартизированные языки программирования включают ALGOL, C, C++, JavaScript (под названием ECMAScript), Smalltalk, Prolog, Common Lisp, Scheme (стандарт IEEE), ISLISP, Ada, Fortran, COBOL, SQL и XQuery.
Programming languages are used for controlling the behavior of a machine (often a computer). Like natural languages, programming languages follow rules for syntax and semantics. There are thousands of programming languages and new ones are created every year. Few languages ever become sufficiently popular that they are used by more than a few people, but professional programmers may use dozens of languages in a career. Most programming languages are not standardized by an international (or national) standard, even widely used ones, such as Perl or Standard ML (despite the name). Notable standardized programming languages include ALGOL, C, C++, JavaScript (under the name ECMAScript), Smalltalk, Prolog, Common Lisp, Scheme (IEEE standard), ISLISP, Ada, Fortran, COBOL, SQL, and XQuery. TOC
Общее сравнение
В следующей таблице сопоставлена общая и техническая информация для выбора наиболее часто используемых языков программирования. Дополнительная информация приведена в статьях, посвященных отдельным языкам. Язык Исходная цель Императивный Объектно-ориентированный Функциональный Процедурный Общий Рефлексивный Другие парадигмы Стандартизирован? 1C:Enterprise язык программирования Приложение, RAD, бизнес, общий, веб, мобильный Объектно-ориентированный, прототипно-ориентированное программирование ActionScript Приложение, клиентская сторона, веб Прототипно-ориентированный 1999 2003, ActionScript 1.0 с ES3, ActionScript 2.0 с ES3 и частичный черновик ES4, ActionScript 3.0 с черновиком ES4, ActionScript 3.0 с E4X Ada Приложение, встроенные системы, системы реального времени, системное программирование Конкурентное, распределенное 1983, 2005, 2012, ANSI, ISO, ГОСТ 27831-88 Aldor Высокоспециализированный, символьные вычисления ALGOL 58 Приложение ALGOL 60 Приложение 1960, IFIP WG 2.1, ISO ALGOL 68 Приложение Конкурентное 1968, IFIP WG 2.1, ГОСТ 27974-88, Ateji PX Параллельные приложения pi-исчисление APL Приложение, обработка данных Ориентированный на массивы, неявный 1989, ISO Assembly language Общий Любой, синтаксис обычно сильно специфичен и связан с целевым процессором 1985 IEEE 694-1985 AutoHotkey Автоматизация GUI (макросы), высокоспециализированный AutoIt Автоматизация GUI (макросы), высокоспециализированный Ballerina Интеграция, гибкая разработка, серверная сторона, общий Конкурентное, транзакционное, статически и строго типизированное, диаграммное–визуальное Стандарт через спецификацию языка Ballerina Bash Shell, скриптинг POSIX.2 BASIC Приложение, образование 1983, ANSI, ISO, ECMA BeanShell Приложение, скриптинг В разработке, JCP BLISS Системное программирование BlitzMax Приложение, игры Boo Приложение, скриптинг для игр C Приложение, системное программирование, общего назначения, низкоуровневые операции 1989, ANSI C89, ISO/IEC C90, ISO/IEC C95, ISO/IEC C99, ISO/IEC C11, ISO/IEC C17, ISO/IEC C2x C++ Приложение, системное программирование 1998, ISO/IEC C++98, ISO/IEC C++03, ISO/IEC C++11, ISO/IEC C++14, ISO/IEC C++17, ISO/IEC C++20, ISO/IEC C++23 C# Приложение, RAD, бизнес, клиентская сторона, общий, серверная сторона, веб, программирование игр Структурное, конкурентное 2000, ECMA, ISO Clarion Общий, бизнес, веб Clean Общий Clojure Общий Конкурентное CLU Общий COBOL Приложение, бизнес 1968 ANSI X3.23, 1974, 1985; ISO/IEC 1989:1985, 2002, 2014 Cobra Приложение, бизнес, общий, веб ColdFusion (CFML) Веб Common Lisp Общий Расширяемый синтаксис, ориентированный на массивы, синтаксические макросы, множественная диспетчеризация, конкурентное 1994, ANSI COMAL 80 Образование Crystal Общего назначения Конкурентное Curry Приложение Ленивые вычисления, недетерминированность Стандарт через отчет о языке Curry Cython Приложение, общий, численные вычисления Аспектно-ориентированный D Приложение, системное программирование Генеративное, конкурентное Dart Приложение, веб, серверная сторона, мобильные устройства, IoT Структурное Стандарт ECMA 408 Delphi, Object Pascal Общего назначения ? Dylan Приложение Eiffel Общий, приложение, бизнес, клиентская сторона, серверная сторона, веб (EWF) Erlang G Распределенный SCOOP, безопасный от ошибок Void 2005, ECMA, ISO ELAN Образование Структурное, поэтапное уточнение Elixir Приложение, распределенное Конкурентное, распределенное Erlang Приложение, распределенное Конкурентное, распределенное Euphoria Приложение Factor Общий Ориентированный на стек FP Приложение Forth Общий Ориентированный на стек 1994, ANSI Fortran Приложение, численные вычисления Основанный на массивах, векторизованный, конкурентный, встроенный/распределенный параллелизм 1966, ANSI 66, ANSI 77, MIL STD 1753, ISO 90, ISO 95, ISO 2003, ISO/IEC 1539-1:2010 (2008), ISO/IEC JTC1/SC22/WG5 N2145 (2018) FreeBASIC Приложение, численные вычисления Gambas Приложение Game Maker Language Приложение, программирование игр GLBasic Приложение, игры Простое объектно-ориентированное Go Приложение, веб, серверная сторона Конкурентное Стандарт через спецификацию языка Go Gosu Приложение, общий, скриптинг, веб GraphTalk Приложение Логический Groovy Приложение, общий, скриптинг, веб Метапрограммирование, JCP Harbour Приложение, бизнес, обработка данных, общий, веб Декларативное Haskell Приложение Ленивые вычисления 2010, Haskell 2010 Haxe Приложение, общий, веб HyperTalk Приложение, RAD, общий Слабо типизированный Io Приложение, скриптинг, управляемое хостом IPL Общий ISLISP Общий 1997, 2007, ISO J Приложение, обработка данных Ориентированный на массивы, функциональный уровень, неявный, конкурентный JADE Приложение, распределенное Java Приложение, бизнес, клиентская сторона, общий, мобильная разработка, серверная сторона, веб Конкурентное Стандарт через спецификацию языка Java JavaScript Клиентская сторона, серверная сторона, веб Прототипно-ориентированный 1997 2022, ECMA 262 Joy Исследования Ориентированный на стек jq "awk для JSON" Неявный, отслеживание, потоковая передача, PEG Julia Общий, технические вычисления Множественная диспетчеризация, мета, скалярно- и массивно-ориентированный, параллельный, конкурентный, распределенный ("облачный") K Обработка данных, бизнес Ориентированный на массивы, неявный Kotlin Приложение, мобильная разработка, серверная сторона, клиентская сторона, веб Стандарт через спецификацию языка Kotlin Ksh Shell, скриптинг Несколько вариантов, настраиваемые модули, динамическая загрузка модулей POSIX.2 LabVIEW (G) Приложение, промышленная автоматизация приборов Поток данных, визуальный Lisp Общий LiveCode Приложение, RAD, общий Слабо типизированный Logtalk Искусственный интеллект, приложение Логический Linden Scripting Language (LSL) Скриптинг и анимация контента виртуальных миров Скрипты существуют в объектах мира Справочник – реализация LSL Second Life Lua Приложение, встроенный скриптинг Аспектно-ориентированный, прототипно-ориентированный Maple Символьные вычисления, численные вычисления Распределенный Mathematica Символьный язык Логический, распределенный MATLAB Высокоспециализированный, численные вычисления Modula 2 Приложение, системное программирование 1996, ISO Modula 3 Приложение MUMPS (M) Общий, приложение, базы данных Thru Indirection and Xecute Конкурентное, многопользовательское, NoSQL, обработка транзакций 1977 ANSI, 1995, ISO 2020 Nim Приложение, общий, веб, скриптинг, системное программирование Множественная диспетчеризация, конкурентное, мета Oberon Приложение, системное программирование Object Pascal Приложение, общий, мобильные приложения, веб Структурное Objective C Приложение, общий Конкурентное OCaml Приложение, общий Occam Общий Конкурентное, ориентированное на процессы Opa Веб-приложения Распределенное OpenLisp Общий, встроенный Lisp Engine ISLISP Oxygene Приложение Oz Mozart Приложение, распределение, образование Конкурентное, логическое Pascal Приложение, образование 1983, ISO Perl Приложение, скриптинг, обработка текста, веб PHP Серверная сторона, веб-приложение, веб Стандарт через спецификацию языка и запросы на комментарии (RFC) PL/I Приложение 1969, ECMA 50 (1976) Plus Приложение, разработка систем PostS...
Выразительность
Соотношение выражений языка Соотношение строк C 1 1 C++ 2.5 1 Fortran 2 0.8 Java 2.5 1.5 Perl 6 6 Smalltalk 6 6.25 Python 6 6.5
В литературе о языках программирования содержится множество неофициальных утверждений об их относительной выразительности, но не существует единой системы для формализации подобных утверждений и получения на их основе значимых выводов. В этой таблице представлены два показателя выразительности, полученные из разных источников. Дополнительный показатель выразительности, измеренный в байтах GZip, можно найти на Computer Language Benchmarks Game.
Сравнительные показатели
Бенчмарки разработаны для имитации определенного типа рабочей нагрузки на компонент или систему. Компьютерные программы, использованные для получения части данных бенчмарков в этом разделе, могли быть не полностью оптимизированы, и достоверность этих данных вызывает сомнения. Наиболее точные бенчмарки – это те, которые настроены под вашу конкретную ситуацию. Данные бенчмарков, полученные другими, могут быть полезны, но их правильная интерпретация сопряжена с множеством трудностей. Сайт Computer Language Benchmarks Game предостерегает от поспешных обобщений на основе данных бенчмарков, но содержит большое количество микро-бенчмарков – фрагментов кода, предоставленных пользователями, с интерфейсом для создания различных диаграмм и таблиц, сравнивающих конкретные языки программирования и типы тестов.