- •Министерство образования и науки Российской Федерации
- •Определение
- •Стандартизация языков программирования
- •Типы данных
- •Структуры данных
- •Семантика языков программирования
- •Парадигма программирования
- •Способы реализации языков
- •Используемые символы
- •Языки программирования
- •Основные понятия и определения Языки и знаки
- •Модель передачи сообщений
- •Языковые знаковые системы
- •Об универсальном языке
- •Формализация языка
- •Языки моделирования
- •Языки программирования и интегрированные среды
- •Языки программирования высокого уровня
- •История и эволюция
- •История и эволюция языков моделирования
- •История и эволюция языков программирования
- •1.3. Классификация языков
- •1.3.1. Классификация языков моделирования
- •1.3.2. Классификации языков программирования
- •1.4. Проблемы и перспективы развития
- •1.5. Рекомендации по литературе
Используемые символы
Современные языки программирования рассчитаны на использование ASCII, то есть доступность всех графических символов ASCII является необходимым и достаточным условием для записи любых конструкций языка. Управляющие символы ASCII используются ограниченно: допускаются только возврат каретки CR, перевод строки LF и горизонтальная табуляция HT (иногда также вертикальная табуляция VT и переход к следующей странице FF). Ранние языки, возникшие в эпоху 6-битных символов, использовали более ограниченный набор. Например, алфавит Фортрана включает 49 символов (включая пробел): A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 = + - * / () . , $ ' : Заметным исключением является язык APL, в котором используется очень много специальных символов. Использование символов за пределами ASCII (например, символов KOI8-R или символов Юникода) зависит от реализации: иногда они разрешаются только в комментариях и символьных/строковых константах, а иногда и в идентификаторах. В СССР существовали языки, где все ключевые слова писались русскими буквами, но большу́ю популярность подобные языки не завоевали (исключение составляет Встроенный язык программирования 1С:Предприятие). Расширение набора используемых символов сдерживается тем, что многие проекты по разработке программного обеспечения являются международными. Очень сложно было бы работать с кодом, где имена одних переменных записаны русскими буквами, других — арабскими, а третьих — китайскими иероглифами. Вместе с тем, для работы с текстовыми данными языки программирования нового поколения (Delphi 2006, C#, Java) поддерживают Unicode.
Языки программирования
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
|
Ада — язык программирования, созданный в 1979–1980x годах в результате проекта, предпринятого Министерством Oбороны США с целью разработать единый язык программирования для так называемых встроенных систем (то есть, систем управления автоматизированными комплексами, работающими в реальном времени). Имелись в виду, прежде всего, бортовые системы управления военными объектами . Перед разработчиками не стояло задачи создать универсальный язык, поэтому решения, принятые авторами, нужно воспринимать в контексте особенностей выбранной предметной области.
Ада — это структурный, модульный, объектно-ориентированный язык программирования, содержащий высокоуровневые средства программирования параллельных процессов. Синтаксис унаследован от языков типа ALGOL или Pascal, но расширен, а также сделан более строгим и логичным. Ада — язык со строгой типизацией, в нём исключена работа с объектами, не имеющими типов, а автоматические преобразования типов сведены к абсолютному минимуму.
Для удовлетворения требованиям надёжности язык построен таким образом, чтобы как можно большее количество ошибок обнаруживалось на этапе компиляции. Кроме того, одним из требований при разработке языка была максимально лёгкая читаемость текстов программ, даже в ущерб лёгкости написания. Результатом такого подхода стал несколько «тяжеловесный» синтаксис и множество ограничений, часто воспринимаемых непрофессиональными программистами как «глупые» и «ненужные».
Язык Ада используется в США и Европе при разработке сложных больших проектов, главным образом, встроенных систем, причём, далеко не только в военных приложениях.
Примеры:
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;
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
|
Алгол был первым языком программирования, использующим пары begin end для выделения блоков выражений.
APLAN
дания: 1993 Создан под влиянием: Аналитик Повлиял на: Termware Парадигма:
императивная
правила переписывания
Типизация: бестиповая Принятые расширения файлов: aps
|
С точки зрения программирования нас интересуют все те языки, которые участвуют в создании программы. На рис. 4.1 схематически указаны такие языки.
Рассматривать язык программирования можно с нескольких позиций. Перечислим те из них, которые будут нам особенно полезны [Кауфман 1986].
Технологическая позиция, отражающая взгляд человека, желающего или вынужденного пользоваться языком программирования как технологическим инструментом на каком-либо из этапов жизненного цикла программного обеспечения. Эта позиция использовалась в гл. 3.
Семиотическая позиция, отражающая особенности языка как знаковой системы. Эта позиция доминирует в данной главе.
Математическая позиция, представляющая математическую модель изучаемого языка.
Реализаторская позиция, отражающая взгляд на язык реализаторов транслятора с этого языка и авторов документации. Эта позиция используется в гл. 5.
Авторская позиция, отражающая позицию автора языка. Для понимания этой позиции следует обращаться к работам авторов языков программирования. Например, точка зрения Никлауса Вирта отражена в статье [Вирт 1996].