E(프로그래밍 언어)

E (programming language)
E
패러다임다중 패러다임: 객체 지향, 메시지 전달
설계자마크 S. 밀러
첫 등장1997
타이핑 규율강하고 역동적인
OS크로스 플랫폼
면허증다양한 무료 라이센스의 일부
웹사이트erights.org
주요 구현
E-on-Java, E-on-CL
영향을 받은
, 오리지널-E, 자바
영향받은
조랑말

E는 1997년 일렉트릭커뮤니티에서 마크 S.밀러,[1]본슈타인, 더글러스 크록포드,[2] 모닝스타[3] 등이 만든 안전한 분산 컴퓨팅을 위한 객체 지향 프로그래밍 언어다.E는 주로 동시 언어 Joule과 보안 분산 프로그래밍을 위해 Java로 확장된 Original-E의 후손이다.E는 메시지 기반 계산과 자바 유사 구문을 결합한다.이벤트 루프약속에 기초한 동시성 모델은 교착 상태가 절대 일어나지 않도록 보장한다.[4]

철학

E 언어는 안전한 컴퓨팅을 염두에 두고 설계된다. 이는 주로 객체 지향 컴퓨팅 모델을 엄격히 준수함으로써 이루어진다. 이 모델의 순수한 형태는 안전한 컴퓨팅을 지원하는 속성을 가지고 있다.E 언어와 E 언어의 표준 도서관은 프로그래머들이 안전한 소프트웨어를 만들도록 돕고 그들이 서로를 완전히 신뢰하지 않더라도 소프트웨어 구성요소가 협력할 수 있도록 하기 위해 전체적으로 역량 기반 설계 철학을 채택한다.E에서 객체 참조는 기능 역할을 하므로 기능에는 계산적 또는 개념적 오버헤드 비용이 추가되지 않는다.언어 구문은 보안 결함에 대해 사람들이 쉽게 감사할 수 있도록 고안되었다.예를 들어, 어휘 범위 지정은 주어진 변수에 미치는 영향을 조사해야 하는 코드의 양을 제한한다.또 다른 예로서, 언어는 비교를 위해 == 연산자를, 할당을 위해 := 연산자를 사용한다. 혼동의 가능성을 피하기 위해, no = 연산자는 없다.

연산 모델

E에서 모든 값은 객체이며, 물체에 메시지를 보내 계산이 이루어진다.각 물체는 vat(과정에 대한 아날로그)에 속한다.각각의 바트에는 하나의 실행 쓰레드, 스택 프레임, 이벤트 대기열이 있다.분산 프로그래밍은 단지 원격 개체(다른 vats의 개체)에 메시지를 보내는 문제일 뿐이다.원격 당사자와의 모든 통신은 E 런타임에 의해 암호화된다.도착 메시지는 바트의 이벤트 대기열에 배치되고, 바트의 이벤트 루프는 도착 순서대로 수신 메시지를 하나씩 처리한다.

E는 메시지를 보내는 두 가지 방법을 가지고 있다: 즉석 통화최종적인 송신이다.즉시 통화는 비유동 언어로 된 일반적인 함수나 메서드 호출과 같다: 송신자는 수신자가 끝날 때까지 기다렸다가 값을 반환한다.최종적인 전송은 약속이라는 결과에 대한 자리 표시자를 생성하는 동안 메시지를 보낸다.보낸 사람은 즉시 약속을 이행한다.나중에 리시버가 끝내고 결과를 내면 그 약속은 결과로 해결된다.원격 개체와 통신할 때 최종 전송만 허용되므로 교착 상태가 발생할 수 없다.분산형 시스템에서 약속 메커니즘은 또한 네트워크 지연으로 인한 지연을 최소화한다.

구문 및 예제

E의 구문은 PythonPascal과 약간 유사하지만 자바와 가장 유사하다.변수는 동적으로 입력되고 어휘적으로 범위가 지정된다.그러나 자바나 파이톤과 달리 E는 전적으로 표현으로 구성되어 있다.다음은 매우 간단한 E 프로그램:

 인쇄하다("안녕, 세상!") 

여기 E로 쓰여진 숫자의 요인 계산을 위한 재귀 함수가 있다.함수는 def 키워드를 사용하여 정의된다.

 반항하다 요인의(n :인트로) :인트로 {    만일 (n == 1) {      돌아오다 1    } 다른 만일 (n > 0) {      돌아오다 n * 요인의(n-1)    } 다른 {      던지다("요인에 대한 명백한 인수: "+n)    }  } 

