Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Сравнение языков программирования 1 страница




Существующие инструменты

Пример ГП

Давайте изменим традиционные приоритеты в создании программ: вместо представления о нашей задаче как о создании инструкций «Что делать?» для компьютера сконцентрируемся на объяснении другим людям описаний нашего видения того, что под управлением программы должен делать компьютер.

— Дональд Кнут, http://community.livejournal.com/ru_perl/249441.html

  • WEB — система программирования для языка Паскаль
  • CWEB — версия WEB, разработанная для документирования С, C++ и Java
  • FWEB — система программирования для языка Фортран
  • pyWeb - система, позволяющая создавать программы на любом языке программирования и описывать их с помощью произвольного языка разметки, например, HTML, reStructured Text или LaTeX
  • Rambutan — система программирования для языка Java
  • Noweb
  • FunnelWeb
  • CLiP, cnoweb
  Эту статью следует викифицировать. Пожалуйста, оформите её согласно правилам оформления статей.  
[скрыть]Условные обозначения
+ Указанная возможность присутствует
- Указанная возможность отсутствует
+/- Возможность поддерживается не полностью
-/+ Возможность поддерживается очень ограниченно
? Нет данных
x Постановка вопроса не применима к языку
[скрыть]Сравнения языков программирования
Общее сравнение
Основной синтаксис
Основные инструкции
Массивы
Ассоциативные массивы
Операции со строками
Строковые функции
List comprehension
Объектно-ориентированное программирование
Объектно-ориентированные конструкторы
Доступ к базам данных
СУБД баз данных  
Оценка стратегии  
Список программ «hello world»  
   
Влияние ALGOL 58 на ALGOL 60  
ALGOL 60: Сравнения с другими языками  
Сравнение ALGOL 68 и C++  
ALGOL 68: Сравнения с другими языками  
Совместимость C и C++  
Сравнение Pascal и Borland Delphi  
Сравнение Object Pascal и C  
Сравнение Pascal и C  
Сравнение Java и C++  
Сравнение C# и Java  
Сравнение C# и Visual Basic.NET  
Шаблон: Просмотр • Обсуждение • Править  

В приведенной ниже таблице отмечено наличие или отсутствие тех или иных возможностей в некоторых популярных сегодня языках программирования. Столбцы упорядочены по алфавиту. Если возможность в языке недоступна напрямую, но может быть эмулирована с помощью других средств, то в таблице отмечено, что её нет.

При заполнении таблицы учтены только фактические данные, при том, что наличие возможности не обязательно является преимуществом языка, а отсутствие — недостатком.

 

Содержание [убрать]
  • 1 Парадигмы
  • 2 Типизация
  • 3 Компилятор/интерпретатор
  • 4 Управление памятью
  • 5 Управление потоком вычислений
  • 6 Типы и структуры данных
  • 7 Объектно-ориентированные возможности
  • 8 Функциональные возможности
  • 9 Разное
  • 10 Стандартизация
  • 11 Примечания
  • 12 Терминология
    • 12.1 Парадигмы
      • 12.1.1 Императивная
      • 12.1.2 Объектно-ориентированная
      • 12.1.3 Рефлексивная
      • 12.1.4 Функциональная
      • 12.1.5 Обобщенное программирование
      • 12.1.6 Логическая
      • 12.1.7 Доказательная
      • 12.1.8 Декларативная
      • 12.1.9 Распределенная
    • 12.2 Типизация
      • 12.2.1 Статическая типизация
      • 12.2.2 Динамическая типизация
      • 12.2.3 Явная типизация
      • 12.2.4 Неявная типизация
      • 12.2.5 Явное приведение типов
      • 12.2.6 Неявное приведение типов без потери данных
      • 12.2.7 Неявное приведение типов с потерей данных
      • 12.2.8 Неявное приведение типов в неоднозначных ситуациях
      • 12.2.9 Алиасы типов
      • 12.2.10 Вывод типов переменных из инициализатора
      • 12.2.11 Вывод типов переменных из использования
      • 12.2.12 Вывод типов-аргументов при вызове метода
      • 12.2.13 Вывод сигнатуры для локальных функций
      • 12.2.14 Параметрический полиморфизм
      • 12.2.15 Параметрический полиморфизм с ковариантностью
      • 12.2.16 Параметрический полиморфизм высших порядков
      • 12.2.17 Информация о типах в runtime
      • 12.2.18 Информация о типах-параметрах в runtime
    • 12.3 Компилятор/интерпретатор
      • 12.3.1 Open-source компилятор (интерпретатор)
      • 12.3.2 Возможность компиляции
      • 12.3.3 Bootstrapping
      • 12.3.4 Многопоточная компиляция
      • 12.3.5 Интерпретатор командной строки
      • 12.3.6 Условная компиляция
    • 12.4 Управление памятью
      • 12.4.1 Объекты на стеке
      • 12.4.2 Неуправляемые указатели
      • 12.4.3 Ручное управление памятью
      • 12.4.4 Сборка мусора
    • 12.5 Управление потоком вычислений
      • 12.5.1 Инструкция goto
      • 12.5.2 Инструкция break без метки
      • 12.5.3 Инструкция break с меткой
      • 12.5.4 Поддержка try/catch
      • 12.5.5 Блок finally
      • 12.5.6 Блок else (исключения)
      • 12.5.7 Перезапуски
      • 12.5.8 Легковесные процессы
    • 12.6 Типы и структуры данных
      • 12.6.1 Многомерные массивы
      • 12.6.2 Динамические массивы
      • 12.6.3 Ассоциативные массивы
      • 12.6.4 Цикл foreach
      • 12.6.5 List comprehensions
      • 12.6.6 Кортежи
      • 12.6.7 Целые числа произвольной длины
      • 12.6.8 Целые числа с контролем границ
    • 12.7 Объектно-ориентированные возможности
      • 12.7.1 Интерфейсы
      • 12.7.2 Множественное наследование
      • 12.7.3 Мультиметоды
      • 12.7.4 Переименование членов при наследовании
      • 12.7.5 Решение конфликта имен при множественном наследовании
    • 12.8 Функциональные возможности
      • 12.8.1 First class functions
      • 12.8.2 Лексические замыкания
      • 12.8.3 Частичное применение
    • 12.9 Разное
      • 12.9.1 Макросы
      • 12.9.2 Шаблоны/Generics
      • 12.9.3 Поддержка Unicode в идентификаторах
      • 12.9.4 Перегрузка функций
      • 12.9.5 Динамические переменные
      • 12.9.6 Именованные параметры
      • 12.9.7 Значения параметров по умолчанию
      • 12.9.8 Локальные функции
      • 12.9.9 Сопоставление с образцом
      • 12.9.10 Контрактное программирование
  • 13 Ссылки

