d10. Нотация Дейкстры <–> d11. Типы данных <–> d12. Файлы, блоки <–> d13. Критика фон Неймана, рекурсия
d1. Раскладки клавиатур, кодировки <–> d6. Системы программирования <–> d9. Железки (1-12) <–> d14. Железки (13-35) <–> d15. Железки (36-74)
Термины с лекции:
Система программирования — организованная совокупность компонентов для обеспечения программирования.
Главным в СП является сам язык программирования, а не компилятор.
В состав СП входит языковый процессор (либо в виде интерпретатора, либо в виде компилятора)
Синус, логарифм, экспонента — не компилируются в Pascal. Это хороший пример, где компилятор работает не до конца.
Если язык чисто компилируемый (а таких нет), то в нём и нет среды. А сама среда нужна, чтобы можно было взаимодействовать с Unix (с ОС).
Верификаторы
могут выяснять корректность работы программы.Профилёры
выявляют корректность и выводят данные о потреблении.Текстовый терминал — это последовательный компьютерный интерфейс для ввода и отображения текста. Информация в нём представлена в виде массива предварительно выбранных сформированных символов. В таких устройствах используется электронно-лучевая трубка, выдающая одноцветное изображение.
В дни универсальных ЭВМ с середины 1970-х до середины 1980-х люди использовали терминалы для дистанционной связи с компьютерами. В отличие от монитора, который обычно размещен рядом с компьютером, терминал может быть расположен очень далеко от главного компьютера.
Терминал получил своё название, так как был размещен на терминальном конце
кабеля.
Терминал состоит из экрана и клавиатуры. Программы выполняются на главном компьютере, но результаты отображаются на экране терминала.
© Assembler — это почти не нужно. Во всём мире нужно человек 100, программирующих на Assembler.
Человеку удобно работать на языке высокого уровня. Но программа и высокоуровневый язык имеют между собой большую пропасть, которую как-то надо устранять.
Компилятор (или транслятор) — принимает на вход текст высокого уровня и транслирует его в текст низкого уровня (в машинные тексты).
Раньше компиляторы было дорого и тяжело разрабатывать (да и сейчас, в принципе). Изначальным целевым языком компилятора был Assembler.
Таким подходом оправдывалась экономия расходов на разработку новых компиляторов.
Компилятор воспринимает всю программу целиком, анализирует её правильность и переводит в машинные коды. Подобно переводчику, он берёт и выполняет письменный перевод текста.
© Все стоят к Assembler спиной!
Недостатки письменного перевода (компилирования): дороговизна, скорость работы. Одновременно они являются и продолжением его достоинств. Письменный перевод всегда получается качественным.
Интерпретатор же берёт и выполняет (бубнит текст).
© Каждый отладчик - это интерпретатор!
Интерпретатор — устный переводчик (ему говорят, и машина выполняет).
Итак, письменный перевод выполняется компилятором
, устный перевод - интерпретатором
.
© Лучший пример интерпретатора —
железный язык
.
- Он есть ещё со времён Адама и Евы…
- Т.е. это непосредственно сам язык выполнения кода машиной.
На компиляторе пишут многоразовые программы
Assembler не является интерпретатором. По методу реализации он является компилятором, хоть и очень примитивным.
- А примитивным, потому что компилирует в формате 1 к 1.
На интерпретаторах пишут одноразовые программы/лабы.
© Питон не предназначен для систем… © Windows по уровню сложности сравним с Boeing…
Отладчик — компилятивный суррогат.
Языковая среда
— интерпретативные компоненты ЯП.
© Чистых компиляторов и интерпретаторов нет.
Профессор Вирт
предложил Pascal - улучшение Algol.
© Язык Си мощнее Pascal в 5.5 раз!
- `(joke)`
.....Почему?
- Описание страницы языка Си занимает
- 550 страниц, а языка Pascal - 99!
P-code
— это двоичный массив, маленькая абстрактная стековая машина.
Технология компилирования называлась bootstrapping
(см. бутстрепинг) (в переводе - развязывание шнурка, потянув за него).
GCC
— это многоплатформенная и многоязычная система программирования (создана с инструментальными средствами).
Lex, flex, yacc (yet another compiler compiler), Bison -
Cтатья об их применении.
Условие компиляции — программа должна соблюдать стандарт.
a.out — assembler.out (вывод ассемблера - результат линкера)
Команда a.out предназначена для выполнения без затрат на компиляцию (в некомпилируемых системах).
(?) библиотеки (.dll) (?) ключи компилятора - флаги Компиляция + ключ, Linkage
Создание программ включает в себя ещё тестирование и отладку.
Тесты должны прощупывать все ветки программы.
© Программист должен быть злым и ненавидеть свою программу, чтобы она работала!
- Т.е. он должен тщательно тестировать свою программу!
1) Ручная отладка. Иначе говоря, ручная прокрутка программы — это интерпретация. Она полезна! Это совершенно другой подход к программированию! 2) Отладка средствами стандарта языка. Проверки вставляем после того, как программа отказалась работать. 3) С помощью отладчика. Если тесты не работают, надо искать семантические ошибки в коде программы. Когда сами пишете программу, часто глаз замыливается, и тогда возникают ошибки. Для этого производите отладку через некоторое время, когда вы полны сил!
© Машина Тьюринга
— это рулон туалетной бумаги