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

редактировать
E
Парадигма Мультипарадигма : объектно-ориентированный, передача сообщений
Разработано Марком С. Миллером
Впервые появилось1997
Печатная дисциплина Сильная, динамическая
OS Кросс-платформенная
Лицензия Части в различных бесплатных лицензиях
Веб-сайтошибки.org
Основные реализации
E-on-Java, E-on-CL
Под влиянием by
Joule, Original-E, Java
Influenced

E- это язык объектно-ориентированного программирования для secure распределенные вычисления, созданные Марком С. Миллером, Дэном Борнштейном и другими в Electric Communities в 1997 году. E в основном произошел от языка параллелизма Joule и от Original-E, набора расширений Java для безопасного распределенного программирования. E объединяет вычисления на основе сообщений с синтаксисом, подобным Java. Модель параллелизма, основанная на циклах событий и обещаниях, гарантирует, что тупик никогда не произойдет.

Содержание
  • 1 Философия
  • 2 Вычислительная модель
  • 3 Синтаксис и примеры
  • 4 См. Также
  • 5 Ссылки
  • 6 Внешние ссылки
Философия

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

Вычислительная модель

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

E имеет два способа отправки сообщений: немедленный вызов и конечная отправка. Немедленный вызов подобен обычному вызову функции или метода на непараллельном языке: отправитель ждет, пока получатель закончит работу, и вернет значение. Возможная отправка отправляет сообщение при создании заполнителя для результата, называемого обещанием . Отправитель немедленно выполняет обещание. Позже, когда получатель заканчивает и возвращает результат, обещание преобразуется в результат. Поскольку при обмене данными с удаленными объектами разрешены только возможные отправки, взаимоблокировок быть не может. В распределенных системах механизм обещания также минимизирует задержки, вызванные задержкой в ​​сети.

Синтаксис и примеры

Синтаксис E больше всего похож на Java, хотя он также имеет некоторое сходство с Python и Pascal. Переменные динамически типизируются и лексически имеют область видимости. Однако, в отличие от Java или Python, E полностью состоит из выражений. Вот чрезвычайно простая E-программа:

println ("Hello, world!")

Вот рекурсивная функция для вычисления факториала числа, написанная на E. Функции определяются с использованием def ключевое слово.

def factorial (n: int): int {if (n == 1) {return 1} else if (n>0) {return n * factorial (n-1)} else {throw ("недопустимый аргумент для factorial: "+ n)}}

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

Поскольку E предназначен для поддержки безопасного сотрудничества, каноническим примером программ E является монетный двор, простая система электронных денег, состоящая всего из нескольких строк E. Следующий код определяет функцию, которая делает монетные дворы, где у каждого монетного двора своя валюта. Каждый монетный двор может изготавливать кошельки, в которых хранится его валюта, и любой владелец двух кошельков с одинаковой валютой может безопасно переводить деньги между кошельками. Путем быстрого изучения исходного кода E-программист может легко убедиться, что только монетные дворы могут изменять количество денег в обращении, что деньги можно только создавать, а не уничтожать, что монетные дворы могут создавать деньги только в своей собственной валюте, и что только владелец кошелька может изменить его баланс.

def makeMint (name): any {def [sealer, unsealer]: = makeBrandPair (name) def mint {to makePurse (var balance: (int>= 0)): any {def decr (amount: (0..balance)): void {баланс - = сумма} def кошелек {to getBalance (): int {return balance} to sprout (): any {return mint.makePurse (0)} to getDecr (): any {return sealer. seal (decr)} для депозита (amount: int, src): void {unsealer.unseal (src.getDecr ()) (amount) balance + = amount}} return purse}} return mint}

Объекты в E определяется ключевым словом def, а внутри определения объекта ключевое слово от до начинается каждый метод. Выражения защиты в этом примере иллюстрируют, как указать ограничение значения (например, : (int>= 0) или : (0..balance) ).

В примере с монетным двором используется встроенный механизм, называемый герметиком. Функция makeBrandPair создает два связанных объекта, запечатывающее устройство и распечатывающее устройство, так что запечатывающее устройство может запечатать объект в коробке, а распечатывающее устройство является единственным объектом, который может получить содержимое коробки. См. Более подробное объяснение этого примера денег на веб-сайте E.

См. Также
Ссылки
Внешние ссылки
Последняя правка сделана 2021-05-18 03:33:25
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте