Back

ⓘ E (programming language)




E (programming language)
                                     

ⓘ E (programming language)

E is an object-oriented programming language for secure distributed computing, created by Mark S. Miller, Dan Bornstein, and others at Electric Communities in 1997. E is mainly descended from the concurrent language Joule and from Original-E, a set of extensions to Java for secure distributed programming. E combines message-based computation with Java-like syntax. A concurrency model based on event loops and promises ensures that deadlock can never occur.

                                     

1. Philosophy

The E language is designed with secure computing in mind; this is accomplished chiefly by strict adherence to the object-oriented computing model, which in its pure form has properties that support secure computing. The E language and its standard library employ a capability-based design philosophy throughout in order to help programmers build secure software and to enable software components to co-operate even if they dont fully trust each other. In E, object references serve as capabilities, hence capabilities add no computational or conceptual overhead costs. The language syntax is designed to be easy for people to audit for security flaws. For example, lexical scoping limits the amount of code that has to be examined for its effects on a given variable. As another example, the language uses the == operator for comparison and the:= operator for assignment; to avoid the possibility of confusion, there is no = operator.

                                     

2. Computational model

In E, all values are objects and computation is performed by sending messages to objects. Each object belongs to a vat analogous to a process. Each vat has a single thread of execution, a stack frame, and an event queue. Distributed programming is just a matter of sending messages to remote objects in other vats. All communication with remote parties is encrypted by the E runtime. Arriving messages are placed into the vats event queue; the vats event loop processes the incoming messages one by one in order of arrival.

E has two ways of sending messages: the immediate call and the eventual send. An immediate call is just like a typical function or method call in a non-concurrent language: the sender waits until the receiver finishes and returns a value. An eventual send sends the message while producing a placeholder for the result called a promise. The sender proceeds immediately with the promise. Later, when the receiver finishes and yields a result, the promise resolves to the result. Since only eventual sends are allowed when communicating with remote objects, deadlocks cannot happen. In distributed systems, the promise mechanism also minimizes delays caused by network latency.

                                     

3. Syntax and examples

Es syntax is most similar to Java, though it also bears some resemblance to Python and Pascal. Variables are dynamically typed and lexically scoped. Unlike Java or Python, however, E is composed entirely of expressions. Here is an extremely simple E program:

Here is a recursive function for computing the factorial of a number, written in E. Functions are defined using the def keyword.

In the first line,:int is a guard that constrains the argument and result of the function. A guard is not quite the same thing as a type declaration; guards are optional and can specify constraints. The first:int ensures that the body of the function will only have to handle an integer argument. Without the second:int above, the function would not be able to return a value. Being able to see up front that information escapes out of the function is helpful for security auditing.

Since E is intended to support secure co-operation, the canonical example for E programs is the mint, a simple electronic money system in just a few lines of E. The following code defines a function that makes mints, where each mint has its own currency. Each mint can make purses that hold its currency, and any holder of two purses of the same currency can securely transfer money between the purses. By quick examination of the source code, an E programmer can easily verify that only mints may change the amount of money in circulation, that money can only be created and not destroyed, that mints can only create money of their own currency, and that only the holder of a purse can change its balance.

Objects in E are defined with the def keyword, and within the object definition, the to keyword begins each method. The guard expressions in this example illustrate how to specify a value constraint as in:int > = 0 or:0.balance).

The mint example makes use of a built-in mechanism called a sealer. The function makeBrandPair creates two associated objects, a sealer and an unsealer, such that the sealer can seal an object in a box and the unsealer is the only object that can retrieve the contents of the box. See the E website for a more detailed explanation of this money example.



                                     
  • programming languages Boring repetition that lacks innovation, Hardly anybody will claim that Java or C are revolutionary programming languages that
  • Go, also known as Golang, is a statically typed, compiled programming language designed at Google by Robert Griesemer, Rob Pike, and Ken Thompson. Go is
  • Programming paradigms are a way to classify programming languages based on their features. Languages can be classified into multiple paradigms. Some paradigms
  • Python is an interpreted, high - level, general - purpose programming language Created by Guido van Rossum and first released in 1991, Python s design philosophy
  • Java is a general - purpose programming language that is class - based, object - oriented, and designed to have as few implementation dependencies as possible
  • computer science, functional programming is a programming paradigm - a style of building the structure and elements of computer programs - that treats computation
  • develop functional programming languages for quantum computing. Functional programming languages are well - suited for reasoning about programs Examples include
  • The C Programming Language sometimes termed K R, after its authors initials is a computer programming book written by Brian Kernighan and Dennis Ritchie
  • order. Dialects of BASIC, esoteric programming languages and markup languages are not included. Contents: 0 9 A B C D E F G H I J K L M N O P Q R S T U
  • In computer software, a general - purpose programming language is a programming language designed to be used for writing software in the widest variety of
  • Shakespeare Programming Language SPL is an esoteric programming language designed by Jon Åslund and Karl Hasselstrom. Like the Chef programming language it

Users also searched:

...
...
...