50 лет Паскаля

Original author: Niklaus Wirth
  • Translation


В начале 1960-х в мире доминировали языки Фортран (Джон Бэкус из IBM) для научного и Кобол (Жан Саммет из IBM и Министерство обороны) для коммерческого применения. Программы писались на бумаге, затем перфорировались на картах, после чего результатов их выполнения ждали целый день. Языки программирования считались важными помощниками и ускорителями процесса программирования.

В 1960 году международный комитет опубликовал спецификацию языка Алгол 601. Впервые язык определялся чётко сформулированными конструкциями и точным, формальным синтаксисом. Двумя годами позже стало понятно, что требуются некоторые исправления и усовершенствования. Однако основной задачей было расширение ассортимента приложений, поскольку Алгол 60 был предназначен только для научных вычислений (вычислительной математики). Для работы над этим проектом была собрана рабочая группа (Working Group, WG 2.1) под эгидой Международной федерации по обработке информации (IFIP).

Группа состояла примерно из сорока участников; почти столько же было мнений и взглядов на то, каким должен быть потомок Алгола. Это вызвало обширные дискуссии, и некоторые дебаты завершались довольно печально. В начале 1964 года я стал участником группы и вскоре меня попросили подготовить конкретное предложение. Комитет разделился на две фракции. Одна из них стремилась ко второй, после Алгола 60, важной вехе — созданию языка с радикально новыми, непроверенными концепциями и огромной гибкостью. Позже он стал известен под названием Алгол 68. Другая фракция поставила перед собой более скромную задачу и сосредоточилась на реалистичном усовершенствовании известных концепций. В конце концов, время уже поджимало: вскоре должен был появиться PL/1 компании IBM. Однако моё предложение, несмотря на техническую реалистичность, уступило с небольшим перевесом большинству, предпочитавшему разрабатывать Алгол 68.


Постер диаграмм синтаксиса Pascal

Недостаточно просто постулировать язык на бумаге. Необходимо создать надёжный компилятор, который обычно является программой высокой сложности. В этом отношении крупные промышленные фирмы имели преимущество перед нашей рабочей группой, вынужденной полагаться на энтузиастов из научных заведений. Я покинул группу в 1966 году и с несколькими аспирантами из Стэнфордского университета посвятил своё время созданию компилятора для моего проекта. В результате мы получили язык Алгол W2, который после 1967 года начал использоваться во многих местах, где применялись крупные компьютеры IBM. Он оказался довольно успешным. Алгол 68 выпустили, но он быстро потонул из-за собственного веса, хотя некоторые его концепции и получили вторую жизнь в новых языках.

Но по моему мнению, Алгол W был недостаточно хорошим. Из-за того, что изначально он разрабатывался комитетом, язык содержал в себе слишком много компромиссов. После моего возвращения в Швейцарию, я спроектировал язык в соответствии со своими предпочтениями: им стал Паскаль. С несколькими помощниками мы написали руководство пользователя и спроектировали компилятор. В процессе его создания мы решились на рискованный шаг: захотели описать компилятор на самом Паскале, затем транслировать его вручную на Фортран, и, наконец, скомпилировать первый из второго. Результатом стал сокрушительный провал, поскольку из-за отсутствия структур данных (записей) в Фортране трансляция получилась очень громоздкой. После этого неудачного дорогостоящего урока вторая попытка окончилась успехом — на этот раз мы использовали вместо Фортрана язык местной разработки Scallop (созданный М. Энгели).

Паскаль


Как и его предшественник Алгол 60, Паскаль2 имел чёткое определение и ограниченное количество понятных базовых элементов. Его структура и синтаксис формально были определены в расширенной форме Бэкуса-Наура3. Операторы описывали присвоение значений переменным, условное и повторное исполнение. Кроме того, в языке существовали процедуры, и они были рекурсивными. Значительным усовершенствованием стали типы и структуры данных: элементарными типами данных были целые и вещественные числа, булевы значения, символы и перечисления (констант). Структурами стали массивы, записи, файлы (последовательности) и указатели. Процедуры имеют два вида параметров — значения и переменные. Процедуры можно использовать рекурсивно. Наиболее существенной была всеобъемлющая концепция типа данных: каждая константа, переменная или функция имела фиксированный, статический тип. Поэтому программы обладали большой избыточностью, которой мог пользоваться компилятор для проверки целостности типов. Это способствовало распознаванию ошибок до исполнения программы.

Столь же важным, как добавление функций, стало и их удаление (относительно Алгола). Чарльз Энтони Ричард Хоар однажды сказал: язык характеризуется не только тем, что он позволяет делать программисту, но и тем, что он делать не позволяет. В связи с этим в языке отказались от параметра-имени Алгола. Он редко использовался и вызывал значительные трудности для компилятора. Кроме того, была устранена концепция владения Алгола, что позволяло локальным переменным быть глобальными, чтобы «пережить» активацию процедуры, для которой переменная была объявлена локальной. Конструкция for Алгола была значительно упрощена, что позволило избавиться от комплексных и сложных в понимании конструкций. Однако для простых и прозрачных ситуаций повторений были добавлены операторы while и repeat. Тем не менее, спорный оператор goto сохранился. Я решил, что сообщество программистов ещё не готово к отказу от него. Это было бы слишком невыгодно для роста популярности Pascal.

Паскаль был прост в преподавании и мог использоваться в широком спектре применений, что было значительным преимуществом по сравнению с Алголом, Фортраном и Коболом. Модуль System Паскаля был эффективным, компактным и простым в применений. На язык сильно повлияла новая дисциплина структурированного программирования, основным проповедником которой был Э. Дейкстра, стремившийся таким образом избежать угрозы кризиса программного обеспечения (1968 год).

Паскаль был опубликован в 1970 году и впервые использовался на курсах обучения в Швейцарской высшей технической школе Цюриха (ETH). Мы даже определили подмножество Pascal-S и создали более компактный компилятор для экономии времени и пространства на нашем компьютере CDC и снижения времени цикла обработки для студентов. В те времена машинное время и память были в дефиците.

Распространение и популярность Паскаля


Вскоре Паскаль заметило несколько университетов и возрос интерес к его использованию в обучении. Мы получали просьбы о помощи в реализации компиляторов для других компьютеров. Я придумал идею постулирования гипотетического компьютера, который можно было бы легко реализовать на различных мейнфреймах, для которого мы бы создали в Высшей технической школе Цюриха компилятор. Этот гипотетический компьютер можно было бы легко реализовывать относительно небольшими трудозатратами при помощи уже готовых инструментов (ассемблеров). Таким образом возникла архитектура Pascal-P (P — «портируемый»), и эта техника оказалась чрезвычайно успешной. Первые наши клиенты были из Белфаста (Ч.Э.Р. Хоар). Два помощника привезли две тяжёлые картонные коробки перфокарт в Цюрих, на них был записан компилятор, спроектированный для компьютера ICL. На границе их подвергли допросу, потому что возникло подозрение, что перфокарты могут содержать секреты, подлежащие таможенным сборам. Всё это происходило без международных проектных организаций, без бюрократии и бюджетов на исследования. Сегодня это было бы невозможно.

Интересным следствием таких разработок стало появление пользовательских групп, в основном состоящих из молодых энтузиастов, желавших продвигать и распространять Паскаль. Ядром этих групп управлял Энди Микел из Миннеаполиса, где они регулярно публиковали новостную рассылку о Паскале (Pascal Newsletter). Это движение внесло значительный вклад в стремительное распространение Паскаля.

Несколькими годами позднее на рынке появились первые микрокомпьютеры. Это были небольшие компьютеры, процессор которых интегрирован в единый чип, и имевшие 8-битные шины данных, доступные по цене даже физическим лицам. Выяснилось, что благодаря своему небольшому компилятору, способному уместиться в малом объёме памяти (64 КБ), Паскаль подходит для их процессоров. Группа под руководством Кена Боулса из Университета Сан-Диего и Филипп Кан из Borland Inc. в Санта-Крузе создали для нашего компилятора простую операционную систему, текстовый редактор и процедуры для обнаружения и диагностики ошибок. Они продавали этот пакет на гибких дисках по 50 долларов (Turbo Pascal). Благодаря этому Паскаль распространялся мгновенно, особенно в школах и вузах, став для многих точкой входа в программирование и computer science. Наше руководство по Паскалю превратилось в бестселлер.

Такое распространение не ограничилось Америкой и Европой. Россия и Китай тоже с энтузиазмом восприняли Паскаль. Об этом я узнал только позже, во время моих первых поездок в Китай (1982 год) и СССР (1990 год), когда мне показали версию нашего руководства, написанного непонятными (для меня) символами и буквами.

Наследники Паскаля


