Какие особенности способствовали развитию Паскаля?

17

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

Сегодня существует так много возможностей, которые мы считаем само собой разумеющимся. Какие особенности внесли значительный вклад в развитие Паскаля и почему они были значительными?

Я ищу языковые функции, а не платформу или фреймворк. Это как перегрузка операторов или параметры по умолчанию, но не поддержка Linux или новый виджет Rich Text.

Я знаю, что есть несколько разных вариантов Паскаля (Delphi, Free Pascal, Oxygene, Quick Pascal, Apple Pascal и т. Д.), И они представили одни и те же функции в разное время и параллельно. Это хорошо. Я смотрю на язык Паскаль в целом, и когда произошли важные вехи (даты, версии и т. Д.)

Джим Маккит
источник
@Jim Ваш вопрос спрашивал список дат, но не спрашивал, почему кто-то считает их значительными. Я перефразировал ваш вопрос, чтобы охватить этот аспект, и вновь открыл его.
2
Вы знаете, что продукт Turbo Pascal произвел революцию в мире Pascal? И на самом деле, мир IBM PC? Тем более что в нем исправлены струны.
4
Не забудьте UCSD Паскаль! Он ввел байт-коды (p-коды) задолго до того, как Java стала мерцать в глазах Sun.
Макнейл
1
+1 @Macneil UCSD p-Code и Smalltalk VM - это то, что я всегда объясняю, когда говорю о современном управляемом коде (Java, .NET). Приятно иметь дежавю, когда видишь множество «современных» вещей (например Apps, это просто новый вид клиент-сервер).
Йерун Wiert Pluimers
1
@Jeroen Pluimers: Я также удивлен этим разговором о том, что DVCS является «новым». Я использовал SCCS / Teamware в Sun, Торвальдс использовал BitKeeper. Когда я увидел CVS, я понял, что он сломан (как и Торвальдс). Когда я впервые услышал о SVN, я подумал: «О, они наконец исправили это». Но нет. Мир OSS (и Джоэл!) Были настолько повреждены CVS, который делал все неправильно, они должны верить, что это что-то новое!
Макнейл

Ответы:

10

С языковой исторической точки зрения, вероятно, самым большим вкладом Паскаля была сильная безопасность типов. Эта битва в основном закончена - победа Паскаля - и переломным моментом в индустрии стала Java. Но в течение очень долгого времени, C предпочитал Паскалю люди, которые в значительной степени считали себя взрослыми кодерами: люди хотели свободы манипулировать своими указателями, как если бы они были целыми числами. Практические реализации Паскаля, однако, имели лазейки, как союзы, которые не динамически проверяли дискриминантное поле, или даже имели полномасштабную типизацию указателей до такой степени, что все они были эквивалентны С, но одним из них был Turbo Pascal.

Это и упрощение сложной спецификации ALGOL 68 [1] могут быть отправной точкой.

[1] Попробуйте как- нибудь прочитать отчет ALGOL 68 - это определенно продукт 60-х годов! Один сайт в сети упоминает некоторые из своих странных жаргонов: «автобусный жетон», «невидимые производственные деревья», «первичные окрестности», «кровосмесительные союзы», «понятия», «протонции», «метаноции», «гипернозы», «». паранозы и пр.

Барри Келли
источник
15

Я бы сказал, что двумя наиболее важными движущими силами на протяжении всей истории Паскаля были:

  1. Безопасность типов: Паскаль был основополагающим в создании убеждения, что безопасность типов важна и критична в языке.
  2. Эффективность компилятора: Pascal всегда разрабатывался как однопроходный язык и демонстрировал миру, насколько быстрым может быть компилятор без потери мощности. То, что делает быстрый компилятор, - это то же, что и хорошо продуманный, легко читаемый язык. Genuis Borland был в обеспечении всего этого и производительности тоже.
Ник Ходжес
источник
Разве PASCAL не был первым языком, на котором компилятор был написан на самом PASCAL? Еще одной замечательной вещью того времени был P-код - код для виртуальной паскали. Чтобы реализовать PASCAL на другой машине, нужно было написать интерпретатор или ассемблер для P-кода.
Инго
Я бы добавил, что безопасность типов также включает в себя механизмы, известные как проверки во время выполнения в большинстве паскаль-компиляторов. (Почти?) Они есть у каждого компилятора, что принципиально отличается от подхода LINT, предпочитаемого компиляторами Си.
Марко ван де Воорт
11

