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

Понятие и характеристика языков программирования. Две группы языков программирования: языки низкого и высокого уровня. Способы реализации языков программирования. Стандартизация и классификация языков программирования. Типы, виды и структура данных.

Рубрика Программирование, компьютеры и кибернетика
Вид реферат
Язык русский
Дата добавления 25.03.2010
Размер файла 113,9 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Кобол

В 1959 - 1960 годах был разработан язык Кобол (англ. COBOL от COmmom Business Oriented Language - общий язык, ориентированный на бизнес).

Это язык программирования третьего поколения, предназначенный, в первую очередь, для разработки бизнес приложений. Также Кобол предназначался для решения экономических задач, обработки данных для банков, страховых компаний и других учреждений подобного рода. Разработчиком первого единого стандарта Кобола являлась Грейс Хоппер. Кобол обычно критикуется за многословность и громоздкость, поскольку одной из целей создателей языка было максимально приблизить конструкции к английскому языку. В то же время, Кобол имел прекрасные для своего времени средства для работы со структурами данных и файлами, что обеспечило ему долгую жизнь в бизнес приложениях, по крайней мере, в США.

Форт

В конце 60-х - начале 70-х годов появился язык Форт (англ. FOURTH - четвёртый). Этот язык стал применяться в задачах управления различными системами после того, как его автор Чарльз Мур написал на нём программу, предназначенную для управления радиотелескопом Аризонской обсерватории. Ряд свойств, а именно интерактивность, гибкость и простота разработки делают Форт весьма привлекательным и эффективным языком в прикладных исследованиях и при создании инструментальных средств. Очевидными областями применения этого языка являются встраиваемые системы управления. Также находит применение при программировании компьютеров под управлением различных операционных систем.

Паскаль

Это высокоуровневый язык программирования общего назначения. Один из наиболее известных языков программирования, широко применяется в промышленном программировании, обучении программированию в высшей школе, является базой для большого числа других языков. Был создан Никлаусом Виртом в 1968/9 годах (опубликован в 1970-м) после его участия в работе комитета разработки стандарта языка Алгол-68. Паскаль был создан как язык для обучения процедурному программированию. Название языку дано в честь выдающегося французского математика, физика, литератора и философа XVII века, изобретателя первой в мире арифметической машины Блеза Паскаля. Компилятор Паскаля был написан на самом Паскале, используя «метод раскрутки», когда создается ядро языка, с постепенным наращиванием новых возможностей.

Особенностями языка являются строгая типизация и наличие средств структурного (процедурного) программирования. В Паскале сведены к минимуму возможные синтаксические неоднозначности, а сам синтаксис автор постарался сделать интуитивно понятным даже при первом знакомстве с языком.

Тем не менее, первоначально язык имел ряд ограничений. Некоторые недостатки Паскаля были исправлены в ISO-стандарте 1982 года, в частности, в языке появились открытые массивы, давшие возможность использовать одни и те же процедуры для обработки одномерных массивов различных размеров.

Наиболее известной реализацией Паскаля, обеспечившей широкое распространение и развитие языка, является Turbo Pascal фирмы Borland, выросшей затем в объектный Паскаль для DOS (начиная с версии 5.5) и Windows и далее в Delphi, в которой использовались значительные расширения языка.

Ада

На основе языка Паскаль в конце 70-х годов был создан язык Ада, названный в честь одарённого математика Ады Лавлейс (Огасты Ады Байрон - дочери поэта Байрона). Именно она в 1843 году смогла объяснить миру возможности Аналитической машины Чарльза Бэббиджа. Язык Ада был разработан по заказу Министерства обороны США и первоначально предназначался для решения задач управления космическими полётами. Этот язык применяется в задачах управления бортовыми системами космических кораблей, системами обеспечения жизнедеятельности космонавтов в полёте, сложными техническими процессами.

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

Ада -- язык со строгой типизацией, в нём исключена работа с объектами, не имеющими типов, а автоматические преобразования типов сведены к абсолютному минимуму.

Java

Java -- объектно-ориентированный язык программирования, разрабатываемый компанией Sun Microsystems. Приложения Java обычно компилируются в специальный байт-код, поэтому они могут работать на любой виртуальной Java-машине (JVM) независимо от компьютерной архитектуры. Дата официального выпуска -- 23 мая 1995 года. Изначально язык назывался Oak («дуб») и разрабатывался Джеймсом Гослингом для программирования бытовых электронных устройств. Впоследствии он был переименован в Java и стал использоваться для написания клиентских приложений и серверного программного обеспечения. Назван в честь марки кофе Java, поэтому на официальной эмблеме языка изображена чашка с парящим кофе.

Достоинство выполнения программ в полной независимости байт-кода от операционной системы и оборудования позволяет выполнять Java-приложения на любом устройстве, для которого существует соответствующая виртуальная машина. Другой важной особенностью технологии Java является гибкая система безопасности благодаря тому, что исполнение программы полностью контролируется виртуальной машиной. Любые операции, которые превышают установленные полномочия программы (например, попытка несанкционированного доступа к данным или соединения с другим компьютером) вызывают немедленное прерывание.

К недостаткам концепции виртуальной машины относят то, что исполнение байт-кода виртуальной машиной может снижать производительность программ и алгоритмов, реализованных на языке Java. Данное утверждение было справедливо для первых версий виртуальной машины Java, однако в последнее время оно практически потеряло актуальность. Этому способствовал ряд усовершенствований: применение технологии трансляции байт-кода в машинный код непосредственно во время работы программы (JIT-технология) с возможностью сохранения версий класса в машинном коде, широкое использование платформенно-ориентированного (native-код) в стандартных библиотеках, аппаратные средства, обеспечивающие ускоренную обработку байт-кода (например, технология Jazelle, поддерживаемая некоторыми процессорами фирмы ARM).