[править] Парадигмы

Возможность Язык
Ada C C++ C# D Eiffel Erlang Prolog F# Groovy Java JavaScript Haskell Common Lisp Nemerle Perl PHP Python Ruby Scala Smalltalk Tcl VB.NET Delphi OCaml PureBasic
Императивная + + + + + + - - + + + + + [1] + + + + + + + + + + + + +
Объектно-ориентированная + - + + + + - [2] - [2] + + + + [3] - [4] + + + + + + + + + + + + -/+
Функциональная - - +/- +/- +/- +/- + + + + - +/- + + + + +/- +/- + + + + +/- -/+ + +/-
Рефлексивная - - - [5] -/+ - ? + + -/+ -/+ -/+ + - + -/+ +/- + + + -/+ + + -/+ -/+ - ?
Обобщенное программирование + - + + + +/- + + + + + + + + + + + + + + + - + + + -/+
Логическая - - - - - - - + - - - - +/- [6] +/- [7] +/- - - - - ? +/- - - - - ?
Декларативная - - - -/+[8] -/+ ? + + + + - +/- + +[9] + -/+ [10] + + + + +/- - +/- - + +/-
Распределенная + [11] +/- [12] +/- [12] -/+ [13] - + + + - -/+ + - + [14] +/- - - - -/+ -/+ ? +/- ? - - - -
  Ada C C++ C# D Eiffel Erlang Prolog F# Groovy Java JavaScript Haskell Common Lisp Nemerle Perl PHP Python Ruby Scala Smalltalk Tcl VB.NET Delphi OCaml PureBasic

[править] Типизация

Возможность Язык
Ada C C++ C# D Eiffel Erlang F# Groovy Java JavaScript Haskell Common Lisp Nemerle Perl PHP Python Ruby Scala Smalltalk Tcl VB.NET Delphi OCaml PureBasic
Статическая типизация + + + + + + - + + + - + +/-[15] + +/- [16] - - - + +/- [17] - + + + +
Динамическая типизация - - - -/+ [18] - - + -/+[19] + - + - [20] + - + + + + - + + + [21] -/+ [22] - -
Явная типизация + + + + + + -/+ [23] + + + - + +/-[15] + -/+ [24] +/- +/- [25] - + +/- [26] - + + + +
Неявная типизация - - -/+ -/+[27] + - + + + - + + + + + + + + + + + + - + +
Неявное приведение типов без потери данных -/+ [28] + + + + + - - + - + - + + + + + + ? + + + + - +
Неявное приведение типов с потерей данных - + + - + - - - - - ? - - ? + [29] + - - ? + + + + - -/+
Неявное приведение типов в неоднозначных ситуациях - + + + + - - - - - + - - + + [30] + - - ? - + + - - -/+
Алиасы типов + + + + + - x + - - x + +[31] + x x x x ? ? x - + + -/+
Вывод типов переменных из инициализатора - - +/- [32] + + - x + - - x + +/- [33] + x x x x + ? x + - + +
Вывод типов переменных из использования - - +/- [32] - - - x + - - x + +/- [33] + x x x x ? ? x ? - + +/-
Вывод типов-аргументов при вызове метода - - + + + + x + + + x + +/- [33] + x x x x + ? x + - + ?
Вывод сигнатуры для локальных функций - - - - ? - x + - - x + +/-[33] + x ? x x - ? x ? - + ?
Параметрический полиморфизм - x - + + + x + + + - + + + x + x x + ? x + - + ?
Параметрический полиморфизм с ковариантностью - x - +/- [34] ? + x + - - - x + +/- ? ? x x + ? x - - ? ?
Параметрический полиморфизм высших порядков - x - - - ? x - - - - + + - x ? x x + ? x - - ? ?
Информация о типах в runtime -/+ [35] - -/+ [36] + + + + + + + -/+ - + + + + + + + + + + + - -
Информация о типах-параметрах в runtime - - -/+ + ? ? - + - - -/+ - + + + [37] + + ? - ? - + + - -
  Ada C C++ C# D Eiffel Erlang F# Groovy Java JavaScript Haskell Common Lisp Nemerle Perl PHP Python Ruby Scala Smalltalk Tcl VB.NET Delphi OCaml PureBasic

