~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ BAC0B39CCAB4DB1652CACF16456A0666__1707930060 ✰
Заголовок документа оригинал.:
✰ SuperPascal - Wikipedia ✰
Заголовок документа перевод.:
✰ СуперПаскаль — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/SuperPascal ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/ba/66/bac0b39ccab4db1652cacf16456a0666.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/ba/66/bac0b39ccab4db1652cacf16456a0666__translat.html ✰
Дата и время сохранения документа:
✰ 22.06.2024 17:12:44 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 14 February 2024, at 20:01 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

СуперПаскаль — Википедия Jump to content

СуперПаскаль

Из Википедии, бесплатной энциклопедии
СуперПаскаль
Парадигма параллельный , императивный , структурированный
Семья Вирт Паскаль
Разработано Пер Бринч Хансен
Впервые появился 1993 год ; 31 год назад ( 1993 )
Стабильная версия
1 / 1993 ; 31 год назад ( 1993 )
Дисциплина набора текста Сильный
Веб-сайт бринч хансен .сеть
Под влиянием
Взаимодействие последовательных процессов , Паскаль , Параллельный Паскаль , Джойс , occam

SuperPascal — это императивный для параллельных вычислений язык программирования , разработанный Пером Бринчом Хансеном . [1] Он был разработан как язык публикации : инструмент мышления, позволяющий ясно и кратко выражать концепции в параллельном программировании. Это контрастирует с языками реализации, которые часто сложны из-за деталей машины и исторических соглашений. Он был создан для удовлетворения потребности в параллельном языке публикации. Можно утверждать, что немногие языки сегодня являются достаточно выразительными и краткими, чтобы их можно было использовать в качестве инструментов мышления.

и развитие История

SuperPascal основан на Никлауса Вирта последовательном языке Pascal , расширяя его функциями для безопасного и эффективного параллелизма. Сам Паскаль широко использовался в качестве языка публикаций в 1970-х годах. Он использовался для обучения практикам структурного программирования и фигурировал в учебниках, например, по компиляторам . [2] и языки программирования. [3] Хансен ранее разработал язык Concurrent Pascal , [4] один из первых параллельных языков для разработки операционных систем и в реальном времени систем управления .

Требования SuperPascal были основаны на опыте, полученном Хансеном за три года при разработке набора модельных параллельных программ, реализующих методы для решения распространенных задач в информатике . [5] Это экспериментирование позволило ему сделать следующие выводы о будущем научных параллельных вычислений :

  • Будущие параллельные компьютеры будут универсальными , что позволит программистам мыслить в терминах проблемно-ориентированных конфигураций процессов. Это было основано на его опыте программирования сетей транспьютеров общего назначения, , которые представляли собой процессоры способные соединяться в массивы , деревья или гиперкубы .
  • Обычные задачи в информатике требуют только детерминированного параллелизма , то есть ожидания связи от конкретного канала , а не от нескольких.
  • Параллельные научные алгоритмы могут быть разработаны на элегантном языке публикации и протестированы на последовательном компьютере. Когда установлено, что алгоритм работает, его можно легко реализовать на языке параллельной реализации.

Затем это привело к следующим требованиям к параллельному языку публикации:

  • Язык должен расширить широко используемый стандартный язык с помощью детерминированного параллелизма и передачи сообщений . Расширения должны соответствовать духу стандартного языка.
  • Язык должен позволять программировать произвольные конфигурации параллельных процессов, связанных каналами связи. Эти конфигурации могут определяться итеративно или рекурсивно и создаваться динамически.
  • Язык должен позволять однопроходному компилятору проверять, не влияют ли параллельные процессы в зависимости от времени.

Особенности [ править ]

Ключевой идеей при разработке SuperPascal было обеспечение безопасного программирования с использованием абстрактных концепций параллелизма. [6] [7]

Безопасность [ править ]

