Які особливості сприяли еволюції Паскаля?


17

Я складаю докладну історію мови Паскаль, і є кілька деталей, яких я пропускаю.

Сьогодні так багато можливостей, що ми приймаємо як належне. Які риси суттєво сприяли еволюції Паскаля, і чому вони були суттєвими?

Я шукаю мовні особливості, а не функції платформи чи рамки. Так, як параметри перевантаження або параметри за замовчуванням, але не підтримка Linux чи новий віджет Rich Text.

Я знаю, що існує кілька різних ароматів Pascal (Delphi, Free Pascal, Oxygene, Quick Pascal, Apple Pascal тощо), і вони вводили однакові функції в різний час і паралельно. Що це нормально. Я дивлюся на мову Паскаля в цілому, і коли відбулися значні віхи (дати, версії тощо)


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

2
Вам відомо, що продукт Turbo Pascal зробив революцію в світі Pascal? І власне комп'ютерний світ IBM? Тим більше, що на ньому закріплені струни.

4
Не забудьте UCSD Pascal! Він ввів байт-коди (p-коди), задовго до того, як Ява блиснув в очах Сонця.
Макнейл

1
+1 @Macneil UCSD p-Code та Smalltalk VM - це те, що я завжди пояснюю, коли говорю про сучасний керований код (Java, .NET). Приємно мати дежау, коли бачиш безліч «сучасних» речей (наприклад Apps, що є лише новим смаком клієнт-сервера).
Jeroen Wiert Pluimers

1
@ Jeroen Pluimers: Мене також розважає ця розмова про те, що DVCS є "новим". Я використовував SCCS / Teamware на Sun, Torvalds використовував BitKeeper. Коли я побачив CVS, я знав, що він зламаний (як це робив Торвальдс). Коли я вперше почув про SVN, я подумав "о, вони нарешті це виправили". Але не. Світ OSS (і Джоель!) Були настільки пошкоджені CVS, що робили все не так, їм потрібно вірити, що це нова річ!
Macneil

Відповіді:


10

З мовної історичної точки зору, мабуть, найбільшим внеском Паскаля була сильна безпека типу. Зараз битва в основному закінчилася - перемогла сторона Паскаля - і промисловим переломним пунктом стала Ява. Але дуже довго С випереджав Паскаля людей, які вважали себе дорослими кодерами значною мірою через це: люди хотіли, щоб свобода маніпулювала їхніми покажчиками так, ніби вони були цілими числами. Практична реалізація Паскаля мала лазівки, як і профспілки, які не динамічно перевіряли дискримінантне поле, або навіть мали повномасштабний набір покажчиків до того, що вони були всіма еквівалентними С (Турбо Паскаль був одним із таких).

Це і спрощення складного специфікації ALGOL 68 [1] може стати відправною точкою.

[1] Спробуйте прочитати звіт ALGOL 68 десь - це, безумовно, продукт 60-х! Один веб-сайт вказує на деякі свої дивні жаргони: "автобусна марка", "невидимі дерева виробництва", "первинні оточення", "інцестуальні союзи", "поняття", "протоноції", "метаноції", "гіпернотації", " паранонації 'тощо.


15

Я б сказав, що дві найбільш важливі рушійні сили за всю історію Паскаля:

  1. Безпека типу: Паскаль був першокласним у створенні віри, що безпека типу важлива і важлива в мові.
  2. Ефективність компілятора: Паскаль завжди був розроблений як мова єдиного проходу, і показав світові, наскільки швидким може бути компілятор, не відмовляючись від влади. Завдання для швидкого компілятора - це також речі, які добре розробляють, легко читається мовою. Бенлендський генуез був у тому, щоб забезпечити все це та продуктивність.

Чи не був PASCAL також першою мовою, де компілятор був написаний у самому PASCAL? Ще одна примітна річ на той час - P-код - код для віртуальної машини Pascal. Все, що потрібно було зробити для впровадження PASCAL на іншій машині, було написати інтерпретатор або асемблер для P-коду.
Інго

Додам, що безпека типу також включала механізми, відомі як перевірка виконання у більшості компіляторів Pascal. (Близько?) У кожного компілятора є їх, що принципово відрізняється від підходу LINT, який підтримує компілятори C.
Марко ван де Ворт

11

Вам справді потрібно повернутися до витоків - знайти трохи історії Ніклауса Вірта. Паскаль розпочав своє життя як мову викладання. "Алгоритми + Структури даних = Програми" - хороша відправна точка.

У той час Паскаль був набагато простішим, ніж Алгол 68 та PL / 1. Це вимушена структура та декларація, а також сильна безпека типу, на відміну від Fortran4 (Fortran 77 трохи покращив речі там, але ви все одно можете грати жахливо швидко-п-вільно). І порівняно з COBOL, програми були короткі, прості та простіші. (Привіт, світ приблизно в 6 рядках замість 600).

