Огляд основних мов програмування 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Огляд основних мов програмування



У цій лекції хронологічно простежується розвиток деяких мов програмування, досліджується середовище, у якому кожна з них розроблялася, особлива увага звертається на внесок мови в комп'ютерні науки і причини, що призвели до його виникнення. Тут не міститься повного опису мов, розглядаються лише нові властивості, якими вони відрізняються одна від одної. Особливий інтерес викликають властивості, що зробили найбільший вплив на мови програмування, розроблені пізніше, чи на комп'ютерні науки в цілому.

Мова Picmkalkul Конрада Цузе

Перша з мов обговорення у деякій мірі досить незвичайна. По-перше, вона ніколи не була реалізована. Більш того, хоча вона була розроблена у 1945 році, її опис не публікувався аж до 1972 року. Через загальне ігнорування мови Plankalktll деякі її можливості не використовувалися в інших мовах програмування протягом 15 років після її розробки.

Історичні передумови

Між 1936 і 1945 роками німецький учений Конрад Цузе (Konrad Zuse) на основі електромеханічних реле створив ряд складних і витончених комп'ютерів. До 1945 року війна призвела до руйнування всіх цих комп'ютерів, за винятком однієї з останніх моделей— комп'ютера Z4. Цузе відправився у віддалене баварське селище Хинтерштейн (Hinterstein), а інші члени його дослідницької групи роз'їхалися в різні сторони.

 

Працюючи самостійно, Цузе направив свої зусилля на розробку мови для вираження обчислень, продовживши проект, початий ним у 1943 році з метою написання докторської дисертації. Нову мову він назвав Plankalkul, що означає "програмне числення". В об'ємному рукописі, датованому 1945 роком, але не опублікуваній до 1972 року (Zuse, 1972), Цузе дав визначення мови Plankalkul і використовував цю мову для написання алгоритмів розв’язку безлічі задач.

Огляд мови

Мова Plankalkul була незвичайно повною і володіла декількома дуже перспективними властивостями в області структур даних. Найпростішим типом даних у мові Plankalkul був окремий біт. На основі цього типу створювалися типи для представлення цілих чисел і чисел із плаваючою крапкою. Для представлення чисел із плаваючою крапкою, використовувалися додатковий код числа у двійковій системі і схема "прихованого біта", у даний час застосовувана для того, щоб не зберігати в пам'яті старший значущий біт у нормалізованій мантисі числа.

Крім цих звичайних скалярних типів, мова Plankalkul містила масиви і записи. При роботі з записами для включення в них інших записів як елементи допускалося використання рекурсії.

Хоча мова і не містила явного оператора goto, вона мала оператор циклу, подібний до оператора for мови Pascal. У мові також була команда Fin, верхній індекс якої означав вихід із внутрішнього циклу на зазначене число вкладених ітераційних циклів чи до початку нового ітераційного циклу. Мова Plankalkul містила оператор галуження, який не містив оператора else.

Найцікавішою особливістю програм Конрада Цузе було включення математичних виразів, що показують відношення між змінними в програмі. Ці вирази встановлювали, що саме в процесі виконання повинно бути істинним у тих точках програми, де знаходилися дані вирази. Самі ці вирази дуже схожі на твердження, використовувані в сучасній мові програмування Eiffel (Meyer, 1992) і аксіоматичній семантиці.

Рукопис Цузе містив програми, що були значно складніші програм, написаних до 1945 року! У ньому були наведені програми сортування масивів цілих чисел; перевірки зв’язності заданого графа; програми, які виконують дії з цілими числами і з числами з плаваючою крапкою, у тому числі добування квадратного кореня; програми, які робили синтаксичний аналіз логічних формул, що містять дужки й оператори із шістьма різними рівнями пріоритету. Ймовірно, найпримітнішими були 49 сторінок алгоритмів гри в шахи (гри, у якій сам Цузе фахівцем не був).

