Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
_18-23_ПРОГР_MatiasRust_HD_CT_LE_LcMS.doc
Скачиваний:
3
Добавлен:
01.03.2025
Размер:
150 Кб
Скачать
☆

Особенности других языков

Вот некоторые особенности других языков программирования, которых не имеет Си:

– автоматическое управление памятью;

– поддержка объектно-ориентированного программирования (при этом первые версии C++ генерировали код программы на языке Си);

– замыкание*;

– вложенные функции (существуют компиляторы языка Си реализующие эту функцию, например компилятор GNU);

– полиморфизм функций и операторов;

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

– функции высшего порядка

– карринг**.

Си++ (англ. C++) – компилируемый статически типизированный язык программирования общего назначения. Поддерживает разные парадигмы программирования, но, в сравнении с его предшественником – языком Си, – наибольшее внимание уделено поддержке объектно-ориентированного и обобщённого программирования.

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

Первым языком стал язык Лисп (LISP, LIST Processing – обработка списков) создан в 1959г. Этот язык позволяет обрабатывать большие объемы текстовой информации.

Логическое программирование – это программирование в терминах логики. В 1973 году был создан язык искусственного интеллекта Пролог (PROLOG) (Programming in Logic). Программа на языке Пролог строится из последовательности фактов и правил, затем формулируется утверждение, которое Пролог пытается доказать с помощью правил. Язык сам ищет решение с помощью методов поиска и сопоставления, которые в нем заложены. Логические программы не отличаются высоким быстродействием, так как процесс их выполнения сводится к построению прямых и обратных цепочек рассуждений разнообразными методами поиска.

*Замыкание – это особый вид функции. Она определена в теле другой функции и создаётся каждый раз во время её выполнения. В записи это выглядит как функция, находящаяся целиком в теле другой функции. При этом вложенная внутренняя функция содержит ссылки на локальные переменные внешней функции. Каждый раз при выполнении внешней функции происходит создание нового экземпляра внутренней функции, с новыми ссылками на переменные внешней функции.

PHP имеет встроенную поддержку замыканий начиная с версии 5.3. Пример замыкания с одной параметрической и одной контекстной переменной:

function getAdder($x)

{ return function ($y) use ($x) {return $x + $y;}; }

**В компьютерных науках, каррирование или карринг (англ. currying), введенное М. Шейнфинкелем и Г. Фреге, является преобразованием функции от пары аргументов в функцию, берущую свои аргументы по одному. Это преобразование получило свое название в честь Х. Карри.

На практике каррирование позволяет рассматривать функцию, которая получила один из аргументов, но не все. Оператор каррирования встроен в некоторые языки программирования, что позволяет многоместные функции приводить к каррированному представлению. Примером служат языки ML и Haskell. Все языки, поддерживающие замыкание, позволяют записывать каррированные функции.

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

Целые типы данных

Тип Размер памяти в байтах Диапазон значений

char (unsigned shar) 1 от -128 до 127 (oт 0 до 255)

int (unsigned int) 2

short (unsigned short) 2 от -32768 до 32767 (от 0 до 65535)

long (unsigned long) 4 от -2 147 483 648 до 2 147 483 647 (от 0 до 4 294 967 295)

Знаковые и беззнаковые типы

Если указано ключевое слово unsigned, то нулевой бит интерпретируется как часть числа, в противном случае – как знаковый. Когда отсутствует unsigned, переменная считается знаковой.

Символьный тип

Тип char используется для представления символа. Для представления символов русского алфавита надо использовать тип данных unsigned char, так как коды русских букв превышают величину 127.

Тип int

Размер памяти для переменной типа signed int определяется длиной машинного слова, которое имеет различный размер на разных машинах. Так, на 16-ти разрядных машинах размер слова равен 2-м байтам, на 32-х разрядных машинах соответственно 4-м байтам, т.е. тип int эквивалентен типам short int, или long int в зависимости от архитектуры используемой ПЭВМ.

Строковый тип

Строка представляет собой массив из перечисленных элементов, в конце которого помещается байт с символом '\0'. Т.о., число байтов, необходимых для хранения строки, на единицу превышает число символов между двойными кавычками.

Данные плавающего типа

float, double, long double (в некоторых реализациях языка long double СИ отсутствует).

Величина типа float – 4 байта. Из них 1 байт отводится для знака, 8 бит для избыточной экспоненты и 23 бита для мантиссы. Старший бит мантиссы всегда равен 1, поэтому он не заполняется, поэтому диапазон значений равен от 3.14E-38 до 3.14E+38.

Величина типа double занимает 8 бит в памяти. Ее формат аналогичен формату float: 1 бит для знака, 11 бит для экспоненты и 52 бита для мантиссы. С учетом опущенного старшего бита мантиссы диапазон значений равен от 1.7E-308 до 1.7E+308.

Константы

Переменная любого типа может быть объявлена как константа.

const double A=2.128E-2; const B=286; (подразумевается const int B=286)

Типы констант и их обозначение

Тип константы Суффикс/префикс/кавычки Пример

вещественные суффикс F (или f) 0.5F

короткие целые суффикс H (или h) 275h, 344H

длинные целые суффикс L (или l) 361327L

беззнаковые, суффикс U (или u) 62125U

восьмеричные, префикс 0 071

шестнадцатеричные, префикс 0x 0x5F

символьные одинарные кавычки ' ' 'О', '2', '.'

спец.символы косая черта \ \n, \0.

строковые двойные кавычки " " "Это строковая константа"

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

Унарная операция & дает адрес объекта, поэтому оператор

у = &х; присваивает адрес переменной х переменной у.

Операцию & нельзя применять к константам и выражениям: &(х+7) или &28 – недопустимы.

Унарная операция * воспринимает свой операнд как адрес некоторого объекта, поэтому оператор

z = *y; присваивает z значение переменной, записанной по адресу у.

Если y = &x; z = *у; то z = x.