Инструменты пользователя

Инструменты сайта


bb:redbook:102

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
bb:redbook:102 [2017/08/08 15:22]
prospero78 [12. Component Pascal]
— (текущий)
Строка 1: Строка 1:
-===== 1.2 История ===== 
-В данном разделе мы коротко рассмотрим историю развития языков семейства [[https://ru.wikipedia.org/wiki/%D0%9F%D0%B0%D1%81%D0%BA%D0%B0%D0%BB%D1%8C_(%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)|Паскаль]]. 
- 
-==== 1. Предыстория создания ===== 
-История создания и развития языка **Паскаль** начинается в 1970 году (на 2017 год уже 47 лет!). В основе его лежит ещё более бородатый язык [[https://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D0%BB|Алгол]] (сокращение от "Алгоритмика", слово "алгоритм" происходит от имени арабского учёного Аль Хорезми). Алгол известен в двух версиях: от 1968 г., и более ранний вариант от 1960 г. Заслуга **Алгола** была в том, что он позволял записывать сложные алгоритмические конструкции доступным языком. Не таким, как человеческий, но всё же куда более понятным, чем прямой бинарный код, или сложный для семантического разбора — [[https://ru.wikipedia.org/wiki/%D0%90%D1%81%D1%81%D0%B5%D0%BC%D0%B1%D0%BB%D0%B5%D1%80|Ассемблер]]. Надо ли говорить, что **Алгол** был весьма популярен, как в **Европе**, так и **СССР**. Некоторое время **Алгол** рассматривался, как конкурент такому монстру, как [[https://ru.wikipedia.org/wiki/%D0%A4%D0%BE%D1%80%D1%82%D1%80%D0%B0%D0%BD|Фортран]], а в **СССР Алгол** вообще лидировал. Надо понимать, что **Алгол** создавался на заре компьютерных технологий, и многие вещи становились настоящими полями битв между учёными мужами. Например, как в случае обозначения //разделителя целой и дробной части// в натуральных числах (таки американцы одержали победу в этом вопросе; современное использование точки устоялось, но смысловая нагрузка на точку //не так линейна//, если хорошо вдуматься). Вложенные средства в **Фортран** американцами сделали своё дело: **Алгол** был вытеснен из активного употребления, хотя алгоритмы в популярных компьютерных журналах ещё долго публиковались в записи **Алгола**. Надо отдать должное этому языку: он оказал огромное влияние на современный мир. Надо ли уточнять, что в разработке **Алгола-68** принял участие **Никлаус Вирт**? 
-==== 2. Появление Паскаля ==== 
-**Вирт**, принимая участие в работе над **Алголом-68** имел свою точку зрения на то, каким должен быть язык программирования. Одним из важных моментов, на его взгляд — должно быть название языка. Такой чести удостоился [[https://ru.wikipedia.org/wiki/%D0%9F%D0%B0%D1%81%D0%BA%D0%B0%D0%BB%D1%8C,_%D0%91%D0%BB%D0%B5%D0%B7|Блез Паскаль]]. Хотя к тому моменту, **Паскаль** уже был увековечен в единице измерения давления, но кроме //физики// **Блез Паскаль** прославился своими //арифмометрами//, а это уже сфера //информатики//. Как написал **Вирт** в одной из первых публикаций — язык программирования **Паскаль** должен служить малым размерам, эффективному оформлению кода, и активному использованию структурированного подхода. Также он сразу себе поставил задачу обеспечить применимость **Паскаля** в качестве //системного языка программирования//. Текст программ на **Паскале** был очень похож на текст программ на **Алголе** — это было сделано намеренно. Расчёт оказался верным, и вскоре **Паскаль** начал завоёвывать свою место под Солнцем. В том числе, за счёт старичка **Алгола**. 
-==== 3. UCSD p-System ==== 
-Этот вариант **Паскаля** был разработан в Калифорнийском университете (США) в 1977 г. для применения в составе мини-ЭВМ (в то время доминировали большие ЭВМ — майнферймы, такие как [[https://ru.wikipedia.org/wiki/IBM_System/360|IBM/360]], где **Алгол** не прижился из-за приспособленности этих монстров под **Фортран**). В этом варианте **Паскаля** была впервые реализована модульность, работа со строками, стековое управление памятью, как важная веха в истории развития языков программирования — впервые был произведён отказ от ключевого слова **GOTO**. Также были созданы варианты **UCSD p-System** для других архитектур: 
-  * [[https://ru.wikipedia.org/wiki/PDP-11|PDP-11]] (очень популярная машина) 
-  * LCI-11 
-  * Terak 
-  * [[https://ru.wikipedia.org/wiki/8080|Intel 8080]] (лежал в основе многих массовых ПК) 
-  * [[https://ru.wikipedia.org/wiki/Zilog_Z80|Zilog Z80]] (положен в основу культового в СССР [[https://ru.wikipedia.org/wiki/ZX_Spectrum|ZX Spectrum]] и его многочисленных клонов) (автор этого учебника является фанатом Спектрума ,) 
-  * [[https://ru.wikipedia.org/wiki/Motorola_6800|Motorola 6800]] (знаменитые яблочные компьютеры) 
-  * **Western Digital Pascal MicroEngine** (а это уже полноценный процессор ориентированный на Паскаль — да-да! Был даже и такой) 
-  
-Особенностью этого варианта **Паскаля** была //виртуальная среда//. Широко известная **Java** //опоздала// со своей идеей на добрых //два десятка// лет. Ко всему прочему, виртуальная среда **Паскаля** работала в качестве //операционной системы// имея при этом возможность непосредственно взаимодействовать с аппаратной частью. 
- 
-Также следует отдельно упомянуть культовый компьютер **Apple II**, на котором также был реализован **UCSD p-System** со своими расширениями. Хотя бы по этому факту можно судить о популярности **Паскаля** в те годы. Вариант языка **Паскаль** от фирмы [[https://ru.wikipedia.org/wiki/Apple|Apple]] носил название [[https://ru.wikipedia.org/wiki/Object_Pascal|Object Pascal]]. Также **UCSD p-System** сильнейшим образом повлиял на язык от фирмы [[https://ru.wikipedia.org/wiki/Borland|Borland]] — [[https://ru.wikipedia.org/wiki/Turbo_Pascal|Turbo Pascal]], ставший на многие годы (вплоть до середины 2010-хх годов) прекрасным инструментом для обучения и написания программ. 
- 
-Последняя коммерческая версия компилятора **UCSD Pascal** распространялась фирмой **Cabot Software** под названием **P-Code Pascal** вплоть до 2001 года. Она включала средства параллельного исполнения и ООП, предлагались реализации для следующих платформ: 
- 
-  * [[https://ru.wikipedia.org/wiki/MS-DOS|MS-DOS]] 
-  * [[https://ru.wikipedia.org/wiki/Windows|Windows]] 
-  * [[https://ru.wikipedia.org/wiki/OS/2|OS/2]] 
-  * [[https://ru.wikipedia.org/wiki/Macintosh|Macintosh]] 
-  * [[https://ru.wikipedia.org/wiki/System_p|RS/6000]] 
-  * [[https://ru.wikipedia.org/wiki/PowerPC|Power PC]] 
-  * [[https://ru.wikipedia.org/wiki/ARM_(%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0)|ARM]] 
-  * [[https://ru.wikipedia.org/wiki/SCO_OpenServer#SCO_UNIX.2FSCO_Open_Desktop|SCO UNIX]] 
-  * [[https://ru.wikipedia.org/wiki/Interactive_Unix|Interactive UNIX]] 
-  * [[https://ru.wikipedia.org/wiki/Linux|Linux]] 
-  * [[https://ru.wikipedia.org/wiki/VAX|DEC VAX]] 
-  * [[https://ru.wikipedia.org/wiki/AIX|AIX]] 
-  * [[https://ru.wikipedia.org/wiki/SuperH|Hitachi SH]] 
- 
-==== 4. Object Pascal==== 
-Этот язык оказал существенное влияние на компьютерную отрасль. Этот язык был разработан **Apple Computer** в 1986 г. под руководством **Ларри Теслера**, который в свою очередь получал консультации у **Никлауса Вирта**. В язык были введены практически все концепции **ООП** (не даром он называется //Object// Pascal). Были реализованы динамические массивы через работу с кучей. В качестве дополнительной возможности была введена динамическая типизация переменных. Для **ООП** была введена возможность работы со свойствами, перегрузка операторов. Язык оказался настолько впечатляющим, что послужил образцом для подражания многих других вариантов **Паскаль**. 
- 
- 
-==== 5. Turbo Pascal ==== 
-В основу **Turbo Pascal** был положен **Blue Label Pascal**, созданный для операционной системы **NasSys** микрокомпьютера **Nascom** в 1981 году **Андерсом Хейлсбергом**. Система **NasSys** имела ограниченное применение, и **Андерс Хейлсберг** портировал **Blue Label Pascal** под именем **Compass Pascal** на операционную системe [[https://ru.wikipedia.org/wiki/CP/M|CP/M]] (весьма популярную в тот период). И в том же году **Blue Label Pascal** под именем **Turbo Pascal** был портирован под **DOS**. Компьютеры от фирмы **Apple** также не остались без внимания: в 1986 г. **Turbo Pascal** появился на **Макинтошах**. Успех **Turbo Pascal** привлёк внимание компьютерной сферы, и в 1982 г. **Филипп Кан** основывает в  США фирму **Borland**, которая и выкупает права на **Turbo Pascal** у **Андерса Хейлсберга**. В том же году, по относительно низкой цене **Turbo Pascal** поступил в продажу. Успех на рынке был ошеломительным. И низкой цены на программной пакет было бы недостаточно для объяснения этого успеха. Причина крылась в том, что в составе **Turbo Pascal** шёл высококачественный редактор текста. Была встроена отличная справка, которая не просто предлагала оперативную информацию по ключевым словам, но и включала демонстрационные примеры, охватывающие самые разнообразные сферы. Возможности отладки программ были на высоком уровне, в комплекте шёл набор дополнительных средств, например профилировщик. Давление на софтверный рынок было таково, что по одной из версий, такая компания как [[https://ru.wikipedia.org/wiki/Microsoft|Microsoft]] была вынуждена прекратить разработку своего варианта **Паскаль** (а ведь **Windows 3.11** был разработан именно на нём). Развитие **Turbo Pascal** продолжалось 13 лет — до 1995 года. 
- 
-==== 6. GNU Pascal ==== 
-Версия этого языка известна тем, что способна выполняться //почти на любой// аппаратной платформе. Версия этого языка замерла на отметке 2005 год. Но главная ценность заключается в том, что эта версия абсолютно бесплатна для использования, и поэтому легла в основу многих других Паскалей. [[https://ru.wikipedia.org/wiki/GNU_Pascal|GNU Pascal]] работает поверх [[https://ru.wikipedia.org/wiki/GNU_Compiler_Collection|GNU GCC]] — коллекции высокоэффективных компиляторов доступных также по бесплатной лицензии. Эта коллекция компиляторов обновляется чуть ли не ежедневно, поэтому **GNU Pascal**, даже с учётом фактической замороженности проекта будет создавать весьма эффективный код. 
- 
-==== 7. Free Pascal\Lazarus ==== 
-Про этот язык стоит упомянуть отдельно. Этот проект свободного и бесплатного компилятора **Паскаль** начался в 1993 г. В 2000 г. //компилятор// языка объявлен стабильным и полным. В течение нескольких лет в проект вливаются разработчики других нескольких направлений, что приводит к бурному росту [[https://ru.wikipedia.org/wiki/Free_Pascal|Free Pascal]]. На 2016 г. уже доступна версия 3.1. Графическая среда разработки [[https://ru.wikipedia.org/wiki/Lazarus|Lazarus]] впечатляет своими возможностями. Открытая и бесплатная, гибкая и обеспеченная документацией и примерами она по праву считается одной из наиболее значимых в сообществе программистов на **Паскаль**. Сложно назвать аппаратную платформу, на которой не мог бы работать **Free Pascal**. Проекты выполненные на **Free Pascal** с помощью **Lazarus** у всех на слуху: 
-  * [[https://ru.wikipedia.org/wiki/Total_Commander|Total Commander]] 
-  * [[https://ru.wikipedia.org/wiki/Double_Commander|Double Commander]] 
-  * [[https://ru.wikipedia.org/wiki/PeaZip|PeaZip]] 
-  * **Lazarus** (разумеется) 
-  * **CodeTyphon** (вариант среды Lazarus с множеством компонентов и примеров) 
- 
-==== 8. Delphi ==== 
-[[https://ru.wikipedia.org/wiki/Delphi_(%D1%81%D1%80%D0%B5%D0%B4%D0%B0_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B8)|Delphi]] является дальнейшим продолжением нашумевшего **Turbo Pascal**. Впервые появился в 1995 г. благодаря усилиям фирмы **Borland**, ныне уже поглощённой другими компаниями. Эта мощнейшая интегрированная графическая среда построена поверх **Turbo Pascal**, который **Borland** позже официально переименовала в **Object Pascal** (ранее такое же название было у **Apple**, но так как **Apple** не стала дальше развивать эту линейку, два родственных языка программирования существовали на //разных// временных отрезках). Изначально **Delphi** был разработан для **Windows**, но позже предпринимались попытки переноса **Delphi** под **Linux**. Они не были особенно успешными из-за внутренней политики **Borland**. В 2002 году эти попытки были прекращены, и до 2007 года **Delphi** активно поддерживала **.Net**, но и в этом случае после 2007 г. такая поддержка была прекращена. Такая непоследовательность привела к закату **Borland**, и с августа 2008 года официальным владельцем **Delphi** является компания **Embarcadero**. Эта компания предложила компилятор под **Win64** в 2011 г., а чуть позже в 2013 г. — и для платформы **Android/ARM**. Последняя версия среды выпущена в апреле 2015 г. **Embarcadero**, как и её предшественница распространяет свою среду за приличные деньги, что существенно ограничивает возможности её использования. Тем не менее, эта среда позволила создать ряд очень популярных программ и не собирается заканчивать своё развитие, даже под мощным давлением **FreePascal/Lazarus**. 
- 
-==== 9. Modula-2 ==== 
-Выше рассмотрено дерево развития языка **Паскаль**. Тем не менее, традиционно, считается что **Компонентный Паскаль** (как это ни странно) относится к другой ветке развития **Паскаль**. Первый вариант языка **Modula** был разработан в 1975 г., но спецификации его так и не были опубликованы. Автор языка (//внезапно//) **Никлаус Вирт** решил переработать язык и в 1977 г. он под названием **Modula-2** был представлен. Язык с самого начала предназначался для надёжного промышленного программирования. Главной его отличительной особенностью стала модульность. Благодаря этому и другим нововведениям оказалось возможным написать операционную систему для компьютеров [[http://www.computer-museum.ru/frgnhist/lilith.htm|Lilith]]. А вместе с ней и ПО для лазерного принтера, системы типографской вёрстки и сетевой протокол. Также, исключив операции машинного ввода и вывода структура компилятора существенно упростилась. В итоге, количество ключевых слов в **Modula-2** всего 40. Для сравнения, ключевых слов в языке промышленного программирования **Ada** — 63. Если сравнивать с другими языками программирования, то у **Modula-2** преимущество будет ещё больше. Даже по сравнению с предком — **Паскаль** — новый язык получился проще, а значит надёжней. Первые компиляторы **Modula-2** появились в **СССР** в 1982 г. Для работы с языком программирования (ЯП) **Modula-2** была разработана серия микропроцессоров **Кронос**, на базе которых были разработаны мощные рабочие станции серии WS (последняя модель этой станции WS 1.2 в качестве презента подарена **Никлаусу Вирту**, а он нашим разработчикам **Кроноса** подарил **Lilith**). В настоящее время на **Modula-2** пишется бортовое программное обеспечение для спутников [[https://ru.wikipedia.org/wiki/%D0%93%D0%9B%D0%9E%D0%9D%D0%90%D0%A1%D0%A1|ГЛОНАСС]]. Также компилятор ЯП **Modula-2** официально входит в коллекцию компиляторов **GNU GCC** с 2010 года. Таким образом, про **Modula-2** можно подтвердить, что это язык высоконадёжного промышленного применения. 
- 
-====10. Oberon==== 
-В ходе создания этого языка **Никлаус Вирт** пришёл к мысли о том, что поддержка языка при модульной структуре требует соответствующей операционной системы. Такая поддержка нужна на этапе динамической загрузки модулей в память **ЭВМ** по требованию уже работающих модулей. Кроме того, нужно как-то освобождать память. Для этого нужен //сборщик мусора//. А как быть с уже существующими операционными системами? Подходящим решением тут стали //промежуточные// операционные системы, такие как **BlackBox Component Builder**, **ETH Oberon**, **WinOberon**, **A2 (WinAos, LinAos)**. По-сути, это маленькие операционные системы над реальными операционными системами. Такими же операционными системами следует признать появившиеся много позже **Java** и **.Net**. Так появился **Oberon** в 1989 г. за авторством **Никлауса Вирта** и **Юрга Гуткнехта**. Это была сразу и операционная система **Oberon**, и компилятор языка **Oberon**. Компилятор занимал 50 кБ и компилировал сам себя за 15 сек при тактовой частоте ЦП 25 МГц. По сути, **Oberon** впитал объектные расширения, при этом отказался от динамической типизации, которая, по сути, — снижала надёжность программ. Отказ от динамической типизации позволил применить тот самый //сборщик мусора//. Оказалось, что кроме этого, количество исключительных ситуаций уменьшилось на порядок. При дальнейшей оптимизации языка, оказалось, что если и происходили ошибки, то происходили они исключительно со стороны аппаратуры. В конечном итоге, от исключительных ситуаций также удалось отказаться. Отказ от средств параллельного программирования был в какой-то мере вынужденной мерой. В **Modula-2** параллельность была также обеспечена на 75% сторонними библиотеками, а не встроенными средствами. Они себя почти не оправдали. Также были существенные сокращения по работе с //указателями//. Как оказалось, в многих случаях можно обойтись без них, а контролировать //типы данных// стало заметно проще. Были добавлены средства для контроля модулей, ведь теперь основной единицей становился сам модуль. Язык получился компактным и эффективным. Вирт однажды заявил, что разработчики **Java** хорошо изучили подход **Oberon**, и многие идеи заимствовали из него. Хронологически это было вполне возможно, да и многие решения в **Java** весьма похожи на те, что были применены в **Oberon**. 
- 
-==== 11. Oberon-2 ==== 
-Язык **Oberon-2** был выпущен в 1991 г. В него были добавлены возможности метапрограммирования, поля доступные для экспорта из модулей, возвращён оператор **FOR** (из **Modula-2**), и по сути, **Oberon-2** был расширением **Oberon**. Как и предыдущий вариант **Oberon-2** предназначен для промышленного программирования. Авторами нового языка стали **Никлаус Вирт** и **Ханспетер Мёссенбёк**. Даже с учётом того, что **Oberon-2** является расширением, его формальное описание стало короче, чем у предка, синтаксис стал более строгим и предсказуемым. Не удивительно, что сразу появились клоны компилятора этого языка, один из наиболее известных — [[http://www.excelsior.ru/products/xds|XDS]]. 
- 
-==== 12. Component Pascal ==== 
-Это одна из наиболее поздних реализаций в семействе **Паскаль**. Появился он относительно недавно — в 2001 г. Этот язык моложе, чем ныне популярные **python** или **perl**. По сравнению с предшественником введены ключевые возможности по контролю за изменением интерфейсов модулей. Главная опора сделана на //компонентный каркас//, который позволяет более аккуратно и тщательно писать программы. Строго говоря, **Компонентный Паскаль** уже не просто язык, но целая среда. Базовые типы синхронизированы с наиболее употребительными в программостроении. Строки теперь представлены Unicode множеством. Работа со строками стала в целом, более удобной. Расплатой за такие усовершенствования стало увеличенное число лексем. Их стало //аж 34//, что на 1 больше, чем в **Oberon-2**. Теперь **Компонентный Паскаль**, как правило, идёт в составе **BlackBox Component Builder** — интегрированной операционной среды. Для любителей **Паскаль** можно лишь добавить, что лицензия под которой распространяется **Компонентный Паскаль**(КП) и **BlackBox Component Builder**(ББ/BB) — BSD-2. Это очень свободная и либеральная лицензия позволяет использовать **КП** и **ББ** почти любым способом. В России (на 2017 г.) существует устоявшееся сообщество программистов на **КП**, часть из них даже ведёт свои проекты по развитию **ББ**(например, на http://oberoncore.ru/) В России удалось сохранить прекрасную алгоритмическую и методическую школу, и программирование с помощью **КП** больше можно отнести к //науке программирования//, чем к искусству, так как в основе **КП** лежат научные исследования и методики строго выверенные математикой. Существует проект **Информатика-21** в рамках которого осуществлён полный перевод документации и среды **ББ** на русский язык. Преподавание основ **КП** ведётся, как в школах, так и ВУЗах. В сообществе множество представителей школьной среды, науки, инженерии — начиная от любителей-одиночек, до докторов технических наук. 
- 
-==== 13. FreeOberon, Oberon-07 ==== 
-Это совсем "свежие" реализации последнего языка программирования **Oberon-07** от Никлауса Вирта. Обе разработки открытые, и их уже можно попробовать. Простота Oberon-07 такова, что с ним справится даже неопытный программист. В **Oberon-07** сосредоточены самые важные, самые передовые идеи направленные на создание совершенных программ. 
- 
-==== 13. Заключение ==== 
-Развитие языков семейства **Паскаль** продолжается. Часть семейства пошла по пути усложнения самого языка, часть пошла по пути упрощения, и наращивания библиотек. Опыт развития языков программирования, говорит о том, что **Никлаус Вирт** смог на много лет вперёд предвидеть многие стороны программной отрасли. Многие идеи, которые он предлагал и озвучивал начали воплощаться только сейчас. Языки промышленного назначения, как оказалось, вполне применимы и для обучения. Создавая единую среду можно добиться более высокого качества программ, более широкого понимания сложности и глубины современных проблем, рациональной и бережной организации труда программистов. 
- 
-Что будет дальше — покажет время. Но семейство Паскаль ещё долго будет служить верой и правдой на благо всего человечества. 
  
bb/redbook/102.1502194930.txt.gz · Последнее изменение: 2020/10/29 07:08 (внешнее изменение)