Якби на початку 1950-х років який-небудь фахівець з комп'ютерних наук знайшов створений Цузе опис мови Plankalkul, то єдиним аспектом, який би ускладнив реалізацію цієї мови в описовому вигляді, була би форма запису. Кожен оператор складався з двох-трьох рядків команд. Перший рядок був дуже схожий на оператори сучасних мов програмування. Другий рядок, який був необов'язковим, містив список індексів масивів, що згадуються в першому рядку. Цікаво відзначити, що той же метод вказування індексів використовувався Чарльзом Бебіджем (Charles Babbage) у програмах, написаних ним для його "аналітичної машини" у середині XIX сторіччя. Останній рядок кожного виразу мовою Plankalkul містив назви типів змінних, які згадувалися в першому рядку. На перший погляд, подібний запис виглядає лякливо.

Зараз ми можемо тільки здогадуватись, по якому шляху пішов би розвиток мов програмування і комп'ютерів, якби робота Конрада Цузе стала б широко відомою в 1945 чи навіть у 1950 році. Також цікаво припустити, як відрізнялася б зроблена Цузе робота, якби вона виконувалася в мирний час у колективі вчених, а не у фактичній ізоляції в Німеччині 1945 року.

Мінімальне програмування на апаратному рівні: псевдокоди

Комп'ютери, що з'явилися наприкінці 1940-х і початку 1950-х років, були далеко не такими зручними, як сучасні. Крім того що вони були дуже повільними, ненадійними, дорогими і мали вкрай малий обсяг пам'яті, програмувати на них було дуже складно через недостачу програмної підтримки.

Не існувало мов програмування високого рівня, чи принаймні, мов ассемблера, тому програмування виконувалося в машинних кодах, що було кропіткою і схильною до помилок роботою. Серед проблем, що виникали, можна назвати використання цілочисельних кодів для директиви команд. Наприклад, команда ADD ("додати") повинна була визначатися кодом 14, а не текстовим позначенням, яке навіть складається з одного символу. Це значно ускладнювало читання програми. Більш істотною проблемою була абсолютна адресація, що ускладнювала модифікацію програм. Припустимо, що в нас у пам'яті міститься програма в машинних кодах. Багато команд такої програми посилаються на інші комірки пам'яті поза програмою, звичайно на довідкові дані, чи вказують цілі команд розгалуження. Уведення команди не в кінець програми, а в довільне місце усередині її, зводить нанівець правильність посилань на адреси, що знаходяться за точкою введення нової команди, оскільки для надання місця новій команді ці адреси повинні відповідним чином збільшитися. Для того щоб уведення нової команди не порушувало структури вже існуючої програми, програміст повинен знайти і змінити всі команди, що посилаються на адреси, які знаходяться за додатково введеною командою. Подібна проблема виникає і при видаленні команди. Правда, у цьому випадку в машинних мовах часто використовується команда "пуста операція1', якою можна замінити вилучену команду, не порушивши при цьому загальної структури програми,

Ці стандартні проблеми, що існують у всіх машинних мовах, і були основною причиною винаходу ассемблерів і мов ассемблера. Крім того, у той час задачі, пов'язані з програмуванням, були в основному обчислювальними. Для їхнього розв’язку було потрібно виконувати арифметичні операції над числами з плаваючою крапкою, а також операції індексації для більш зручного використання масивів. Проте, жодна з зазначених можливостей не була включена в архітектуру комп'ютерів кінця 1940-х і початку 1950-х років. Для усунення цих недоліків, природно, потрібно було розробляти мови більш високого рівня.

Мова 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 разів повільніша, ніж інтерпретація машинних кодів.

Система 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).

Суміжна робота

Практично в той же час були розроблені й інші засоби полегшення програмування. У Кембріджському університеті Девид Дж. Уілер (David J. Wheeler) розробив метод використання блоків переміщуваних адрес для часткового розв’язку задачі абсолютної адресації (Wheeler, 1950), а пізніше Моріс В. Уілкіс (Maurice V. Wilkes) (також у Кембріджу) втілив цю ідею при розробці програми ассемблера, що могла б поєднувати обрані підпрограми і розподіляти пам'ять (Wilkes et al., 1951, 1957). Це було дійсно важливе і фундаментальне досягнення.

Крім того, ми повинні згадати, що мови ассемблера, які зовсім відрізнялися від описаних псевдокодів, хоча й еволюціонували протягом початку 1950-х років, але на розробку мов високого рівня не зробили істотного впливу.



Поделиться:


Последнее изменение этой страницы: 2016-09-20; просмотров: 311; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.135.217.228 (0.017 с.)