첫 번째 줄에서 :int는 함수의 주장과 결과를 구속하는 가드다.가드는 형식 선언과 완전히 같은 것이 아니다. 가드는 선택 사항이고 제약 조건을 지정할 수 있다.첫 번째 :int는 함수의 본문이 정수 인수만 다루면 된다는 것을 보장한다.위의 두 번째가 없으면 함수는 값을 반환할 수 없을 것이다.기능에서 정보가 빠져나가는 것을 미리 볼 수 있는 것은 보안 감사에 도움이 된다.

E는 안전한 협력을 지원하기 위한 것이기 때문에 E 프로그램의 표준적인 예는 E의 몇 줄에 있는 간단한 전자화폐 시스템인 민트다.다음 코드는 민트를 만드는 함수를 정의하는데, 여기서 각 민트는 고유의 통화를 가지고 있다.각 민트는 화폐가 들어 있는 지갑을 만들 수 있고, 같은 화폐의 두 개의 지갑 보유자는 그 지갑 사이에서 안전하게 돈을 송금할 수 있다.E 프로그래머는 소스코드의 빠른 검토를 통해 민트만이 유통되는 돈의 양을 바꿀 수 있고, 화폐는 생성되고 파괴되지 않을 수 있으며, 민트는 자기 화폐의 화폐만을 만들 수 있으며, 지갑 보유자만이 잔고를 바꿀 수 있다는 것을 쉽게 확인할 수 있다.

 반항하다 makeMint(이름을 붙이다) :아무 것이나 {    반항하다 [밀봉인, 봉인을 풀다] := makeBrandPair(이름을 붙이다)    반항하다 박하하다 {       메케퍼스(시합을 하다 균형을 잡다 :(인트로 >= 0)) :아무 것이나 {        반항하다 해독하다(분량 :(0..균형을 잡다)) :공허하게 하다 {          균형을 잡다 -= 분량        }        반항하다 돈지갑 {           게트밸런스() :인트로 { 돌아오다 균형을 잡다 }           싹이 트다() :아무 것이나 { 돌아오다 박하하다.메케퍼스(0) }           getDecr() :아무 것이나 { 돌아오다 밀봉인.도장을 찍다(해독하다) }           예치하다(분량 :인트로, src) :공허하게 하다 {            봉인을 풀다.봉인을 뜯다(src.getDecr())(분량)            균형을 잡다 += 분량          }        }        돌아오다 돈지갑      }    }    돌아오다 박하하다  } 

E의 객체는 Def 키워드로 정의되며, 객체 정의 내에서 to 키워드는 각 방법을 시작한다.이 예제의 가드 표현식은 값 제약조건(:(int >= 0) 또는 :(0. 균형)을 지정하는 방법을 예시한다.

민트 예는 밀폐기라 불리는 내장 메커니즘을 사용한다.MakeBrandPair 기능은 실러가 물체를 상자에 밀봉할 수 있도록 밀폐기와 언세일러라는 두 개의 연관 물체를 만들어내고, 언세일러만이 상자 내용을 검색할 수 있는 물체다.이 돈 예제에 대한 자세한 설명은 E 웹사이트를 참조하십시오.[5]

참고 항목

참조

  1. ^ Handy, Alex (14 November 2016). "The future of software security". SD Times.
  2. ^ Seibel, Peter (21 December 2009). "Coders at Work: Reflections on the Craft of Programming". Apress. pp. 95–96.
  3. ^ "E's History". www.erights.org.
  4. ^ Miller, Mark S.; Tribble, E. Dean; Shapiro, Jonathan (2005). "Concurrency Among Strangers" (PDF). Trustworthy Global Computing. Lecture Notes in Computer Science. 3705: 195–229. Bibcode:2005LNCS.3705..195M. doi:10.1007/11580850_12. ISBN 978-3-540-30007-6.
  5. ^ Rees, Jonathan; Miller, Mark (2001). "From Objects To Capabilities - Simple Money". erights.org. ERights. Retrieved 8 July 2014. Before presenting the following simple example of capability-based money, we must attempt to head off a confusion this example repeatedly causes. We are not proposing to actually do money this way! A desirable money system must also provide for...

외부 링크