- •1.2. Алгоритм
- •1.3. Предмет науки програмування
- •1.4. Застосування мов програмування
- •1.5. Стандартизація мов програмування
- •1.6. Середовище розробки
- •1.7. Тестування і верифікація програм
- •Лекція 2. Алгоритми і обчислення
- •2.1. Алгоритми
- •2.2. Обчислювальні машини
- •2.3. Основи фон-нейманівської архітектури
- •Лекція 3. Парадигми програмування
- •3.1. Базові парадигми програмування
- •Процедурне програмування
- •Абстрактна семантика процедурних програм.
- •Денотаційна семантика.
- •Операційна семантика
- •Структурність і модульність
- •3. 3. Модульне програмування
- •3.4. Об’єктно-орієнтовне програмування
- •3.5. Функціональне програмування
- •3.6. Логічне програмування
- •3.6. Алгебраїчна парадигма
- •Висновок
- •Лекція 4. Огляд основних мов програмування
- •4.1. Мова Picmkalkul Конрада Цузе
- •4.1.1. Історичні передумови
- •4.1.2. Огляд мови
- •4.2. Мінімальне програмування на апаратному рівні: псевдокоди
- •4.2.1. Мова Short Code
- •4.2.2. Система Speedcoding
- •4.2.3. Система "компіляції" univac
- •4.2.4. Суміжна робота
- •4.3. Комп'ютер ibm 704 і мова fortran
- •4.3.1. Історична ретроспектива
- •4.3.2. Процес розробки
- •4.3.3. Огляд мови fortran I
- •4.3.4. Огляд мови fortran II
- •4.3.5. Мови fortran IV, fortran 77 і fortran 90
- •4.4. Функціональне програмування: мова lisp
- •4.4.1. Витоки робіт в області штучного інтелекту та обробка списків
- •4.4.2. Процес розробки мови lisp
- •4.4.3. Огляд мови
- •4.4.5. Два нащадки мови lisp
- •4.4.6. Споріднені мови
- •4.5. Перший крок до удосконалення: мова algol 60
- •4.5.1. Історична ретроспектива
- •4.5.2. Початкова стадія розробки
- •4.5.3. Огляд мови algol 58
- •4.5.4. Прийняття звіту про мову algol 58
- •4.5.5. Процес розробки мови algol 60
- •4.5.6. Огляд мови algol 60
- •4.5.7. Оцінка мови algol 60
- •Лекція 5. Трансляція і формальні граматики
- •5.1. Транслятори
- •5.2. Процес трансляції
- •5.3. Формальні граматики. Нбф-граматика
- •Лекція 6. Java - мова ооп
- •6.2. Основні властивості програм і перші приклади
- •6.3. Арифметичні і побітові оператори мови Java
4.2.2. Система Speedcoding
У цей час в інших місцях були розроблені імперативні системи, що розширювали машинну мову, доповнюючи її діями над числами з плаваючою крапкою. Прикладом такої системи може служити система Speedcoding, розроблена Джоном Бекусом для комп'ютера IBM 701 (Бекус, 1954). Інтерпретатор системи Speedcoding ефективно перетворював 701-й комп'ютер у віртуальну трьохадресну обчислювальну машину, яка виконує дії над числами з плаваючою крапкою. Система містила в собі псевдокоманди, які виконують чотири арифметичні операції над числами з плаваючою крапкою, а також такі операції, як добування квадратного кореня, обчислення синуса, арктангенса, експоненти і логарифма. Умовні і безумовні переходи і перетворення введення-виведення також були частиною віртуальної архітектури. Для того щоб уявити собі обмеженість подібної системи, візьміть до уваги те, що після завантаження інтерпретатора залишалося всього 700 слів доступної оперативної пам'яті, і команда додавання двох чисел вимагала 4,2 мілісекунди на її виконання. З іншого боку, система Speedcoding містила таку нову можливість, як автоматичне збільшення індексних регістрів. В апаратному забезпеченні ця можливість не реалізовувалася аж до появи в 1962 році комп'ютерів UNIVAC1107. Завдяки наявності таких властивостей множення матриць у системі Speedcoding можна було виконати, застосувавши всього 12 команд. Бекус стверджував, що задача, на програмування якої в машинних кодах піде два тижні, при використанні системи Speedcoding може бути вирішена за кілька годин.
4.2.3. Система "компіляції" univac
Між 1951 і 1953 роками команда, очолювана Грейс Хопер (Grace Hopper), створила на комп'ютері UNIVAC серію "компілюючих" систем, названих А-0, А-1 і А-2, в основі яких лежали машинні коди, які реалізують псевдокоди, аналогічно тому, як мова ассемблера реалізує макроси. Вихідна програма, написана на псевдокоді для цих "компіляторів", була ще занадто примітивною, хоча це вже було значним удосконаленням у порівнянні з машинним кодом, оскільки зробило вихідні програми коротшими. Незалежно від цієї команди в 1952 році подібний підхід був запропонований Уілксом (Wilkes).
4.2.4. Суміжна робота
Практично в той же час були розроблені й інші засоби полегшення програмування. У Кембріджському університеті Девид Дж. Уілер (David J. Wheeler) розробив метод використання блоків переміщуваних адрес для часткового розв’язку задачі абсолютної адресації (Wheeler, 1950), а пізніше Моріс В. Уілкіс (Maurice V. Wilkes) (також у Кембріджу) втілив цю ідею при розробці програми ассемблера, що могла б поєднувати обрані підпрограми і розподіляти пам'ять (Wilkes et al., 1951, 1957). Це було дійсно важливе і фундаментальне досягнення.
Крім того, ми повинні згадати, що мови ассемблера, які зовсім відрізнялися від описаних псевдокодів, хоча й еволюціонували протягом початку 1950-х років, але на розробку мов високого рівня не зробили істотного впливу.
4.3. Комп'ютер ibm 704 і мова fortran
Безумовно, одне з найбільших досягнень в обчислювальній техніці зобов'язано своєю появою впровадженню в 1954 році комп'ютера IBM 704, оскільки можливості саме цієї машини підштовхнули до розробки мови FORTRAN. Можна стверджувати, що якби не корпорація IBM зі своїм комп'ютером IBM 704 і мовою FORTRAN, то дуже скоро з'явилася б яка-небудь інша організація, яка має подібний комп'ютер і відповідну мову високого рівня. Проте, першою була все-таки корпорація IBM, яка не тільки передбачала такий розвиток подій, але і знайшла ресурси для того, щоб взятися за цю справу.