Идеи, заложенные в концепцию и различные реализации среды виртуальной машины Java, вдохновили множество энтузиастов на расширение перечня языков, которые могли бы быть использованы для создания программ, исполняемых на виртуальной машине. Эти идеи нашли также выражение в спецификации общеязыковой инфраструктуры CLI, заложенной в основу платформы .NET компанией Microsoft.

Заключение

Изобретение языка программирования высшего уровня позволило нам общаться с машиной, понимать её (если конечно Вам знаком используемый язык), как понимает американец немного знакомый с русским языком древнюю азбуку Кириллицы. Проще говоря, мы в нашем развитии науки программирования пока что с ЭВМ на ВЫ. Поверьте мне это не сарказм вы только посмотрите как развилась наука программирования с того времени, как появились языки программирования, а ведь язык программирования высшего уровня, судя по всему ещё младенец. Но если мы обратим внимание на темпы роста и развития новейших технологий в области программирования, то можно предположить, что в ближайшем будущем, человеческие познания в этой сфере, помогут произвести на свет языки, умеющие принимать, обрабатывать и передавать информации в виде мысли, слова, звука или жеста. Так и хочется назвать это детище компьютеризированного будущего: «языки программирования "высочайшего" уровня». Возможно, концепция решения этого вопроса проста, а ближайшее будущее этого проекта уже не за горами, и в этот момент, где нибудь в Запорожье, Амстердаме, Токио или Иерусалиме, перед стареньким 133MHz горбится молодой, никем не признанный специалист и разрабатывает новейшую систему искусственного интеллекта, которая наконец-то позволит человеку, с помощью своих машинных языков, вести диалог с машиной на ТЫ.

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

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

"Единственный способ изучать новый язык программирования - писать на нём программы".

Брайэн Керниган

Библиографический список

1) “LEX - генератор программ лексического анализа” - Давидов Михаил Изгияевич; Антонов Вадим Геннадьевич. МОСКВА - 1985;

2) "BASIC Face-off", Justin J.Crom, - PC Tech Journal, September 1987, p.136. Перевод: Лопухов В.Н. (Интегратор Promt98);

3) “Язык программирования Си.” Б.В. Керниган, Д. Ритчи, А. Фьюэр. Русский перевод: Москва: Финансы и Статистика. 1985 г.;

4) “Основы автоматизации” ч.1, Золотарев В.В., 1978 г.;

5) “Языки программирования” кн.5, Ваулин А.С., 1993 г.;

6) “Языки программирования: разработка и реализация”, П. Терренс, 1979 г.;

7) “Введение в программирование на языке Ассемблер” ч.1, Касвандс Э.Г.;

8) “Языки программирования высокого уровня”, Хротко Г., 1982 г.;

9) “Языки программирования”, Малютин Э.А., Малютина Л.В., 1982 г.;

10) “Новые языки программирования и тенденции их развития”, Ушкова В., 1982 г.;

11) “Мир Лиспа” т.1, Хьювенен Э., Сеппенен Й., 1990 г.;

12) “Алгоритмические языки реального времени”, Янг С., 1985 г.

13) "Информатика и ИКТ. 10-11", Н. Д. Угринович, Москва, 2006 г.

14) www.informic.narod.ru

15) www.problems.ru

16) www.it-n.ru

17) www.allbest.ru

Приложение №1. "Создание инструментальных средств разработки"

Создание инструментальных средств разработки

Инструментарий

Что нового

Цели

Оптимизированные компиляторы

Обеспечивают высокую производительность процессорной обработки за счет распараллеливания, предсказания ветвлений и спекулятивных вычислений

Помогают реализовать потенциал 64-разрядных процессоров

JIT-компиляторы

В реальном времени компилируют код

Увеличивают производительность интерпретируемых языков, таких как Java

"Выборочные" компиляторы

Компилируют только часто используемый код

Увеличивают производительность, не тратя понапрасну дорогостоящие ресурсы памяти

Приложение №2. "Сравнение языков программирования"

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

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

Условные обозначения

+

Указанная возможность присутствует

-

Указанная возможность отсутствует

+/-

Возможность поддерживается не полностью

-/+

Возможность поддерживается очень ограниченно

?

Нет данных

x

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

Парадигмы

Возможность

Язык

Ada

C

C++

C#

D

Eiffel

Erlang

PrologProlog

F#

Groovy

Java

JavaScript

Haskell

Common Lisp

Nemerle

Perl

PHP

Python

Ruby

Scala

Smalltalk

Tcl

VB.NET

Delphi

OCaml

Императивный

+

+

+

+

+

+

-

-

+

+

+

+

+[1]

+

+

+

+

+

+

+

+

+

+

+

+

Объектно-ориентированный

+

-

+

+

+

+

-[2]

-[3]

+

+

+

+[4]

-[5]

+

+

+

+

+

+

+

+

+

+

+

+

Функциональный

-

-

-/+

+/-

+/-

+/-

+

+

+

+

-

+

+

+

+

+

+/-

+/-

+

+

+

+

+/-

-/+

+

Рефлексивный

-

-

-

-/+

-

?

+

+

-/+

-/+

-/+

+

-