SuperPascal безопасен , поскольку он должен позволять своему компилятору и системе выполнения обнаруживать как можно больше случаев, когда концепции языка нарушаются и приводят к бессмысленным результатам. [8] SuperPascal накладывает ограничения на использование переменных, которые позволяют однопроходному компилятору проверять непересекаемость параллельных процессов, даже если процессы используют процедуры с глобальными переменными, что исключает ошибки, зависящие от времени. Некоторые функции Паскаля были неоднозначными или небезопасными и были исключены из SuperPascal, например метки и goto операторы, указатели и предварительные объявления. [6]

Параллелизм [ править ]

Параллельные функции SuperPascal являются подмножеством occam 2 с добавленной общностью динамических массивов процессов и рекурсивных параллельных процессов. [7]

А parallelОператор означает, что фиксированное количество содержащихся в нем операторов должно выполняться параллельно. Например:

параллельный
     источник() |
     раковина()
 конец
 

А forall оператор обозначает параллельное выполнение оператора динамическим количеством процессов, например:

forall i := от 0 до 10 делать
     что-нибудь()
 

Каналы и коммуникация [ править ]

Параллельные процессы взаимодействуют, отправляя типизированные сообщения через каналы, создаваемые динамически. Каналы сами по себе не являются переменными, но идентифицируются уникальным значением, известным как ссылка на канал , которое хранится в переменных канала . Канал объявляется, например, объявлением

тип   канала   =   *  (  логическое  ,   целое число  )  ; 
  вар   c  :   канал  ; 

который определяет новый (смешанный) тип с именемchannel и переменную этого типа с именем c . Канал смешанного типа ограничен передачей только указанных типов, в данном случае логических и целочисленных значений. Канал c инициализируется open заявление:

открыть(с)
 

Обмен сообщениями затем осуществляется с помощью send(channel, value) и receive(channel, variable)заявления. Выражение или переменная, предоставляющая значение для sendи переменная в receive, оба должны быть того же типа, что и первый аргумент канала. В следующем примере показано использование этих функций в процессе, который получает значение из левого канала и выводит его в правый .

вар   влево  ,   вправо  :   канал  ;    число  ;  
  получить  (  слева  ,   а  )  ; 
  отправить  (  правильно  ,   ​​а  ) 

Функции send и receive может принимать несколько входных и выходных аргументов соответственно:

отправить (канал, e1, e2,..., en);
 получить (канал, v1, v2,..., vn)
 

следующие ошибки связи во время выполнения Могут возникнуть :

  • Конфликт за канал возникает, когда два параллельных процесса одновременно пытаются отправить или получить данные по одному и тому же каналу.
  • Ошибка типа сообщения возникает, когда два параллельных процесса пытаются взаимодействовать через один и тот же канал, а выходное выражение и входная переменная имеют разные типы.
  • Взаимная блокировка возникает, когда операция отправки или получения ожидает завершения неопределенное время.

Параллельная рекурсия [ править ]

Рекурсивные процедуры можно комбинировать с parallel и forallоператоры для создания параллельных рекурсивных процессов. В следующем примере показано, как можно рекурсивно определить конвейер процессов с помощью parallel заявление.

 процедуры  конвейер  (  мин  ,   макс  :   целое число  ;   влево  ,   вправо  :   канал  )  ; 
  вар   средний  :   канал  ; 
  начать 
   , если   мин   <   макс   , затем 
     начать 
       открывать  (  средний  )  ; 
        параллельный 
         узел  (  мин  ,   левый  ,   средний  )   | 
          конвейер  (  мин   +   1  ,   макс  ,   средний  ,   правый  ) 
       конец 
     конец 
   еще   узел  (  мин  ,   левый  ,   правый  ) 
 конец  ; 

