Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

E представляет собой объектно-ориентированное программирование язык для безопасного распределенных вычислительных , созданный Марк С. Миллер , [1] Дэн Борнстейн , Дуглас Крокфорд , [2] Chip Morningstar [3] и другие в электрических сообществ в 1997 году E в основном происходит от параллельный язык Joule и от Original-E набор расширений Java для безопасного распределенного программирования. E сочетает вычисления на основе сообщений с синтаксисом, подобным Java . Модель параллелизма, основанная на циклах событий и обещанияхгарантирует, что тупик не может возникнуть. [4]

Философия [ править ]

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

Вычислительная модель [ править ]

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

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

Синтаксис и примеры [ править ]

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

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

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

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

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

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

 Защиту  makeMint ( имя )  : любая  {  Защиты  [ Герметик ,  открыватели ]  : =  makeBrandPair ( имя )  Защита  мятного  {  к  makePurse ( вар  баланс  :( ИНТ  > =  0 ))  : любая  {  Защиты  ОВЦСА ( сумма  :( 0 . баланс ) )  : void  {  balance  - =  amount  }  def  кошелек {  to  getBalance ()  : int  {  вернуть  баланс  }  в  sprout ()  : any  {  return  mint . makePurse ( 0 )  }  в  getDecr ()  : any  {  return  sealer . seal ( decr )  }  для  депозита ( amount  : int ,  src )  : void  {  unsealer . распечатать( src . getDecr ()) ( сумма )  баланс  + =  сумма  }  }  возврат  кошелька  }  }  возврат  монет  }

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

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

См. Также [ править ]

  • Объектно-функциональная модель

Ссылки [ править ]

  1. Handy, Alex (14 ноября 2016 г.). «Будущее безопасности программного обеспечения» . SD Times .
  2. ^ Сейбел, Питер (21 декабря 2009). «Кодеры за работой: размышления о ремесле программирования» . Апресс. С. 95–96.
  3. ^ "История E" . www.erights.org .
  4. ^ Миллер, Марк S .; Триббл, Э. Дин; Шапиро, Джонатан (2005). «Параллелизм среди незнакомцев» (PDF) . Надежные глобальные вычисления . 3705 : 195–229. DOI : 10.1007 / 11580850_12 .
  5. Рис, Джонатан; Миллер, Марк (2001). «От объектов к возможностям - простые деньги» . erights.org . ERights . Проверено 8 июля 2014 . Прежде чем представить следующий простой пример денег, основанных на возможностях, мы должны попытаться предотвратить путаницу, которую этот пример неоднократно вызывает. Мы не предлагаем делать деньги таким образом! Желательная денежная система также должна обеспечивать ...

Внешние ссылки [ править ]

  • Официальный веб-сайт