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

E объектно-ориентированный язык программирования для надежных распределенных вычислений , разработанный , , Дугласом Крокфордом , и другими участниками сообщества Electric Communities в 1997.

E в основном произошел от параллельного языка Joule и от Original-E, набора расширений Java для безопасного распределенного программирования. Язык сочетает вычисления на основе сообщений с синтаксисом, подобным Java. Модель параллелизма , основанная на циклах событий и , гарантирует, что никогда не возникнет.

Философия

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

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

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

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

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

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

 println("Привет, мир!")

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

 def факториал(n   
       
      
         
        
   . else {
     throw("недопустимый аргумент факториала: "+n)
   }
 }

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

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

 деф makeMint(имя) :любой {
   деф [уплотнитель, unsealer выступает] := makeBrandPair(имя)
   деф мяты {
     к makePurse(ВАР баланс :(инт >= 0)) :любой {
       деф ОВЦС(сумму :(0..баланса)) :пустота {
         баланса -= сумму
       }
       деф кошелек {
         для метода getbalance() :инт { вернуть баланс }
         в Росток() :любой { возвращение мяты.makePurse(0) }
         в getDecr() :любой { возвращение уплотнитель.уплотнение(ОВЦС) }
         на депозит(сумму :инт, ГРЦ) :пустота {
           unsealer выступает.распечатать(ГРЦ.getDecr())(сумма)
           баланс += сумма
         }
       }
       возвращение кошелька
     }
   }
   вернуть мяты
 }

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

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

См. также

Примечания

  1. Handy, Alex (амер. англ.) . SD Times (14 ноября 2016). Дата обращения: 16 января 2024. 16 января 2024 года.
  2. Питер Сейбел. . — апр. 2011. — С. . — 544 с. — ISBN 9785932861882 .
  3. Peter Seibel. . — Apress, 2009-12-21. — 619 с. — ISBN 978-1-4302-1949-1 . 16 января 2024 года.
  4. . www.erights.org . Дата обращения: 16 января 2024. 18 января 2024 года.
  5. . erights.org . Дата обращения: 16 января 2024. 24 июля 2014 года.

Ссылки

  • / LinuxFormat №93
Источник —

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