Jump to content

городской пейзаж

городской пейзаж
Парадигма мультипарадигмальность : объектно-ориентированная , событийно-ориентированная , императивная , функциональная , процедурная , рефлексивная.
Разработано Жан-Кристоф Бэйли
Разработчик Гостай и др.
Впервые появился 2003 год ; 21 год назад ( 2003 )
Стабильная версия
2.7.4 / 17 ноября 2011 г .; 12 лет назад ( 17.11.2011 )
Дисциплина набора текста утка , динамично
ТЫ Кросс-платформенный
Лицензия Лицензии BSD [1]
Расширения имен файлов
Веб-сайт github /урбифорж / город
Под влиянием
С++ , Самостоятельно , [2] Этот [2]

urbiscript — язык программирования для робототехники. [3] Он имеет синтаксическую поддержку параллелизма и программирования на основе событий. Это на основе прототипов объектно-ориентированный язык сценариев . Оно динамическое: разрешение имен выполняется во время выполнения программы ( позднее связывание ); слоты ( переменные-члены ) можно добавлять/удалять во время выполнения, и даже прототипы ( суперклассы ) объекта можно изменять во время выполнения.

Управление памятью осуществляется путем подсчета ссылок .

Тесно привязанный к платформе Urbi, он поддерживает плавную интеграцию компонентов C++/Java.

Синтаксис и семантика

[ редактировать ]

Вдохновение

[ редактировать ]

С синтаксической точки зрения urbiscript принадлежит к C. семейству языков программирования

Его объектно-ориентированный дизайн, основанный на прототипах, был создан под влиянием языков программирования Self и Io . [2]

Он предназначен для программирования, а также взаимодействия с роботами; [2] как таковой, на него влияют оболочки Unix и другие языки, которые обеспечивают интерактивный верхний уровень в стиле цикла чтения-оценки-печати . Однако, в отличие от других, здесь нет запроса на ввод данных пользователем, а ответы системы предваряются меткой времени (в миллисекундах) в квадратных скобках:

 1 + 1; sleep(1s); 1 + 2 * 3;
[00005420] 2
[00006420] 7

Последовательные операторы и поток управления

[ редактировать ]

Заявления городского сценария включают (среди прочего): [4]

  • The if оператор , который условно выполняет блок кода вместе с else.
  • Традиционный for оператор , как в C, который выполняет итерацию по итерируемому объекту, записывая каждый элемент в локальную переменную для использования прикрепленным блоком.
  • Другой for оператор , который выполняет итерацию по итерируемому объекту, записывая каждый элемент в локальную переменную для использования прикрепленным блоком.
  • The while оператор , который выполняет блок кода, пока его условие истинно.
  • The try оператор , который позволяет перехватывать и обрабатывать исключения, возникающие в прикрепленном к нему блоке кода. catch статьи. Дополнительный else Предложение выполняется, если не было создано исключение. Код очистки может быть гарантированно запущен в каждом случае, если он задан в finally-пункт.
  • The assert оператор , используемый во время отладки для проверки условий, которые должны применяться. урбискрипт также имеет функцию assert блоки, которые можно использовать для факторизации нескольких assert заявления.

На самом деле, в отличие от большинства C-подобных языков и несмотря на то, что предполагает синтаксис, операторы «имеют значение» и, следовательно, являются выражениями, при условии, что они заключены в фигурные скобки:

  var status = { if (closed) "closed" else "open" };
  var pass = { try { foo } catch { false } else { true } };

Параллельные операторы и поток управления

[ редактировать ]

В urbiscript некоторые конструкции потока управления бывают нескольких «разновидностей»: два типа последовательной композиции и два типа параллельной композиции. Под капотом параллелизм реализуется с помощью сопрограмм . [5]

Состав заявления

[ редактировать ]

Как и в C, точка с запятой обозначает последовательную композицию: a;b означает «оператор запуска» a затем запустите оператор b. Другие задачи могут выполняться между a и b. Другой разделитель операторов, труба, обозначает «жесткую последовательную композицию»: ни одна другая задача не может быть запущена между ними. a и b в a|b.

Аналогичным образом, в urbiscript есть два способа одновременного составления операторов. С a,b, первый a запускается, и в какой-то момент b будет --- возможно, пока a все еще работает. Это очень похоже на & оператор в оболочках Unix. Альтернативно, с a&b, оба a и b запускаются вместе; в интерактивных сессиях это означает, что a не будет запущен до тех пор, пока b введен полностью и за ним должным образом следует либо ; или ,.