Коли він зародився, у Pascal з'явилися такі речі, як масиви символів - це було для обробки рядків. З часом поліпшувалися речі.

Якщо ви дійсно хочете заглибитися в історію Паскаля, слід врахувати деякі моменти:

  • Оригінал Вірта (Стандарт Паскаль)
  • розширення Digital Equipment Corp (DEC) на Vax
  • UCSD p-система (на багатьох машинах, зокрема Apple-2)
  • Турбо Паскаль
  • Apollo Domain Pascal (використовується для запису операційної системи Домен / ОС, яка також називається Aegis)
  • Turbo Pascal з об'єктами та одиницями (версія 5.5 та пізніших версій. Редагувати: щойно знайдений PDF 5.5 OOP PDF )
  • Delphi

Ще у 1980-х роках відбувся величезний фельдшер між Паскалем та С. У обох таборах відбувалася величезна кількість розвитку та діяльності.

Як наслідок, дивні та чудові речі, такі як Bliss-32, Algol та PL / 1, майже зникли - але ідеї з них пробилися в Паскаль.

EDIT: символьні масиви можуть бути упаковані, що надало особливі властивості, але якщо ви хотіли, що ми зараз знаємо як обробку рядків, вам потрібно було самому виростити його.


IIRC була невелика кількість спеціальної обробки packed array[1..n] of char;, наприклад, у Read (ln) та Write (ln)
Геррі

Так, readln, Writeln були трохи особливими тим, що вони могли обробляти введення / виведення змінної кількості символів. В кінці 1980-х років також було трохи пилу про те, що вони злі і грішні і порушують мовну конструкцію, оскільки вони приймають змінну кількість параметрів. Пуристи зненавиділи це. Решта з нас просто використовували це, не переживаючи надто багато.
quick_now

Можливо, модульні / одиничні системи з "іншої" мови Wirth Modula2. (Хоча, можливо, опосередковано завдяки результатам зусиль, щоб отримати його на паскальських стендах, він нарешті зробив розширений стандарт Паскаля, хоча і з різним синтаксисом)
Марко ван де

5

Об'єктно-орієнтовані розширення! Object Pascal був найбільшим (неофіційним) стрибком стандартів із випуском Delphi (1) у середині 90-х. Важко вибрати лише одну, але все ядро ​​об'єктної моделі в цілому допомогло наблизити мову до сучасного статусу. На жаль, до цього часу він не був укладений в офіційний єдиний єдиний стандарт, якому всі компілятори повинні відповідати для кодування симетрії.

На щастя, розробники проекту Free Pascal досить добре вмістили функції, додані в Delphi як Borland, так і Embarcadero. RemObjects не так багато, але, принаймні, він має зв'язки з Embarcadero під призмою Delphi, тому будь-яке відхилення від стандарту (щоб зробити мову більш .NET сумісною) було б сильно задокументовано.


8
Об'єкти були введені в Паскаль разом з Turbo Pascal 5.5
mcottle

1
процедури та функції за замовчуванням були статичними. Вам потрібно було використати virtualключове слово, щоб зробити їх доступними для підкласів.

1
Віртуальний не є зарезервованим словом у Delphi. Список зарезервованих слів Delphi та ключових слів призми можна знайти тут і тут .
Давид I

2
Об'єкти були введені в Pascal Apple. en.wikipedia.org/wiki/Object_Pascal#Early_history_at_Apple
Карл Манастер

2
@Carl - Я забув, що класичні Маки запрограмовані на Паскалі, і я не знав, що це OO версія Pascal, створена Wirth.
mcottle

4

Я пам’ятаю лише одну чи дві речі, коли давно користувався Pascal з MS-DOS:

