urbis 스크립트

urbiscript
urbis 스크립트
패러다임멀티플렉스: 객체 지향, 이벤트 지향, 필수, 기능, 절차, 반영
설계자장 크리스토프 배일리
개발자고스타이 등
처음 등장한2003년; 19년 전(2003년)
안정된 릴리스
2.7.4 / 2011년 11월 17일, 10년 전(2011-11-17)
타이핑 분야duck, dynamic
OS크로스 플랫폼
면허증.BSD 라이선스[1]
파일 이름 확장자.u
웹 사이트github.com/urbiforge/urbi
영향을 받다
C++, 셀프,[2] I[2]/O

urbiscript[3]로보틱스를 위한 프로그래밍 언어입니다.동시성 및 이벤트 기반 프로그래밍에 대한 구문 지원을 제공합니다.이것은 프로토타입 기반의 객체 지향 스크립트 언어입니다.프로그램 실행 에 이름 해결이 수행되고(늦은 바인딩), 실행 시 슬롯(멤버 변수)을 추가/제거할 수 있으며, 실행 시 오브젝트의 프로토타입(슈퍼 클래스)도 변경할 수 있습니다.

메모리 관리는 참조 카운트에 의해 이루어진다.

Urbi 플랫폼에 단단히 연결되어 C++/Java 컴포넌트의 심리스한 통합을 지원합니다.

구문 및 의미론

영감

구문론적 관점에서 urbiscript는 프로그래밍 언어의 C족에 속합니다.

프로토타입 기반의 객체 지향 디자인은 Self와 Io 프로그래밍 [2]언어의 영향을 받았습니다.

이것은 프로그래밍할 뿐만 아니라 [2]로봇과도 상호 작용하도록 설계되어 있기 때문에 읽기-평가-인쇄 루프 스타일의 인터랙티브 최상위 수준을 제공하는 Unix 쉘과 다른 언어에 영향을 받습니다.다만, 다른 것과 달리, 유저 입력의 프롬프트는 표시되지 않지만, 시스템으로부터의 응답에는, 각 괄호 사이에 타임스탬프(밀리초 단위)가 붙습니다.

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

시퀀셜 스테이트먼트 및 제어 흐름

urbiscript 문장은 다음과 같습니다(특히).[4]

  • 스테이트먼트: 조건부로 코드 블록을 실행합니다.else.
  • C와 같이 각 요소를 로컬 변수에 캡처하여 연결된 블록에서 사용하는 기존 문.
  • 다른 문장은 반복 가능한 오브젝트에 대해 반복되며 각 요소를 로컬 변수로 캡처하여 연결된 블록에서 사용합니다.
  • 스테이트먼트. 조건이 true인 한 코드 블록을 실행합니다.
  • 이 스테이트먼트는 첨부된 코드 블록에 던져진 예외를 검출하여 처리할 수 있도록 합니다.catch절을 참조하십시오.옵션else예외가 발생하지 않은 경우 절이 실행됩니다.클린업 코드는 에서 지정되었을 때 모든 경우에 실행할 수 있습니다.finally- - - 。
  • 적용할 필요가 있는 조건을 체크하기 위해 디버깅 중에 사용되는 스테이트먼트.urbiscript도 기능합니다.assert블럭 - 여러 개를 인수분해하는 데 사용할 수 있습니다.assert진술들.

실제로 대부분의 C-like 언어와 달리 구문이 시사하는 바와 달리 문장은 "값이 있다"며, 따라서 괄호 안에 포함되어 있는 경우 표현식입니다.

  초본 상황 = { 한다면 (닫혔다) "폐쇄" 또 다른 "개방" };   초본 통과하다 = { 해라 { 실례합니다. } 또 만나 { 거짓의 } 또 다른 { 진실의 } }; 

동시 스테이트먼트 및 제어 흐름

urbiscript에서 일부 control-flow 구문을 여러"맛":순차 조성의 두가지 유형 및 동시 화의 두가지 유형으로 나오게 된다.후드에서 동시 접속 coroutines을 사용 시행한다.[5]

명세서 구성

C에서처럼, 세미:순차 조성을 나타낸다.a;b달리성명"을 의미합니다.a그때 성명 실행b. 다른 작업 사이를 운행할 수 있다.a그리고.b. 또 다른 성명 분리기, 파이프,: 다른 과제 사이를 운행할 수 있"타이트한 순차 조성"을 나타낸다.a그리고.ba b.

