Файл: Анализ языков программирования.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 21.10.2020

Просмотров: 471

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

[11.09.2012 18:26:24] Neridu: язык символического кодирования

[11.09.2012 18:26:55] Neridu: Автономный язык

[11.09.2012 18:27:10] Neridu: Язык обработки списков

[11.09.2012 18:28:27] Neridu: Объектно-ориентированные

[11.09.2012 18:29:05] Neridu: Деривационная семантика

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

[редактировать]

  1. ABAP Минус

Парадигма:

императивная

объектно-ориентированная

структурная

Типизация:

безопасная

номинативная

статическая

строгая

ABAP (Allgemeiner Berichts-Aufbereitungs-Prozessor, перевод с немецкого “Процессор для создания отчетов”) — высокоуровневый язык, созданный немецкой компанией SAP. На данный момент позиционируется, как язык для создания приложений для SAP Web Application Server, являющейся частью NetWeaver, платформы для создания бизнес приложений.

[редактировать]

АДА

  1. Русское название: Ада Плюс

Дата создания: 1983

Создан под влиянием:

ALGOL

C++

Pascal

Парадигма:

императивная

мультипарадигма

обобщённая

объектно-ориентированная

процедурная

строгая

структурная

Типизация:

безопасная

статическая

строгая

Принятые расширения файлов: .adb .ads .ada

Диалекты:

Ada 2005

Ada 83

Ada 95

Реализации и версии:

Ada/Ed

Green Hills

Hewlett-Packard Ada

IBM Rational Ada Developer

Sun SC Ada

gnat

Ада — мощнейший объектно–ориентированный язык общего назначения, ориентированный на разработку надёжного программного обеспечения. В язык включены механизмы поддержки параллельного исполнения, обработки исключений, настраиваемых модулей, поддержки распределённых вычислений, стандартные интерфейсы к другим языкам и библиотекам. Ада имеет компиляторы под практически любую операционную систему плюс Java и .NET байткод.

Ада — язык программирования, созданный в 1979–1980x годах в результате проекта, предпринятого Министерством Oбороны США с целью разработать единый язык программирования для так называемых встроенных систем (то есть, систем управления автоматизированными комплексами, работающими в реальном времени). Имелись в виду, прежде всего, бортовые системы управления военными объектами . Перед разработчиками не стояло задачи создать универсальный язык, поэтому решения, принятые авторами, нужно воспринимать в контексте особенностей выбранной предметной области.

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

Для удовлетворения требованиям надёжности язык построен таким образом, чтобы как можно большее количество ошибок обнаруживалось на этапе компиляции. Кроме того, одним из требований при разработке языка была максимально лёгкая читаемость текстов программ, даже в ущерб лёгкости написания. Результатом такого подхода стал несколько «тяжеловесный» синтаксис и множество ограничений, часто воспринимаемых непрофессиональными программистами как «глупые» и «ненужные».


Язык Ада используется в США и Европе при разработке сложных больших проектов, главным образом, встроенных систем, причём, далеко не только в военных приложениях.

[редактировать]

Элементы синтаксисаКомментарий до конца строки --

Регистрозависимость нет

Регулярное выражение идентификатора переменной [a-zA-Z](_?[a-zA-Z0-9])*

Присваивание значения переменной :=

Объявление переменной variable: type

Группировка выражений ( ... )

Блок begin ... end или foo ... end foo where foo in { if, do, ... }

Тождественное равенство =

Тождественное неравенство /=

Сравнение < > <= >=

Определение функции function f(p1 : type1; p2 : type2; ... ) return returntype is begin ... end f;

Вызов функции f(a, b, ...)

Вызов функции без параметров f

Последовательность ;

Если - то if condition then ... end if

Если - то - иначе if condition1 then ... elsif condition2 then ... else ... end if

Бесконечный цикл loop ... end loop

Цикл с предусловием while condition loop ... end loop

Цикл с постусловием loop ... exit when condition end loop

Цикл for - next для диапазона целых чисел с инкрементом на 1 for i in 1 .. 10 loop ... end loop

Цикл for - next для диапазона целых чисел с декрементом на 1 for i in reverse 1 .. 10 loop ... end loop

