Computer Science
May 28

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

Конспект видео:

https://www.youtube.com/watch?v=PS4S8BnURYU&list=PLIJLLSrXDPoibU-4S40dY6OpALf3nNOjA&index=1

https://www.youtube.com/watch?v=2YMrV-e5rZQ&list=PLIJLLSrXDPoibU-4S40dY6OpALf3nNOjA&index=6

• Языки высокого уровня созданы для облегчения написания программ
• Низкоуровневые - команды для конкретного семейства процессоров. Команды - аналог машинных наборов инструкций
• Чтобы перевести язык в машинный код нужен транслятор.
• Трансляторы делятсья на компилятор и интерпретатор
• Компилятор - сначала текст в машинные коды и потом выполняет
• Интерпретатор - анадизирует и выполняет построчно сразу.
• Есть смешанный вид, когда переводит в промежуточный байткод и интерпретируется
• Стандартная схема: код разбитый на разные файлы идет на вход препроцессору который её собирает. Собранная программа подаётся компилятору и далее в зависимости от компилятора, программа может быть конвертирована в язык ассемблер. Асемблерная программа подаётся компилятору ассемблера. Компилиуется частями в обьектные модули и далее подаётся компановщику, котрые компанует в целую программу на машинном языке. На выходе exe.
• При запуске exe. ОС выделяет память, передаёт ей управление и обеспечивает взаимодействие с внешними устройствами.
• Процесс компиляции отличается и зависит от архитектуры процессора и ОС
• Языки классифицируются по парадигме и типизации данных
• Парадигмы - стиль написания кода. Есть императивный и декларативный.
• Императивный - пошаговое расписываем что, как нужно реализовать. Делиться на процедурное и ООП.
• Декларативный - пишем что хотим получить (sql)
• Процедурное - программа состоит из функций котоые могут вызвать друг друга по ходу исполнения
• ООП - во главе объекты, котрые придумали для облегчения архитектуры и расширяемости
• Типизация данных - указание типа (инструкции для процессора как воспринимать байты). Сами данные это бросто байты.
• Типизация бывает:
• Явная/неявная (python, c#)
• Явная - сразу указывается тип данных
• Не Явная - тип определяется по значению
• Статическая/динамическая
• Статическая - тип данных определяется на этапе компиляции
• Динамическая - на этапе выполнения
• Строгая/нестрогая (int + float)
• Строгая - нужно преобразовать типы перед тем как скрещивать их с другими типами.
• Нестрогая - типы автоматически преобразуются, что может выдавать неоднозначные результаты

Почему языков программирования так много


• В 1950 появился первый компьютер способный выполнять программы. Но в него приходилось вбивать биты (машинные коды).
• Каждому машинному коду присвоили слово и так появился асемблер.
• В 1958 - в америке появился первый высокоуровневый язык Fortran (Formula Translator), который использовался в основном учёными, так как компьютеры использовались ими.
• В этом же году Европа решила создать свой язык, чтобы не зависеть от американцев. ALGOL (algorithmic language)
• Джон маккарти занимающийся изучением ИИ создаёт для своих целей в этом же году язык LISP (List processing), который позволяет решать задачи из этой области.
• Нужен был язык который поможет бизнесу и на котром можно быстро начать программировать. Так в 1959 появился язык COBOL (Common business-oriented language). Стал использоваться в экономической сферы.
• В 1964 компьютеры стали распространяться быстро и проникли в учебные заведения. Студентам было тяжело вникать в устройство компьютера и профессора университета создали BASIC (Beginner's all-purpose symbolic instruction code)
• В 1970 появляется Pascal, который представляет целое средство для обучения программированию с нуля
• Не было ещё операционной системы Unix, которую написали на языке C. Язык C появился в в 1972 в следствии модернизации языка B.
• В 1974 IBM, которая создала Fortran, создала SEQUEL (structured English query language) для СУБД, так как количество данных которые нужно хранить и обрабатывать на компьютере стало огромным. Далее по юридич причинам переименован в SQL
• Была проблема с расширением и архмтектурой проектов. Поэтому В 1974 Алан Кей видел код как взаимодействие объектов пересылающих сообщения друг другу и из этой идеи повилась концепция ООП. Первый язык ООП - SmallTalk
• Мин обороны США решило выбрать язык на котром будут вести свои военные разработки, но языка подходящего под их требования не было и поэтому создали свой на основе Pascal. В 1980 появился язык ADA
• В 1983 Бьёрн Страуструп создал c++, так как высокоуровневые Языки были неэффективны, а Низкоуровневые сложны. Так скрестив язык C с каким-то другим появился c++
• В 1983 Бред Кокс решил скрестить C и SmallTalk и получил objective-c. Этот язык понравился apple и они решили его использовать в своих устройствах
• После этого Языки начали уже создаваться не по необходимости, а по принципу "а почему бы и нет".
• Так в 1987 появился язык perl
• На одной из конференций по функциональным языкам разработчики решили что нужно создать самый лучший и свободный функциональный язык. Так в 1990 появился HASKEL
• В 1991 для ОС Моева требовался скриптовый язык. Поэтому Россум создаёт язык с ООП и называет его в честь любимого шоу Python
• Microsoft тоже решает создать свой язык и удивить весь мир. Они берут бейсик, добавляют среду разработки, подсветку синтаксиса, инструменты для отладки и появляется Visual Basic
• В 1995 Юкихиро создаёт ООП язык Ruby, который становится популярным только в Японии, так как документация была только на японском.
• Чтобы программировать электроно бытовые приборы, а не только компьютеры и телефоны появился java. Девиз "напиши один раз и запускай с чего хочешь"
• Расмус Лердоф в 1995 размещает свое резюме в интернете и для учёта всех посетителей своего резюме разрабатывает язык PHP (Personal Home Page Tools)
• Захотелось интерактивности сайтов и решили создать язык который будет легко встраиваться в html и менять её на лету. И чтобы был прост в освоении и поднимался вебдизайнерами. Так появился mocha, потом переименовали в livescript. Но на волне популярности java, для привлечения внимания, решили назвать javascript.
• В 2001 Microsoft, для разработки на своих платформах создали .Net framework и .Net core и язык к ним C#. Си шарп совмещает в себе java и c++.
• В 2009 Google считают то си пп и си устарели и разрабатывают язык go, который бы учёл все ошибки языков прошлых лет
• В 2014 apple моедрнизируют object-c и почвлятеся swift, который более устойчивый к ошибкам.
• В 2015 появляется rust, который более стабилен с памятью, в отличии от c++ с учетками, но такой-же быстрый.