Другой пример — рекурсивное определение дерева процессов :

 процедур  дерево  (  глубина  :   целое число  ,   низ  :   канал  )  ; 
  вар   влево  ,   вправо  :   канал  ; 
  начать 
   , если   глубина   >   0,   затем 
     начать 
       открывать  (  влево  ,   вправо  )  ; 
        параллельное 
         дерево  (  глубина   -   1  ,   слева  )   | 
          дерево  (  глубина   -   1  ,   справа  )   | 
          корень  (  снизу  ,   слева  ,   справа  ) 
       конец 
     конец 
   еще   лист  (  снизу  ) 

Контроль помех [ править ]

Самый сложный аспект параллельного программирования — непредсказуемое или невоспроизводимое поведение, вызванное зависящими от времени ошибками. Ошибки, зависящие от времени, вызваны помехами между параллельными процессами из-за обновлений переменных или конфликтов каналов. Если процессы, использующие переменную, обновляют ее в непредсказуемое время, результирующее поведение программы зависит от времени. Аналогично, если два процесса одновременно пытаются отправить или получить данные по общему каналу, результат будет зависеть от времени.

SuperPascal налагает определенные ограничения на использование переменных и обмен данными, чтобы минимизировать или устранить ошибки, зависящие от времени. В случае с переменными требуется простое правило: параллельные процессы могут обновлять только непересекающиеся наборы переменных. [1] Например, в parallelоператор, целевая переменная не может быть обновлена ​​более чем одним процессом, но переменная выражения (которая не может быть обновлена) может использоваться несколькими процессами. В некоторых случаях, когда переменная, такая как массив, является целью нескольких параллельных процессов, и программист знает, что ее поэлементное использование не пересекается , тогда ограничение непересекаемости может быть переопределено с помощью предыдущего [sic] заявление.

Структура и синтаксис [ править ]

SuperPascal — это язык с блочной структурой , имеющий тот же базовый синтаксис, что и Pascal. Программа состоит из заголовка , определений глобальных переменных , определений функций или процедур и основной процедуры. Функции и процедуры состоят из блоков , где блок представляет собой набор операторов . Операторы разделяются точкой с запятой, в отличие от таких языков, как C или Java , где они завершаются точкой с запятой.

Ниже приведен пример полной программы SuperPascal, которая создает конвейерную структуру связи со 100 узлами. Главный узел отправляет целочисленный токен первому узлу, затем он передается по конвейеру и увеличивается на каждом этапе и, наконец, принимается главным узлом и распечатывается.

программный   конвейер  ; 

  константная 
     длина   =   100  ; 

  введите 
     канал   =   *  (  целое число  )  ; 

  вар 
     влево  ,   вправо  :   канал  ; 
      значение  :   целое число  ; 

 процедуры    узел  (  i  :   целое число  ;   влево  ,   вправо  :   канал  )  ; 
 переменной    значение  :   целое число  ; 
  начать 
     получать  (  слева  ,   значение  )  ; 
      отправить  (  справа  ,   значение  +  1  ) 
 конец  ; 

  процедура   создания  (  слева  ,   справа  :   канал  )  ; 
  введите   row   =   массив   [  0  ..  len  ]   канала   ; 
  вар   c  :   строка  ;    я  :   целое число  ; 
  начало 
     c  [  0  ]   :=   влево  ; 
      c  [  лен  ]   :=   правильно  ; 
      for   i   :=   1   to   len  -  1   do 
         open  (  c  [  i  ])  ; 
      forall   i   :=   1   to   len   do 
         node  (  i  ,   c  [  i  -  1  ]  ,   c  [  i  ]) 
 end  ; 

  начать 
     открываться  (  влево  ,   вправо  )  ; 

      параллельная 
         отправка  (  слева  ,   0  )   | 
          создать  (  слева  ,   справа  )   | 
          получить  (  право  ,   значение  ) 
     конец  ; 

      writeln  (  'Результирующее значение равно'  ,   значение  ) 
 end  . 

Реализация [ править ]