Вам действительно нужно вернуться к истокам - найти историю Никлауса Вирта. Паскаль начал свою жизнь как язык обучения. «Алгоритмы + структуры данных = программы» является хорошей отправной точкой.

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

Когда он возник, в Pascal были такие вещи, как массивы символов - именно для обработки строк. Вещи улучшились за эти годы.

Если вы действительно хотите углубиться в историю Паскаля, некоторые моменты, которые вы должны учитывать:

  • Оригинал вирта (стандартный паскаль)
  • расширения от Digital Equipment Corp (DEC) на Vax
  • UCSD p-System (на многих машинах, но особенно на Apple-2)
  • Турбо Паскаль
  • Apollo Domain Pascal (используется для написания операционной системы Domain / OS, также называемой Aegis)
  • Турбо Паскаль с объектами и единицами (версия 5.5 и позже. Редактировать: только что нашел TP 5.5 ООП PDF )
  • Delphi

Еще в 1980-х годах между Паскалем и С. проходил огромный слаг-фестиваль. В обоих лагерях происходило огромное количество развития и активности.

Как следствие, странные и замечательные вещи, такие как Bliss-32, Algol и PL / 1, в значительной степени исчезли, но их идеи проникли в Паскаль.

РЕДАКТИРОВАТЬ: могут быть упакованы массивы символов, которые придают некоторые особые свойства, но если вы хотите то, что мы теперь знаем как обработку строк, вам нужно вырастить его самостоятельно.

quickly_now
источник
IIRC было небольшое количество специальной обработки packed array[1..n] of char;, например, для Read (ln) и Write (ln)
Gerry
Да, readln, writeln были немного особенными в том, что они могли обрабатывать ввод / вывод переменного числа символов. В конце 1980-х годов также произошел небольшой спор о том, что они являются злыми и грешными и нарушают языковую конструкцию, потому что они принимают переменное число параметров. Пуристы ненавидели это. Остальные из нас просто использовали это, не слишком заботясь об этом.
fast_now
Может быть модульные системы из "другого" виртского языка Modula2. (Хотя, возможно, косвенно, благодаря попыткам получить его в стандартах Pascal, он, наконец, сделал стандарт Extended Pascal, хотя и с другим синтаксисом)
Марко ван де
5

Объектно-ориентированные расширения! Object Pascal был самым большим (неофициальным) скачком стандартов с выпуском Delphi (1) в середине 90-х. Трудно выделить только одну, но все ядро ​​объектной модели в целом помогло привести язык к современному состоянию. К сожалению, по сей день он не был превращен в официальный единый унифицированный стандарт, которому должны соответствовать все компиляторы для симметрии кодирования.

К счастью, разработчики проекта Free Pascal довольно приспособлены к функциям, добавленным в Delphi как Borland, так и Embarcadero. RemObjects не так много, но, по крайней мере, он имеет связи с Embarcadero в Delphi Prism, поэтому любое отклонение от стандарта (чтобы сделать язык более .NET-совместимым) было бы хорошо документировано.

Джейсон МакМиллен
источник
8
Объекты были введены в Паскаль с помощью Turbo Pascal 5.5
макет
1
процедуры и функции были по умолчанию статическими. Вы должны были использовать virtualключевое слово, чтобы сделать их переопределенными подклассами.
1
Виртуальное не зарезервированное слово в Delphi. Список зарезервированных слов Delphi и ключевых слов Prism можно найти здесь и здесь .
Давид I
2
Объекты были введены в Паскаль Apple. en.wikipedia.org/wiki/Object_Pascal#Early_history_at_Apple
Карл Манастер
2
@Carl - я забыл, что классические Маки были запрограммированы на Паскале, и я не знал, что это была оригинальная версия Паскаля, совместно созданная Виртом.
Маккотл
4

Только одна или две вещи, которые я помню от использования Pascal давно с MS-DOS:

Turbo Pascal более или менее представил своего рода IDE в 80-х годах (и производительность компиляции значительно выросла по сравнению с UCSD Pascal).

Примерно в середине 90-х Borland изменил название с Turbo на Borland Pascal . В качестве первого шага были введены модули, которые позволили разбить крупные проекты на отдельные блоки компиляции.

Позже они также добавили объектно-ориентированное программирование.

