~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 090F4CB20DD5FE942C5F81885EBCA4F1__1715604660 ✰
Заголовок документа оригинал.:
✰ Oz (programming language) - Wikipedia ✰
Заголовок документа перевод.:
✰ Оз (язык программирования) — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Oz_(programming_language) ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/09/f1/090f4cb20dd5fe942c5f81885ebca4f1.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/09/f1/090f4cb20dd5fe942c5f81885ebca4f1__translat.html ✰
Дата и время сохранения документа:
✰ 22.06.2024 17:11:34 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 13 May 2024, at 15:51 (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

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

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

Оз
Парадигма мультипарадигмальность : логическая , функциональная , императивная , объектно-ориентированная , ограниченная , распределенная , параллельная.
Разработано Герт Смолка, его ученики
Разработчик Консорциум Моцарта
Впервые появился 1991 год ; 33 года назад ( 1991 )
Стабильная версия
Оз 1.4.0 (финальный), Моцарт 2.0.1 / 5 сентября 2018 г .; 5 лет назад ( 05.09.2018 )
Дисциплина набора текста динамичный
Лицензия С X11 [1]
Веб-сайт Моцарт .github .что
Основные реализации
Система программирования Моцарта
Диалекты
Оз, Моцарт
Под влиянием
Эрланг , Лисп , Пролог
Под влиянием
Алиса , Скала

Oz — это мультипарадигмальный язык программирования , разработанный в Лаборатории систем программирования Католического университета Лувена для обучения языкам программирования. Имеет канонический учебник: Concepts, Techniques and Models of Computer Programming .

Впервые Oz был разработан Гертом Смолкой и его учениками в 1991 году. В 1996 году разработка Oz продолжилась в сотрудничестве с исследовательской группой Сейфа Хариди и Питера Ван Роя в Шведском институте компьютерных наук . С 1999 года Oz постоянно разрабатывается международной группой Mozart Consortium, которая первоначально состояла из Саарского университета , Шведского института компьютерных наук и Католического университета Лувена . В 2005 году ответственность за управление разработкой Mozart была передана основной группе, Mozart Board, с явной целью открыть разработку Mozart для более широкого сообщества.

Система программирования Моцарта является основной реализацией Оз. Он выпущен под лицензией с открытым исходным кодом Консорциумом Моцарта. Моцарт был портирован на Unix , FreeBSD , Linux , Windows и macOS .

Языковые особенности [ править ]

Оз [2] содержит большинство концепций основных парадигм программирования , включая логическое, функциональное (как ленивое , так и активное вычисление ), императивное, объектно-ориентированное, ограничивающее, распределенное и параллельное программирование. Oz имеет как простую формальную семантику (см. главу 13 упомянутой ниже книги), так и эффективную реализацию. [ нужна цитата ] Oz — язык, ориентированный на параллелизм , поскольку этот термин был введен Джо Армстронгом, главным разработчиком языка Erlang . Язык, ориентированный на параллелизм, делает параллелизм простым в использовании и эффективным. Oz поддерживает канонический язык графического пользовательского интерфейса (GUI) QTk. [3]

Помимо мультипарадигмального программирования, основными сильными сторонами Oz являются программирование в ограничениях и распределенное программирование . Благодаря факторизованному дизайну Oz может успешно реализовать прозрачную для сети модель распределенного программирования. Эта модель позволяет легко программировать открытые отказоустойчивые приложения на языке. Для программирования в ограничениях Оз вводит идею вычислительных пространств , которые позволяют определять определяемые пользователем стратегии поиска и распределения, ортогональные области ограничений.

Обзор языка [ править ]

Структуры данных [ править ]

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

Основные структуры данных:

  • Числа: с плавающей запятой или целое число (действительное целое число)
  • Записи: для группировки данных: circle(x:0 y:1 radius:3 color:blue style:dots). Здесь термины x, y, радиус и т. д. называются объектами, а данные, связанные с объектами (в данном случае 0,1,3 и т. д.), являются значениями.
  • Кортежи: записи с целочисленными функциями в порядке возрастания: circle(1:0 2:1 3:3 4:blue 5:dots) .
  • Списки: простая линейная структура
'|'   (  2   '|'  (  4   '|'  (  6   '|'  (  8   ноль  ))))   % в качестве записи. 
  2  |(  4  |(  6  |(  8  |  ноль  )))   % с синтаксическим сахаром 
 2  |   4  |   6  |   8  |   ноль   % больше синтаксического сахара 
 [  2   4   6   8  ]   % еще больше синтаксического сахара 

Эти структуры данных представляют собой значения (постоянные), первого класса и динамически проверяемые типы . Имена переменных в Oz начинаются с заглавной буквы, чтобы отличать их от литералов. [4] которые всегда начинаются со строчной буквы.

Функции [ править ]

Функции [5] являются значениями первого класса, позволяющими функциональное программирование более высокого порядка:

fun   {  Факт   N  } 
    если   N   =<   0   , то   1   else   N  *  {  Факт   N  -  1  }   end 
 end 
fun   {  Comb   N   K  } 
    {  Fact   N  }   div   ({  Fact   K  }   *   {  Fact   N  -  K  })   % целых чисел не может переполниться в Оз (если не осталось памяти) 
 end 

 fun   {  SumList   List  } 
    case   Список   нулей   ,   затем   0 
    []   Ч  |   T   then   H  +  {  SumList   T  }   % сопоставление с шаблоном в 
    конце 
 списка 

Функции можно использовать как со свободными, так и со связанными переменными. Значения свободных переменных находятся с использованием статической лексической области видимости . [6]

Программирование высшего порядка [ править ]

Функции похожи на другие объекты страны Оз. Функция может быть передана как атрибут другим функциям или возвращена в функции.

fun   {  Square   N  }    % Общая функция 
    N  *  N 
 end 

 fun   {  Map   F   Xs  }    % F здесь является функцией - 
    случай   программирования Xs 
       более высокого порядка :   nil   then   nil 
       []   X  |   Xr   then   {  F   X  }|{  Map   F   Xr  } 
    end 
 end 

 %usage 
 {  Browse   {  Map   Square   [  1   2   3  ]}}    %browses [1 4 9] 

Анонимные функции [ править ]

Как и многие другие функциональные языки, Oz поддерживает использование анонимных функций (т. е. функций, не имеющих имени) при программировании более высокого порядка. Для их обозначения используется символ $.

Далее функция Square определяется и передается анонимно, что приводит к [1 4 9] для просмотра.

{  Обзор   {  Карта   развлечений   {  $  N  }   N  *  N   end   [  1   2   3  ]}} 

Поскольку анонимные функции не имеют имен, невозможно определить рекурсивные анонимные функции.

Процедуры [ править ]

Предполагается, что функции в Oz возвращают значение в последнем операторе, встретившемся в теле функции во время ее выполнения. В приведенном ниже примере функция Ret возвращает 5, если X > 0, и -5 в противном случае.

объявить 
 fun   {  Ret   X  }, 
    если   X   >   0   , то   5   else   ~  5   end 
 end 

Но Oz также предоставляет возможность на случай, если функция не должна возвращать значения. Такие функции называются процедурами. [7] Процедуры определяются с использованием конструкции «proc» следующим образом:

объявить 
 proc   {  Ret   X  } 
    if   X   >   0   then   {  Browse   5  }   else   {  Browse   ~  5  }   end 
 end 

Приведенный выше пример не возвращает никакого значения, он просто печатает 5 или -5 в браузере Oz в зависимости от знака X.

декларативный и параллелизм Переменные потока данных

Когда программа встречает несвязанную переменную, она ожидает значения. Например, ниже поток будет ждать, пока X и Y не будут привязаны к значению, прежде чем показывать значение Z.

нить  
    Z   =   X  +  Y 
    {  Обзор   Z  } 
 конец 
 нити   X   =   40   конец 
 нити   Y   =   2   конец 

Значение переменной потока данных не может быть изменено после ее привязки:

X   =   1 
 X   =   ошибка 2   % 

Переменные потока данных упрощают создание агентов одновременного потока:

fun   {  Ints   N   Max  } 
    if   N   ==   Max   then   nil 
    else  
       {  Delay   1000  } 
       N  |{  Ints   N  +  1   Max  } 
    end 
 end 

 fun   {  Sum   S   Stream  } 
    case   Stream 
       of   nil   then   S 
       []   H  |   T   then   S  |{  Sum   H  +  S   T  } 
    end 
 end 

 local   X   Y   в 
    потоке   X   =   {  Ints   0   1000  }   end 
    thread   Y   =   {  Sum   0   X  }   end 
    {  Browse   Y  } 
 end 

Благодаря принципу работы переменных потока данных можно размещать потоки в любом месте программы и гарантировать, что результат будет одинаковым. Это делает параллельное программирование очень простым. Потоки очень дешевы: одновременно можно запустить 100 000 потоков. [8]

Пример: сито пробного деления [ править ]

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

fun   {  Сито   Xs  } 
    случай   Xs   nil   then   nil   [ 
    ]   X  |   Xr   , затем   Ys   в 
       потоке   Ys   =   {  Filter   Xr   fun   {  $  Y  }   Y   mod   X   \  =   0   end  }   end 
       X  | {  Sieve   Ys  } 
    end 
 end 

Лень [ править ]

использует нетерпеливую оценку Оз по умолчанию , но ленивую оценку. [9] возможно. Ниже этот факт вычисляется только тогда, когда значение X необходимо для вычисления значения Y.

fun   lazy   {  Факт   N  } 
    if   N   =<   0   then   1   else   N  *  {  Факт   N  -  1  }   end 
 end 
 local   X   Y   in 
   X   =   {  Fact   100  }  
   Y   =   X   +   1 
 end 

Ленивые вычисления дают возможность хранить в Oz действительно бесконечные структуры данных. Силу ленивых вычислений можно увидеть в следующем примере кода:

объявить 
 fun   lazy   {  Merge   Xs   Ys  } 
    case   Xs  #  Ys 
    of   (  X  |  Xr  )  #  (  Y  |  Yr  )   then 
       if   X   <   Y   then   X  | {  Merge   Xr   Ys  } 
       else   if X  >  Y   then   Y  | {  Merge   Xs   Yr  } 
       else   X  |{  Объединить   Xr   Yr  } 
       end 
    end 
 end 

 fun   lazy   {  Times   N   Xs  } 
    case   Xs 
    of   nil   then   nil 
    []   X  |   Xr   , затем   N  *  X  |{  Times   N   Xr  } 
    end 
 end 

 объявляем   H 
 H   =   1   |    {  Объединить   {  Times   2   H  }   {  Объединить   {  Times   3   H  }   {  Times   5   H  }}} 
 {  Обзор   {  Список  .   возьми   H   6  }} 

Приведенный выше код элегантно вычисляет все обычные числа. [10] в бесконечном списке. Фактические цифры рассчитываются только тогда, когда они необходимы.

Параллельная передача сообщений [ править ]

Декларативная параллельная модель может быть расширена за счет передачи сообщений посредством простой семантики:

объявить 
 локальный   потока   порт   в 
    Port   =   {  NewPort   Stream  } 
    {  отправки   Port   1  }   % Stream теперь равен 1|_ ('_' указывает на несвязанную и безымянную переменную) 
    {  Send   Порт   2  }   % Stream теперь равен 1|2|_ 
    .. . 
    {  отправки   Порт   n  }   % Поток теперь равен 1|2|   .. |n|_ 
 конец 

С помощью порта и потока можно определить асинхронные агенты:

fun   {  NewAgent   Init   Fun  } 
    Сообщение   в   потоке 
     {  FoldL   Msg   Fun   Init   Out  }   end 
    {  NewPort   Msg  } 
 end 

Состояние и объекты [ править ]

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

local   A   X   in 
    A   =   {  NewCell   0  } 
    A   :  =   1    % изменяет значение A на 1 
    X   =   @  A    % @ используется для доступа к значению A 
 end 

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

class   Counter 
    attr   val 
    meth   init  (  Value  ) 
       val  :  =  Value 
    end 
    meth   Browse 
       {  Browse   @  val  } 
    end 
    meth   inc  (  Value  ) 
       val   :  =  @  val  +  Value 
    end 
 end 

 local   C   in 
    C   =   {  New   Counter   init  (  0  )} 
    {  C   inc  (  6  )} 
    {  C   просмотр  } 
 конец 

Скорость выполнения [ править ]

Скорость выполнения программы, созданной компилятором Моцарта (версия 1.4.0, реализующая Oz 3), очень низкая. В наборе тестов 2012 года он в среднем был примерно в 50 раз медленнее, чем у GNU Compiler Collection (GCC) для языка C. [11]

См. также [ править ]

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

  1. ^ «Информация о лицензии Моцарта Оз» . 16 января 2014 года . Проверено 16 января 2014 г.
  2. ^ Герт Смолка (1995). «Модель программирования из страны Оз» (PDF) . Информатика сегодня . Конспекты лекций по информатике. Том. 1000. С. 324–343. дои : 10.1007/BFb0015252 . ISBN  978-3-540-60105-0 .
  3. ^ «QTk» . Архивировано из оригинала 20 мая 2013 года . Проверено 6 апреля 2009 г.
  4. ^ «3 основы» .
  5. ^ Лейф Грёнквист. «Функции высшего порядка». Продвинутое функциональное программирование в стране Оз . Архивировано из оригинала 3 марта 2016 года . Проверено 3 ноября 2014 г.
  6. ^ Роберт Джентльмен; Росс Ихака (сентябрь 2000 г.). «Лексическая область действия в статистических вычислениях» (PDF) . Журнал вычислительной и графической статистики . 9 (3, Системы и языки): 491–508. дои : 10.1080/10618600.2000.10474895 .
  7. ^ «5 основных структур управления» .
  8. ^ «Архивная копия» . Архивировано из оригинала 24 февраля 2015 года . Проверено 29 ноября 2008 г. {{cite web}}: CS1 maint: архивная копия в заголовке ( ссылка )
  9. ^ Пол Худак (1989). «Концепция, эволюция и применение языков функционального программирования». Обзоры вычислительной техники ACM . 21 (3): 359–411. дои : 10.1145/72551.72554 . S2CID   207637854 .
  10. ^ Рао, AC и Варада Раджу, D (1991). «Применение метода чисел Хэмминга для обнаружения изоморфизма кинематических цепей и инверсий». Теория механизма и машин . 26 (1): 55–75. дои : 10.1016/0094-114x(91)90022-v .
  11. ^ Игра с тестами компьютерного языка

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

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