introduction - garevna/js-course GitHub Wiki
Язык программирования - это система обозначений для абстрактного описания процесса вычислений
Каждый язык программирования имеет спецификацию, описывающую стандарт языка
Реализация может отличаться от стандарта
Реализация - это конкретное воплощение с помощью специальных программных средств - интерпретаторов, компиляторов
Стандарт языка описывает его синтаксис и семантику
Синтаксис - это правила корректной записи основных конструкций языка ( ключевых слов, операторов и т.д. )
Семантика языка - это смысловое содержание синтаксических конструкций
Алфавит языка состоит из букв, цифр и лексем
Лексема - это наименьшая единица языка имеющая самостоятельный смысл
К лексемам относятся:
спецсимволы: круглые , квадратные и фигурные скобки, ===, ==, !=, ++, =, >, < и т.д.
ключевые слова: var, function, for, switch, if, while и т.д.
Для программистов под архитектурой процессора подразумевается его способность исполнять определенный набор машинных кодов
Относительно архитектуры процессора языки программирования бывают высокого и низкого уровней
Языки высокого уровня абстракции не зависят от архитектуры процессора, но нуждаются в специальных программах ( трансляторах ), которые превращают код, написанный на языке высокого уровня, в машинные коды
Машинный код ( или нативный код ) - система команд конкретной вычислительной машины, которые интерпретируются непосредственно процессором или микропрограммами этой вычислительной машины
Каждая модель процессора имеет свой собственный набор команд
Процессор A совместим с процессором B, если процессор A полностью «понимает» машинный код процессора B
Если процессоры A и B имеют некоторое подмножество инструкций, по которым они взаимно совместимы, то говорят, что они одной «архитектуры» ( имеют одинаковую архитектуру набора команд )
Если процессор A знает несколько команд, которых не понимает процессор B, то B несовместим с A
Низкоуровневый язык программирования ( язык программирования низкого уровня ) — это язык, близкий к программированию непосредственно в машинных кодах конкретного процессора
Машинный язык - это язык машинных кодов
Машинно-ориентированные языки - это языки, на которых команды процессора формулируются в мнемокодах, более доступных для человеческого восприятия
Примером являются языки ассемблера
Машинно-независимые языки обеспечивают платформенную независимость алгоритмов
Зависимость от платформы перекладывается на трансляторы, «переводящие» текст, написанный на языке высокого уровня, в элементарные машинные команды
Парадигма – совокупность идей и понятий, определяющих подход к программированию
Чаще всего языки программирования делят на процедурные ( императивные ) и непроцедурные ( декларативные )
Класс непроцедурных языков содержит в себе два подкласса: функциональные и логические языки
Часто отдельным классом выделяют объектно-ориентированные языки программирования, хотя они содержат элементы процедурного программирования
В процедурных языках программа явно описывает действия, то есть она является чёткой последовательностью команд, которые необходимо выполнить компьютеру
Программа говорит компьютеру, не что делать, а как
Программа отделена от данных
К этому классу можно отнести большинство языков программирования: Pascal, Basic, C и другие.
Непроцедурные языки являются противоположностью языкам процедурным
Декларативное программирование – парадигма программирования, в которой описывается, что необходимо сделать компьютеру
Примером служит язык разметки HTML
Например, тег <img> содержит ссылку на изображение,
но не говорит компьютеру, как вывести это изображение
Это знает каждый приличный браузер
В функциональном программировании процесс вычисления можно описать как вычисление значений функций в математическом понимании
Отличие математической функции от понятия «функция» в императивном программировании заключается в том, что императивные функции могут опираться не только на аргументы, но и на состояние внешних по отношению к ним переменных, таким образом, получая в разных местах программы разные выходные данные
В функциональном языке при вызове функции с одними и теми же аргументами результат всегда будет один и тот же – выход зависит только от входа
Примерами являются первый функциональный язык программирования LISP, Haskell и другие
В программах, написанных на языках логического программирования, вообще не описывается действий
Программист задаёт данные и отношения между ними, после этого программе можно задать вопрос, компьютер перебирает заданные данные и находит ответ
Пример языка логического программирования – Prolog
Объектно-ориентированное программирование
В языках объектно-ориентированного программирования переменные и функции группируются в классы
Каждый объект является экземпляром класса
Объекты имеют состояние, которое изменяется в процессе функционирования программы
В отличие от процедурной модели, ООП базируется не на функции, а на объекте как на целостной системе
Транслятор — это программа-переводчик, которая преобразует программу, написанную на языке высокого уровня, в программу, состоящую из машинных команд
Есть разнообразные виды трансляторов, например, компиляторы и интерпретаторы
Компилятор - это транслятор текста на машинный язык, проверяющий при этом код на синтаксические ошибки
Компилятор не исполняет программу, он ее строит
Интерпретатор переводит и выполняет программу строка за строкой
В отличие от компилятора, интерпретатор не порождает на выходе программу на машинном языке
Распознав команду исходного языка, он тут же выполняет ее
Также, как и компилятор, интерпретатор проверяет код на синтаксические ошибки
Если ошибка найдена, интерпретатор останавливает трансляцию и сообщает об ошибке
Примеры компиляторов: С, С++, Delphi
Примеры интерпретаторов: JavaScript, PHP
Мультипарадигмальный язык программирования