- •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. Мінімальне програмування на апаратному рівні: псевдокоди
Комп'ютери, що з'явилися наприкінці 1940-х і початку 1950-х років, були далеко не такими зручними, як сучасні. Крім того що вони були дуже повільними, ненадійними, дорогими і мали вкрай малий обсяг пам'яті, програмувати на них було дуже складно через недостачу програмної підтримки.
Не існувало мов програмування високого рівня, чи принаймні, мов ассемблера, тому програмування виконувалося в машинних кодах, що було кропіткою і схильною до помилок роботою. Серед проблем, що виникали, можна назвати використання цілочисельних кодів для директиви команд. Наприклад, команда ADD ("додати") повинна була визначатися кодом 14, а не текстовим позначенням, яке навіть складається з одного символу. Це значно ускладнювало читання програми. Більш істотною проблемою була абсолютна адресація, що ускладнювала модифікацію програм. Припустимо, що в нас у пам'яті міститься програма в машинних кодах. Багато команд такої програми посилаються на інші комірки пам'яті поза програмою, звичайно на довідкові дані, чи вказують цілі команд розгалуження. Уведення команди не в кінець програми, а в довільне місце усередині її, зводить нанівець правильність посилань на адреси, що знаходяться за точкою введення нової команди, оскільки для надання місця новій команді ці адреси повинні відповідним чином збільшитися. Для того щоб уведення нової команди не порушувало структури вже існуючої програми, програміст повинен знайти і змінити всі команди, що посилаються на адреси, які знаходяться за додатково введеною командою. Подібна проблема виникає і при видаленні команди. Правда, у цьому випадку в машинних мовах часто використовується команда "пуста операція1', якою можна замінити вилучену команду, не порушивши при цьому загальної структури програми,
Ці стандартні проблеми, що існують у всіх машинних мовах, і були основною причиною винаходу ассемблерів і мов ассемблера. Крім того, у той час задачі, пов'язані з програмуванням, були в основному обчислювальними. Для їхнього розв’язку було потрібно виконувати арифметичні операції над числами з плаваючою крапкою, а також операції індексації для більш зручного використання масивів. Проте, жодна з зазначених можливостей не була включена в архітектуру комп'ютерів кінця 1940-х і початку 1950-х років. Для усунення цих недоліків, природно, потрібно було розробляти мови більш високого рівня.
4.2.1. Мова Short Code
Перша з цих нових мов, названий Short Code, була розроблена Джоном Мочлі (John Mauchly) у 1949 році для комп'ютера BINAC. Пізніше мова Short Code була перенесена на комп'ютер UNIVAC I і протягом декількох років була одним з основних засобів програмування цих машин. Незважаючи на те, що про вихідну мову Short Code відомо дуже мало (повний її опис ніколи не публікувався), зберігся посібник із програмування для версії UNIVAC I (Remington-Rand, 1952). Доречно буде припустити, що ці дві версії були дуже схожі.
Слова мови UNIVAC I складалися з 72 біти, згрупованих у 12 шестибітових байтів. Мова Short Code складалася із закодованих версій математичних виразів, які потім потрібно було обчислювати. Команди були двобайтними величинами, і більшість виразів вміщалися в одному слові. Ось кілька прикладів команд мови Short Code:
- 06 модуль In (n+2)-ий степінь
) 07 + 2n корінь (n+2)-ого степеня
= 08 пауза 4n якщо <= n
/ 09 ( 58 друк і табуляція
Змінні, чи комірки пам'яті, іменувалися двобайтними кодами, тому що комірки пам'яті повинні були використовуватися як константи. Наприклад, величини ХО і YO могли бути змінними. Оператор
ХО = SQRT(ABS(YO))
можна було закодувати в слово 00 ХО 03 20 06 YO. Заголовний код 00 використовувався як доповнення для заповнення слова. Цікаво, що команди множення не існувало; на цю операцію вказувало просте розміщення двох операторів поруч, як це прийнято записувати в алгебрі.
Мова Short Code не була переведена у машинні коди; вона була реалізована за допомогою чистого інтерпретатора. Згодом подібний процес був названий автоматичним програмуванням. Він сильно спростив процес програмування, щоправда, за рахунок часу, затрачуваного на виконання програми. Інтерпретація мови Short Code була приблизно в 50 разів повільніша, ніж інтерпретація машинних кодів.
