E (язык программирования)
Последнее изменение этой страницы: 23:58, 8 июня 2016.
Спроектировано | 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))
}
ISSN 2542-0356
Следуй за Полисом
Оставайся в курсе последних событий
Лицензия
Если не указано иное, содержание этой страницы доступно по лицензии Creative Commons «Attribution-NonCommercial-NoDerivatives» 4.0, а примеры кода – по лицензии Apache 2.0. Подробнее см. Условия использования.