Доступ к программному обеспечению SuperPascal можно получить бесплатно из архива Brinch Hansen. [9] Он состоит из компилятора и интерпретатора, которые написаны на обычном последовательном языке Паскаль (стандартный Паскаль ISO уровня 1). Это поддерживается компилятором GNU Pascal и более новыми версиями компилятора Free Pascal (2.7.1+) с -Miso переключатель со следующими небольшими изменениями в коде.

Для GPC файл interpret.p использует нестандартный clockфункция (строка 1786), которая используется для получения системного времени. Вместо этого расширенный Паскаль getTimeStamp можно использовать функцию (которая поддерживается компилятором GNU Pascal), объявив переменную типа TimeStamp, установив это с текущим временем, используя getTimeStamp и назначение Second поле TimeStamp к переменной t.

Free Pascal также нуждается в решении вышеуказанной проблемы с «часами» (в Windows просто объявите gettickcount как внешний с именем «clock»). Кроме того, сброс/перезапись, помеченные в исходном коде как нестандартные, должны быть изменены для назначения/сброса (или перезаписи) пар. (GPC, вероятно, выдает ошибку только в этом случае, если вы включаете строгие флаги), а команды препроцессора C #include 'xx' необходимо изменить на {$include 'xx'}.

{ Тайм-код для времени чтения во Freepascal в системах unix } 
 Function    FpTime  (  var   tloc   :   целое число  )  :   целое число  ;    внешнее   имя   'FPC_SYSC_TIME'  ; 

 процедуры    время чтения  ( 
  var   t  :    целое число  )  ; 
  Begin 
   { Нестандартная функция считывает 
 время процессора в мс } 
   t  :=  fptime  (  t  )  ; 
  конец  ; 

Ссылки [ править ]

  1. ^ Перейти обратно: а б Хансен, Пер Бринч (1993), SuperPascal: язык публикации для параллельных научных вычислений
  2. ^ Уэлш, Джим (1980). Структурное системное программирование . Река Аппер-Сэддл, Нью-Джерси, США: Прентис-Холл. ISBN  0-13-854562-6 .
  3. ^ Теннент, Р.Д. (1981). Принципы языков программирования . Река Аппер-Сэддл, Нью-Джерси, США: Прентис-Холл. ISBN  0-13-709873-1 .
  4. ^ Хансен, Бринч (1977). Архитектура параллельных программ . Прентис-Холл. ISBN  978-0130446282 .
  5. ^ Хансен, Бринч (май 1993 г.), «Модельные программы для вычислительной науки: методология программирования для мультикомпьютеров», Concurrency: Practice and Experience , стр. 407–423.
  6. ^ Перейти обратно: а б Хансен, Бринч (1994). «Язык программирования СуперПаскаль». Программное обеспечение: практика и опыт . 24, 5 : 399–406.
  7. ^ Перейти обратно: а б Хансен, Бринч (1977). Изобретение параллельного программирования . Нью-Йорк: Springer-Verlag. ISBN  0-387-95401-5 .
  8. ^ Хоар, ЦАР (1974). «Советы по проектированию языков программирования». Надежность компьютерной системы : 505–534.
  9. ^ Хайден, CC (11 июня 2008 г.). «Архив Пера Бринч-Хансена» . Проверено 3 марта 2020 г.

Внешние ссылки [ править ]

  • Официальный сайт , Архив Бринч-Хансена, набор его статей и программное обеспечение SuperPascal, которое можно скачать в сжатом файле; содержит полную спецификацию языка и полезную документацию.
  • superpascal на GitHub — модифицированная версия оригинальной реализации SuperPascal Кристофера Лонга; компилируется и работает под современным Free Pascal; выполнение программы происходит быстрее, чем в Perl 5 или 6, почти так же быстро, как в Python 3.
Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: BAC0B39CCAB4DB1652CACF16456A0666__1707930060
URL1:https://en.wikipedia.org/wiki/SuperPascal
Заголовок, (Title) документа по адресу, URL1:
SuperPascal - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)