[редактировать]

Примеры:

[редактировать]

Hello, World!: Пример для версий gnat 3.4.5

with Ada.Text_IO;

procedure HelloWorld is begin

Ada.Text_IO.Put_Line("Hello, World!");

end HelloWorld;

[редактировать]

Факториал: Пример для версий gnat 3.4.5

В этом примере используется рекурсивное определение факториала.

Следует отметить, что для вывода на печать текста, целых и длинных целых чисел используются разные пакеты. Команда put в общем случае принимает несколько аргументов, изменяющих формат вывода: Item — это число, которое выводится на печать, Width — количество позиций, которые следует использовать при выводе, Fore и Aft — количества десятичных цифр, которые следует вывести до и после запятой и т.д. Если передается только один аргумент, он считается значением Item. Установив Width равным 1 или другому числу, меньшему, чем количество цифр в выводимом числе, можно вывести его без пробелов в начале (что является умолчательным способом для языка Ada).

Кроме того, отметим, что Ada не поддерживает неявные преобразования типов, так что для вычисления N*Fact(N-1) сначала следует явно преобразовать N к типу Long_Long_Integer.

with Ada.Text_IO, Ada.Integer_Text_IO, Ada.Long_Long_Integer_Text_IO;

procedure Factorial is begin

declare

function Fact (N: Integer) return Long_Long_Integer is

begin

if N=0 then

return 1;

else

return Long_Long_Integer(N)*Fact(N-1);

end if;

end Fact;

i: Integer := 0;

begin

loop

Ada.Integer_Text_IO.Put (Item => i, Width => 1);

Ada.Text_IO.Put ("! = ");

Ada.Long_Long_Integer_Text_IO.Put (Item => Fact(i), Width => 1);

Ada.Text_IO.New_Line;

i := i + 1;

exit when i=17;

end loop;

end;

end Factorial;

[редактировать]

Числа Фибоначчи: Пример для версий gnat 3.4.5

В этом примере используется рекурсивное определение чисел Фибоначчи.

with Ada.Text_IO, Ada.Integer_Text_IO;

procedure Fibonacci is begin

declare

function Fib (N: Integer) return Integer is

begin

if N<3 then

return 1;

else

return Fib(N-1) + Fib(N-2);

end if;

end Fib;

i: Integer := 1;

begin

loop

Ada.Integer_Text_IO.Put (Item => Fib(i), Width => 1);

Ada.Text_IO.Put (", ");

i := i + 1;

exit when i=17;

end loop;

Ada.Text_IO.Put ("...");


end;

end Fibonacci;

[редактировать]

Квадратное уравнение: Пример для версий gnat 3.4.5

Ada предоставляет тип данных для работы с комплексными числами, который требует использования пакетов Generic_Complex_Types и Generic_Complex_Elementary_Functions с предварительной инициализацией их типом данных для хранения комплексных чисел (в данном случае — Float). Ada не поддерживает неявные преобразования типов, поэтому все преобразования выполняются в явном виде.

with Ada.Text_IO,

Ada.Integer_Text_IO,

Ada.Float_Text_IO,

Ada.Numerics.Elementary_Functions,

Ada.Text_IO.Complex_IO,

Ada.Numerics.Generic_Complex_Types,

Ada.Numerics.Generic_Complex_Elementary_Functions;

use Ada.Text_IO, Ada.Integer_Text_IO, Ada.Float_Text_IO;

procedure QuadraticEquation is

package Complex_Types is new Ada.Numerics.Generic_Complex_Types (Float);

package Complex_Functions is new Ada.Numerics.Generic_Complex_Elementary_Functions(Complex_Types);

package Complex_IO is new Ada.Text_IO.Complex_IO (Complex_Types);

use Complex_Types, Complex_Functions, Complex_IO;

A,B,C,D: Integer;

A2f, Bf, S: Float;

Dc: Complex;

begin

Put("A = ");

Get(Item => A);

if A = 0 then

Put_Line("Not a quadratic equation.");

return;

end if;

Put("B = ");

Get(B);

Put("C = ");

Get(C);