Но время не стояло на месте. Компьютеры стремительно становились быстрее, поэтому требования к приложениям, как и к программистам, росли. Программы больше не разрабатывались одним человеком, теперь их создавали коллективы. В языках должны были появиться конструкции, поддерживающие командную работу. Один человек может спроектировать часть системы, называемую «модулем», достаточно независимо от остальных модулей. Позже модули могут быть скомпонованы и загружены автоматически. Даже в Фортране имелась уже такая функция, однако теперь компоновщик должен был проверять целостность типов данных между границами модулей. Это была непростая задача!

Модули с межграничной проверкой целостности типов стали основным расширением первого наследника Паскаля под названием Модула-24 (сокращение от modular language, 1979 год). Язык стал эволюционным развитием Паскаля, а также Mesa — языка, разработанного в Xerox PARC для системного программирования. Сам Mesa тоже произошёл от Паскаля. Однако Mesa развивался слишком хаотично и его нужно было «укротить». В Модула-2 также присутствовали элементы для системного программирования, допускавшие конструкции, зависящие от конкретных свойств компьютера, поскольку они были необходимы для интерфейсов с периферийными устройствами или сетями. Из-за этого пришлось пожертвовать самой сутью высокоуровневых языков, а именно машинонезависимым программированием. К счастью, такие части теперь можно было локализовать в конкретных «низкоуровневых» модулях, а значит, соответствующим образом изолировать.

Кроме того, Модула содержал конструкции для программирования параллельных процессов (или квазипараллельных потоков). «Параллельное программирование» было основной темой 1970-х. В целом, Модула-2 постепенно стал довольно комплексным и на мой взгляд переусложнённым для обучения программированию. Ощущалось, что языку нужно совершенствование и упрощение.

Благодаря подобным рассуждениям возник язык Оберон5, тоже изначально создававшийся в Xerox PARC. Мейнфреймы больше не использовались, на смену им пришли мощные рабочие станции с дисплеями высокого разрешения и функциями интерактивности. Для них в PARC были разработаны язык и интерактивная операционная система Cedar. Проектировщикам снова показались желательными значительное упрощение и консолидация, поэтому для Оберона в ETH были написаны операционная система, компилятор и текстовый редактор. Задача была выполнена всего двумя программистами — Виртом и Гуткнехтом в свободное время в течение шести месяцев. Публикация Оберона произошла в 1988 году. На развитие языка повлияла новая дисциплина — объектно-ориентированное программирование. Однако в нём не появилось никаких новых особенностей, кроме расширения типа. Следовательно, впервые был создан язык, который не только не усложнился, но даже упростился, и в то же время стал более мощным по сравнению с предшественником.

Даже сегодня Оберон успешно используется во множестве разных мест. Однако революции, как в случае с Паскалем, не произошло. Комплексные коммерческие системы используются слишком широко и потому укоренились. И всё же можно сказать, что на многие подобные языки наподобие Java (Sun Microsystems) и C# (Microsoft) значительное влияние оказали Оберон или Паскаль.

Примерно в 1995 году на рынке появились динамически перепрограммируемые на уровне логических вентилей электронные компоненты. Эти программируемые пользователем вентильные матрицы (field programmable gate arrays, FPGA) можно сконфигурировать в практически любую цифровую схему. Разница между программным и аппаратным становилась всё более размытой. Я разработал язык Lola (logic language) с похожими на Оберон элементами и аналогичной ему структурой для описания цифровых схем. Схемы всё чаще стали задаваться формальными текстами, заменяющими графические принципиальные схемы. Это упрощает проектирование оборудования и ПО, что на практике становится всё более важным.

Комментарии и выводы


Принципиальная задача высокоуровневых языков — повышение уровня абстракции со слоя машинных команд. Например, структуры данных вместо массивов слов в памяти или условные операторы и операторы цикла вместо команд перехода. Идеальный язык должен определяться в категориях математической логики, аксиом и правил вывода. Для его понимания не должно требоваться никакой отсылки к любому компьютеру или механизму. Это основа портируемости. Проектировщики Алгола видели эту цель, но сложнее всего достигнуть её, не жертвуя при этом мощью выразительности. Тем не менее, каждый новый язык следует измерять той степенью, в которой он приближается к этой цели. Последовательность «Паскаль—Модула—Оберон» стали свидетельством моего стремления достичь её. Оберон к ней близок, однако ничто не идеально.

Ссылки


1. Naur, P. Revised report on the algorithmic language Algol 60. Commun. ACM 6, (Jan. 1963), 1–17.

2. Wirth, N. and Hoare, C.A.R. A contribution to the development of ALGOL. Commun. ACM 9 (June 1966), 413–432.

3. Wirth, N. The programming langage Pascal. Acta Informatica 1, (1971), 35–63; https://doi.org/10.1007/BF00264291

4. Wirth, N. What can we do about the unnecessary diversity of notation for syntactic definitions? Commun. ACM 20, 11 (Nov. 1977).

5. Wirth, N. Programming in Modula-2. Springer-Verlag 1982.

6. Wirth, N. The Programming Language Oberon. Software–Practice and Experience 18, (Jul. 1988), 671–690; https://doi.org/10.1002/spe.4380180707



На правах рекламы


Серверы для разработки и размещения ваших проектов — это про наши эпичные! Все серверы «из коробки» защищены от DDoS-атак, скорость интернет-канала 500 Мегабит, автоматическая установка удобной панели управления VestaCP для размещения сайтов и даже автоматическая установка Windows Server на тарифах с 4 ГБ ОЗУ или выше. Лучше один раз попробовать ;)

VDSina.ru
Серверы в Москве и Амстердаме

