~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 2FA94243179F803140B1E12FBE6A6ADF__1695094200 ✰
Заголовок документа оригинал.:
✰ Hume (programming language) - Wikipedia ✰
Заголовок документа перевод.:
✰ Хьюм (язык программирования) — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Hume_(programming_language) ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/2f/df/2fa94243179f803140b1e12fbe6a6adf.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/2f/df/2fa94243179f803140b1e12fbe6a6adf__translat.html ✰
Дата и время сохранения документа:
✰ 22.06.2024 17:08:50 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 19 September 2023, at 06:30 (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

Хьюм (язык программирования)

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

Хьюм
Парадигма Функциональный
Семья Хаскелл
Разработано Грег Майклсон
Эндрю Айрленд
Энди Уоллес
Разработчики Университет Сент-Эндрюс
Университет Хериот-Ватт
Впервые появился 2000 ; 24 года назад ( 2000 )
Стабильная версия
0,8 / 25 апреля 2008 г .; 16 лет назад ( 25 апреля 2008 )
Дисциплина набора текста Предполагаемый , статичный , сильный
Платформа ИА-32 , PowerPC
ТЫ macOS , Red Hat Linux
Под влиянием
Хаскелл
Статуя Хьюма в Эдинбурге

Hume — это функционально-ориентированный язык программирования, разработанный в Университете Сент-Эндрюс и Университете Хериот-Ватт в Шотландии с 2000 года. Название языка является одновременно аббревиатурой, означающей «Единая мета-среда высшего порядка», и почетным знаком 18-го века. философ века Дэвид Юм . Он нацелен на вычислений в реальном времени встроенные системы , стремясь создать дизайн, который является одновременно очень абстрактным, но при этом позволяет точно определить временные и пространственные затраты на выполнение. Это позволяет гарантировать ограниченность требований по времени и пространству при выполнении программ.

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

Модель дизайна [ править ]

Дизайн языка Хьюма пытается сохранить основные свойства и функции, необходимые для области встроенных систем (особенно для прозрачной оценки затрат времени и пространства), в то же время включая максимально высокий уровень абстракции программы. Он нацелен на приложения, начиная от простых микроконтроллеров и заканчивая сложными системами реального времени, такими как смартфоны . Эта амбициозная цель требует включения как понятий низкого уровня, таких как обработка прерываний , так и понятий высокого уровня, связанных с абстракцией структур данных и т. д. Такие системы программируются по-разному, но дизайн языка должен учитывать такие различные требования.

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

Вместо того, чтобы пытаться применить моделирование затрат и технологию доказательства правильности к существующей языковой структуре напрямую или путем изменения более общего языка (как, например, в случае с RTSJ ), подход, принятый разработчиками Юма, заключается в том, чтобы спроектировать Юма таким образом, чтобы формально модели и доказательства определенно могут быть построены. Хьюм структурирован как серия перекрывающихся языковых уровней, где каждый уровень добавляет выразительности к семантике выражений, но либо теряет некоторые желаемые свойства, либо увеличивает техническую сложность обеспечения формальных моделей правильности/стоимости. [1]

Характеристики [ править ]

Версии интерпретатора и компилятора немного отличаются.

  • интерпретатор (доказательство концепции) допускает тайм-аут и пользовательские исключения.
  • компилятор допускает ограничение стоимости кучи и стека, но исключения печатают только имя исключения.

Система координации подключает блоки в стиле программирования потоков данных .

Язык выражений похож на Haskell .

Система параллельной передачи сообщений запоминает или JoCaml шаблоны соединения аккорды C Sharp Polyphonic , но все каналы асинхронны.

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

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

Торговый автомат [ править ]

данные   Монеты   =   Никель   |    Дайм   |    Фальшивый  ; 
  данные   Напитки   =   Кофе   |    Чай  ; 
 данных    Кнопки   =   BCoffee   |    BTea   |    БОтмена  ; 

  введите   Int   =   int   32   ; 

  исключение   EFakeCoin   ::   (  Int  ,   строка  )   ; 

  показать   v   =   v   как   строку   ; 
 
  коробка   кофе 
 в   (   монета   ::   Монеты  ,   кнопка   ::   Кнопки  ,   значение   ::   Int   )   — входные каналы 
 out   (   drink_outp   ::   string  ,   value  '   ::   Int 
     ,   return_outp   ::   string  ,   display   ::   string  )    — именованные выходы 

 в пределах   500  КБ   (  400  Б  )   ограничения стоимости максимальной кучи (максимального стека) 
 — дескрипторы   EFakeCoin  ,   TimeOut  ,   HeapOverflow  ,   StackOverflow 

 match 
 — * подстановочные знаки для незаполненных выходных данных и неизрасходованных входных данных 
   (   my_coin  ,   *  ,   v  )    {- ''join- эквивалент шаблона: coin(my_coin) & value(v) -}  
                 ->   let   v  '   =   инкрементный кредит   my_coin   v 
                    in   (   *  ,   v  '  ,   *  ,   show   v  '  ) 
 
            -- ограничение по времени ('' в пределах x единицы времени '') поднимает TimeOut() 
 |    (   *  ,   BCoffee  ,   v  )   {- эквивалент шаблона соединения: button(BCoffee) & value(v) -} 
                    ->   (  продажа   кофе   10   v  )   в течение   30  с  
 |    (   *  ,   BTea  ,   v  )      ->   (  продажа   Чай   5   v  )   в течение   30  с 
 |    (   *  ,   BCancel  ,   v  )   ->   let   return   u   =   "Refund"   ++   show   u   ++   "  \n  " 
                       в   (   *  ,   0  ,   return   v  ,   *  ) 

 handle 
    EFakeCoin   (  v  ,   msg  )   ->   (   *  ,   v   ,   *  ,   сообщение  ) 
 |     TimeOut   ()   ->   (  *  ,   *  ,   *  ,   "возможно, контент исчерпан, позвоните в службу!"  ) 
 |     HeapOverflow   ()   ->   (  *  ,   *  ,   *  ,   «ошибка: превышен лимит кучи»  ) 
 |     Переполнение стека  ()   ->   (  *  ,   *  ,   *  ,   «ошибка: превышен лимит стека»  )  
 ; 

  IncreitCredit   coin   v   =  
     монета   из   v 
       никеля   ->   +   5   Dime 
       -   >   v   +   10 
       Fake   ->   поднять   EFakeCoin   (  v  ,   «монета отклонена»  ) 
     ;  
 
 продажи   напитка    стоимость   v   =  
     if   v   >=   Cost 
        then   (   served   Drink  ,   v   -   cost  ,   *  ,   "ваш напиток"  )  
        else   (   *  ,   v  ,   *  ,   "денег не хватает"   ++   show   (  cost   -   v  )) 
     ; 
 
  подача   напитка   =   случай   напитка   Кофе 
                Чай   ->   «Кофе  \n  » 
                -   >   «Чай  \n  » 
     ; 
 
  поле   управления 
 in   (  c   ::   char  ) 
 out   (  coin   ::   Coins  ,   button  ::   Buttons  ) 
 match 
  'n'   ->   (  Nickel  ,   *  ) 
  |    'd'   ->   (  Дейм  ,   *  ) 
  |    'f'   ->   (  Подделка  ,   *  ) 
  |    'c'   ->   (  *  ,   BCoffee  ) 
  |    't'   ->   (  *  ,   BTea  ) 
  |    'x'   ->   (  *  ,   BCancel  ) 
  |    _   ->   (  *  ,   *  ) 
 ; 
 
  передать   console_outp   в   "std_out"   ; 
  поток   console_inp   из   "std_in"   ; 

  -- 
 
 данных   Coffee 
     источники 
     (  control.coin  )  control.button  ,   Coffee.value  ,  ;  console_outp   )  '  входы  --   изначально   0  ,    -- 
     выходы 
     (  )  ,   Coffee.value  назначения  console_outp  (   console_outp  ,   поток  каналов  
 -- 
 
  проводное   управление 
     (  console_inp  ) 
     (  кофе.монета  ,   кофе.кнопка  ) 
 ; 

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

  1. ^ Экелен, Марко Ван (2007). Тенденции функционального программирования . Интеллектуальные книги. п. 198. ИСБН  978-1-84150-176-5 .

Дальнейшее чтение [ править ]

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

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