A2f := Float(2*A);

Bf := Float(B);

D := B*B-4*A*C;

if D = 0 then

Put("x = ");

Put(-Bf/A2f);

elsif D > 0 then

S := Ada.Numerics.Elementary_Functions.Sqrt(Float(D));

Put("x1 = ");

Put((-Bf+S)/A2f);

Put_Line("");

Put("x2 = ");

Put((-Bf-S)/A2f);

else

Dc := Compose_From_Cartesian (Re => Float(D), Im => 0.0);

Put("x1 = ");

Put((-Bf+Complex_Functions.Sqrt(Dc))/A2f);

Put_Line("");

Put("x2 = ");

Put((-Bf-Complex_Functions.Sqrt(Dc))/A2f);

end if;

end QuadraticEquation;

[редактировать]

  1. Agda ПЛЮС

Дата создания: 1999

Создан под влиянием: Haskell

Парадигма:

декларативная

логическая

нестрогая

функциональная

Типизация:

безопасная

статическая

строгая

типизированная

Принятые расширения файлов:.agda

Реализации и версии:

Agda 2

Agda1/NewSyntax

Agda — инструмент автоматического доказательства теорем и одновременно функциональный язык программирования, использующийся в нем. Он разрабатывается в Chalmers University of Technology как развитие более старых инструментов такого рода.

Язык основан на конструктивной теории типов á la Martin-Löf, расширенной зависимыми типами записей, индуктивными определениями, модульными структурами и механизмом иерархии классов. Механизм классов Agda похож на использующийся в Haskell.

В своем развитии язык прошел через несколько существенно разных этапов. Самая первая версия, известная как Agda1/OldSyntax, была создана в 1999 году и в настоящее время недоступна. В 2005 году ее сменила Agda1/NewSyntax. Текущая версия — Agda 2.

[редактировать]

Элементы синтаксисаКомментарий до конца строки --

Комментарии, которые могут быть вложенными {- ... -}

[редактировать]

Примеры:

[редактировать]

Hello, World!: Пример для версий agda 2.2.6

Простой вывод строк на печать — неестественное для Agda занятие, поэтому требует установки дополнительных пакетов. Этот пример следует сохранить в файл “helloworld.agda”. Понадобится установить стандартную библиотеку agda-stdlib; этот пример был проверен для agda 2.2.6 и agda-stdlib 0.3. Чтобы скомпилировать пример, используйте команду agda -i [library path] -i . -c helloworld.agda, где [library path] — путь к директории, в которой установлена библиотека. Эта команда компилирует исходный код Agda в код Haskell, и затем — в исполняемый файл.


module helloworld where

open import IO.Primitive using (IO; putStrLn)

open import Data.String using (toCostring; String)

open import Data.Char using (Char)

open import Foreign.Haskell using (fromColist; Colist; Unit)

open import Data.Function

fromString = fromColist . toCostring

main : IO Unit main = putStrLn (fromString "Hello, World!")

[редактировать]

  1. Alef НЕПОНЯТНО

Язык программирования Alef был разработан Phil Winterbottom в Bell Labs как часть операционной системы Plan 9. Alef — это язык системного программирования с поддержкой параллелизации. Обработка исключений, управление процессами и синхронизация примитивов реализованы средствами самого языка. Программы могут быть написаны как с использованием парадигмы общих переменных, так и с использованием парадигмы сообщений. Выражения используют синтаксис языка C, но система типов совершенно другая.

Alef поддерживает объектно-ориентированное программирования через статическое наследование и сокрытие информации. Язык не предоставляет автоматический сборщик мусора.

[редактировать]

  1. ALGOL МИНУС

Pусское название:АЛГОЛ

Дата создания:1958

Повлиял на:

Ada

Modula-3

Oberon

PL/I

Pascal

Simula

Парадигма:императивная

Типизация:статическая

Диалекты:

ALGOL 58

Algol 60

Алгол (англ. ALGOL от англ. algorithmic — алгоритмический и англ. language — язык), название семейства императивных языков программирования, применяемых при составлении программ для решения научно-технических задач на ЭВМ.