Торстен Мюллер
источник
Турбо Паскаль был простым продуктом. У Borland Pascal было много дополнительных вещей, таких как ассемблеры и т. Д.
2
Единицы, где введены в Turbo Pascal (v4 IIRC). Они скомпилированы в файлы .tpu (Turbo Pascal Unit), которые были предшественниками текущих файлов dcu. Я полагаю, что они были основаны на концепциях языка Вирта Модула-2.
Джерри
1
ISTR в UCSD p-System тоже были юниты, но я не знаю, предшествовали ли они Turbo Pascal или нет.
TMN
Интересно, что картридж «BASIC PROGRAMMING» для Atari 2600 предоставил в 1980 году экран программирования, который был удивительно похож на экран CodeView; Можно было бы просмотреть программу (с выделенной текущей точкой выполнения) в одной области экрана, значения переменных в секунду, а любой вывод из операторов «print» - в третьей. К сожалению, объем оперативной памяти, доступной программисту, был настолько ограничен, что не ограничивался «игрушечными» приложениями - он даже не был игрушкой. Еще интересное техническое достижение для платформы с ...
суперкат
... колоссальные 128 байтов оперативной памяти (включая 24 байта, которые требовались для экранных указателей), а вся система разработки помещается в 4 Кбайт ПЗУ (включая формы символов). Учитывая эти ограничения, позволить пользователям 64 байта оперативной памяти хранить свою программу, переменные и выходные данные было довольно изящным приемом. Жаль, что Atari выпустила Basic Programming до того, как разработала чип «SARA» (удвоивший оперативную память со 128 байтов до 256). Возможность использовать 128 байт оперативной памяти для программы и 64 для переменных и вывода была бы намного лучше, чем 64 байт для всего.
суперкат
4

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

MSalters
источник
4

Оглядываясь назад на нововведения языка Delphi Pascal - я бы добавил модель Property, Method, Event (PME) и раздел «Опубликованные» для классов. Это сделало нативный код, простым в использовании и расширило возможности сборки компонентов. Компоненты выполнили обещание Брэда Кокса о программных микросхемах.

Давид I
источник
3

Борьба между многими вкусами Паскаля в 80-х и начале 90-х годов.

У вас были Apple Pascal , Microsoft Pascal и QuickPascal , а также Turbo Pascal .

Все так или иначе представили Object Pascal (QuickPascal 1.0 и Turbo Pascal 5.5 примерно в один и тот же период времени). Apple, потому что они требовали этого для своей платформы, Microsoft и Borland, потому что ОО становился «крутым» (вскоре после этого QuickPascal умер, а Turbo Pascal 6.0 добавил разумную структуру ОО, называемую Turbo Vision ).

Руди Велтуис довольно полон на этом в своем сообщении на форуме .

Вы можете скачать образ ISO с DOS 6.22 и несколькими компиляторами DOS Pascal той эпохи .

Йерун Вирт Плюмерс
источник
2

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

Франсуа
источник
Обратите внимание, что наследование интерфейса само по себе не является ОО , но считается одной из самых верных форм полиморфизма. Поскольку он разделял тот же формат VMT , что и COM , он значительно облегчил взаимодействие с COM (у людей есть общее мнение о том, что это хорошо или плохо <g>).
Йерун Wiert Pluimers
2

Я добавлю анонимные методы и обобщения в смесь.

Gabr
источник
1
Для самых последних версий Delphi, возможно. Я использовал до Delphi 7, поэтому, конечно, никогда не использовал ни анонимные методы, ни дженерики!
Фрэнк Шиарар
2

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

И после этого стало легче писать на финской клавиатуре, потому что мне не нужны постоянно {} или другие труднодоступные клавиши ...

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

Томми Прами
источник
1

Начните с «Структурного программирования» Дала, Дейкстры и Хоара. Раздел Дейкстры имеет фундаментальное значение даже сегодня. Раздел Тони Хоара о структурировании данных заложил фундамент для PASCAL. (В разделе Даля говорилось о том, что в итоге стало объектно-ориентированным программированием. Он описал, что стало уроками в Simula 67.)

Посмотрите на ALGOL-W, реализацию Вирта варианта ALGOL-60.

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

На самом деле было две основные версии PASCAL из ETH Zurich. Язык, который каждый в настоящее время знает как PASCAL, на самом деле был PASCAL2, второй версией.

Джон Р. Штром
источник