E (язык программирования)

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 23:58, 8 июня 2016.
E
Спроектировано Mark S. Miller, Dan Bornstein, Electric Communities
Печать дисциплины динамическая, неявная, типизированная

E — (произносится [ iː ] )объектно-ориентированный язык программирования, предназначенный для безопасного распределенного программирования.

История

E был создан Марком Миллером (Mark S. Miller), Даном Борнштейном (Dan Bornstein) и группой сотрудников Electric Communities в 1997 году. Он произошел от языка для параллельных вычислений Joule и Original-E, расширений Java для распределенных вычислений. E задумывался как скриптовый язык, жертвующий эффективностью ради простоты использования.

Особенности

Основой языка является ELib — библиотека, обеспечивающая взаимодействие объектов и потоков программы. Каждый объект существует в некотором процессе. Распределенные вычисления реализуются посредством отправки сообщений удаленным объектам (объектам, принадлежащим другим процессам). В E существует два способа пересылки сообщений — немедленный вызов (аналог обычного вызова функции в других языках — вызывающий процесс ожидает завершения работы вызванного) и отложенный вызов. Второй вид отправляет сообщение получателю и создает в отправителе временный объект-“обещание”. Отправитель может продолжать работу немедленно, используя этот объект. Позднее, когда получатель обработает сообщение и вернет результат, объект-обещание примет значение этого результата. Этот механизм позволяет избежать взаимных блокировок и уменьшить задержки, вызванные задержками в сети.

Язык спроектирован так, чтобы обеспечить как можно лучшую безопасность работы. В частности, этому способствует строгое следование объектно-ориентированной модели на основе мандатной защиты (мандатом объекта является ссылка на него). Все сообщение между процессами шифруется на уровне языка. Синтаксис языка также предназначен для упрощения аудита безопасности: ограничение области видимости переменных, == для проверки на равенство и := для присваивания значения (нет сбивающего с толку оператора =) и т.д.

Синтаксис языка напоминает Java, с тем отличием, что все программы состоят только из выражений. Основные типы данных — int, float, string, char и boolean; тип int поддерживает длинную арифметику.

Элементы синтаксиса

Комментарий до конца строки #
Присваивание значения переменной <varname> := <value>
Равенство ==
Неравенство  !=
Цикл с предусловием while (condtion) ...
Цикл for - next для диапазона целых чисел с инкрементом на 1 for i in 1..10 { ... }

Примеры

Hello, World!:

Пример для версий E-on-Java 0.9.3

println("Hello, World!")

Числа Фибоначчи: Пример для версий E-on-Java 0.9.3

var s := [0, 1]
var res := ""
for _ in 1..16 {
  def [a, b] := s
  s := [b, a + b]
  res := res + b.toString(10) + ", "
}
println(res + "...")

Факториал:

Пример для версий E-on-Java 0.9.3

E — язык с неявной типизацией; :int, указанный в сигнатуре функции, — не объявление типа, а ограничение (guard) — контракт на то, что функция factorial будет работать только с целочисленными аргументами и возвращать только целочисленные значения. Эти ограничения не обязательны, но полезны при проведении аудита безопасности кода.

def factorial(n :int) :int {
  if (n == 0) {
    return 1
  } else {
    return n * factorial(n-1)
  }
} 

for n in 0..16 {
  println(n.toString(10) + "! = " + factorial(n).toString(10))
}

Ссылки

Официальный сайт E