Области — это границы фоновых заданий, как показано в следующем примере: [5]

  {
    { sleep(2s); echo(2) },
    { sleep(1s); echo(1) }, 
  };
  echo(3);
[00012451] *** 1
[00013447] *** 2
[00013447] *** 3

Параллельные разновидности последовательных конструкций

[ редактировать ]

Большинство конструкций циклов в urbiscript имеют несколько «разновидностей», основанных на четырех разделителях операторов: ;, |, ,, и &.

Например

  // This is actually "for;".
  for (var i : [0, 1, 2])
  {
    echo(i);
    echo(i ** 2);
  };

дисплеи

[00002919] *** 0
[00002921] *** 0
[00002921] *** 1
[00002922] *** 1
[00002922] *** 2
[00002922] *** 4

т.е. тела цикла выполняются не последовательно, а for& Ключевое слово запускает тела цикла одновременно:

  for& (var i : [0, 1, 2])
  {
    echo(i);
    echo(i ** 2);
  };
[00021680] *** 0
[00021680] *** 1
[00021680] *** 2
[00021682] *** 0
[00021682] *** 1
[00021682] *** 4

Программирование на основе событий

[ редактировать ]

Стремясь к разработке портативных роботизированных приложений, [6] urbiscript использует определенные синтаксические конструкции для определения реактивного поведения, такого как «подойти к зарядной станции, когда батарея разряжена», «воспроизвести дружелюбный звук при распознавании известного лица» или «остановиться при обнаружении препятствия».

Явная обработка событий

[ редактировать ]

Обработка событий состоит из трех этапов. Сначала определите событие

  var e = Event.new;

Во-вторых, укажите обработчики событий

  at (e?)
    echo("received event e");

В-третьих, «испустить» это событие

  e!;
[00014333] *** получено событие e

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

  at (e?(1, var x) if x % 2 == 0)
    echo("received event e(1, %s)" % x);
  e!(1, 1);
[00014336] *** получено событие e
  e!(1, 2);
[00014336] *** получено событие e
[00014336] *** получено событие e(1, 2)

Неявные события

[ редактировать ]

Язык urbiscript также позволяет отслеживать выражения:

  at (batteryLevel <= 0.2)
    robot.goToChargingDock;

Следующий пример демонстрирует эту функцию:

  var x = 0;
[00002165] 0
  var y = 0;
[00002166] 0
  var z = 0;
[00002167] 0
  at (x + y == z)
    echo("%s + %s == %s" % [x, y, z]);
[00002168] *** 0 + 0 == 0
  x = 1;
[00002169] 1
  z = 1;
[00002170] 1
[00002170] *** 1 + 0 == 1

См. также

[ редактировать ]
  1. ^ «Urbi, операционная система с открытым исходным кодом для роботов» . Проверено 27 октября 2012 г.
  2. ^ Jump up to: а б с д Бэйли, Жан-Кристоф; Демайль, аким; Ноттале, Матье; Хоке, Квентин; Тардье, Самуэль (2008). «Универсальная платформа Urbi для робототехники» (PDF) . Проверено 6 октября 2011 г.
  3. ^ Бэйли, Жан-Кристоф. «Urbi: новый параллельный и управляемый событиями язык сценариев для робототехники, игр и многого другого» . Ютуб . Проверено 6 октября 2011 г.
  4. ^ «Справочное руководство по городскому языку» . Проверено 20 сентября 2011 г.
  5. ^ Jump up to: а б Бэйли, Жан-Кристоф; Демайль, аким; Ноттале, Матье; Хоке, Квентин (2010). «Тег: Управление заданиями в городских условиях» (PDF) . Проверено 6 октября 2011 г.
  6. ^ Бэйли, Жан-Кристоф; Демайль, аким; Ноттале, Матье; Хоке, Квентин (2010). «События! (Реактивность в городском письме)». arXiv : 1010.5694 [ cs.PL ].
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: d78c9ea4e99671711f86cbba0c37026e__1612655640
URL1:https://arc.ask3.ru/arc/aa/d7/6e/d78c9ea4e99671711f86cbba0c37026e.html
Заголовок, (Title) документа по адресу, URL1:
urbiscript - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)