[править] Компилятор/интерпретатор

Возможность Язык
Ada C C++ C# D Eiffel Erlang F# Groovy Java JavaScript Haskell Common Lisp Nemerle Perl PHP Python Ruby Scala Smalltalk Tcl VB.NET Delphi Ocaml PureBasic
Open-source компилятор (интерпретатор) + + + + + + + + + + + + + + + + + + + + [38] + + + [39] + -
Возможность компиляции + + + + + + -/+ [40] + + + + + + + + + [41] + + + + [42] - + + + +
Bootstrapping + + + + - ? + + + + [43] + [44] + +[45] + ? x + [46] + + + [47] x ? + + +
Многопоточная компиляция + + + - + ? + + + + ? + + - ? ? x x - - x + ? + +
Интерпретатор командной строки +/- [48] -/+ [49] +/- [49] - [50] - ? + + + - + [51] + + + + + + + + + [52] + + - + -
Условная компиляция +/- [53] + + + + ? + + ? -/+ [54] -/+ [55] + +[56] + + + x x ? + x + + x +
  Ada C C++ C# D Eiffel Erlang F# Groovy Java JavaScript Haskell Common Lisp Nemerle Perl PHP Python Ruby Scala Smalltalk Tcl VB.NET Delphi OCaml PureBasic

[править] Управление памятью

Возможность Язык
Ada C C++ C# D Eiffel Erlang F# Groovy Java JavaScript Haskell Common Lisp Nemerle Perl PHP Python Ruby Scala Smalltalk Tcl VB.NET Delphi OCaml PureBasic
Создание объектов на стеке + + + + + -/+ [57] ? ? - - - +/- [58] +/- [59] + - - - - ? ? - - -/+ [60] ? +
Неуправляемые указатели + + + + + - - - - -[61] - -[61] -[61] - - - - [62] - - + [63] - - + - +
Ручное управление памятью + + + +[64] + - - - - -[61] - -[61] -[61] - - - -[61] - - + [65] - - + - +
Сборка мусора -/+ [66] - [67] -/+ [68] + + + + + + + + + + + + + + + + + + + - [69] + -

[править] Управление потоком вычислений

Возможность Язык
Ada C C++ C# D Eiffel Erlang F# Groovy Java JavaScript Haskell Common Lisp Nemerle Perl PHP Python Ruby Scala Smalltalk Tcl VB.NET Delphi OCaml PureBasic
Инструкция goto + + + + + - - x - - [70] - x +[71] - + +/- [72] - -/+ [73] - -/+ [74] - + + - +
Инструкции break без метки + + + + + - - x + + + x +[75] + + + + + - ? + + + +/- [76] +
Инструкция break с меткой + - - - + - - x + + + x +[77] + + +/- [78] - + - ? - + - x +/-[79]
Поддержка try/catch + - + + + + [80] + + + + + + + [81] + + [82] + + + + + + + + + +[83]
Блок finally -/+ [84] - - + + - - + + + + [85] + + [86] + - - + + + + + + + - [87] +[83]
Блок else (исключения) - - - + - - + - + + [88] ? + + [89] - + [90] - + + - ? + + + + +[83]
Перезапуски ? - ? - ? ? - - ? ? ? ? + - - [91] ? ? ? ? ? - - ? ? ?
Ленивые вычисления ? - -/+ -/+ [92] + - - +/-[93] - - - + - [94] - [95] - - + -/+ [96] ? - - -/+ [97] - +[98] +
Continuations ? -/+[99] ? - ? ? - - ? ? ? + -[100] - ? ? - + ? + - - ? +/- [101] ?
Легковесные процессы (Сoroutines) - - - - - + + - ? +/- [102] - + +/-[103] - + [104] ? +/- [105] ? ? + + - - +/-[106] -

[править] Типы и структуры данных




Поделиться с друзьями:


Дата добавления: 2015-07-13; Просмотров: 976; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.017 сек.