E
- Дата создания:
- 1997
- Создан под влиянием:
- Парадигма:
- Типизация:
- Принятые расширения файлов:
- .e
- Реализации и версии (свернуть все | развернуть все):
E — объектно-ориентированный язык программирования, предназначенный для безопасного распределенного программирования.
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.3println("Hello, World!")
Числа Фибоначчи:
Пример для версий E-on-Java 0.9.3var 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.3E — язык с неявной типизацией; :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))
}
Комментарии
]]>blog comments powered by Disqus
]]>