ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 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: Деривационная семантика
Языки программирования
[редактировать]
-
ABAP Минус
Парадигма:
императивная
объектно-ориентированная
структурная
Типизация:
безопасная
номинативная
статическая
строгая
ABAP (Allgemeiner Berichts-Aufbereitungs-Prozessor, перевод с немецкого “Процессор для создания отчетов”) — высокоуровневый язык, созданный немецкой компанией SAP. На данный момент позиционируется, как язык для создания приложений для SAP Web Application Server, являющейся частью NetWeaver, платформы для создания бизнес приложений.
[редактировать]
АДА
-
Русское название: Ада Плюс
Дата создания: 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;
[редактировать]
-
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!")
[редактировать]
-
Alef НЕПОНЯТНО
Язык программирования Alef был разработан Phil Winterbottom в Bell Labs как часть операционной системы Plan 9. Alef — это язык системного программирования с поддержкой параллелизации. Обработка исключений, управление процессами и синхронизация примитивов реализованы средствами самого языка. Программы могут быть написаны как с использованием парадигмы общих переменных, так и с использованием парадигмы сообщений. Выражения используют синтаксис языка C, но система типов совершенно другая.
Alef поддерживает объектно-ориентированное программирования через статическое наследование и сокрытие информации. Язык не предоставляет автоматический сборщик мусора.
[редактировать]
-
ALGOL МИНУС
Pусское название:АЛГОЛ
Дата создания:1958
Повлиял на:
Ada
Modula-3
Oberon
PL/I
Pascal
Simula
Парадигма:императивная
Типизация:статическая
Диалекты:
ALGOL 58
Algol 60
Алгол (англ. ALGOL от англ. algorithmic — алгоритмический и англ. language — язык), название семейства императивных языков программирования, применяемых при составлении программ для решения научно-технических задач на ЭВМ.
Алгол был первым языком программирования, использующим пары begin end для выделения блоков выражений.
[редактировать]
-
APLAN МИНУС
Русское название: Аплан
Дата создания: 1993
Создан под влиянием: Аналитик
Повлиял на: Termware
Парадигма:
императивная
правила переписывания
Типизация: бестиповая
Принятые расширения файлов: aps
Язык алгебраического программирования, созданный в институте кибернетики.
[редактировать]
-
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().
[редактировать]
-
Факториал: Пример для версий 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
-
Assembler ПЛЮС
— язык программирования низкого уровня, представляющий собой формат записи машинных команд, удобный для восприятия человеком.
Команды языка ассемблера один в один соответствуют командам процессора и, фактически, представляют собой удобную символьную форму записи (мнемокод) команд и их аргументов. Также язык ассемблера обеспечивает базовые программные абстракции: связывание частей программы и данных через метки с символьными именами и директивы.
Директивы ассемблера позволяют включать в программу блоки данных (описанные явно или считанные из файла); повторить определённый фрагмент указанное число раз; компилировать фрагмент по условию; задавать адрес исполнения фрагмента, менять значения меток в процессе компиляции; использовать макроопределения с параметрами и др.
Каждая модель процессора, в принципе, имеет свой набор команд и соответствующий ему язык (или диалект) ассемблера.
[редактировать]
Достоинства и недостатки
минимальное количество избыточного кода (использование меньшего количества команд и обращений в память). Как следствие — большая скорость и меньший размер программы;
большие объемы кода, большое число дополнительных мелких задач;
плохая читабельность кода, трудность поддержки (отладка, добавление возможностей);
трудность реализации парадигм программирования и любых других сколько-нибудь сложных конвенций, сложность совместной разработки;
меньшее количество доступных библиотек, их малая совместимость;
непосредственный доступ к аппаратуре: портам ввода-вывода, особым регистрам процессора;
возможность написания самомодифицирующегося кода (т.е. метапрограммирования, причем без необходимости программного интерпретатора);
максимальная «подгонка» для нужной платформы (использование специальных инструкций, технических особенностей «железа»);
непереносимость на другие платформы (кроме двоично совместимых).
[редактировать]
Синтаксис
<p align=justify>Общепринятого стандарта для синтаксиса языков ассемблера не существует. Однако, существуют стандарты де-факто — традиционные подходы, которых придерживаются большинство разработчиков языков ассемблера. Основными такими стандартами являются Intel-синтаксис и AT&T-синтаксис.