마찬가지로urbiscript 기능 두 방법 동시에 문구를 작성합니다.와 함께a,b,첫번째a어느 시점에선가 이루어지나.b-가능하는 동안 것이다a여전히 달리고 있다.이것은 와 매우 유사합니다.&operator를 참조해 주세요.또는,a&b,둘다요.a그리고.b인터랙티브세션에서 이것은,a까지는 운영되지 않을 것이다b완전히 입력되어 있고 다음 중 하나가 올바르게 이어집니다.;또는,.

범위는 다음 [5]예에서 보듯이 백그라운드 작업의 경계입니다.

  {     { 수면.(2초); 메아리치다(2) },     { 수면.(1s); 메아리치다(1) },    };   메아리치다(3); 
[00012451] *** 1
[00013447] *** 2
[00013447] *** 3

순차 구성 요소의 동시 플레이버

urbiscript의 대부분의 루프 구조는 4개의 문 구분자를 기반으로 하는 여러 "플래버"로 제공됩니다.;, ,,,그리고.&.

예를 들어.

  // 이것은 실제로 "for;"입니다.   위해서 (초본 i : [0, 1, 2])   {     메아리치다(i);     메아리치다(i ** 2);   }; 

디스플레이

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

즉, 루프 본체는 순차적으로 실행되지 않으며, 반면에for&키워드는 루프바디를 동시에 실행합니다.

  용과 (초본 i : [0, 1, 2])   {     메아리치다(i);     메아리치다(i ** 2);   }; 
[00021680] *** 0
[00021680] *** 1
[00021680] *** 2
[00021682] *** 0
[00021682] *** 1
[00021682] *** 4

이벤트 기반 프로그래밍

휴대용 로봇 애플리케이션의 [6]개발을 목표로, 어비스크립트는 "배터리가 부족할 때 충전 독으로 가라", "알고 있는 얼굴이 인식되면 친절한 소리를 재생한다", "장애물이 감지되면 정지하라"와 같은 반응 동작을 특정하기 위해 특정 구문 구조에 의존합니다.

명시적 이벤트 처리

이벤트 처리는 3단계로 진행됩니다.먼저 이벤트를 정의합니다.

  초본 e = 이벤트.신규; 

둘째, 이벤트 핸들러를 지정합니다.

   (e?)     메아리치다("이벤트 e"); 

셋째, 이 이벤트를 "감시"합니다.

  e!; 
[00014333] *** received event e

이벤트에는 payload를 설정할 수 있으며 이벤트핸들러는 payload의 패턴 조회를 즐깁니다.

   (e?(1, 초본 x) 한다면 x % 2 == 0)     메아리치다("이벤트 e(1, %s)" % x);   e!(1, 1); 
[00014336] *** received event e
  e!(1, 2); 
[00014336] *** received event e
[00014336] *** received event e(1, 2)

암묵적 이벤트

urbiscript 언어에서는 다음 식을 모니터링할 수도 있습니다.

   (배터리 수준 <=> 0.2)     로봇.충전 독으로 이동; 

다음으로 기능을 표시하는 예를 나타냅니다.

  초본 x = 0; 
[00002165] 0
  초본 y = 0; 
[00002166] 0
  초본 z = 0; 
[00002167] 0
   (x + y == z)     메아리치다(%s + %s == %s % [x, y, z]); 
[00002168] *** 0 + 0 == 0
  x = 1; 
[00002169] 1
  z = 1; 
[00002170] 1
[00002170] *** 1 + 0 == 1

「 」를 참조해 주세요.

레퍼런스

  1. ^ "Urbi, the open source operating system for robots". Retrieved 2012-10-27.
  2. ^ a b c d Baillie, Jean-Christophe; Demaille, Akim; Nottale, Matthieu; Hocquet, Quentin; Tardieu, Samuel (2008). "The Urbi Universal Platform for Robotics" (PDF). Retrieved 6 October 2011.
  3. ^ Baillie, Jean-Christophe. "Urbi: a new parallel & event-driven script language for robotics, games and more". YouTube. Retrieved 6 Oct 2011.
  4. ^ "urbiscript Language Reference Manual". Retrieved 2011-09-20.
  5. ^ a b Baillie, Jean-Christophe; Demaille, Akim; Nottale, Matthieu; Hocquet, Quentin (2010). "Tag: Job Control in urbiscript" (PDF). Retrieved 6 October 2011.
  6. ^ Baillie, Jean-Christophe; Demaille, Akim; Nottale, Matthieu; Hocquet, Quentin (2010). "Events! (Reactivity in urbiscript)". arXiv:1010.5694 [cs.PL].

외부 링크