Turbo Pascal більш-менш представив своєрідний IDE у 80-х (а продуктивність компіляції отримала великий приріст порівняно з UCSD Pascal

Якось близько середини 90-х Борланд змінив назву з Турбо на Борланд Паскаль . В якості першого кроку було запроваджено Units, що дозволило розділити великі проекти на окремі підрозділи компіляції.

Пізніше вони також додали об'єктно-орієнтоване програмування.


Турбо Паскаль був простим продуктом. У Borland Pascal було багато додаткових матеріалів, таких як асемблери тощо.

2
Одиниці, де введено в Turbo Pascal (v4 IIRC). Вони компілювали файли .tpu (турбо-паскаль), які були попередниками поточних файлів dcu. Я вважаю, що вони ґрунтувалися на концепціях мови Wirth Modula-2.
Геррі

1
ISTR у p-System UCSD теж були одиниці, але я не знаю, чи були вони перед Turbo Pascal чи ні.
TMN

Цікаво, що картридж "BASIC PROGRAMMING" для Atari 2600 забезпечив у 1980 році екран програмування, який був напрочуд схожий з екраном CodeView; можна було переглянути програму (з виділеною поточною точкою виконання) в одній області екрана, значення змінних за секунду та будь-який вихід із "друкувати" заяви в третій. На жаль, обсяг оперативної пам’яті, доступний програмісту, був настільки обмежений, що він не обмежувався лише «іграшковими» програмами - це навіть не велика іграшка. Все ж цікаве технічне досягнення для платформи з ...
supercat

... колосальні 128 байт оперативної пам’яті (включаючи 24 байти, необхідні для покажчиків екрана), і вся система розвитку, що вміщується в 4K ПЗУ (включаючи форми символів). Враховуючи ці обмеження, дозволяти користувачам 64 байти оперативної пам’яті утримувати свою програму, змінні та вихідний сигнал був досить акуратним трюком. Шкода, що Atari випустив базове програмування ще до того, як вони розробили свій чіп "SARA" (який вдвічі збільшив оперативну пам'ять зі 128 байт до 256). Можливість використання 128 байт оперативної пам’яті для програми плюс 64 для змінних та виведення була б набагато кращою, ніж 64 байти для всього.
supercat

4

Одним із основних кроків еволюції Паскаля було власне уявлення про струни. ISO 7185 ("Стандартний Паскаль") їх не мав, що є своєрідним поспіхом. Однак всі справжні програмісти їх потребували, і життєздатні реалізації Pascal (такі як Borland / Turbo Pascal) їх забезпечили.


4

Озираючись на інновації мови Delphi у мові Pascal - я би додав модель властивостей, методів, подій (PME) та розділ «Опубліковано» для класів. Це зробило нативний код, простим у використанні та розширенням побудови компонентів. Компоненти виконали обіцянку Бреда Кокса щодо ІС із програмним забезпеченням.



3

Боротьба між багатьма ароматами Паскаля у 80-х та на початку 90-х.

У вас були Apple Pascal , Microsoft Pascal та QuickPascal та Turbo Pascal .

Усі представлені Object Pascal так чи інакше (QuickPascal 1.0 і Turbo Pascal 5.5 приблизно в один і той же часовий проміжок). Apple, тому що вони вимагали цього для своєї платформи, Microsoft та Borland, тому що OO ставав «крутим» (тоді QuickPascal помер незабаром після цього, а Turbo Pascal 6.0 додав розумну рамку ОО під назвою Turbo Vision ).

Руді Вельтюс досить повно в цьому у своєму дописі на форумі .

Ви можете завантажити ISO-образ із DOS 6.22 та кількома компіляторами DOS Pascal з тієї епохи .


2

Я думаю, що впровадження інтерфейсів (у Delphi 3 IIRC) було дуже важливим, щоб зробити його сучасною об'єктно-орієнтованою мовою.


Зверніть увагу , що успадкування інтерфейсу НЕ OO в ньому себе, але він вважається одним з найбільш дієвих форм поліморфізму. Оскільки він поділяв той же формат VMT , що і COM , це значно спростило взаємодію з COM (люди мають широку думку щодо того, що це хороша чи погана річ <g>).
Jeroen Wiert Pluimers

2

Я додам у суміш анонімні методи та дженерики.


1
Можливо, до останніх версій Delphi. Я звик до Delphi 7, тому звичайно ніколи не використовував ні анонімні методи, ні дженерики!
Френк Ширар


2

Для мене дві найбільші речі (після деяких інших мов, таких як C ...) були нечутливістю випадку та швидкістю компілятора.

А після цього - той факт, що писати з фінською клавіатурою простіше, адже мені не потрібні {} або інші клавіші, до яких важко дістатися ...

Я був на борту з Delphi2, але використовував D1 у роботі пару років ...


1

Почніть із "Структурного програмування" Даля, Дайкстра та Хоара. Розділ Дейкстри є фундаментальним навіть сьогодні. Розділ Тоні Хоара про структурування даних заклав велику основу для PASCAL. (У розділі Даля розповідалося про те, що врешті-решт стало об'єктно-орієнтованим програмуванням. Він описав те, що стало класом у Simula 67.)

Подивіться на ALGOL-W, реалізацію варіанту ALGOL-60 Wirth.

Вам також потрібно знати про PL / I та редактор посилань (linker) IBM 360. Це було диво загальності, з другорядним питанням, що воно проходило повільніше, ніж патока в січні в Джуно, штат Аляска. PASCAL був спеціально розроблений для компіляції та з'єднання за один прохід, для швидкості. (Це допомогло тому, що мова почала життя на молодому суперкомп'ютері CDC 6400, з великою кількістю пам'яті, що робить компілятор з одним проходом.)

Насправді існували дві основні версії PASCAL від ETH Zurich. Мова, яку всі зараз знають як PASCAL, насправді була PASCAL2, друга версія.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.