Jump to content

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

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

И
Парадигма Мультипарадигма : объектно-ориентированная , передача сообщений
Разработано Марк С. Миллер
Впервые появился 1997 год ; 27 лет назад ( 1997 )
Дисциплина набора текста Сильный , динамичный
ТЫ Кросс-платформенный
Лицензия Части в разных бесплатных лицензиях
Веб-сайт права .org
Основные реализации
Э-на-Java, Э-на-CL
Под влиянием
Джоуль , Оригинал-E , Java
Под влиянием
Пони

E объектно-ориентированный язык программирования для безопасных распределенных вычислений , созданный Марком С. Миллером . [1] Дэн Борнштейн , Дуглас Крокфорд , [2] Чип Морнингстар [3] и другие в Electric Communities в 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   факториал  (  n   :  int  )   :  int   {     if   (  n   ==   1  )   {       return   1     }   else   if   (  n   >   0  )   {       return   n   *   Factorial  (  n  -  1  )     }   else   {       throw  (  «недопустимый аргумент факториала:»  +  н  )     }   } 

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

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

 def   makeMint  (  имя  )   :  любой   {     def   [  sealer  ,   unsealer  ]   :=   (  имя  )  def     mint   {   to       makePurse   (  var  Balance   :(   int  >   =   0  ))   :  Any   {         def   decr  (  сумма   :(  0.  .balance  makeBrandPair  ) )   :  void   {           баланс   -=   сумма         }         Защитный   кошелек   {           для   getBalance  ()   :  int   {   вернуть   баланс   }           в   Sprout  ()   :  любой   {   return   mint  .  makePurse  (  0  )   }           для   getDecr  ()   :  Any   {   return   sealer  .  печать  (  decr  )   }           на   депозит  (  сумма   :  int  ,   src  )   :  void   {             unsealer  .  unseal  (  src  .  getDecr  ())(  сумма  )             баланс   +=   сумма           }         }         вернуть   кошелек       }     }     вернуть   монету   } 

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

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

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

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

  1. ^ Хэнди, Алекс (14 ноября 2016 г.). «Будущее безопасности программного обеспечения» . СД Таймс .
  2. ^ Сейбель, Питер (21 декабря 2009 г.). Программисты за работой: размышления о ремесле программирования . Апресс. стр. 95–96. ISBN  9781430219491 .
  3. ^ «История Э» . www.erights.org .
  4. ^ Миллер, Марк С.; Триббл, Э. Дин; Шапиро, Джонатан (2005). «Конкуренция среди незнакомцев» (PDF) . Надежные глобальные вычисления . Конспекты лекций по информатике. 3705 : 195–229. Бибкод : 2005LNCS.3705..195M . дои : 10.1007/11580850_12 . ISBN  978-3-540-30007-6 . Архивировано из оригинала (PDF) 31 марта 2022 г. Проверено 05 марта 2021 г.
  5. ^ Рис, Джонатан; Миллер, Марк (2001). «От объектов к возможностям – простые деньги» . erights.org . EПрава . Проверено 8 июля 2014 г. Прежде чем представить следующий простой пример денег, основанных на способностях, мы должны попытаться избежать путаницы, которую этот пример постоянно вызывает. Мы не предлагаем реально зарабатывать деньги таким образом! Желаемая денежная система должна также предусматривать...

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

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 93d93fa78dc3e6c696108dbb6137c052__1718506260
URL1:https://arc.ask3.ru/arc/aa/93/52/93d93fa78dc3e6c696108dbb6137c052.html
Заголовок, (Title) документа по адресу, URL1:
E (programming language) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)