+

-/+

+/-

+

+

+

-/+

+

+

-/+

-/+

-

Обобщенное программирование

+

-

+

+

+

+/-

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

-

+

+

+

Логический

-

-

-

-

-

-

-

+

-

-

-

-

+/-[6]

+/-[7]

+/-

-

-

-

-

?

+/-

-

-

-

-

Декларативный

-

-

-

-/+ [8]

-/+

?

+

+

+

+

-

-

+

+ [9]

+

-/+[10]

+

+

+

+

+/-

-

+/-

-

+

Распределенный

+[11]

+/-[12]

+/-[12]

-/+[13]

-

+

+

+

-

-/+

-

-

+[14]

+/-

-

-

-

-/+

-/+

?

+/-

?

-

-

-

Типизация

Возможность

Язык

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

Статическая типизация

+

+

+

+

+

+

-

+

+

+

-

+

+/- [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

-

+

+

Вывод типов переменных из инициализатора

-

-

-

+

+

-

x

+

-

-

x

+

+/-[32]

+

x

x

x

x

+

?

x

+

-

+

Вывод типов переменных из использования

-

-

-

-

-

-

x

+

-

-

x

+

+/-[32]

+

x

x

x

x

?

?

x

?

-

+

Вывод типов-аргументов при вызове метода

-

-

+

+

+

+

x

+

+

+

x

+

+/-[32]

+

x

x

x

x

+

?

x

+

-

+

Вывод сигнатуры для локальных функций

-

-

-

-

?

-

x

+

-

-

x

+

+/- [32]

+

x

?

x

x

-

?

x

?

-

+

Параметрический полиморфизм

-

x

-

+

+

+

x

+

+

+

-

+

+

+

x

+

x

x

+

?

x

+

-

+

Параметрический полиморфизм с ковариантностью

-

x

-

+/-[33]

?

+

x

+

-

-

-

x

+

+/-

?

?

x

x

+

?

x

-

-

?

Параметрический полиморфизм высших порядков

-

x

-

-

-

?

x

-

-

-

-

+

+

-

x

?

x

x

+

?

x

-

-

?

Информация о типах в runtime

-/+[34]

-

-/+[35]

+

+

+

+

+

+

+

+

-

+

+

+

+

+

+

+

+

+

+

+

-

Информация о типах-параметрах в runtime

-

-

-/+

+

?

?

-

+

-

-

+

-

+

+

?

+

+

?

-

?

-

+

+

-

Компилятор/интерпретатор

Возможность

Язык

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

Open-source компилятор (интерпретатор)

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+[36]

+

+

+[37]

+

Возможность компиляции

+

+

+

+

+

+

-/+[38]

+

+

+

+

+

+

+

+

+[39]

+

+

+

+[40]

-

+

+

+

Bootstrapping

+

+

+

+

-

?

+

+

+

+[41]

+[42]

+

+ [43]

+

?

x

+[44]

+

+

+[45]

x

?

+

+

Многопоточная компиляция

+

+

+

-

+

?

+

+

+

+

?

+

+

-

?

?

x

x

-

-

x

?

?

+

Интерпретатор командной строки

+/-[46]

-/+[47]

+/-[47]

-[48]

-

?

+

+

+

-

+[49]

+

+

+

+

+

+

+

+

+[50]

+

-

-

+

Условная компиляция

+/[51

+

+

+

+

?

+

+

?

-/+[52]

-/+[53]

+

+ [54]

+

+

+

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

Создание объектов на стеке

+

+

+

+

+

-/+[55]

?

?

-

-

?

+/-[56]

+/-[57]

+

-

-

-

-

?

?

-

-

-/+[58]

?

Неуправляемые указатели

+

+

+

+

+

-

-

-

-

- [59]

-

- [59]

- [59]

-

-

-

-[60]

-

-

+[61]

-

-

+

-

Ручное управление памятью

+

+

+

+[62]

+

-

-

-

-

- [59]

-

- [59]

- [59]

-

-

-

- [59]

-

-

+[63]

-

-

+

-

Сборка мусора

-/+[64]

-[65]

-[65]

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

-[66]

+

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

Возможность

Язык

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

Инструкция goto

+

+

+

+

+

-

-

x

-

-[67]

-

x

+ [68]

-

+

+

-

-/+[69]

-

-/+[70]

-

+

+

-

Инструкции break без метки

+

+

+

+

+

-

-

x

+

+

+

x

+ [71]

+

+

+

+

+

-

?

+

+

+

+/-[72]

Инструкция break с меткой

+

-

-

-

+

-

-

x

+

+

+

x

+ [73]

+

+

+

-

+

-

?

-

+

-

x

Поддержка try/catch

+

-

+

+

+

+[74]

+

+

+

+

+

+

+[75]

+

+[76]

+

+

+

+

+

+

+

+

+

Блок finally

-/+[77]

-

-

+

+

-

-

+

+

+

+[78]

+

+[79]

+

-

-

+

+

+

+

+

+

+

-[80]

Блок else (исключения)

-

-

-

+

-

-

+

-

+

+[81]

?

+

+[75]

-

+[82]

-

+

+

-

?

+

+

+

+

Перезапуски

?

-

?

-

?

?

-

-

?

?

?

?

+

-

-[83]

?

?

?

?

?

-

-

?

?

Ленивые вычисления

?

-

-

-/+[84]

+

-

-

+/- [85]

-

-

-

+

-[86]

?

-

-

+

-

?

-

-

-/+[87]

-

+ [88]

Continuations

?

-/+[89]

?

-

?

?

-

-

?

?

?

+

- [90]

-

?

?

-

+

?

+

-

-

?

+/-[91]

Легковесные процессы (Сoroutines)

-

-

-

-

-

+

+

-

?

+/-[92]

-

+

+/-[93]

-

+[94]

?

+/-[95]

?

?

+

+

-

-

+/- [96]

Типы и структуры данных

Возможность

Ada

C

C++

C#

D

Eiffel

Erlang

F#

Groovy

Java

JavaScript

Haskell

Common Lisp

Nemerle

Perl

PHP

Python

Ruby

Scala

Smalltalk

VB.NET

Delphi

OCaml

Кортежи

-

-

+/-[97]

+/-[98]

+/-

+

+

+

+

-

-

+

+

+

+

-

+

+

+

+

+/-[98]

-

+

Алгебраические типы данных

-/+[99]

-

-

-

?

?

x[100]

+

?

-

x[100]

+

x[100]

?

x[100]

x[100]

x[100]

x[100]

?

x[100]

-

-/+[99]

+

Многомерные массивы

?

+

+

+

+

?

-

+

+

+/-

+/-

x[101]

+

+

+/-

+/-

+/-

+/-

?

?

+

+

+

Динамические массивы

?

- [102]

+/-

+/-

+/-

?

-

+/-

?

+/- [103]

+/-

x[101]

+

?

+/-

+/-

+/-

+/-

?

?

+

+

?

Ассоциативные массивы

?

-

+[104]

+

+

?

-

+

+

+/- [105]

+

x[101]

+

+

+

+

+

+

?

?

+

+/-

+

Контроль границ массивов

?

-

-/+[106]

+

+

+

x[101]

+

?

+

x[107]

x[101]

+

+

x[107]

x[107]

+

?

?

?

+

+

+[108]

Цикл foreach

+/-[109]

-

+/-[110]

+

+

-

+/-[111]

+

+

+

+[112]

+

+[113]

+

+

+

+

+

+

+

+

+

+

List comprehensions

-

-

-

-/+[114]

-

-

+

+

-

-

-

+

+ [115]

+

?

-

+

?

+

+

+

-

+/-

Целые числа произвольной длины

-

-

-

+[116]

-

?

+

+

+

+[117]

?

+

+

+[116]

+

?

+

+

+[118]

+

+[116]

-

+[119]

Целые числа с контролем границ

+

-

-

-

-

?

-

-

-

-

-

-

+ [120]

-

-[121]

-

-

?

-

?

-

+

-

Объектно-ориентированные возможности

Возможность

Ada

C

C++

C#

D

Eiffel

Erlang

F#

Groovy

Java

JavaScript

Haskell

Common Lisp

Nemerle

Perl

PHP

Python

Ruby

Scala

Smalltalk

VB.NET

Delphi

OCaml

Интерфейсы

?

-

+/-

+

+

?

x

+

?

+

?

x

x [122]

+

+/- [123]

+

+

?

?

?

+

+

+

Мультиметоды

-

-

-

-/+ [124]

-

-

x

-

?

-[125]

-

x

+

-

-[125] [126]

-

-[125]

-[125]

-

-

-

-

-

Mixins

?

-

-

-

+

?

x

?

?

-

?

x

+

?

?

?

?

+

+

+

?

+ [127]

?

Переименование членов при наследовании

?

x

-

-

?

+

x

-

-

-

?

x

-

-

-/+

-

-

?

?

-

-

-

?

Множественное наследование

?

x

+

-

-

+

x

-

-

-

?

x

+

-

+

-

+

?

?

-

-

-

+

Решение конфликта имен при множественном наследовании

?

x

-/+[128]

x

x

+[129]

x

x

?

x

?

x

+[130]

x

+

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

VB.NET

Delphi

OCaml

Макросы

-/+

-/+[143]

-/+[144]

-

-/+[145]

-

-/+

-

-

-

-

+/-[146]

+

+

-

?

-

+/-

-

-

-

-

-/+[147]

Шаблоны/Generics

+

-

+

+

+

+

x[148]

+

+

+

x[148]

-[149]

x[148]

+

x[148]

-

x[148]

x[148]

+

x[148]

+

+[150]

+/-

Поддержка Unicode в идентификаторах

+

-/+[151]

-/+[152]

+

+

?

-

+

+

+

+

+

+ [153]

+

+/-

-/+

+[154]

+[155]

+

+

+

+

+

Перегрузка функций

+

-

+

+

+

-

+

+

+

+

-/+[156]

+

+ [157]

+

-[158]

-

-[159]

-

+

?

+

+

+

Динамические переменные

?

-

-

?

?

?

-

?

?

?

?

+/- [160]

+ [161]

?

+

-

-

?

?

?

?

?

?

Именованные параметры

+

-

-

+[162]

-

-

-

+/-

+

-

-/+[163]

-

+ [164]

+

+

-

+

+

?

-/+[165]

+

-/+[166]

+

Значения параметров по умолчанию

+

-

+

+[162]

+

-

+/-[167]

-

+

-

-

-

+ [168]

+

+/-[169]

+

+

+

+

+/-

+

+

+

Локальные функции

+

-/+[170]

-/+[171]

+/-

+

-

+

+

-

+/-[172]

+

+

+ [173]

+

+/-

+

+

+

+

-

+/-

+

+

Сопоставление с образцом

-

-

-

+/-

-

-

+

+

-

-

-

+

+/- [174]

+

+

?

-[159]

-

+

?

-

-

+

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

-

-

-

+[175]

+

+

?

+/-[175]

+/-

+/-[176]

?

+[177]

+

+

?

?

+/-

+/-

?

?

+[175]

-

-

Стандартизация

Язык

Ada

C

C++

C#

D

Eiffel

Erlang

F#

Groovy

Java

JavaScript

Haskell

Common Lisp

Nemerle

Perl

PHP

Python

Ruby

Scala

Smalltalk

VB.NET

Delphi

OCaml

Стан-

дарты

ISO ANSI ГОСТ

ISO ANSI

ISO

ISO ECMA

-

ISO ECMA

-

-

-

-

ECMA

-

ANSI

-

-

-

-

-

-

ANSI

-

-

-

Примечания

1. Императивный/Haskell. Монады позволяют выполнять императивные действия.

2. ООП/Erlang. Можно провести параллель между процессами в Эрланге и объектами в определении Алана Кея [1].

3. ООП/Erlang. Можно провести параллель между процессами в Эрланге и объектами в определении Алана Кея [2].

4. ООП/Javascript. Прототипная модель ООП.

5. ООП/Haskell. Классы типов и семейства типов перекрывают возможности ООП.

6. Логический/Haskell. Изначально инструментов для логического программирования не встроено, но есть сторонние библиотеки. Существует академический функционально-логический язык Curry, берущий Haskell за основу.

7. Логический/Common Lisp. Логическая парадигма изначально в язык не встроена, но реализуется средствами языка.

8. LINQ

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

10. Декларативный/Perl. Только регулярные выражения.

11. Распределённый/Ada. См. Annex E. Distributed Systems.

12. Распределённый/C и C++. Многие распространённые компиляторы поддерживают директивы для распараллеливания в рамках технологий MPI и OpenMP.

13. Распределённый/C#. Существуют проекты распределённых модификаций языка, например Parallel C#.

14. Распределённый/Haskell. Модель языка подразумевает распределённое использование, при этом не требуя от программиста усилий на реализацию распределённости. Один из поддерживающих эту возможность компиляторов -- Glasgow Distributed Haskell.

15. ANSI стандарт языка предусматривает опциональные декларации типов, которые какие-либо конкретные реализации могут использовать по своему усмотрению. Большинство современных реализаций CL принимают декларации типов в расчет, и используют для статической проверки типов и в целях оптимизации.

16. Статическая типизация/Perl. С версии 5.6. Только для не встроенных типов.

17. Статическая типизация/Smalltalk. Возможность статической типизации есть в диалекте Smalltalk -- Strongtalk'е.

18. Динамическая типизация/C#. Посредством специального псевдо-типа dynamic с версии 4.0.

19. Динамическая типизация/F#. Компилятор поддерживает синтаксический сахар в виде преобразования использования оператора (?) xml?name в вызов xml.op_Dynamic("name"), на базе чего может быть реализована имитация динамической типизации.

20. Динамическая типизация/Haskell. Обеспечивается модулем Data.Dynamic.

21. Динамическая типизация/VB.NET. Контролируемо с помощью Option Strict.

22. Динамическая типизация/Delphi. Посредством специального типа Variant.

23. Явная типизация/Erlang. Можно использовать т. н. type test BIFs. См. [3]

24. Явная типизация/Perl. См. Prototypes в man perlsub.

25. Явная типизация/Python. Частично в Python 3.0.

26. Явная типизация/Smalltalk. Есть в Strongtalk.

27. var, dynamic etc.

28. Неявное приведение типов/Ada. См. 4.6 Type Conversions.

29. Неявное приведение с потерей данных/Perl. При сложении строки с числом: $a = '5aa'; print $a + 0; Напечатает: 5

30. Неявное приведение в неоднозначных ситуациях/Perl. Не совсем корректно, так как в Perl эти ситуации однозначны: 1 + "2" # 3 и 1 . "2" # "12"

31. Макрос DEFTYPE

32. Вывод типов/Common Lisp. Некоторые компиляторы Common Lisp, такие как SBCL, поддерживают частичный вывод типов.

33. Параметрический полиморфизм с ковариантностью/C#. Доступно начиная с C# 4.0 для типов интерфейсов и делегатов.

34. Информация о типах в runtime/Ada. Точный тип узнать можно (Ada.Tags), но полной поддержки отражения в языке нет. Можно узнать имя, предков, интерфейсы, сериализовать объект, но нельзя запросить список методов.

35. Информация о типах в runtime/С++. Можно сравнить типы на точное совпадение, узнать имя типа (typeid), приводить типы вниз по иерархии наследования.

36. Open-source компилятор (интерпретатор)/Smalltalk. В любом диалекте Smalltalk исходники всего, кроме виртуальной машины, (то есть библиотека классов, компилятор в байткод, среда разработки, сторонние библиотеки и пр.) принципиально открыты -- это свойство языка. Из основных диалектов исходники виртуальной машины открыты у GNU Smalltalk, Squeak и Strongtalk.

37. Open-source компилятор (интерпретатор)/Delphi. FreePascal и Lazarus.

38. Возможность компиляции/Erlang. HiPE -- High Performance Erlang. Доступен только для *nix-систем.

39. Существуют PHP-компиляторы, вполне корректно комилирующие любые PHP-скрипты. Например, Roadsend PHP Compiler.

40. Возможность компиляции/Smalltalk. Стандартная реализация в Smalltalk -- это прозрачная компиляция в байт-код (в момент сохранения изменённого исходного кода) с последующим исполнением на виртуальной машине, часто с использованием JIT-компилятора. Однако некоторые диалекты поддерживают прямую компиляцию в машинные коды. В часности, к таким диалектам относятся Smalltalk MT и Smalltalk/X.

41. Bootstrapping-компилятор/Java. Java Compiler API появилось в версии 6.0.

42. Narcissus.

43. Например, SBCL

44. Bootstrapping-компилятор/Python. Проект PyPy.

45. Bootstrapping-компилятор/Smalltalk. Компилятор в байт-коды изначально написан на самом Smalltalk и исполняется внутри виртуальной машины. Кроме этого также есть примеры виртуальных машин Smalltalk, написанных на самом Smalltalk -- к ним, в частности, относится виртуальная машина Squeak, написанная на подмножестве Smalltalk, которое потом транслируется в C и компилируется в машинные коды. При этом собственно разработка и отладка виртуальной машины Squeak осуществляется внутри работающей системы Squeak.

46. Интерпретатор командной строки/Ada. Business Shell (BUSH).

47. Интерпретатор командной строки/C++. C++ интерпретатор CINT.

48. Планируется к версии 5.0 языка.

49. Rhino Shell.

50. В диалекте GNU Smalltalk реализована поддержка командной строки.

51. Условная компиляция/Ada. Поскольку использование препроцессора существенно осложняет работу утилит, отличных от компилятора, работающих с исходными текстами, в стандарт эта возможность не входит. Здесь: Conditional Compilation описывается, как можно организовать условно компилируемый код. В качестве резервного варианта предоставляется препроцессор gnatprep.

52. Условная компиляция/Java. Утверждения (операторы assert) всегда включаются компилятором в байт-код и могут быть разрешены (по умолчанию запрещены, то есть игнорируются) при запуске виртуальной машины ключом -ea/-enableassertion.

53. [4].

54. Макросы лиспа позволяют при компиляции вычислять произвольные выражения, включая, естественно, конструкции ветвлений. Кроме того, имеется также примерный аналог #ifdef из Си.[5][6]

55. Компилятор должен решать, какие классы будут представлены «простыми» типами и будут, в том числе, размещаться в стеке.

56. Создание объектов на стеке/Haskell. В GHC при помощи Unboxed Types / Unboxed Arrays.

57. Стандарт языка предусматривает декларацию DYNAMIC-EXTENT, которая может трактоваться компилятором как указание выделить место под объект на стеке.

58. Создание объектов на стеке/Delphi. В Delphi имеется 2 объектных модели -- старая (унаследована из Turbo Pascal) и новая. Создание объектов на стеке возможно только в старой объектной модели.

59. Через FFI (foreign function interface)

60. Можно с помощью модуля стандартной библиотеки -- ctypes.

61. Неуправляемые указатели/Smalltalk. В Smalltalk есть возможность низкоуровневой работы с памятью, но только в адресном пространстве, предоставляемом виртуальной машиной.

62. unsafe + System.Runtime.InteropServices

63. Ручное управление памятью/Smalltalk. При низкоуровневой работе в пространстве памяти, предоставляемом виртуальной машиной, можно вручную создавать и удалять объекты, записывая данные в соответствующие адреса памяти. Аналогично можно вручную управлять размещением объектов в памяти.

64. Сборка мусора/Ada. Только на некоторых платформах (.NET и JVM) или при помощи библиотек (AdaCL:GC). Тем не менее, практически все программы на Ada могут работать как с ним, так и без него. В этом смысле к сборке мусора применительно к Аде следует относиться не как к инженерному решению, а как к оптимизации управления памятью.

65. Сборка мусора/C и C++. В стандарте языка и в стандартных библиотеках нет сборки мусора. Однако существуют сборщики мусора для C и C++ в виде библиотек. Например, BoehmGC (англоязычный раздел).

66. Сборка мусора/Delphi. Если не считать Delphi.NET.

67. Инструкция goto/Java. Является зарезервированным словом.

68. Специальный оператор GO. Все конструкции циклов в CL, фактически, являются макросами-надстройками над этой инструкцией.

69. Инструкция goto/Ruby. В языке goto нет, но есть библиотека реализующая его.

70. Инструкция goto/Smalltalk. В стандарте языка goto нет, но существуют библиотеки, реализующие функционал goto через управление стеком исполнения. Используются крайне редко, это скорее proof of concept(англ.).

71. Макрос RETURN. Фактически, является частным случаем RETURN-FROM.

72. заменяется исключениями, также реализуется с помощью Camlp4 http://code.google.com/p/ocaml-break-continue/

73. Специальный оператор RETURN-FROM

74. Можно либо повторить выполнение метода, либо пробросить исключение далее

75. Java-style try-catch блок реализуется макросом handler-case. Кроме того, в возможности системы обработки исключений Common Lisp входит система т. н. перезапусков(restarts), которые позволяют обрабатывать исключения «изнутри» без раскрутки стека вызовов функций

76. При помощи оператора eval

77. Блок finally/Ada. В стандарте языка finally нет, но существуют библиотеки, реализующие функционал finally. Используются крайне редко, это скорее proof of concept(англ.).

78. [7]

79. Специальный оператор UNWIND-PROTECT

80. реализуется на camlp4 http://bluestorm.info/camlp4/dev/try/pa_tryfinally.ml.html

81. При помощи нескольких последовательных catch

82. При помощи eval or {…}

83. Частично реализуются нестандартным модулем Runops::Resume

84. Конструкции yield return, запросы LINQ, в FCL 4.0 войдёт тип Lazy.

85. Seq-генераторы, модуль Lazy стандартной библиотеки F#.

86. Однако, данную возможность можно реализовать на макросах

87. Конструкции Linq.

88. модуль Lazy стандартной библиотеки Ocaml.

89. setcontext et al. (UNIX System V and GNU libc)

90. Реазилуется сторонними библиотеками, например cl-cont

91. Только для байт-кода http://okmij.org/ftp/Computation/Continuations.html#caml-shift

92. Легковесные процессы/Java. Вплоть до Java 1.1.

93. Только в некоторых реализациях.

94. Следует заметить что это не стандартные легкие процессы [8]

95. Легковесные процессы/Python. Используя Stackless Python.

96. Монадические потоки выполнения, реализованы в библиотеке Lwt

97. Кортежи/C++. Реализуются в стандартной библиотеке (появились в TR1 (англоязычный раздел), до этого в boost).

98. Кортежи/.NET. С помощью типов System.Tuple<T,...> введёных в FCL 4.0.

99. Алгебраические типы данных/Ada и Delphi. Через механизм вариантных записей.

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

101. Массива/Haskell. В языке не существует понятия «массив», вместо которого есть понятие «список».

102. Динамические массивы/C. «Из коробки» данной возможности нет, однако похожий функционал можно реализовать, используя функцию realloc.

103. Динамические массивы/Java. С помощью java.util.Vector (в стандартной библиотеке).

104. map и hash_map в стандартной библиотеке

105. Ассоциативные массивы/Java. С помощью java.util.HashMap (в стандартной библиотеке).

106. Контроль границы массивов/С++. Для массивов контроля нет, однако в STL входит шаблон std::vector в который может быть встроен контроль границ (в перегрузку оператора индексации).

107. Контроль границ массивов/Perl, PHP и JavaScript. В языке нет массивов со статическими границами, присваивание элементу за текущими границами массива просто расширяет границы массива.

108. Контроль границ массивов/Ocaml. Можно отключить на этапе компиляции с помощью ключа -unsafe

109. Цикл foreach/Ada. Методы Iterate и Reverse_Iterate различных контейнеров, входящих в библиотеку Ada.Containers.

110. Цикл foreach/C++. Алгоритм for_each из библиотеки STL.

111. Цикл foreach/Erlang. В виде функции foreach/3 из модуля lists.

112. Цикл foreach/JavaScript. С версии 1.6[9].

113. Цикл foreach/Lisp. Макрос LOOP в составе стандартной библиотеки. Представляет собой «язык в языке» с большим количеством возможностей.

114. List comprehensions/C#. «Query Comprehension» можно считать за List Comprehension только с большой натяжкой.

115. LOOP et al.

116. Целые числа произвольной длины/.NET. Посредством типа System.Numerics.BigInteger, включенного в FCL версии 4.0.

117. Целые числа произвольной длины/Java. С помощью классов BigInteger и BigDecimal.

118. Целые числа произвольной длины/Scala. С помощью классов BigInteger и BigDecimal.

119. Целые числа произвольной длины/OCaml. В помощью модуля Num и Big_int.

120. Пример: Тип (INTEGER 0 9) включает в себя все цифры от 0 до 9

121. Целые числа произвольной длины/Perl. С помощью модуля Tie::Scalar.

122. Похожий функционал реализуется макросами и средствами CLOS.

123. Через множественное наследование от классов с методами-заготовками. См. [10]

124. Эмуляция через dynamic

125. Реализуется сторонними библиотеками

126. появятся(?) в Perl 6

127. Подмешивание реализации интерфейсов через ключевое слово implements. См. страницы 10-7 и 10-8 в Object Pascal Guide.

128. Только совместное использование посредством виртуального наследования

129. Для каждого члена класса -- выбор дублирование (через переименование), или слияние (иначе, если не было переопределения)

130. [11]

131. http://www.digitalmars.com/d/2.0/function.html#pure-functions

132. в форме указателей на функции

133. указатели на методы

134. Появились в Delphi2009, как анонимные функции.

135. Анонимные делегаты присутствуют в языке с версии 2.0. В C# 3.0 появились полноценные анонимные функции.

136. Макрос LAMBDA

137. Через анонимные классы

138. Начиная с версии 5.3

139. Только для функций двух переменных, через binder1st и binder2nd в стандартной библиотеке

140. Реализуется сторонними библиотеками, например Sub::Curry и Sub::Curried

141. functools.partial в стандартной библиотеке начиная с Python 2.5

142. Proc#curry, появился в Ruby 1.9

143. Макросы/C. Посредством препроцессора C.

144. Макросы/C++. Шаблоны C++ (изначально предназначенных для обобщенного программирования) возможно применять для метапрограммирования.

145. Макросы/D. С++-подобные шаблоны.

146. Макросы/Haskell. Template Haskell -- препроцессор, встроенный в GHC.

147. Штатный препроцессор camlp4

148. Неприменимо в языках с динамической типизацией.

149. Generics/Haskell. Прямых аналогов шаблонов в языке нет, однако имеются не менее мощные средства обобщенного программирования.

150. Generics/Delphi. Доступно начиная с Delphi 2009.

151. Unicode в идентификаторах/C. Доступно в компиляторах gcc начиная с 4.2

152. Unicode в идентификаторах/C++. Доступно в компиляторах от MS, начиная с MSVS++ 2005 и в gcc начиная с 4.2

153. В большинстве современных реализаций

154. Unicode в идентификаторах/Python. Доступно начиная с Python 3.0.

155. Unicode в идентификаторах/Ruby. Доступно начиная с Ruby 1.9.

156. Перегрузка функций/JavaScript. Можно сымитировать, используя проверку передаваемых параметров с помощью рефлексии.

157. Обобщенные функции можно перегружать по типам или значениям нескольких параметров

158. Только перегрузка операторов [12].

159. Перегрузка функций и сопоставление с образцом/Python. Реализовано в сторонней библиотеке PEAK-rules.

160. implicit-parameters

161. макросы DEFVAR и DEFPARAMETER, а также декларация SPECIAL, создают динамические биндинги.

162. Именованные аргументы и параметры по умолчанию/C#. Доступно начиная с C# 4.0.

163. Именованные параметры/JavaScript. Можно сымитировать, передав в качестве параметра функции JSON-объект: f ({param1: "value1", param2: "value2"}).

164. Спецификатор «&key» в списке аргументов объявляемой функции объявляет именованный параметр.

165. Именованные параметры/Smalltalk. Можно называть методы в стиле сделатьЧтоНибудьС:используя:и: -- в таком случае двоеточия обозначают места, куда будут подставляться параметры при вызове метода, например сделатьЧтоНибудьС: парам1 используя: парам2 и: парам3. Названия подбирают таким образом, чтобы при вызове было понятно, для чего будут использоваться параметры.

166. Именованные параметры/Delphi: Могут использоваться при вызове OLE: Word.Openfile(filename='1.doc')

167. Значения параметров по умолчанию/Erlang. Можно сымитировать с помощью арности функции.

168. «&key» и «&optional» параметры допускают значения по умолчанию

169. Значения параметров по умолчанию/Perl. Можно элементарно сымитировать, см. [13].

170. Локальные функции/С. Поддерживаются в компиляторе gcc как нестандартное расширение языка, см. [14].

171. Локальные функции/С++. Поддерживаются в виде методов локальных классов

172. Локальные функции/Java. Внутри метода можно определять безымянные (анонимные) локальные классы, которые фактически позволяют создавать экземпляры объектов, перекрывающие методы своего класса.

173. Специальный оператор LABELS

174. Макрос DESTRUCTURING-BIND и EQL спецификатор в обобщенных функциях можно рассматривать как аналоги некоторых подмножеств функционала сопоставления с образцом.

175. Посредством библиотеки Code Contracts из состава FCL 4.0.

176. Контрактное программирование/Java. На основе аннотаций Java 5, используя библиотеку OVal и аспектный компилятор AspectJ.

177. Контрактное программирование/Haskell. Посредством библиотеки QuickCheck Использован материал сайта www.wikipedia.ru.

178.


Подобные документы

  • Классификация языков программирования. Использование циклических конструкций и выполнение итерационных процессов. Алгоритмические структуры циклов языков C, C++, Java, C#. Особенности современных языков программирования высокого уровня и их применение.

    курсовая работа [345,6 K], добавлен 13.11.2009

  • Сущность и функции языков программирования, их эволюция и оценка популярности различных видов. Особенности компьютерных программ, разработанных на компилируемом, интерпретируемом или смешанном языке. Основные классы и иерархия языков программирования.

    презентация [873,4 K], добавлен 23.01.2013

  • Языки программирования низкого и высокого уровней и среды реализации. Особенности процедурных, логических, объектно-ориентированных языков. Состав системы программирования: трансляторы, библиотеки и отладчик программ, компоновщик, средства редактирования.

    презентация [11,9 K], добавлен 23.10.2013

  • Эволюция языков программирования от низкого уровня до современности. Языки программирования второго поколения - ассемблер. Императивные, функциональные, логические и объектно-ориентированные языки. Машинная независимость. Парадигмы программирования.

    презентация [353,5 K], добавлен 14.10.2013

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

    курсовая работа [400,6 K], добавлен 10.11.2016

  • Рассмотрение общих сведений и уровней языков программирования. Ознакомление с историей развития, использования языков программирования. Обзор достоинств и недостатков таких языков как Ассемблер, Паскаль, Си, Си++, Фортран, Кобол, Бейсик, SQL, HTML, Java.

    курсовая работа [759,5 K], добавлен 04.11.2014

  • Машинные коды и ассемблер. Первые языки программирования высокого уровня. Язык программирования FORTRAN. Достоинства и недостатки ALGOL. Научные и бухгалтерские программы. Основные принципы, которые соблюдались при создании языка программирования Basic.

    курсовая работа [407,4 K], добавлен 21.06.2014

  • Понятия структурного программирования и алгоритма решения задачи. Краткая история развития языков программирования от машинных до языков ассемблера и языков высокого уровня. Процедурное программирование на C#. Методы и программы для моделирования.

    учебное пособие [1,7 M], добавлен 26.10.2010

  • Понятия языка программирования, разновидности и характеристика языков. Исторический обзор их создания и применения. Классификация, примеры использования. Характеристики языков программирования с точки зрения элементов объектной модели, их популярность.

    реферат [463,6 K], добавлен 07.09.2009

  • Семантика языков программирования. Процедурные и объектно-ориентированные языки программирования. Стандартная библиотека шаблонов. Независимость байт-кода от операционной системы и оборудования и возможность выполнения Java-приложения на любом устройстве.

    реферат [50,5 K], добавлен 24.11.2009

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.