Алгол был первым языком программирования, использующим пары begin end для выделения блоков выражений.

[редактировать]

  1. APLAN МИНУС

Русское название: Аплан

Дата создания: 1993

Создан под влиянием: Аналитик

Повлиял на: Termware

Парадигма:

императивная

правила переписывания

Типизация: бестиповая

Принятые расширения файлов: aps

Язык алгебраического программирования, созданный в институте кибернетики.

[редактировать]

  1. ARIBAS МИНУС

Дата создания: 1996

Создан под влиянием:

Modula

Pascal

Парадигма: императивная

Принятые расширения файлов: .ari

Реализации и версии:ARIBAS

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

Синтаксис языка ARIBAS напоминает синтаксис языков Pascal и Modula.

В ARIBAS встроены функции для алгоритмов из теории чисел, такие как наибольший общий делитель, факторизация и др.

[редактировать]

Примеры:

[редактировать]

Факториал: Пример для версий ARIBAS 1.53

Используется рекурсивное определение факториала функцией fac, т.к. имя factorial зарезервировано для встроенной функции вычисления факториала. В ARIBAS по умолчанию используется тип данных integer.

group(0) при выводе служит для отмены использования знака подчеркивания для разделения групп цифр. function fac(n); begin

if (n = 0) then

return(1);

end;

return(n * factorial(n - 1));

end;

function fac0_16(); var n; begin

for n := 0 to 16 do

writeln(n, "! = ", fac(n): group(0));

end;

end;

fac0_16().

[редактировать]

  1. Факториал: Пример для версий ARIBAS 1.53 МИНУС

Используется встроенная функция factorial. В ARIBAS по умолчанию используется тип данных integer.

group(0) при выводе служит для отмены использования знака подчеркивания для разделения групп цифр. function fac0_16(); var n; begin


for n := 0 to 16 do

writeln(n, "! = ", factorial(n): group(0));

end;

end;

fac0_16().

[редактировать]

Hello, World!: Пример для версий ARIBAS 1.53

writeln("Hello, World!");

[редактировать]

Числа Фибоначчи: Пример для версий ARIBAS 1.53

Этот пример использует рекурсивное определение чисел Фибоначчи. В ARIBAS по умолчанию используется тип данных integer. group(0) при выводе служит для отмены использования знака подчеркивания для разделения групп цифр.

function fib(n); begin

if (n < 3) then

return(1);

end;

return(fib(n-1)+fib(n-2));

end;

function fib1_16(); var n; begin

for n := 1 to 16 do

write(fib(n): group(0), ", ");

end;

writeln("...");

end;

fib1_16().

[редактировать]

Assembler

  1. Assembler ПЛЮС

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

Команды языка ассемблера один в один соответствуют командам процессора и, фактически, представляют собой удобную символьную форму записи (мнемокод) команд и их аргументов. Также язык ассемблера обеспечивает базовые программные абстракции: связывание частей программы и данных через метки с символьными именами и директивы.

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

Каждая модель процессора, в принципе, имеет свой набор команд и соответствующий ему язык (или диалект) ассемблера.

[редактировать]

Достоинства и недостатки

минимальное количество избыточного кода (использование меньшего количества команд и обращений в память). Как следствие — большая скорость и меньший размер программы;

большие объемы кода, большое число дополнительных мелких задач;

плохая читабельность кода, трудность поддержки (отладка, добавление возможностей);

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

меньшее количество доступных библиотек, их малая совместимость;

непосредственный доступ к аппаратуре: портам ввода-вывода, особым регистрам процессора;

возможность написания самомодифицирующегося кода (т.е. метапрограммирования, причем без необходимости программного интерпретатора);

максимальная «подгонка» для нужной платформы (использование специальных инструкций, технических особенностей «железа»);

непереносимость на другие платформы (кроме двоично совместимых).

[редактировать]

Синтаксис

<p align=justify>Общепринятого стандарта для синтаксиса языков ассемблера не существует. Однако, существуют стандарты де-факто — традиционные подходы, которых придерживаются большинство разработчиков языков ассемблера. Основными такими стандартами являются Intel-синтаксис и AT&T-синтаксис.