E (язык программирования)
E — объектно-ориентированный язык программирования для надежных распределенных вычислений, разработанный Марком С. Миллером[англ.][1], Дэном Борштейном[англ.], Дугласом Крокфордом[2][3], Чипом Морнингстаром[англ.][4] и другими участниками сообщества Electric Communities в 1997. E в основном произошел от параллельного языка Joule и от Original-E, набора расширений Java для безопасного распределенного программирования. Язык сочетает вычисления на основе сообщений с синтаксисом, подобным Java. Модель параллелизма, основанная на циклах событий и обещаниях[англ.], гарантирует, что взаимоблокировка[англ.] никогда не возникнет. ФилософияЯзык E разработан для компьютерной безопасности и безопасных вычислений. Это достигается, в основном, за счет строгого соблюдения объектно-ориентированной вычислительной модели, которая в чистом виде обладает свойствами, поддерживающими безопасные вычисления. Язык E и его стандартная библиотека повсеместно используют философию проектирования, основанную на возможностях, чтобы помочь программистам создавать безопасное программное обеспечение и позволить программным компонентам взаимодействовать, даже если они не полностью доверяют друг другу. В E ссылки на объекты служат возможностями, следовательно, возможности не добавляют вычислительных или концептуальных накладных расходов. Синтаксис языка разработан таким образом, чтобы людям было легко проводить аудит на наличие недостатков безопасности. Например, лексический scoping[англ.] ограничивает объём кода, который должен быть проверен на предмет его влияния на данную переменную. В качестве другого примера язык использует Вычислительная модельВ E все значения являются объектами, а вычисления выполняются путем отправки сообщений объектам. Каждый объект принадлежит vat (аналогично процессу). Каждый vat имеет единственный поток выполнения, фрейм стека и очередь событий. Распределенное программирование[англ.] — это всего лишь вопрос отправки сообщений удаленным объектам (объектам в других vat). Все коммуникации с удаленными сторонами зашифрованы средой выполнения E. Поступающие сообщения помещаются в очередь событий vat; цикл событий vat обрабатывает входящие сообщения одно за другим в порядке поступления. У E есть два способа отправки сообщений: немедленный вызов и возможная отправка. Немедленный вызов аналогичен обычному вызову функции или метода на непараллельном языке: отправитель ожидает, пока получатель завершит работу и вернет значение. Конечная отправка отправляет сообщение, создавая заполнитель для результата, называемого обещанием. Отправитель немедленно выполняет обещание. Позже, когда получатель завершает работу и выдает результат, обещание преобразуется в результат. Поскольку при общении с удаленными объектами разрешены только возможные отправки, взаимоблокировок произойти не может. В распределенных системах механизм обещаний также минимизирует задержки, вызванные задержкой в сети. Синтаксис и примерыСинтаксис E больше всего похож на Java, хотя он также имеет некоторое сходство с Python и Pascal. Переменные динамически типизируются и имеют лексическую область действия[англ.]. Однако, в отличие от Java или Python, E полностью состоит из выражений. Вот чрезвычайно простая электронная программа: println("Привет, мир!") Вот рекурсивная функция для вычисления факториала числа, записанная на E. Функции определяются с помощью def факториал(n
. else { throw("недопустимый аргумент факториала: "+n) } } В первой строке Поскольку E предназначен для поддержки безопасного сотрудничества, каноническим примером электронных программ является монетный двор, простая система электронных денег, состоящая всего из нескольких строк E. Следующий код определяет функцию, которая производит монетные дворы, где у каждого монетного двора есть своя валюта. Каждый монетный двор может создавать кошельки для хранения своей валюты, и любой владелец двух кошельков с одной и той же валютой может безопасно переводить деньги между кошельками. Быстро изучив исходный код, электронный программист может легко убедиться, что
деф makeMint(имя) :любой { деф [уплотнитель, unsealer выступает] := makeBrandPair(имя) деф мяты { к makePurse(ВАР баланс :(инт >= 0)) :любой { деф ОВЦС(сумму :(0..баланса)) :пустота { баланса -= сумму } деф кошелек { для метода getbalance() :инт { вернуть баланс } в Росток() :любой { возвращение мяты.makePurse(0) } в getDecr() :любой { возвращение уплотнитель.уплотнение(ОВЦС) } на депозит(сумму :инт, ГРЦ) :пустота { unsealer выступает.распечатать(ГРЦ.getDecr())(сумма) баланс += сумма } } возвращение кошелька } } вернуть мяты } Объекты в E определяются с помощью В примере mint используется встроенный механизм, называемый уплотнителем. Функция См. такжеПримечания
Ссылки
|
Portal di Ensiklopedia Dunia