~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ B2E151A9746CCC1EBB8523CC41AD799B__1712878740 ✰
Заголовок документа оригинал.:
✰ ParaSail (programming language) - Wikipedia ✰
Заголовок документа перевод.:
✰ ParaSail (язык программирования) — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/ParaSail_(programming_language) ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/b2/9b/b2e151a9746ccc1ebb8523cc41ad799b.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/b2/9b/b2e151a9746ccc1ebb8523cc41ad799b__translat.html ✰
Дата и время сохранения документа:
✰ 22.06.2024 17:11:47 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 12 April 2024, at 02:39 (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: далее начало оригинального документа

ParaSail (язык программирования) — Википедия Jump to content

ParaSail (язык программирования)

Из Википедии, бесплатной энциклопедии

ПараСейл
Логотип языка программирования ParaSail
Парадигма скомпилированный , параллельный , императивный , структурированный , объектно-ориентированный
Разработано С. Такер Тафт
Разработчик АдаКор
Впервые появился 2009 год ; 15 лет назад ( 2009 )
Стабильная версия
9.3 / 6 июня 2021 г .; 3 года назад ( 06.06.2021 )
Дисциплина набора текста сильный , статичный
Платформа х86
ТЫ Linux , MacOS , Windows
Лицензия Лицензия GPL v3
Расширения имен файлов .psi, .psl
Веб-сайт парасейлинг-ланг .org
Основные реализации
псли, пслц
Под влиянием
Модуль , Ада , Паскаль , ML
Под влиянием
Nim [1]

Язык параллельной спецификации и реализации ( ParaSail ) — объектно-ориентированный язык параллельного программирования . Его конструкция и текущая реализация описаны в блоге. [2] и на его официальном сайте. [3]

ParaSail использует указателей модель программирования без , в которой объекты могут увеличиваться и уменьшаться, а для присвоения используется семантика значений. У него нет глобальной кучи мусора . Вместо этого управление памятью на основе регионов повсеместно используется . Типы могут быть рекурсивными, если рекурсивные компоненты объявлены необязательными . Здесь нет глобальных переменных, псевдонимов параметров, и все подвыражения выражения могут вычисляться параллельно. Утверждения , предусловия , постусловия , инварианты классов и т. д. являются частью стандартного синтаксиса , использующего нотацию, подобную Хоару . Любые возможные состояния гонки обнаруживаются во время компиляции .

Первоначальная разработка ParaSail началась в сентябре 2009 года С. Такером Тафтом.

как интерпретатор, ParaSail использующий виртуальную машину , так и LLVM ParaSail на базе компилятор Доступен . Кража работы используется для планирования легких потоков ParaSail . Последнюю версию можно скачать с сайта ParaSail. [3]

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

Синтаксис Java ParaSail аналогичен Modula , но с моделью объектно-ориентированного программирования на основе классов и интерфейсов, более похожей на или C # .

Совсем недавно параллельные конструкции ParaSail были адаптированы к другим синтаксисам для создания Java -подобных, Python -подобных и Ada -подобных параллельных языков , получивших названия соответственно Javallel, Parython и Sparkel (названных в честь подмножества Ada SPARK на на чем он основан). Компиляторы и интерпретаторы этих языков включены в реализацию ParaSail. [3]

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

Ниже приведена программа Hello world в ParaSail:

func   Hello_World  (  var   IO  )   — это 
     IO  .   Println  (  «Привет, мир»  ); 
  завершение   функции   Hello_World  ; 

Ниже приведен интерфейс базового модуля карты:

интерфейс   BMap  <  Key_Type   заказан   ;  <>    Element_Type    назначаемый  <  >>   is 
     op   "[]"  ()   -  >   BMap  ;     // Создаём пустую карту 

     func   Insert  (  var   BMap  ;   Key   :   Key_Type  ;   Value   :   Element_Type  ); 
      func   Найти  (  BMap  ;   Ключ   :   Тип_ключа  )   -  >   необязательный   Тип_элемента  ; 
      func   Удалить  (  вар   BMap  ;   Ключ   :   Key_Type  ); 
      func   Count  (  BMap  )   -  >   Univ_Integer  ; 
  конечный   интерфейс   BMap  ; 

Вот возможная реализация этого модуля карты: используя двоичное дерево:

класс   BMap  

     интерфейс   Binary_Node  <>  
       // Простой «конкретный» модуль двоичного узла 
         var   Left   :   необязательный   Binary_Node  ; 
          var   Right   :   необязательно   Binary_Node  ; 
          константный   ключ   :   Key_Type  ; 
         var    Значение   :   необязательный   Element_Type  ;     // значение null означает удаленный 
     конечный   интерфейс   Binary_Node  ; 

      var   Tree   :   необязательно   Binary_Node  ; 
      вар   Количество   :=   0  ; 

    экспортирует 

     op   "[]"  ()   -  >   BMap   is    // Создаем пустую карту 
         return   (  Tree   =>   null  ,   Count   =>   0  ); 
      завершить   операцию   "[]"  ; 

      func   Insert  (  var   BMap  ;   Key   :   Key_Type  ;   Value   :   Element_Type  )   // 
       Поиск ключа, перезапись, если найден, вставка нового узла, если нет 
         M   =   >   BMap  .   Древовидный   цикл 
             , если   M   равен нулю   , то 
                 // Еще не на карте;   добавьте его 
                 M   :=   (  Key   =>   Key  ,   Value   =>   Value  ,   Left   =>   null  ,   Right   =>   null  ); 
                  БМап  .   Счет   +=   1  ; 
              иначе 
                регистр   Ключ   =?    М.   Клавиша   #less 
                  [  ]  M   => 
                    продолжить   цикл   с   помощью  .   Левый  ; 
                   [  #greater  ]   => 
                    продолжить   цикл   с помощью   M  .   Верно  ; 
                   [  #equal  ]   => 
                    // Ключ уже есть в карте; 
                     // счетчик ударов, если значение равно нулю; 
                     если   М  .   Значение   равно нулю,   тогда 
                        BMap  .   Счет   +=   1  ; 
                     конец   , если  ; 
                     // в любом случае перезаписываем поле 
                    M.  значения   Значение   :=   Значение  ; 
                     возвращаться  ; 
                 конец   дела  ; 
              конец   , если  ; 
          конец   цикла  ; 
      конец   функции   Insert  ; 

      func   Find  (  BMap  ;   Key   :   Key_Type  )   -  >   необязательный   Element_Type   : 
       // Поиск ключа, возврат связанного значения, если оно присутствует, или ноль в противном случае 
        для   M   =>   BMap  .   Дерево   , пока   M   не имеет нулевого   цикла 
             =   . Key   ?    М.   Клавиша   #less 
               [  ]  M   => 
                 продолжить   цикл   с   помощью  .   Левый  ; 
                [  #greater  ]   => 
                 продолжить   цикл   с помощью   M  .   Верно  ; 
                [  #equal  ]   => 
                 // Нашел;   вернуть значение 
                 return   M  .   Ценить  ; 
              конец   дела  ; 
          конец   цикла  ; 
          // Не найдено в BMap 
         return   null  ; 
      конец   функции   Найти  ; 

      func   Удалить  (  var   BMap  ;   Key   :   Key_Type  )  
       // Поиск ключа;   удалить связанный узел, если он найден 
         для   M   =>   BMap  .   Дерево   , пока   M   не имеет нулевого   цикла 
             =   . Key   ?    М.   Клавиша   #less 
               [  ]  M   => 
                 продолжить   цикл   с   помощью  .   Левый  ; 
                [  #greater  ]   => 
                 продолжить   цикл   с помощью   M  .   Верно  ; 
                [  #equal  ]   => 
                 // Нашел;   если хотя бы одно поддерево не пустое, 
                 // перезаписать его;   в противном случае установите для поля значения значение null 
                 // (чтобы избежать более сложной перебалансировки). 
                  если   М  .  значение Left   равно нулю    Тогда 
                     // Переместить правое поддерево в M 
                     M   <==   M  .   Верно  ; 
                  Эльсиф   М.  правое   равно нулю    Тогда 
                     // Переместить левое поддерево в M 
                     M   <==   M  .   Левый  ; 
                  else 
                     // Невозможно немедленно вернуть узел; 
                      // вместо этого устанавливаем в поле значения значение null. 
                      М.   Значение   : =   ноль  ; 
                  конец   , если  ; 
                  // Уменьшение счетчика 
                 BMap  .   Счет   -=   1  ; 
              конец   дела  ; 
          конец   цикла  ; 
         карты 
      // Не найдено в конечной   функции   . Удалить  ; 

      func   Count  (  BMap  )   -  >   Univ_Integer   is 
       // Возвращает количество элементов на карте 
         return   BMap  .   Считать  ; 
      конец   функции   Count  ; 

  конечный   класс   BMap  ; 

Вот простая тестовая программа для модуля BMap:

импортировать   PSL  ::  Core  ::  Random  ; 
  импортировать   БМап  ; 
  func   Test_BMap  (  Num   :   Univ_Integer  ;   Seed   :   Univ_Integer  )   is 
     // Проверка карты на основе двоичного дерева 
     var   Ran   :   Random   :=   Start  (  Seed  );     // Запускаем последовательность случайных чисел 

     // Объявляем преобразование целых чисел в строки 
     var   M   :   BMap  <  Key_Type   =>   Univ_Integer  ,   Element_Type   =>   Univ_String  >; 

      М   :=   [];     // Инициализируем пустую карту 

     для   I   in   1  ..  Num  *  2   вперед   цикла    // Добавляем элементы на карту 
         const   Key   :=   Next  (  Ran  )   mod   Num   +   1  ; 
          const   Val   :=   "Val"   |    To_String  (  я  ); 
          Println  (  "О вставке"   |   Key   |   " => "   |   Val  ); 
          Вставить  (  М  ,   Ключ  ,   Вал  ); 
      конец   цикла  ; 
      Println  (  "Count ="   |   Count  (  M  )); 

      for   I   in   1  ..  Num   цикл   // Поиск элементов на карте 
         const   Key   :=   Next  (  Ran  )   mod   Num   +   1  ; 
          Println  (  "Ищу "   |   Ключ   |   ", найдено "   |   Найти  (  M  ,   Ключ  )); 
      конец   цикла  ; 

      for   I   in   1  ..  Num  /  3   цикл    // Удалить некоторые элементы с карты 
         const   Key   :=   Next  (  Ran  )   mod   Num   +   1  ; 
          Println  (  "Собираюсь удалить"   |   Ключ  ); 
          Удалить  (  М  ,   Ключ  ); 
      конец   цикла  ; 
      Println  (  "Count ="   |   Count  (  M  )); 

      for   I   in   1  ..  Num   вперед   цикл    // Снова ищем элементы на карте 
         Println  (  "Ищем "   |   I   |   ", найдено "   |   Найти  (  M  ,   I  )); 
      конец   цикла  ; 

  конец   функции   Test_BMap  ; 

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

  1. ^ Румпф, Андреас (19 октября 2017 г.). «Ним без GC» . Размышления Арака . Проверено 1 сентября 2020 г.
  2. ^ Блог ParaSail
  3. ^ Перейти обратно: а б с Сайт ПараСейл

Общие ссылки [ править ]


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

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: B2E151A9746CCC1EBB8523CC41AD799B__1712878740
URL1:https://en.wikipedia.org/wiki/ParaSail_(programming_language)
Заголовок, (Title) документа по адресу, URL1:
ParaSail (programming language) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)