키네틱 규칙 언어
Kinetic Rule Language패러다임 | 이벤트 조건 작업 규칙 언어 |
---|---|
설계자 | 필립 윈들리 |
개발자 | 키넥스, 주식회사 |
첫 등장 | 2007 |
타이핑 규율 | 역동적이고 약한 |
면허증 | GPLv2 |
웹사이트 | KRL 문서 |
주요 구현 | |
KRL | |
영향을 받은 | |
자바스크립트, 펄 |
KRL(Kinetic Rule Language)은 Live Web에서 응용프로그램을 만들기 위한 규칙 기반 프로그래밍 언어다.[1]KRL 프로그램 또는 규칙 집합은 특정 이벤트에 대응하는 여러 규칙을 구성한다.KRL은 개인 클라우드 구축을 위한 언어로 홍보되어 왔다.[2][3]null
KRL은 Kynetx, Inc.에서 개발한 Kinetic Rules Engine for [4]KRE라는 오픈소스 프로젝트의 일부다.
역사
KRL은 2007년부터 Kynetx에서 Phil Windley에 의해 디자인되었다.그 이후 언어의 발전은 트위터, 페이스북, 트윌리오를 포함한 다양한 웹 서비스를 위한 도서관과 모듈들로 확대되었다.null
철학과 디자인
KRL은 엄격한 평가, 단일 할당, 동적 타이핑을 통해 이벤트를 기반으로 한다.이벤트 기반 프로그래밍, 이벤트, 발생 알림에서 실행 흐름을 제어한다.KRL은 다음과 같은 세 가지 핵심 아이디어에 기반한 프로그래밍 모델을 지원한다.[5]
엔티티 지향 – KRL의 프로그래밍 모델은 핵심 특징으로서 정체성을 갖는다.KRL 프로그램은 특정 기관을 대신하여 실행된다.실체 사상은 언어의 기본 의미론에 내장되어 있다.KRL의 엔티티 방향은 기초 KRE(Kynetx Rules Engine)에 의해 지원되므로 엔진에서 실행 중인 모든 프로그램(KRL로 작성되지 않은 프로그램도 사용 가능함)이 있다.다음 두 가지 특징은 왜 아이덴티티가 프로그래밍 모델에 중요한지를 보여준다.null
기업지향은 KRL 실행 환경이 기업 개념을 지원하도록 요구한다.각 엔티티에 대해 규칙 집합이 설치된다.null
이벤트 바인딩 – KRL의 규칙은 이벤트 패턴을 작업에 바인딩한다.이벤트 패턴은 이벤트 식을 사용하여 지정된다.이벤트와 동작은 프로그래머가 자신의 문제 공간과 관련된 이벤트와 동작을 자유롭게 정의할 수 있도록 둘 다 확장 가능하다.null
이벤트는 특정 규칙 집합으로 다루어지는 경우는 드물다.그보다는 사건이 특정 실체를 대신하여 발생하므로, 기업이 설치한 규칙 집합에서 선택한 규칙은 동일한 실체를 대신하여 실행된다.이 개념은 "생활"이라고 불린다.특정 엔터티가 해당 이벤트를 경청하는 규칙을 설치한 경우 해당 엔터티에 사건이 유리하다.null
하나의 사건이 기업의 실행 환경 내의 여러 규칙 집합에서 규칙을 발생시킬 수 있다.선택한 규칙과 실행 규칙은 설치된 규칙 집합에 따라 달라진다.null
영구 데이터 값 – KRL에는 "지속 변수" 또는 "지속성"이라고 하는 변수의 종류가 있다.지속성에는 적용변수와 엔티티 변수의 두 종류가 있다.둘 다 자신이 속한 규칙 집합에 대해 닫히므로 규칙 집합 내에서 실행되는 코드에만 볼 수 있다.적용 변수는 규칙 집합에 저장되며 규칙 집합을 실행하는 모든 엔터티가 사용할 수 있다.엔티티 변수 값은 해당 값이 저장된 엔티티만 볼 수 있다.적용 변수는 클래스 변수와 대략 유사하다.도면요소 변수는 인스턴스(instance) 변수와 같다.null
특히 엔티티 변수는 KRL 프로그래머들에게 대부분의 사물에 대해 데이터베이스를 구성, 연결 및 사용하는 골칫거리 없이 지속적인 값을 저장할 수 있는 능력을 제공하기 때문에 매우 강력한 개념이다.규칙 집합은 도면요소 변수에 대한 폐쇄를 나타내기 때문에, 모든 규칙 집합은 잠재적으로 영구적인 데이터 객체를 나타낸다.null
이벤트 조건-조치
KRL은 규칙의 세 가지 기본 부분이 수행하는 역할 때문에 이벤트 조건 작업 또는 ECA 규칙 언어로 불린다.
- 이벤트 – 이벤트는 특정한 발생을 유발한다.사건들은 "총" 즉 규칙의 방아쇠와 같다.규칙을 촉발할 사건이 없으면 아무 일도 일어나지 않는다.
- 조건 – 조건은 총의 안전과 유사하다.조건부 표현이 참으로 돌아오지 않으면 규칙은 발포하지 않는다.총이 안전을 근거로 쏘거나 쏘지 않는 것처럼 조건부 진술도 없다.만약 당신이 반대의 경우에 규칙을 실행하기를 원한다면, 당신은 다른 사건을 트리거하기 위해 발사되지 않은 막대를 사용할 수도 있고, 당신은 반대 사건을 테스트하는 조건부로 규칙을 가질 수도 있다.
- 행동 – 행동은 총에서 총알이 나오는 것과 같다; 그것들은 규칙의 최종 결과물이다.규칙에는 여러 가지 동작이 있을 수 있다.
KRL 규칙 집합에는 규칙 집합 외에 규칙 집합에 대한 정보를 명시하기 위한 메타 섹션, 이벤트 만족도에 대한 단서를 제공하기 위한 디스패치 섹션, 글로벌 정의에 대한 글로벌 섹션도 포함되어 있다.각 규칙은 위에 제시된 ECA 규칙 언어의 패턴을 준수하며 몇 가지 중요한 추가가 있다.null
KRL 규칙의 기본 구조는 다음과 같다.
규칙 <이름> { 만약 < eventexpr> 사전 { <선언> }이(가) <확장>이 그때 <행동>이 { <실행>을 발사했을 때를 선택한다. 그 외에 {<실행> } {실행}.}
- 의 이벤트 식
select
선언문은 규칙을 선택할 조건을 선언한다.[6] - 규칙 전주곡의 선언은 규칙의 나중에 사용하기 위해 값을 계산하고 저장할 수 있도록 허용한다.
- 조건식은 선택한 규칙이 실행되는지 여부를 결정한다.
- 동작은 기본 제공 또는 사용자 정의가 가능하며 규칙의 동작을 지정할 수 있음
- 규칙의 게시판에 있는 문장(
fired...else...
)는 영구 변수에 영향을 미치고 추가 사건을 발생시킨다.
이벤트 생성기
KRL 이벤트는 일반적으로 "엔드포인트"라고 불리는 이벤트 생성기의 다른 규칙에 의해 제기된다.이벤트는 일반적으로 Evented API를 준수하는 모델을 사용하여 HTTP를 통해 제기되지만 KRL은 전송 불가지론이다.[7]예를 들어 e-메일, SMS, MQTT 또는 푸시 스타일 알림을 지원하는 다른 시스템으로 이벤트를 전송할 수 있다.Evented API는 webhook 개념의 전문화기 때문에 webhook을 지원하는 시스템은 KRL에 대한 이벤트를 발생시킬 수 있다.
KRL은 이벤트 채널을 사용하여 이벤트가 제기되는 실체를 식별한다.기업은 얼마든지 사건 채널을 가질 수 있다.이벤트 채널은 HTTP를 통해 전송되는 이벤트의 URL로 인코딩된다.null
이벤트를 생성하는 엔드포인트는 일부 활동을 직접 관찰하고 두드러진 상태 변화를 보고하거나 다른 소스(예: 웹 후크)에서 이벤트 데이터를 보고하거나 변환하는 것일 수 있다.null
엔드포인트의 책임
- 이벤트 프로세서에 관련 이벤트 제기
- 이벤트 프로세서의 지침에 대한 응답
- 컨텍스트를 만드는 의미 있는 방법으로 이벤트 프로세서와 개별 상호작용을 연결하는 상태 유지.
규칙 및 규칙 실행
KRL은 결정론적 규칙 언어다.이는 KRL 프로그램이 트리거될 때 조치를 취하는 규칙 집합으로 구성된다는 것을 의미한다.기능적 언어, 객체 지향 언어, 명령적 언어가 모두 다르듯이 규칙 언어 역시 다른 사고방식을 필요로 한다.따라서 KRL 규칙 집합을 작성하는 것은 전통적인 프로그래밍 작업이 아니다.null
가장 단순하게 말해서 규칙은 조건부 작용이다.이 작업은 도메인에 적합한 모든 것이 될 수 있다.웹 페이지를 확장하는 경우, 작업은 페이지 한정자가 된다.다른 도메인에서 작업은 엔드포인트가 사용할 수 있는 모든 것이 될 수 있다.어떤 규칙의 조치가 취해질 때, 우리는 그 규칙이 "발포되었다"고 말한다.동작은 조건부라는 점에 유의하십시오. 동작은 규칙이 선택되고 그 전제가 참일 때만 수행된다.null
첫 번째 단계에서는 이벤트 식에 있는 이벤트 패턴을 기반으로 규칙을 선택하거나 선택하지 않는다.규칙의 이벤트 표현식은 규칙에서 선택한 키워드를 따른다.예를 들어, 웹 도메인에서, 이것은 종종 증강되는 페이지의 URL과 일치하는 정규식으로 구성된다.따라서 첫 번째 단계에서 규칙은 특정 웹 페이지에 대해서만 선택된다.null
규칙의 조건부 발포 2단계는 그 전제를 시험하는 것으로, 규칙이 평가되고 있는 문맥을 시험하는 데 사용되는 술어로 구성되어 있다.이 점검은 값이 선언되는 규칙의 전주절 이후에 행하여 컨텍스트를 생성하거나 조작하는 데 필요한 계산의 장점을 가진다.조건의 술어는 선택사항이기 때문에 선택자가 항상 선택하기 때문에 항상 발생하는 규칙을 작성할 수 있다.그러나, 대부분의 흥미로운 규칙들은 특정한 상황에서만 발사되는 규칙들을 포함할 것이다.null
다음 예제는 간단한 KRL 규칙을 보여준다.
rule good_morning {pageview url #example.com#가 if morning이면 그때 통지("Welcome!", "Good morning!") }
이 규칙은 사용자가 있는 오전일 경우 웹 사이트(URL 경로로 표시됨)의 보관 파일에 있는 모든 페이지의 방문자에게 "좋은 아침" 통지를 발송할 것이다.null
이벤트 및 이벤트 시스템
이벤트는 컴퓨터 시스템에서 감지 가능한 상태에 대한 알림입니다.감지 가능한 상태는 일반적으로 국가 변화로 간주될 것이다.null
다음은 이벤트 감지 및 알림의 세 가지 필수 부분이다.
- 국가의 변화
- 프로세스가 주의 변화를 통지한다.
- 프로세스가 상태 변경에 대한 통지를 전송함
통지는 데이터 전송이지 실행 제어의 전송이 아니다.이것은 다른 유형의 시스템과 구별되는 사건 시스템의 특징 중 하나이다.질문형 시스템은 요청-응답 모드 상호작용을 사용한다: "이러시겠습니까?"명령형 시스템에서는 RPC 모드 상호 작용을 사용한다: "이 작업을 수행하십시오!"대조적으로, 사건 상호작용은 선언적이며 특정한 상태 변화가 일어났다고만 명시한다: "이러한 일".null
그것들은 선언적이기 때문에, 이벤트 통지는 발생기가 아닌 프로세서에서 이벤트가 의미하는 의미에 대한 의미를 부과한다.이벤트 생성기는 지정된 프로세서가 이벤트를 어떻게 해석하는지 모른다.게다가, 이벤트 프로세서가 어떠한 조치도 취할 필요가 없다.각 프로세서는 그 맥락과 특정 목적에 따라 시스템의 다른 프로세서 및 생성기와 독립적으로 이벤트를 해석할 수 있다.null
이벤트 생성기는 "이벤트를 발생시킨다". 즉, 상태 변경이 발생했다는 통지를 전송한다.이벤트 프로세서는 이러한 이벤트를 "목록"하거나 "손목"한다.null
참조
- ^ Windley, Phillip (2011). The Live Web. Course Technology PTR. p. 416. ISBN 978-1133686682.
- ^ Searls, Doc. "The Internet of me and my things". Retrieved 18 February 2013.
- ^ Cobb, Jennifer (May 17, 2012). "The Promise of the Personal Cloud".
- ^ "Kinentic Rules Engine at GitHub". GitHub. Retrieved 18 February 2013.
- ^ Windley, Phillip. "A Programming Model for the CloudOS". Retrieved 18 February 2013.
- ^ "KRL Event Expressions". Retrieved 18 February 2013.
- ^ Curren, Sam. "Evented API Specification". Retrieved 18 February 2013.
외부 링크
- KRL 문서
- Kinetic Rules Engine, GitHub에서 호스팅되는 오픈 소스 구현
- 필 윈들리 블로그의 KRL에 관한 기사