Comments 280

  • UFO just landed and posted this here
      +8

      Лет 30 пишу на Паскале, все никак не могу перейти на C++. Всё в Паскале нравится кроме begin-end — слишком засоряет код многословием, фигурные скобки в этом плане лаконичнее.

        +1
        В Обероне почти нет begin'ов, да и в Modula тоже.
          +2
          Замечательно, а удобная среда RAD типа Lazarus имеется? Чтобы разрабатывать GUI для Windows, Linux и MacOS?
            0
            bash =)
          +4
          И объявление переменных в начале функции меня прямо совсем вымораживало 15 лет назад. С тех пор что-нибудь поменялось?
            +4
            В Delphi новых версиях переменные можно объявлять в блоках кода внутри метода.
              0
              Можно. Но редактор Rad студии это почему то не понимает и подчеркивает как ошибку, при том что компилятор переваривает. В последний раз пробовал в версии 10.1.
                0

                В свежерелизнутом 10.4.2 вроде пофикшено — для ErrorInsight сейчас задействован LSP (Language Server Protocol), использующий внутри тот же парсер, что и в компиляторе.

                  0
                  Может еще пофиксили ошибку когда периодически неверно показывает структуру открытого модуля в виде дерева?
                    +1

                    Не могу сказать, это самому надо проверить на том же проекте. Но этот релиз выглядит довольно стабильным и работает быстро, даже без традиционных хот-фиксов.

                      +1
                      Хот фиксы просто (наконец) вошли в саму станцию:
                      RAD Studio 10.4.2 integrates over 30 IDE Fix Pack changes!
                      Вообще общее впечатление от станции 10.4.2 очень положительные. Шустрая, стабильная, LSP сильно помогает.
              +14
              С тех пор это сначала перестало вымораживать, а потом начало вымораживать обратное :)

              P.S. Вообще сейчас склонен думать, что почти всё неудобство синтаксиса паскаля на самом деле было связано с тем, что он заставлял сначала подумать, потом только писать. Но это ведь не такое плохое свойство языка, разве нет?
                +15
                Мне кажется, проблема в том, что это заставляет много думать ещё и ни в чём не повинных людей, которые будут потом читать и дорабатывать код :) Объявление на месте в современных языках позволяет сузить область видимости переменных и упрощает восприятие программы.
                  0
                  Совсем необязательно, что локальные переменные что-то упрощают. Я как javascript-ер утверждаю.
                    0

                    Попробуйте заинлайнить d из кода ниже и посмотрите, упростился код или нет.

                    0
                    Я думаю что так сделали потому что так компилятор писать было проще, ведь именно он реально сложная программа.
                    +7

                    Проблема в том что при объявлении "на месте" можно задать контекст переменным. Например из раста:


                    let (x1,x2) = {
                      let d = b*b-4*a*c;
                      ((-b+d)/(2*a), (-b-d)/(2*a))
                    }

                    Сразу видны области видимости, переменная d не засоряет весь скоуп всей функции. Чем больше временных переменных (а их обычно дофига) тем лучше.


                    Просто для сравнения, из моей дрейней программы на паскале:


                    procedure InFile (var n0,k0:byte);
                    Var
                        InRec0   :TInputRec;
                        BufChar  :char;
                        BufString:TString;
                        C,CharCheck,DigitCheck,DelBool,IncorBool:Boolean;
                        I,J,K,M,M1,M2,M3: Integer
                      begin

                    да, студенческий код весьма некачественный и щас бы я написал лучше, но тем не менее если в теле функции используются всякие переменные цикла и т.п., то из-за отсутствия скоупов приходится все эти M1,M2,M3 переизобретать. Ну или переиспользовать одну переменную в разных контекстах, тогда нужно не забыть что i на третьей строчке это одно, а на седьмой — другое, при этом ни разу не использовав случайно i до обнуления.

                      +1

                      (-b+-sqrt(d))/2a
                      Корень потерялся. А заодно проверка наличия корней в действительных числах.

                        +1
                        Там много проверок. Нужно еще проверить, как минимум, что a<>0.
                          0
                          Проверка знака дискриминанта, да
                        +1

                        Никогда не задумывался о том, что объявление переменных только в начале процедуры может создавать неудобства программисту. А сейчас подумал и вижу, что процедуры могут быть такими длинными, что каждый раз прыгать к их началу (пока сочиняешь процедуру) во первых забодаешься, а во вторых — внутри процедуры бывают такие внутренние блоки (в циклах или в ветвях условного ветвления), в которых нужны "локальные" переменные только этих внутренних блоков. А тут на тебе — объявляй локальные переменные для всей процедуры — во где ещё неудобство зарыто. Не так ли?

                          +3
                          По задумке Вирта, каждый «внутренний блок» выносится во вложенную функцию со своим собственным списком var.
                            +1
                            Это и есть академичность — формально правильно, а на практике делает код чрезмерно громоздким.
                              +1
                              Зато и самодокументирующимся: у каждого «внутреннего блока» появляется название.
                            0
                            Это не просто неудобно — это увеличивает вероятность ошибочного использования этих переменных вне блока, в котором они должны использоваться, и потенциально может являться причиной сложноотслеживаемых проблем. Тогда как объявление переменных внутри блока позволяет такие ошибки устранять еще на этапе компиляции.
                        –8
                        есть сомнения, что с Pascal можно перейти на Golang; у Golang синтаксис похож на Pascal, но фигурные скобки вместо begin/end, но Garbage Collection используется у Golang.
                          0
                          Чем это синтаксис Го похож на Паскаль?
                            +1
                            Довольно многим, кстати.
                            Например объявлением функций и вообще, «орднунгом».

                            Перейти с Паскаля на Го — по моему вообще наилучший путь миграции для специалиста.
                              0
                              А можете какие-то примеры кода? Что-то я не могу уловить сходства, хотя несколько лет программировал на ТурбоПаскале и много лет программирую на Гоу.
                          +1

                          А зачем С++? Есть много прекрасных языков которые не требуют 5 лет сидеть в обнимку с книгами чтобы начать писать без детских ошибок.

                            +3
                            Примерно пяток, когда дело доходит до практического применения =)
                              0
                              И из них остается только 2, когда затем дело доходит до выбора языка, который умеет генерировать машинный код для создания GUI-программы — какой-нибудь диалект Паскаля Delphi/Lazarus или C++. Все остальные языки или не дозрели до GUI (Go, Rust), или генерят не машинный а байт-код (Java, C#), или же вообще являются чисто скриптовыми (Python).
                              Зачем нужен именно машинный код — отдельный вопрос, в частности для шароварных программ на машинный код защиту можно более качественную повесить.
                                +2
                                Шароварщина еще в тренде? Я думал эта тема уже с начала нулевых не особо актуальна, сейчас все больше стараются сервис продавать вместо кода.
                                  +1
                                  У шаровары есть своя ниша, и не все кастомеры любят онлайн сервисы. А мне шаровару нравится писать для души, т.к. по основной работе сервисы пишу, а «локальная» шаровара — это смена деятельности.
                                  +3

                                  Возьмите хаскель: гц, компиляция в машинный код, компилируемый ассемблер такой что ни один реверс-инжинер не возьмется разбирать. Производительность чуть хуже плюсов (но скорее всего лучше паскаля), потребление памяти лучше чем у джавы.


                                  Но шаровары в 2021 это действительно очень странно

                                    +1
                                    • Для начала, не стоит зацикливаться на локальном GUI, весь мир более или менее успешно, но массово переходит на Веб-интерфейсы, а там картина кардинально другая;
                                    • Далее, хороший выбор локального GUI у С, у С++, у D;
                                    • Сюда же записывается любой компилятор, имеющий биндинги к C-GUI библиотекам вроде GTK или Qt, это будет и Freebasic и Ada и Rust и Nim и много еще чего;
                                    • Еще, не так давно, чуть более года, C# научился компилировать в маш.код. Java, кстати, тоже;

                                    Мир не стоит на месте, в отличие от Паскаля.
                                    Впрочем, FreePascal хоть и медленно, но прилично подтянулся в части качества оптимизации за последние 10 лет.
                                      –1
                                      Для начала, не стоит зацикливаться на локальном GUI, весь мир более или менее успешно, но массово переходит на Веб-интерфейсы, а там картина кардинально другая;

                                      Представляю себе какой-нибудь 3D-принтер или там МРТ-сканер с веб-интерфейсом :-/
                                        0
                                          +2
                                          А в чем проблема? Допустим для сетевого принтера это может быть заметно удобнее чем использовать бинарные программки.
                                            0

                                            Вы не поверите...

                                              +1
                                              Да легко. У меня контролер 3d принтера на Duet2 WiFi. Очень удобно рулить им через браузер.
                                              0
                                              Upd. Уточнение. Хоть Java и научилась генерировать машинный код с jaotc, но для запуска все равно потребуются .class файлы, так что скрыть код от декомпиляции таким способом нельзя.
                                                0
                                                Если выполняется машинный код, а не содержимое .class — значит, этот файл можно просто набить мусором?
                                                  0
                                                  Нет, там контрольки сверяются. Маш код получается просто необязательный кэш.
                                                    0
                                                    Можно после компиляции подставить в машкод значения, подходящие мусорному .class :)
                                                      0
                                                      Нельзя. Он оставляет за собой право перекомпилировать код.
                                                        0
                                                        И когда это кого-нибудь останавливало?
                                            0

                                            Увы, не распарсил что написано

                                              0
                                              Там не про пятки :-)
                                                0

                                                Это я понял, я скорее про вторую часть предложения.

                                                  +1
                                                  Плохой тулинг, малое количество библиотек, слабая экосистема в целом приводит к отсутствию интереса у работодателей ко всяким малораспространенным языкам, даже возможно и неплохим.
                                                    0

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


                                                    И да, как это парсится из вашего предложения я честно говоря до сих пор не понял. Если убрать несущественные детали то диалог выглядел:


                                                    — Есть много языков которые не требуют 5 лет сидеть в обнимку с книгами
                                                    — Примерно пяток


                                                    Извиняюсь что к этому возвращаюсь, но то ли я дурак, то ли лыжи не едут.

                                                      0
                                                      Просто упускаешь ремарку «когда дело доходит до практического применения».

                                                      Потом смотрим рейтинги востребованных у работодателей языков и считаем те, «которые не требуют 5 лет сидеть в обнимку с книгами». Сколько получилось?
                                                        +1

                                                        Да сколько угодно. За 5 лет можно стать гуру джавы которые знает все нюансы языка. Тоже для шарпа. То же для практически любого языка из топ-10 рейтингов.


                                                        Плюсы крутой язык, но им 40 лет уже. Это не проходит бесследно. А то так ещё придем к выводу что индустрия всё время стояла на месте и ничего лучше придумать не смогла за все это время.

                                          +2
                                          Вот поэтому перебрался на C#.
                                          И стал доволен ещё больше…
                                          +1

                                          А у меня немецкая клавиатура. Ненавижу фигурные скобки. Так что begin...end forever.

                                            0

                                            Да, поэтому правильный компромисс: просто отступы. Скала3 хорошо показала, что этого вполне достаточно. Для компилируемого языка в отличие от того же питона нет проблем с тем что скрипт может неправильно проинтерпретироваться: у нас есть компилятор. Читается куда чище и проще чем скобки, ну и конечно на порядок лучше бегин/эндов

                                              +3
                                              Для вас специально были сделаны триграфы =)
                                                0

                                                О, теперь я знаю, почему в части программ на ZX Spectrum у меня появлялись ÄаÜ. Спасибо :)

                                                  +1
                                                  Фигурные скобки можно диграфами вводить. Я для смеха в последней своей программе на Си их использовал.
                                                    0

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


                                                    Вся аргументация против отступов что я слышал — "а вдруг я со стаковерфлоу код скопирую, а он неправильно вставится". Что тут скажешь — обычно разработчики достаточно интеллектуальные, чтобы суметь нажать tab/shift+tab несколько раз чтобы выравнить код

                                                      0
                                                      Вы, кажется, не мне хотели ответить.
                                                0
                                                Лет 30 пишу на Паскале, все никак не могу перейти на C++

                                                На Паскале программировать начал тоже 30 лет назад. На C немного в университете тоже попрограммировал немного. Но после окончания универа как на перл перешёл, так и не вылезаю из него. Паскаль-то хорош. Но мне ж нужно ваять сайты, ну и всякие скрипты для управления системой и контроля над ней.

                                                  +3
                                                  Да, то, что на Перл можно написать за полчаса, на C или Паскале с 0 полгода будешь писать и ещё года 2 отлавливать ошибки. :-) Я лет 12 назад был монстром Perl regex и написал по нему курс лекций для intuit.ru и книжку «Perl для профессиональных программистов. Регулярные выражения», изд-во Бином. При этом сам был любителем. Несколько раз находил ошибки в Perl и в рег. выражениях, писал на bugs(a)perl.org (или как-то так), их исправляли. Раз, когда был Perl 5.8.1, написал программку
                                                  #perl -Mstrict -wc
                                                  map{while(1){}}@a;

                                                  которая завешивала компьютер и под Windows и Unix сервер при её трансляции(!) Было такое впечатление, как будто я первый, кто начал программировать на Perl. :-)
                                                  Как-то поспорил с одним профи, что смогу написать для Perl 5.8.x одно re, которое проверяет на правильность арифметич. выражения с неограниченным уровнем вложенности скобок и написал, дав пример, как можно по кирпичикам составлять такие re.
                                                    +1
                                                    Будете ли вы переиздавать книгу в Википедии?
                                                      0
                                                      Да мне не жалко, надо узнать, как там издают книги, надо на всякий случай договор глянуть (а то возьмут и посадят...), а с налёта я на диске этой книги не нашёл, в 2007 г. она выходила. Тема больно узкая: на intuit.ru на курс моих лекций записалось 11 человек…

                                                      По поводу проверки арифм. выражений и другие мои продвинутые re можно глянуть в моём разделе на www.cronc.com/ru Жаль, я не нашёл, как на этом материале можно зарабатывать, пришлось оставить это дело…
                                                        0
                                                        С 2007 года прошло 14 лет. Неужели мог быть договор на четырнадцать лет?
                                                          0
                                                          Вас это може удивить, но типичные договора с издательствами бывают на 10 лет или 20.

                                                          Время, вне IT, течёт несколько медлненнее.
                                                            +1
                                                            Вот этот мой курс: intuit.ru/studies/courses/1148/187/info Можно пользоваться задаром.
                                                    0
                                                    вы думаете { } лучше? ну если только с точки зрения краткости набора :-)
                                                      +2
                                                      Помню, на Turbo Pascal 5.5 написал программу для решения шахматных задач на обычный, обратный и кооперативный мат в любое число ходов без рекурсии (я тогда о ней, похоже, не знал). Работала без ошибок. Exe файл для ДОС имел размер 20 Кб. А для устранения begin-end можно было бы сделать директивы препроцессора, это ведь не сложно. Я использовал свои макросы клавиатуры для ускорения работы.

                                                      А месяц назад я решил вспомнить C, чтобы стать, как все, и переписал свой быстрый LZ компрессор с Delphi 7 на C (под GCC, пока только декомпрессор) и получил значительный выигрыш в скорости, я на асм пока такой скорости не достигал. Хотя, под Lazarus отлаживать программу удобнее, чем в GCC. Я вообще не пользовался отладчиком, когда переписывал… Теперь постараюсь превзойти zstd на быстрых уровнях сжатия с пом. своих типсов с триксами. :-)
                                                      +1
                                                      Всё это происходило без международных проектных организаций, без бюрократии и бюджетов на исследования. Сегодня это было бы невозможно.

                                                      Но почему сегодня невозможно работать без бюрократии и бюджетов? Почему запрещено работать за свой счёт? Я знаю людей, которые именно так и работают, «без бюрократии и бюджетов».
                                                        0
                                                        В школе: Рапира(?) → QBasic → Turbo Pascal → Delphi… И тут я понял, что разрабатывать интерфейсы мне нравится гораздо больше, чем программировать. К сожалению )
                                                          +8
                                                          image
                                                            0
                                                            Ох, эти кнопочки с пиктограммами, отбрасывающими разную тень в зависимости от нажатия. Локализировать их, конечно, тот ещё геморрой, но выглядят — прекрасно!
                                                              +2
                                                              Этот BWCC казался инородным включением еще во времена Windows 3.1, а уж чем дальше тем хуже. Но с ним успешно соперничал Lotus Notes / Domino. Хотя теперь, конечно, ностальгическая юность.
                                                          +19
                                                          Turbo Pascal был моим первым языком программирования.
                                                          Все базовые вещи на нем выучил: структуры данных, алгоритмы (вычисления, линейную алгебру, графы), работу с файлами. Основы, без которых дальнейшее обучение программированию бесполезно.

                                                          Это останется навсегда:
                                                          uses Graph
                                                            0
                                                            Turbo Pascal был моим первым языком программирования.

                                                            И моим, нас ещё всякими формами Бэкуса-Наура мучили, синтаксом на диаграммах.
                                                            Кстати, странно что в статье Вирт обошёл вниманием Аду и VHDL, они вроде тоже если не дети, то внучатые племянники дедули Pascal-я.
                                                              0
                                                              Oberon2 и Component Pascal куда-то потерялись.
                                                              +8

                                                              Модуль Graph и подключение egavga.bgi
                                                              Прямо так и говорили "подключить егавгу"

                                                                +1
                                                                У нас в школе был очень популярен vga256.bgi, для визуализации и игрушек было гораздо полезнее ;)
                                                                  0
                                                                  А что cga,bgi никогда не подключали?! :-)
                                                                    0
                                                                    Неа, у нас стояли 286-ые IBM PS\2 — и в них стоял какой-то хитрый MCGA адаптер, который помимо стандартных VGA режимов умел 640х400(480?)х256 цветов, а в 16-цветных режимах умел вроде бы даже 1024*768 interlaced — хотя мониторы при этом аццки свистели.

                                                                    Поэтому нам CGA/EGA было уже неинтересно совсем ;)
                                                                      0

                                                                      Даже в том месте, где я первый раз полапал Паскаль, адаптеры работали с EGA-драйверами, при этом игры (Dangerous Dave) их как EGA не видели. Прелюбопытные были железяки. А уж потом — какой CGA, вы о чем? 16 цветов красивее.

                                                                  +5

                                                                  Зачем в этой программе в заголовке


                                                                  uses crt, graph;

                                                                  если ни то ни другое в коде не используется?

                                                                    +25

                                                                    Чтоб утереть скупую слезу ностальгии.

                                                                      0
                                                                      Наверно, какая-то тётя так преподавала. :-)
                                                                      +2
                                                                      Паскаль стал и моим первым языком программирования. После этого в кружке информатики я уже познакомился с Делфи. Но душа просила C++, добравшись до которого (найдя книгу по С++ в библиотеке) я был в огромном восторге.
                                                                        –2
                                                                        До сих пор тошнит, когда вижу паскалевский код.
                                                                          +7
                                                                          Рискую с Вами за компанию отхватить минусы, но подтверждаю.

                                                                          В детстве нравился Паскаль, потом его и сам преподавал в школе, а ещё позже даже выполнил пару заказов на фрилансе с этим языком. Можно сказать, что именно детище Вирта и сформировало меня как программиста.

                                                                          Но сейчас бы программирование на нём было бы лично для меня пыткой, я бы не стал на нём работать даже если бы предложили солидные деньги. Даже сам толком не понимаю почему так — ведь это же эталон структурированности и понятности в написании программ. Даже на богомерзком VBA я с огромным удовольствием делаю pet-проекты, но не на Паскале.
                                                                            +1
                                                                            Я не уверен что это вина языка. Сегодня выбор языка обусловлен не только самим языком но и его «обвеской»: фрэймворки, библиотеки для доступа к другим системам, драйвера, IDE, средства статического анализа и прочая и прочая. Думаю с самим языком ничего такого страшного не случилось. Просто не успел в свое время набрать достаточной массы чтобы коммьюнити и монстры вложились в его разработку.
                                                                              +3
                                                                              Почему так? Я вот наоборот, тоже вырос на Паскале, по основной работе использую Java, Python и прочюю байткодовую или скриптовую «богомерзость», а шаровары до сих пор пишу на Lazarus. Эта IDE очень хорошо воспроизводит «экспириенс» Дельфи. Иногда делаю попытки найти аналог ГУИшной разработки на C++, но пока безуспешно, то одно то другое не нравится во всех этих Qt, Gtk, wxWidget, Ultimate++ и прочих.
                                                                                +3
                                                                                Был когда то Borlan C++ builder, очень похожий на Delphi. Но я его расцвет популярности не застал, по причине моего возраста.
                                                                          +2
                                                                          Один из современных наследников Pascal также и язык Structured Text, который широко применяется в программировании АСУ ТП.
                                                                            +5

                                                                            Первая статья в журнале Монитор, про баг в ТурбоВижн! За что получена 5ка по информатике автоматом в 11 классе :) Ностальгия.

                                                                              +2

                                                                              Очень заинтересовали (именно как работа школьника). Нет ли ссылки или скана.

                                                                            +2

                                                                            По этому поводу был анекдот из конца 80х:


                                                                            Знаете, почему Никлаус Вирт никогда не ездит в Испанию?


                                                                            Потому что он один раз спросил у своих испанских коллег:


                                                                            — Правда, что Паскаль — один из лучших языков программирования?
                                                                            — Si!, ответили испанцы.


                                                                            Обиделся Вирт, и с тех пор в Испанию ни ногой...


                                                                            P.S Уже лет… дцать в своих проектах успешно применяю Паскаль совместно с
                                                                            С++


                                                                            Потому что каждый инструмент хорош, если его использовать по назначению.

                                                                              0
                                                                              Потому что каждый инструмент хорош, если его использовать по назначению.

                                                                              А вот про это расскажите поподробнее, пожалуйста. Какой назначение у Pascal?

                                                                                0
                                                                                Если мыслить и писать алгоритмами — то паскаль тут идеально вписывается.
                                                                                  +5
                                                                                  Ох, не сказал бы.
                                                                                  Если в алгоритме сказано «достань в таблице третий элемент», я могу написать table[3].
                                                                                  А вот «достань в записной книжке телефон Маши», написать phone[«Masha»] уже не получится, хотя с чего бы. Ну или «пройдись по всем элементам таблицы». Возможностей для построения абстракций там не хватало.
                                                                                    0
                                                                                    Вы говорите не про алгоритмы, а о некой лично Вам удобной фиче. В Паскале это реализуется, и не одним способом. Вас кавычки в Маше не царапают? А лично меня таки да. По мне запись phone.Masha, например, куда ближе сердцу.
                                                                                      +6
                                                                                      Ассоциативный массив путаете с записью.
                                                                                        +1

                                                                                        На некотором уровне абстракции это равнозначные вещи.

                                                                                        0
                                                                                        Если у нас есть строка «Masha», то как вызвать phone.Masha в Паскале? И насколько это будет тормозить?
                                                                                          0

                                                                                          Можно реализовать через Variant. Такое используется, например, в подлибе mORMot для работы с JSON. Тормозить не будет.

                                                                                            0

                                                                                            В Дельфи, помнится, придумали мега-фичу для тех далёких времён, когда борланды ещё изобретали дельфи:


                                                                                            Для операции присваивания сделали возможность наваять свой метод write (точное название не помню), а для операции чтения значения из свойства (из переменной), соответственно, метод read.


                                                                                            Вот это была фича так фича!


                                                                                            Получалось, что я мог написать целую процедуру установки значения, которая вызывалась бы в момент обработки оператора присваивания:
                                                                                            a := b
                                                                                            `- а в это момент запускается написанная программистом процедура, которая реализует подарограмму установки значения. Поприменять эту фичу я:
                                                                                            а) тогда так и не успел
                                                                                            б) в других языках подобных фич больше нигде не видел

                                                                                              +3
                                                                                              в других языках подобных фич больше нигде не видел

                                                                                              Для свойств — есть во всех языках, где есть свойства, хотя бы в C#
                                                                                              Для типов — перегрузка operator= есть в C++
                                                                                              Определяемые пользователем преобразования типов — есть в C++ и в Scala
                                                                                                +1
                                                                                                Это называется Геттеры и Сеттеры. В С# точно есть вместе с переопределением операторов (вы можете сложить объекты как 2 числа, просто написав a+b, где а и b — именно объекты), в PHP через магические методы.
                                                                                              0
                                                                                              Согласен, пусть будет функция get_phone(string name)
                                                                                              И как теперь в Паскале получить phone.name? Может, я чего-то путаю, но не помню такого синтаксиса.
                                                                                                0
                                                                                                Свойства есть в Дельфи-диалекте (поддерживается и в Фрипаскале).
                                                                                                Но вообще за переопределением операторов это в более продвинутые (и сложные!) языки.
                                                                                              +2
                                                                                              В Паскале да, такого не было. Но теперь-то оба ваши предложения можно сделать на свежих версиях Delphi.
                                                                                                +3
                                                                                                Ну сейчас у нас вообще конвергенция языков, и на всех языках можно сделать всё. Я с Бейсика начинал, но покажи мне тогда современный VB.NET, я бы и не догадался, что это Бейсик. И классы тебе, и наследование, и даже обработка исключений. Я так подозреваю, что Никлаус Вирт всё-таки не современный Delphi представлял себе.
                                                                                                  +1
                                                                                                  А тут вот и думай — или считай паскаль таким, каким его видел Вирт, и тогда зови его устаревшим и никому не нужным, или смотри на его развитие в виде fpc и delphi.

                                                                                                  А то в развитии и фичах С++ никто не отказывает, а на паскаль смотрят через призму 40-летней давности
                                                                                                    +3
                                                                                                    Ну это на самом деле разные вещи. Потому что развитие C++ в целом соответствует представлениям его автора — он по-прежнему активен, обсуждает нововведения и т.п. Вирт же не хотел Delphi, он хотел Modula и Oberon. «Современный Паскаль» — это «язык по мотивам», который в чём-то ближе к C# (и отражает видение Хейлсберга), нежели к исходному Паскалю.
                                                                                                  0

                                                                                                  А можно минимальный пример программки на паскале, которая делает 3 вещи:


                                                                                                  1. определяет свою структуру данных типа MyArray, которая является оберткой над динамическим массивом некоторой длины (передается в конструктор аргумнетом)
                                                                                                  2. реализует возможность итерирования по всей структуре данных (for each), которая работает очевидным образом
                                                                                                  3. написать функцию foo, которая должна получить на вход MyArray и указатель на функцию-предикат. Задача найти элементы MyArray удовлетворяющие предикату из аргументов, отсортировать их и вернуть первые 3. Функция должна работать для массива любого типа, который поддерживает сравнение.
                                                                                                    +1
                                                                                                    Уже начиная с «конструктор» мы переходим с классического паскаля на object pascal.
                                                                                                      0

                                                                                                      Не переходим. Можно сделать "конструктор"-функцию с тем же самым. Или по-вашему есть принципиальная разница между foo := new Foo(args) или foo := NewFoo(args)?

                                                                                                        0
                                                                                                        Я правильно понимаю, что вы хотите, чтобы я на классическом паскале реализовал ооп и что-то из разряда хаскелеподобия?
                                                                                                          0

                                                                                                          Нет, не хочу. Я предлагаю реализовать пару функций: создающую структуру с "контекстом" — небольшой оберктой над массивом. И функцию принимающую этот контекст и делающую некоторую работу.


                                                                                                          Где тут ООП? Где тут хаскель?

                                                                                                            –1
                                                                                                            Пару функций. А я про алгоритмы, ради которых вы хотите пару функций.
                                                                                                      0
                                                                                                      Да, можно. Но вы потом напишете, что в <подставьте ваш любимый язык> это делается в 4 строчки, не то что в вашем Delphi. )
                                                                                                        +4

                                                                                                        Именно так, да.


                                                                                                        Смысл же в том, чтобы писать поменьше, а получать побольше, чем меньше бойлерплейта тем лучше, нет?

                                                                                                          0
                                                                                                          Важно не меньше писать, важнее чтобы код был максимально понятен тем, кто будет его читать. Нужна золотая середина. Ниже я упомянул про Oxygene — диалект Паскаля со многими конструкциями, взятыми из других языков.
                                                                                                            0
                                                                                                            Если платят за количество строк кода, определенно, нет =)

                                                                                                            Кстати, в Дельфи завезли лямбды, да и открытые массивы там давно, так что все это реализуемо. Только непонятно, зачем. «Смотри, как я могу» ??
                                                                                                          –3
                                                                                                          Функциональные ЯП не снискали такой популярности как Паскаль.

                                                                                                          Напомни, где там в Тиобе появляются чистые ЯП?

                                                                                                          И да, писать ТЗ из области хотелок, просто смешно. Вам пуговицы, или…?
                                                                                                            +2
                                                                                                            где там в Тиобе появляются чистые ЯП?
                                                                                                            А причем тут вообще чисто функциональные ЯП?
                                                                                                            В современные ООП-языки типа C# и Kotlin добавляют много фишек из функциональщины, и таким образом они в себе сочетают достоинства разных языков и парадигм.
                                                                                                            Точно так же оригинальный паскаль был чисто процедурный, но потом в него добавили ООП, и благодаря чему в том числе Delphi имел в былые времена свою рыночную долю.

                                                                                                            Ну а заявлять про «ТЗ из области хотелок» вообще странно с вашей стороны, подобная задача не чисто-теоретическая, а вполне может встретиться реальном проекте.
                                                                                                              +3

                                                                                                              Ухх сколько сочных и интересных офферов я видел на паскале! (ровно ноль, что, к слову, строго меньше числа офферов на каком-нибудь идрисе)

                                                                                                                +1
                                                                                                                Ну не знаю, где вы находитесь, но в России: 746 вакансий Delphi.
                                                                                                                А «По запросу «Idris» ничего не найдено»
                                                                                                                  –2

                                                                                                                  Я про интересные офферы. Например, на идрисе — верифицированный блокчейн, или верифицированные распределённые вычисления. А на дельфи?

                                                                                                                    +1
                                                                                                                    У каждого свои интересы. Я лишь указал на факт. Возможно, не там искал.
                                                                                                                      0
                                                                                                                      Просто недостаточно ВОСПАРИЛ [над обыденностью]! =)
                                                                                                                        +1

                                                                                                                        Нет времени тайпчекать, надо фигачить в прод.

                                                                                                                        +1

                                                                                                                        Ну, в этом нашем США на indeed.com меньше сотни вакансий по "delphi developer" (из которых значимая часть — на самом деле какой-нибудь front-end developer, просто в тексте вакансии пишется что-то типа «and we have some projects in delphi»). И мы, к слову, обсуждали pascal — а там по «pascal developer» их вообще 24 с описаниями типа такого:


                                                                                                                        Developers reporting to the CTO. Requirements include, knowledge of relational databases, in any object oriented language such as Javascript, Java, Pascal, Delphi, C #, VB.net. Duties and responsibilities include unit level debugging, interaction in development and QA cycle with QA department and beta sites.

                                                                                                                        или такого:


                                                                                                                        [...] Working knowledge of and/or experience with at least one object-oriented programming language; e.g. Object Pascal, Java, C#, C++, etc. [...]

                                                                                                                        Не знаю, сколько там на самом деле паскаля в продакшене.


                                                                                                                        По идрису их, конечно, существенно меньше (целых три), но, опять же, почему-то так получилось, что когда я интересовался работой, на идрисе она находилась, а на дельфи — нет.

                                                                                                                          0
                                                                                                                          Вроде, если я ничего не путаю, классический паскаль ООП не поддерживает. ООП появился как диалект в поздних версиях Турбо-Паскаля.
                                                                                                                            0
                                                                                                                            он же так и назывался — Object Pascal
                                                                                                            0
                                                                                                            Современные диалекты Пасаля имеют стуктуру для словаря, правда она не так лаконична как в современных языках, но использовать можно.
                                                                                                              0
                                                                                                              Есть диалект Паскаля Oxygene, так они синтаксис всех новомодных фич берут из C#, Java, Swift с минимальными изменениями.
                                                                                                              +1
                                                                                                              var phones: TDictionary<String, String>;
                                                                                                              ...
                                                                                                              phone := phones['Маша'];
                                                                                                                +2
                                                                                                                Да, это я понимаю. Но это не совсем про исходную тему — «Паскаль хорош для описания алгоритмов». Данный листинг можно переписать с минимальными изменениями на любом родственном языке — C#/Java/C++, и в этом контексте «современный Паскаль» ничуть не лучше и не хуже альтернатив.
                                                                                                              0

                                                                                                              Посмотрите пожалуйста задачку из https://habr.com/ru/company/vdsina/blog/544006/#comment_22736692


                                                                                                              Очень хотелось бы увидеть максимально упрощенный и идиоматичный код на паскале, реализующий задачу

                                                                                                          +3
                                                                                                          Судя по комментариям — весь текст можно было бы убрать, оставить только заголовок и КДПВ, и реакция была бы той же самой :-\
                                                                                                            +2

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

                                                                                                              +5
                                                                                                              Да вроде не опровергает: что является критерием «хорошего языка программирования» для профессора, чья работа — учить студентов программированию? «Pascal was easy to teach, and it covered a wide spectrum of applications» — обратите внимание на порядок приоритетов.
                                                                                                            +5
                                                                                                            У вас в КДПВ отступы потерялись!
                                                                                                              +1
                                                                                                              Когда учился в НГУ, то Н.Вирт пару раз приезжал читать лекции. Тогда он продвигал Oberon, который даже был в учебной программе. А паскаль еще в школе учили и программировали на нём.
                                                                                                                +1
                                                                                                                А паскаль еще в школе учили и программировали на нём

                                                                                                                В школе — в какие годы? Во 2-й половине 80-х в школах на "Информатике" учить начинали с Бейсиков.

                                                                                                                  0
                                                                                                                  В нашей школе не было ни паскаля ни бейсика, а был черепаший логоклон
                                                                                                                    0
                                                                                                                    да, был такой. Но вроде недолго.
                                                                                                                +1

                                                                                                                Есть ещё вот такой паскаль, его в школе учил
                                                                                                                http://pascalabc.net/

                                                                                                                  0
                                                                                                                  А он годится для практического применения? Он в байткод транслирует?
                                                                                                                  0

                                                                                                                  Да, ностальгия сумасшедшая. Тоже начал с него постигать программерскую науку. Буквально на днях попались под руку две книжки по Паскалю, начала нулевых, полистал, повспоминал…
                                                                                                                  Сейчас, конечно, язык кажется тяжеловесным (впрочем, после JS/TS любой таковым кажется), особенно дико выглядит то, что после строки "uses что_то_там" в глобальную область сыпется всё содержимое модуля (привык поштучно импортировать и знать, что и откуда).

                                                                                                                    +1
                                                                                                                    Это не из-за модульной структуры как таковой, а просто модули спроектированы неправильно. Правильное проектирование модулей тоже подразумевает инкапсуляцию того, что клиентам видеть не нужно (раздел implementation), и шару только интерфейсной части (раздел interface).
                                                                                                                    +1
                                                                                                                    Первый Turbo Pascal 3.0 был для MSX2)
                                                                                                                    Покупал Turbo Pascal for Windows 1.0 на трех пяти дюймовых дискетах. Какая там была документация!)
                                                                                                                      0
                                                                                                                      А какой Turbo Pascal был быстрый на MSX, вжик и готово!
                                                                                                                      Не то что ASCII C, который долго жевал дискетки, прежде чем скомпилирует программу.
                                                                                                                        0
                                                                                                                        Так как раз Кан и поднялся на быстром компиляторе. Это немного определяется особенностью языка — у Паскаля формальный синтаксис более простой чем у C. К тому же для C еще нужно линковать модули. Turbo Pascal 2.0 помню на MSX/MSX2 )))
                                                                                                                          0
                                                                                                                          Да, программа на TP 5.5 транслировалась за полсекунды, а на TC 2.0 за полминуты. Библиотеки там, по-моему, раза 2 просматривались.

                                                                                                                          На СМ-2М был транслятор с Паскаля, но он транслировал не в код для ЦП, а в программу на ассемблере.
                                                                                                                          0
                                                                                                                          Это еще пол беды, он генерировал промежуточный код в asm 8080 с ошибками и не такой оптимальный как у Turbo Pascal.
                                                                                                                          Т.е. программы получалась не рабочей.
                                                                                                                          Приходилось его просматривать, исправлять, оптимизировать, после этого все работало)

                                                                                                                          Именно с тогои не заладилось у меня с C и С++.
                                                                                                                            0
                                                                                                                            Очень странно, кроме отсутствия поддержки чисел с плавающей точкой, я не помню никаких проблем с ASCII C. Коллеги на нём игру написали для MSX-1, например, не хуже чем у KONAMI была.
                                                                                                                          0
                                                                                                                          Какая там была документация!

                                                                                                                          Дома где-то лежит коробочный седьмой паскаль с турбовижном до кучи. По размерам — куб со стороной полметра, по весу килограмм так 10, и таки да, почти всё из этого — чисто документация %)

                                                                                                                            0
                                                                                                                            Так там все понятно написано.
                                                                                                                            Сколько раз исправлял ошибки именно по тому, что проситал фирменную доку!
                                                                                                                          0

                                                                                                                          Ностальгия:) школьные агаты и паскаль:)

                                                                                                                            +2
                                                                                                                            На дворе был 91(2) год :) Обожал программирование на ТурбоПаскале (другого не знал) :)

                                                                                                                            github.com/gnanev/fun/blob/master/GAME.PAS
                                                                                                                              +4
                                                                                                                              Уж если ностальгировать, то у меня прямо по тексту Вирта — я начинал с Алгола 60 на машине БЭСМ-2, которая стояла в пристройке во дворе физфака МГУ. Поэтому у меня Алгол — типа, первая любовь и я его помню. Хотя, конечно, для радиофизических задач Фортран был более адекватен, но он стоял на недосягаемой для меня тогда БЭСМ-6. Начав работать, я таки прочно пересел на Фортран, а на Паскаль меня «пробило» только в начале 90-х. Помню, я купил и торжественно приволок в лабораторию кубик BP-7. Меня заворожила строгость языка в сравнении с анархическим Фортраном. С другой стороны, используя ассемблерные вставки как часть текста, можно было гулять, как вздумается. Если Фортран и его библиотеки были удобны для численного моделирования, то Паскаль очень сгодился для систем автоматизации эксперимента и для организации взаимодействия со всякими железками на низком уровне. Вплоть до написания систем реального времени с разделением этого же времени для возможности параллельной обработки данных оператором. Разумеется, все то же самое можно было делать на Турбо Си, например. Но вот тут, на мой непросвещенный взгляд, царила чистая вкусовщина. Меня эти фигурные скобки бесят. А begin...end; — греют. А кому-то ровно наоборот.
                                                                                                                                0
                                                                                                                                Паскаль создан как язык для обучения. Он находится на более высоком уровне чем C, что делает последний более универсальным, что, в конечном счете, привело его к популярности.
                                                                                                                                  +2
                                                                                                                                  Не совсем так. В конце 70х-начале 80х Pascal был гораздо популярнее C. Уже тот факт, что в момент выхода IBM PC для неё выпускался MS Pascal, а вот C появился сильно позже — говорит о многом. Да и MacOS тоже изначально на Pascal была написана.

                                                                                                                                  А потом… потом разные диалекты начали разбредаться. А как раз у C началась стандартизация (ANSI C89, который, в отличие от Pascal, разработчики компиляторов реально старались поддерживать, потом C++, где вначале диалектные фичи появлялись, но потом их все дружно изводили). И популярность Pascal начала стремительно падать.

                                                                                                                                  Думаю эти вещи связаны друг с другом, но всё равно непонятна причина. Почему разработчики C стремились поддерживать стандарты. Почему разработчики Pascal на них плевали?
                                                                                                                                    0
                                                                                                                                    Всего лишь потому, что настоящий ANSI/ISO Pascal для реального программирования не подходил никоим образом. То есть вообще. У Pascal был международный Стандарт, но на этом стандартном Pascal никогда и ничего не было написано (студенческие “ввести два числа, вывести их сумму” не считаем). Но многим хотелось. В результате появилась куча Pascal-подобных языков. Некоторые из них даже назывались Pascal'ями, но при этом Pascal'ем с точки зрения ANSI/ISO Стандарта они не являлись. Не в том смысле, что шибко расширяли Стандарт, а в том, что вообще не реализовывали его. Apple, кстати, была в этом плане хорошей честной компанией, и не называла свой язык Pascal'ем, а в Object Pascal их Clascal превратился уже много позже (они вроде даже как с Виртом перетирали эту тему).

                                                                                                                                    А у C хоть и не было международного (ANSI/ISO) стандарта, но был Unix. И этого оказалось более чем достаточно для всеобщего признания K&R C как Стандарта, который надлежит соблюдать. А потом уже ANSI/ISO подтянулись.
                                                                                                                                      0
                                                                                                                                      А потом уже ANSI/ISO подтянулись.
                                                                                                                                      Вот в том-то и дело, что не “потом”. Многие фишки были добавлены в разные компиляторы C синхронно, одновременно и совместимо в конце 80х. А стандарт вышел только в 1989м.

                                                                                                                                      Это уже потом Microsoft “забил” на C и поддержку более новых стандартов, чем C89 не добавлял десятилетиями (я не издеваюсь: до 2020го года он только C89 поддерживал… в 2020м наконец-то ситуация изменилась).
                                                                                                                                      Однако “забив” на C Microsoft и другие разработчики компиляторов вложились очень сильно с поддержку стандарта C++ (использование разных вендоро-специфичных вещей постепенно уменьшалось).

                                                                                                                                      А вот в Pascal мире над идеями стандартизации и поддержки ISO все откровенно смеялись. Ну и досмеялись почти до полного забвения, по итогу.
                                                                                                                                        0

                                                                                                                                        В мире Паскаля стандартом де-факто стал Turbo Pascal, а затем Delphi. Другие известные компиляторы, такие как FPC и Oxygene, умеют работать в режиме совместимости.


                                                                                                                                        Проблема в том, что Delphi как язык очень консервативен и медленно развивается. Smart Pascal (Smart Mobile Studio), Oxygene — диалекты Pascal/Delphi, которые получили разные классные фичи, и они продолжают улучшаться. Но в этой части им приходиться жертвовать совместимостью.

                                                                                                                                          +1
                                                                                                                                          Дык нет никакого «мира Паскаль». В том-то и дело.
                                                                                                                                          Все библиотеки и все разработки затачиваются под конкретный комплиятор.
                                                                                                                                          Поддерживающих хотя бы пару — крайне мало.
                                                                                                                                          А вот в мире C/C++ — это было нормой уже в 80е.
                                                                                                                                          Почему так получилось?
                                                                                                                                            0
                                                                                                                                            Есть мир паскаля, это видно на примере лазарус и борланда
                                                                                                                                              0
                                                                                                                                              Борланда уже 11 лет как нет. Есть ли по-прежнему мир Паскаля?
                                                                                                                                                0
                                                                                                                                                тогда Lazarus
                                                                                                                                            0
                                                                                                                                            Delphi как язык очень консервативен и медленно развивается

                                                                                                                                            Сложно развиваться, когда ближайший конкурент играет грязно и жёстко. Майки перекупили двух главных идеологов, Хейлсберга и Гросса, и сделали всё, чтобы развитие остановилось. Наверняка читали все эти истории про скупку акций через подставные фирмы, своего человека от MS в совете директоров Борланда, передачу технологий и другое. Проблема не в идеологии Делфи и не в технологиях. Большая политика и большие деньги всё предрешили. Компанию просто съели, раздавили. www.sql.ru/blogs/ozka/360

                                                                                                                                            Но сейчас дела бодро идут в гору :)

                                                                                                                                              +2
                                                                                                                                              Майки перекупили двух главных идеологов, Хейлсберга и Гросса, и сделали всё, чтобы развитие остановилось.
                                                                                                                                              А много эти
                                                                                                                                              “главные идеологи” наразвивали в C++?

                                                                                                                                              Главная проблема Pascal — в том, что в какой-то момент Pascal стал восприниматься только как Turbo (потом Borland) Pascal. Так что как только у этой одной фирмы начались проблемы — сразу всё и посыпалось.

                                                                                                                                              А вот в случае с C++ идеолог хотя и работал, формально, на одного из вендоров, однако Sun никогда не был лидером в мире C/C++. И даже когда Sun исчез — это не привело к катастрофе.
                                                                                                                                        0
                                                                                                                                        В стандарте Паскаля нет описания стандартной библиотеки. А без нее работать невозможно. Потому каждый городил во что горазд.

                                                                                                                                          0
                                                                                                                                          А у Pascal и нет никакой “стандартной библиотеки”.
                                                                                                                                            0
                                                                                                                                            Для Extended Pascal ISO 10206:1990 читать «6.7.4 Required procedures and functions»

                                                                                                                                            Для предыдущего стандарта тоже было, лень смотреть.

                                                                                                                                            Но там функциональности кот наплакал.
                                                                                                                                              0
                                                                                                                                              Но там функциональности кот наплакал.
                                                                                                                                              Но даже её умудрялись не реализовывать! Вот в чём парадокс-то.
                                                                                                                                      0
                                                                                                                                      А в C с пом., кажется, директив препроцессора можно фигурные скобки заменить на begin и end. :-) Где-то я такое видел.
                                                                                                                                    +1
                                                                                                                                    Делал сервер для реалтайм стратегии на freepascal (lazarus), ибо по C++, почти никаких знаний. После as3 и C#, никаких прям сильных неудобств не почувствовал, и даже понравилось что паскаль «заставляет» более вдумчиво подходить к алгоритмам, или следить за памятью.
                                                                                                                                    Имхо из существенных минусов, что прочувствовал это небольшой выбор среди уже готовых библиотек.
                                                                                                                                    А так, язык как язык, быстрый, понятный, билдится под любую платформу.
                                                                                                                                    Кстати вроде бы Skype раньше был на Delphi, и только потом они перевели на реакт, и все стало дико тормозить, даже просто набор сообщения иногда. Хотя сейчас вроде получше.
                                                                                                                                      +1
                                                                                                                                      Скайп утащили с Делфи на Электрон и после этого и до сих пор он адово тормозит. Юзаю на свежем Redmi 9c.
                                                                                                                                        0
                                                                                                                                        Новый Скайп никак не хочет запомнить размер и позицию окна после перезагрузки. Базовая вещь для Windows-приложений. Так же убрали возможность состряпать свой перевод для интерфейса.
                                                                                                                                          0
                                                                                                                                          Юзаю на свежем Redmi 9c.

                                                                                                                                          Андроидовый скайп никогда не был ни на Delphi, на Electron :)
                                                                                                                                          У них, кстати, есть Skype Lite для low-end телефонов, летает ощутимо быстрее: play.google.com/store/apps/details?id=com.skype.m2&hl=ru&gl=US
                                                                                                                                        +3
                                                                                                                                        Если уж ностальгировать, и вспоминать слово Паскаль…
                                                                                                                                        Интересно, сколько народу не видело этот древний текст: "Настоящие программисты не используют Паскаль"
                                                                                                                                          0
                                                                                                                                          Если кто-то хочет поиграть в игру, написанную на Паскале в 1999 году, то вот вам ссылка:

                                                                                                                                          thesun2003.github.io/armageddon
                                                                                                                                            0
                                                                                                                                            Сначала Basic, потом Pascal, C, C++ и VBA. До функционального программирования не дошел, к сожалению. Не могу сказать, что Pascal удобен для программирования, С лаконичней, а в C++ есть полноценные классы. Но для обучения программированию, наверное, лучше всего.
                                                                                                                                              +2
                                                                                                                                              Люблю паскаль, даже прикупил и реанимировал ноутбук под него, на 486DX. Ностальгировать, так на всю катушку.
                                                                                                                                                0
                                                                                                                                                даже прикупил и реанимировал ноутбук под него

                                                                                                                                                Так можно же в DOSBox'е носталигировать?

                                                                                                                                                  0
                                                                                                                                                  не аутентично получится, без погружения (хотя, признаюсь, поставил CF вместо родного HDD, избавившись от лампового потрескивания).
                                                                                                                                                    0

                                                                                                                                                    Запускать программу неудобно — по умолчанию Ctrl+F9 убивает досбокс. Это меня когда-то ТАК выбесило...

                                                                                                                                                      0
                                                                                                                                                      именно! все так, все так. плюс, ТП (у меня на dosbox'e) не сохранял пути для модулей.
                                                                                                                                                    0
                                                                                                                                                    Под Windows XP TP работает в полноэкранном режиме из-под Дос Навигатора.
                                                                                                                                                    +6
                                                                                                                                                    Хм… Складывается впечатление, будто Вирт под прессом лет то ли подзапамятовал что-то, то ли решил, что пора бы уже прибрать всю славу к рукам. Не мне, конечно, спорить со столь уважаемым (абсолютно искренне) мэтром, но напомнить есть о чём.

                                                                                                                                                    “Algol 60 was intended for scientific calculations (numerical mathematics) only.”

                                                                                                                                                    Да ладно! Algol-60 был у меня первым в промышленном программировании. И то были не scientific calculations only, а очень даже real-time missile defense systems. В отличие от fortran (как же я признателен мирозданию за то, что первым у меня всё же был не он, а именно algol).

                                                                                                                                                    Pascal was easy to teach, and it covered a wide spectrum of applications, which was a significant advantage over Algol, Fortran, and Cobol. The Pascal System was efficient, compact, and easy to use.

                                                                                                                                                    О как! По прошествии 50 лет изначальный pascal (в том числе и стандартизованный ANSI) внезапно оказался универсальным языком! При том, что имел лишь жалкие намёки на io, и вообще не имел ничего подобного хотя бы сишной (читай “файловой”) модульности (да-да, вы правильно поняли — программа людого размера могла быть только в одном единственном исходном файле, что лишь подтверждает назначение языка, см.след.абзац), из-за чего мне в своё время пришлось написать для него препроцессор.

                                                                                                                                                    Дедушка Никлаус сам же и заявлял, что создавал pascal как язык не для практического программирования, но для обучения программированию (структурному). И я, кстати, преподавая программирование, с огромным удовольствием именно его и использовал, pascal для этого действительно был в те временя the best. Для работы Вирт сам же взялся за Modula-2 и Oberon. А увидев взрывную популярность pascal (куча несовместимых между собой диалектов, и при этом ни одного из опробованных мной соответствующего Стандарту ANSI), Вирт сам же и сказал что-то в стиле “Главная беда pascal в том, что очень многие восприняли его слишком всерьёз”. Спустя 50 лет это решил сделать и сам создатель? Только он путает свой pascal с тем, во что его превратили early adopters.

                                                                                                                                                    Впрочем, Вирта я и впредь буду уважать, не pascal'ем единственным (да и вообще не pascal'ем) ценен он отрасли. С 50-летием отпрыска тебя, дед!
                                                                                                                                                      +1
                                                                                                                                                      Algol-60 был у меня первым в промышленном программировании. И то были не scientific calculations only, а очень даже real-time missile defense systems.

                                                                                                                                                      Ого! Стесняюсь спросить, а на какую страну вы тогда работали? Неужели советские противоракеты программировали на Algol-е?
                                                                                                                                                        0
                                                                                                                                                        На “совок” и работали, на кого ж ещё. Противоракеты (В-1000) программировались проволокой :) Но ПРО же состоит не только из противоракет :) Одной только «Аргунью» управляли шесть ЭВМ (каждая в современной терминологии была гарвардской двухядерной). Одной единственной РЛС «Истра» даже без стрельбового комплекса.
                                                                                                                                                        0
                                                                                                                                                        Но премию Тьюринга Вирт получил на за Pascal, а, кажется, за разработку какой-то СБИС.
                                                                                                                                                          +1
                                                                                                                                                          На Вики написано: За разработку серии инновационных компьютерных языков, Эйлер, Algol-W, Модула и Паскаль.
                                                                                                                                                            0
                                                                                                                                                            Насчёт СБИС я где-то читал, возможно, то была ошибка.
                                                                                                                                                        –2
                                                                                                                                                        Никлаус Вирт — человек опередивший своё время на десятилетия!
                                                                                                                                                          +1
                                                                                                                                                          Идеальный язык должен определяться в категориях математической логики, аксиом и правил вывода. Для его понимания не должно требоваться никакой отсылки к любому компьютеру или механизму. Это основа портируемости.

                                                                                                                                                          По моему скромному мнению — это и привело к тому, что Паскаль не стал таким-же популярным ЯП как С или Java, хотя такие предпосылки и были. Слишком он академичен, это хорошо для преподавания и обучения, но плохо для повседневной работы, обычной программистской рутины.
                                                                                                                                                            +2
                                                                                                                                                            К сожелению дочтаточно часто встречается дельфи программирование на Java.
                                                                                                                                                            Типичный пример: в начале метода объявляются все переменные, а потом проверяются на нулл несколько раз)
                                                                                                                                                              +1
                                                                                                                                                              Это да, такой маркер того что программер из бывших паскалевцев. Когда писал на Делфи такой стиль не напрягал, потому что не знал что можно и по другому. Сейчас понимаю что это реально затрудняет работу с объемным кодом, пока дочитаешь до места где переменные используются — уже все забываешь, да и вообще ее наличие в области видимости, в которой она не нужна — это не очень хорошо.
                                                                                                                                                              Впрочем писать лучше так, что-бы таких огромных «портянок» кода не было, так что тут в общем-то недостаток спорный, если писать правильно, декомпозируя задачу и разбивая на небольшие модули, то и объявление переменных вначале метода не сильно мешает. Проблема только в том, что в реальных, рабочих проектах классы обычно довольно быстро распухают и становятся трудно читаемыми.
                                                                                                                                                                +2
                                                                                                                                                                Вы сами же и нашли решение проблемы. В Паскале изначально можно и нужно было делать декомпозицию кода. Для этого кроме прочего есть подпроцедуры любой вложенности.
                                                                                                                                                                  +1
                                                                                                                                                                  Я ее и не искал — решение очевидно. Просто вот представьте себе — легаси проект с многими сотнями файлов с кодом, который пилят десятки разработчиков уже многие годы. Да там модули распухли, да много кривого и откровенно дерьмового кода, да это плохо, но с ним все-таки как-то надо работать. Просто взять и декомпозировать все сразу — в идеальном мире это было-бы возможно, в реальном — в лучшем случае это будет делаться постепенно.

                                                                                                                                                                  Т.е. так или иначе, но вам приходится иметь дело с «портяночным кодом», и в этом случае такой стиль объявления переменных реально делает код еще более трудночитаемым.

                                                                                                                                                                  И проблему доступности переменных во всем блоке это не решает. Могу ошибаться, но вроде бы классический Паскаль не разрешает объявлять переменные внутри begin… end;?
                                                                                                                                                                    0
                                                                                                                                                                    Если код изначально так написан, то с этим придётся мириться, а что делать?
                                                                                                                                                                    Да, в Паскале все объявления переменных только в отдельной секции var. Интерфейс отдельно, имплементация отдельно.
                                                                                                                                                                  +1
                                                                                                                                                                  На мой взгляд это говорит в первую очередь о квалификации того кто так делает.
                                                                                                                                                                  И в принципе бесполезно объяснять почему так делать плохо/не надо, пока он не прочитает-изучит определенное количество книг и сам не разберется.

                                                                                                                                                                  Одно помогает в рабочих проектах — анализатор кода SonarQube. С ним спорить бессмысленно), расшифровка как исправлять есть.
                                                                                                                                                                  Даешь задание чтобы были исправленны найденные им ошибки.
                                                                                                                                                                  0
                                                                                                                                                                  это хорошо если проверяются на null