доповідь
На тему: Історія мови програмування Lisp
зміст
1. Введення
2.Особенности діалектів мови Лісп.
a) Маклісп
b) муЛісп.
c) Інтерлісп.
d) Франс Лісп.
e) Зеталісп Лисп-машин.
f) Коммон Лісп.
3.Заключеніе.
Мова Лісп був розроблений в Стенфорді під керівництвом Дж. Маккарті на початку 60-х років. За початковим задумом він повинен був включати поряд з усіма можливостями Фортрана кошти роботи з матрицями, покажчиками і структурами з покажчиків і т. П. Але для такого проекту не вистачило коштів. Остаточно сформовані принципи, покладені в основу мови Лісп: використання єдиного спискового подання для програм і даних; застосування виразів для визначення функцій; Дужковий синтаксис мови.
Абревіатура LISP розшифровується як LIST PROCCESSOR або по-російськи: обробник списків. Лісп є мовою низького рівня, його можна розглядати як асемблер, орієнтований на роботу з списковим структурами. Тому протягом усього існування мови було багато спроб його удосконалення за рахунок введення додаткових базисних примітивів і керуючих структур. Але всі ці зміни, як правило, не ставали самостійними мовами. У нових своїх редакціях Лісп швидко засвоював все цінні винаходи своїх конкурентів.
Через свого експериментального акценту на символьної обробки, Лисп був спочатку дуже неефективним для цифрових обчислень, по крайней мере, в порівнянні з Fortran. Лисп подолав свою стару репутацію як безнадійно неефективний, Лісп тепер використаний у багатьох додатках, де ефективність не є центральним дією. Наприклад, Лисп стала мовою вибору для оболонок операційної системи і для розширення мов, для редагування систем і автоматизованого проектування. Лісп, - другий старший мову в широко поширеному використанні сьогодні (тільки Fortran більш старий), який безперервно пристосовується, щоб охоплювати найбільш сучасні ідеї про програмування.
Після створення на початку 70-х років потужних Лісп-систем були спроби створення мов ІІ, відмінних від Лиспа, але на тій же основі. Подальший розвиток мови йде, з одного боку, шляхом його стандартизації (Стандарт-Лисп, Франц-Лисп, Коммон Лісп), а з іншого - в напрямку створення концептуально нових мов для подання і маніпулювання знаннями в Лісп середовищі. В даний час Лісп реалізований на всіх класах ЕОМ, починаючи з ПЕОМ і закінчуючи високо продуктивними обчислювальними системами.
Особливості діалектів мови Лісп.
Маклісп.
Крім символьної обробки Маклісп широко використовувався в традиційних числових обчисленнях, що застосовуються, наприклад, в обробці мови та зображень. Крім дослідників ІІ і розробників алгебраїчної системи Максима на Маклісп вплинули і роботи груп в МІТ з робототехніки, обробці мови та зображень. Виходячи з вимог, що пред'являються цими областями, в Маклісп були включені нові математичні типи даних, такі як матрична і бітова обробка, а також широкий набір арифметичних функцій і засобів. Бути може, найважливіша з них - можливість обчислень з необмеженою точністю, яка грунтується на створених Кнутом (1969) алгоритмах.
Маклісп був також першою Лісп-системою для якої створений хороший транслятор. Транслятор генерує машинну програму в формі списків. Машинний код у вигляді списку легко обробляти і результуючий код для числових завдань виходив ефективніше, ніж у кращих фортрановскіх трансляторів.
Однак більшу частину своїх властивостей Маклісп придбав під впливом стоять перед дослідниками ІІ проблем і накопиченого досвіду. Так в мову потрапили макроси читання і таблиці читання, що дозволяють легко змінювати і розширювати структуру мови. Таким же чином з вимог до програм і оточенню виникли керуючі структури, механізми обробки переривань і помилок, а також використання керуючих символів, створений і інтегрований в систему екранний редактор, з'явилися управління і взаємодію паралельних процесів.
Основна увага розробники Макліспа зосередили на ефективності. Цьому служать вказівки, уточнюючі способи обробки аргументів функцій, а також екранування від втручання програміста внутрішніх механізмів системи. За рахунок цих заходів швидкість роботи Макліспа в 1.5-2.5 рази вище, ніж Інтерлісп.
Всього в Макліспе використовується близько 400 функцій. Найбільшим недоліком системи є те, що її ніколи не документували належним чином. Документація по цій системі розкидана по різним звітів і посібникам. Маклісп був дослідницької системою і не призначався для навчання і промислового використання.
муЛісп.
Інтерпретатор Мулісп-85, розроблений для ПЕОМ серії IBM PC - вдалий варіант реалізації діалекту мови, що включає порівняно обмежений набір базових функцій (близько 260) і опинився внаслідок цього більш простим для вивчення.
У порівнянні з Коммон Лісп діалект муЛісп не має такого широкого спектру доступних типів даних. У ньому забезпечується робота тільки з двома типами числової інформації: цілими числами з будь-якою основою і раціональними. У діалекті відсутні кошти роботи зі структурами, масивами, потоками і іншими типами даних, зазначена реалізація мови Лісп має одну суттєву перевагу - можливість поповнення базового набору функцій шляхом підключення підпрограм, написаних на мові асемблера, що дозволило підвищити гнучкість використання інтерпретатора і ефективність прикладного програмного забезпечення , створюваного на його основі. Можливість такого поповнення відсутня в більшості інших Лісп-систем, які є в цьому сенсі замкнутими програмними продуктами.
Серед інших, ймовірно, менш суттєвих, особливостей системи можна вказати на реалізацію спеціального механізму, що дозволяє не турбуватися про присвоєнні початкових значень літерально атомам, які отримують початкове значення, рівне «друкованого» імені самого атома. Ще однією особливістю діалекту є можливість використання нової синтаксичної конструкції «вбудований COND», істотно скорочує тексти описів функцій користувача і застосовується при записі тел функцій і лямбда-виразів.
Набір базових функцій муЛісп-інтерпретатора включає ряд функцій, що забезпечують доступ практично до всіх функцій ОС ЕОМ через відповідні переривання. Нарешті, зазначена Лісп-система забезпечується бібліотеками Лісп-функцій, які доповнюють базовий набір функціями, наявними в діалектах Коммон Лісп і Інтерлісп, що полегшує вирішення проблеми переносимості вихідних текстів програмних модулів, а також бібліотеками, що дозволяють виконувати маніпулювання вікнами на екрані дисплея і обробляти управляючі впливи через пристрій типу «миша». У комплект додаткового програмного забезпечення до інтерпретатора входять інтерактивний редактор текстів і проста навчальна система, написані на діалекті мови муЛісп.
Інтерлісп.
Інтерлісп з'явився в 1972 році з ББН-Лиспа. До 1978 року, коли вийшло опис Інтерліспа, мова і система вже досить стабілізувалися. Інтерлісп вже не була мовою в тому ж сенсі, що і Маклісп або інші Лісп - системи або звичайні традиційні системи програмування. Він представляв собою інтегроване середовище програмування, в яку увійшло безліч різних допоміжних засобів. Інтерлісп став класичним прикладом добре розвинених програмних засобів і засобів в системах поділу часу.
Цей діалект поряд з Коммон Лісп один з найбільш поширених, має досить розвинений апарат уявлення і маніпулювання різними структурами даних, включаючи масиви. Серед загальних особливостей даного варіанту мови слід відзначити використання для позначення вбудованих функцій нетрадиційних імен, що часом ускладнює перенесення готових програмних продуктів на інші діалекти та інші ЕОМ.
У 1974 році Xerox почала розробку для Інтерліспа персональної лісповскіе робочої станції під назвою Alto. У реалізації Лиспа для Alto вперше застосували спроектовану спеціально для мови Лісп мікропрограмміруемую систему команд і міні-ЕОМ, здатну з більш високою продуктивністю, ніж універсальні ЕОМ, інтерпретувати лісповскіе програми. З цієї машини Alto згодом розвинулися Лісп-машини серії 1100 фірми Xerox.
На основі версії Інтерліспа, яка працювала в системі поділу часу, була створена сумісна знизу вгору версія Лиспа Інтерлісп-де, використовувана на Лісп-машинах серії 1100. В її користувальницький інтерфейс входили багатовіконне взаємодія, графіка з високою роздільною здатністю, засоби вибору з меню і миша , а також орієнтований на використання екрану інспектор структур даних. Ідея поділу екрана на багато незалежних вікна народилася в XLG. Алан Кей вже в кінці 60-х років запропонував таку ідею підходу до комп'ютерів майбутнього і інтерфейсу між людиною і машиною. Робота XLG привела до створення в 70-х роках до розробки мови програмування Smolltalk і об'єктного програмування.
При створенні Інтерліспа робота велася досить ретельно. Система добре документована і більш нові версії сумісні з більш ранніми. Так перевагою системи стало безперервно поповнюється велику кількість стерпного програмного забезпечення. З іншого боку, обмеження системи старим, зафіксованим вже в кінці 70-х років діалектом зробило систему почасти застарілою і важко розширюється. У Інтерліспе серед іншого відсутні ієрархічні типи даних, об'єкти і замикання. До того ж він базується на динамічному зв'язуванні, тоді як нові версії Лиспа - статичні. Однак з Інтерліспа бере початок нова версія - Коммон Лісп (1986). Для програмування на більш високому рівні в Інтерлісп розроблені такі засоби, в яких вже були присутні об'єкти.
Інтерлісп - настільки замкнута система, що доступна тільки її оттранслировать версія в машинних кодах. У деяких інших системах, таких як, наприклад Зеталісп, підтримується версія Лиспа мовою оригіналу, яка доступна користувачеві і може модифікуватися ім. Розвиток закритих систем, схожих на Інтерлісп, пов'язане з ресурсами, що є у створили їх лабораторій.
Інтерлісп використовує понад 500 функцій і велику кількість системних імен і прапорців, за допомогою яких можна налаштувати і підігнати систему. Інтерлісп реалізований в системі поділу часу на багатьох великих ЕОМ.
У Інтерліспе основна увага була приділена зручності системи для користувача. Головний принцип розробників цього діалекту: все, що може мати місце в системі, має природно виражатися в термінах її вхідного мови. Тому в Інтерлісп програмісту є все. Він може перевизначати будь-які, в тому числі і вбудовані, функції; задавати і перевизначати реакції на помилки; працювати безпосередньо з рівня вхідного мови з внутрішніми структурами інтерпретатора і т. д. При цьому система підтримує свою цілісність і працездатність.
Франс Лісп.
Маклісп став основою для багатьох нових діалектів мови Лісп, першим з яких був Франс Лісп. Ця версія Лиспа названа в честь відомого угорського композитора. Головним мотивом розробки Франс Лісп було бажання отримати сучасну Лисп-систему для нових машин VAX, щоб на них можна було використовувати систему Максима і інше лісповскіе програмне забезпечення. Франс Лісп в досить великій мірі нагадує Маклісп, на якому спочатку була реалізована Максима. Однак в діалекті відсутні деякі застарілі особливості Макліспа і містяться більш нові системні ідеї, запозичені в той час в MIT Лісп-машин для Зеталіспа.
Новий діалект був реалізований в університеті в Берклі на ЕОМ VAX 780/11 на мові Сі під управлінням системи UNIX. Франс Лісп досить широко використовується як під управлінням UNIX, так і під управлінням VAX / VMS і в даний час є найбільш часто використовуваної версією Лиспа для систем поділу часу. Крім того, він широко використовується і на 32-бітових мікро-ЕОМ і робочих станціях, що працюють під управлінням UNIX.
Завдяки своїй добрій переносимості Франс Лісп набув поширення у багатьох університетах і дослідницьких установах. Супровід системи також розійшлося в різних виправлення системних помилок, реалізаціях найбільш ефективних алгоритмів, а також в розширеннях мови.
Зеталісп Лисп-машин.
Зеталісп також спирається на Маклісп. Він створений в 70-і роки в MIT в рамках проекту Лісп-машини, фінансованого оборонним агентством. З самого початку його метою було виготовлення комерційного продукту. У 1979 році в зв'язку з проектом народилися два підприємства виготовляють Лісп-машини: Symbolic Inc. і Lisp Machine Inc. (LMI). Після цього в 80-ті роки робота з розвитку Зета Лиспа тривала в них незалежно один від одного на комерційній основі. В якійсь мірі системи відрізняються один від одного, але в частині Зета Лиспа машини майже сумісні. [2]
Зета Лісп містить наступні розвинені механізми і риси:
- широкий вибір типів даних;
- можливість об'єктно-орієнтованого програмування в системі Flavor;
- сучасні керуючі структури, динамічні механізми передачі управління співпрограми і процеси;
- гнучкий механізм ключових слів в лямбда-списку і багатозначні функції;
- введення і виведення, що грунтується на потоках;
- простору імен;
- вже готові функції, в тому числі для сортування, роботи з лінійними управліннями і матричні обчислення.
Вибір використовуваних в середовищі Зеталіспа інструментів і мов програмування залежить від постачальника, причому пропонований набір засобів весь час розширюється. Серед інших мов пропонуються Фортран, Паскаль, Ада і Пролог. Для цих мов в середовищі Зеталіспа існують особливо розвинені програмні оточення, і розроблені в них програми можна виконувати разом з програмами на Ліспі.
Готові інструменти та прикладні розробки у великій кількості є для роботи з ЕС, з природною мовою і мовою, з реляційними базами даних, машинної графіки і машинного проектування.
Коммон Лісп.
Цей діалект відрізняється найбільш широким поданням різних структур даних і включає близько 800 вбудованих функцій. У цьому діалекті забезпечуються засоби обробки основних класів числової інформації: цілих, дійсних і комплексних. Символьні дані (літери, літеральние атоми, рядки) в Коммон Ліспі відповідають основним можливостям інших Лісп-систем. Додатково є засоби обробки недрукованих літер в символьних іменах.
Одним з істотних переваг діалекту Коммон Лісп є наявність засобів обробки масивів і структур, за своїми можливостями не поступаються відповідним засобам традиційних мов програмування (Фортран, Паскаль). Масиви в Коммон Ліспі можуть мати будь-який невід'ємне число вимірювань і індексуються послідовністю цілих чисел. Тип компонентів масиву може бути довільним. Виділяється підклас векторів - одновимірних масивів, серед яких окремо розглядаються рядки і бітові масиви.
Структури Коммон Лиспа є типом багатокомпонентних записів, які визначаються користувачем і мають іменовані компоненти. Вбудоване макроозначень DEFSTRUCT використовується для визначення структур нових типів. Для створення даних нового типу у вигляді структури передбачені кошти автоматичної генерації набору функцій, що забезпечують засоби маніпулювання об'єктами цього класу.
Зручним засобом контролю доступу до різних змінним і функцій Лісп-програм в Коммон-Ліспі є пакети. Пакет - безліч імен об'єктів, визначених і доступних в ньому. Усередині пакета імена об'єктів поділяються на внутрішні і зовнішні. Перші призначені для використання тільки всередині даного пакету, а другі - для забезпечення зв'язку з іншими пакетами. Лісп-інтерпретатор представляє широкий спектр засобів маніпулювання з пакетами. Як правило, Лисп-система має в своєму складі чотири стандартних пакету: lisp (містить примітиви системи), user (замовчуваний пакет прикладних програм і даних користувача), keyword (що містить ключові слова всіх вбудованих функцій і функцій, визначених користувачем), system (зарезервований для системних цілей).
Значною переробці і розширенню в Коммон Ліспі піддалися засоби введення-виведення і передачі інформації. Для ефективної організації різних обмінів із зовнішнім середовищем введена концепція потоків, що дозволяють здійснювати одно- і (або) двосторонню передачу інформації. Для потоків передбачений набір базових функцій. У діалекті розрізняють символьні і виконавчі потоки. У першому випадку передача здійснюється по байтам, а в другому - цілими числами. Крім стандартних потоків користувач має можливість створювати і використовувати власні потоки.
На додаток до вказаних типів даних Коммон Лісп має ряд специфічних класів об'єктів: хеш-таблиці, що забезпечують ефективний спосіб доступу до даних по ключу; READ-таблиці, що забезпечують управління обробкою інформації надходить із вхідного потоку Лісп-системи, і деякі інші. Таке безліч наявних в діалекті різних типів даних, з одного боку, розвіює існуюче хибне уявлення про мову Лісп як про засіб обробки тільки символьної інформації, а з іншого - наявність потужних засобів маніпулювання типами даних істотно ускладнює його.
Цей діалект залишений відкритий: принциповим є те, що залишилася можливість в майбутньому, коли підійде час і буде досягнуто згоди, додати нові засоби і методи. Ця ідея якраз відповідає духу Лиспа.
Коммон Лісп не є готовою програмною системою в тому ж сенсі, що і Інтерлісп, оскільки питання середовища в основному залишені відкритими. У стандарті не визначене, яким повинен бути редактор або інші допоміжні засоби. Сказано лише в найзагальнішому вигляді, яким чином вони викликаються. Для того щоб забезпечити швидкий розвиток, середа та інструментальні засоби ще не порушені стандартизацією, і тому є можливість створювати різні середовища для різних цілей. Коммон Лісп не визначає також і інтерфейс користувача.
В Коммон Лісп на сучасному етапі не включені навіть кошти об'єктного програмування, хоча і визначені необхідні для цього базові механізми (замикання та ін.). Таким чином, об'єкти можна реалізувати на Ліспі. Але вже ведеться робота по стандартизації засобів і форм об'єктного програмування.
В Коммон Ліспі багато уваги приділено практичним вимогам, і, ймовірно, тому не всі його риси естетичні та чисті. Безсумнівно, що і інші Лісп-системи будуть використовуватися в подальшому, і їх також необхідно розвивати.
Коммон Лісп призначений не тільки для роботи зі списками або для символьної обробки, він є універсальною мовою програмування, що включає в себе особливо хороші засоби для чисельних обчислень, управління даними і зв'язку. На Коммон Ліспі можна з однаковим успіхом писати програми в традиційних операторном, процедурному, фразовой стилі, а також і в властивих Ліспі стилях. У мові містяться передумови для використання різних способів і стилів програмування, таких як операторний, функціональне, макропрограмування, програмування, кероване даними, і продукційне програмування, а також кошти, необхідні для логічного і об'єктного програмування та реалізації інших засобів більш високого рівня.
Можна сміливо сказати, що Коммон Лісп містить майже всі, що на сьогоднішній день можуть дати інші відомі мови програмування, і, крім того, він передбачає кошти для розширення мови.
Сучасні діалекти мови Лісп можна розглядати як потужні інтерактивні системи програмування. Це пояснюється двома причинами. По-перше, сама мова Лісп зазнає серйозних змін - розвиваються засоби мови, призначені для обробки нетрадиційних для Лиспа типів даних: масивів, векторів, матриць; з'являються деякі засоби управління пам'яттю (пакети), відсутні в Ліспі. Серйозні зміни зазнають і керуючі структури. З'явилися невластиві природі мови Лісп функції, запозичені з Фортрана, Алгола, Паскаля, Сі: Do, Loop, Goto, Case та інші, що дозволяють користувачеві, незнайомому з принципами функціональних мов, легко переходити на Лісп. Якість програм знижується, зате зростає популярність мови. По-друге, якщо на першому етапі розвитку Лісп-систем була властива невелика швидкість обробки даних і серйозні обмеження на ємність використовуваної оперативної пам'яті, то сучасні Лисп-системи вже можуть змагатися за цими параметрами з такими мовами, як Сі, Паскаль і ін. Використання Лісп-машин взагалі практично знімає обмеження пам'яті і швидкодії.
|