زبان برنامه‌نویسی ای: تفاوت میان نسخه‌ها

از ویکی‌پدیا، دانشنامهٔ آزاد
محتوای حذف‌شده محتوای افزوده‌شده
CSFp2000j (بحث | مشارکت‌ها)
ایجاد شده به‌واسطهٔ ترجمهٔ صفحهٔ «E (programming language)»
(بدون تفاوت)

نسخهٔ ‏۱۵ دسامبر ۲۰۲۱، ساعت ۱۳:۲۳


E یک زبان برنامه نویسی شی گرا برای محاسبات توزیع شده ایمن است که توسط Mark S. Miller ، [۱] Dan Bornstein ، Douglas Crockford ، [۲] Chip Morningstar [۳] و نیز عده ای دیگر در Electric Communities در سال 1997 ایجاد شد. E عمدتاً از زبان همزمان Joule و از Original-E، مجموعه‌ای از برنامه‌های افزودنی به جاوا برای برنامه‌نویسی توزیع‌شده ایمن گرفته شده است. E محاسبات مبتنی بر پیام را با نحو شبیه به جاوا ترکیب می کند. یک مدل همزمانی مبتنی بر حلقه‌های رویداد و وعده‌ها تضمین می‌کند که بن بست هرگز نمی‌تواند رخ دهد. [۴]

فلسفه

زبان E با در نظر گرفتن محاسبات ایمن طراحی شده است. این امر عمدتاً با پایبندی دقیق به مدل محاسبات شی گرا انجام می شود، که در شکل اصلی خود دارای ویژگی هایی است که از محاسبات ایمن پشتیبانی می کند. زبان E و کتابخانه استاندارد آن از یک فلسفه طراحی مبتنی بر قابلیت استفاده می‌کنند تا به برنامه‌نویسان کمک کنند تا نرم‌افزاری امن بسازند و اجزای نرم‌افزار را قادر می‌سازند تا باهم همکاری کنند، حتی اگر به طور کامل از یکدیگر پشتیبانی نمی کنند.

در E، ارجاعات شی به عنوان قابلیت عمل می کنند، از این رو قابلیت ها هیچ هزینه سربار محاسباتی یا مفهومی اضافه نمی کنند. نحو زبان به گونه ای طراحی شده است که افراد بتوانند به راحتی نقایص امنیتی را بررسی کنند. به عنوان مثال، دامنه واژگانی مقدار کدی را که باید برای تأثیرات آن بر روی یک متغیر معین بررسی شود، محدود می کند. به عنوان مثال دیگر، زبان از عملگر == برای مقایسه و عملگر := برای انتساب استفاده می کند. برای جلوگیری از احتمال سردرگمی، هیچ = عملگر وجود ندارد.

مدل محاسباتی

در E، تمام مقادیر، شی هستند و محاسبات با ارسال پیام به اشیا انجام می شود. هر شی متعلق به یک vat (مشابه یک فرآیند ) است. هر vat دارای یک رشته اجرا، یک قاب پشته و یک صف رویداد است. برنامه نویسی توزیع شده فقط ارسال پیام به اشیاء راه دور (اشیاء موجود در مخازن دیگر) است. تمام ارتباطات با قسمتهای از راه دور توسط زمان اجرا E رمزگذاری می شود. پیام های رسیده در صف رویداد vat قرار می گیرند. حلقه رویداد vat پیام های دریافتی را یک به یک،و بنا به ترتیب دریافت آنها، پردازش می کند.

درE دو راه برای ارسال پیام وجود دارد: تماس فوری و ارسال نهایی . تماس فوری درست مانند فراخوانی تابع یا روش معمولی در یک زبان غیر همزمان است: فرستنده منتظر می ماند تا گیرنده تمام شود و مقداری را برگرداند. ارسال نهایی پیام را می فرستد در حالی که یک مکان نگهدار برای نتیجه به نام وعده تولید می کند . فرستنده بلافاصله با وعده ادامه می دهد. بعداً وقتی گیرنده تمام می‌شود و نتیجه می‌دهد، قول به نتیجه می‌رسد. از آنجایی که فقط ارسال‌های نهایی هنگام برقراری ارتباط با اشیاء راه دور مجاز است، بن بست نمی‌تواند اتفاق بیفتد. در سیستم های توزیع شده، مکانیسم وعده تاخیرهای ناشی از تاخیر شبکه را نیز به حداقل می رساند.

نحو و مثال هایی از آن

زبان E از نظر نحو،بیشتر شبیه به زبان جاوا می باشد، اگرچه شباهت هایی به پایتون و پاسکال نیز دارد . متغیرها از نظر نوع، پویا هستند و از نظر لغوی،دارایدامنه می باشند. برخلاف جاوا یا پایتون، 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("invalid argument to 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 {
     balance -= amount
    }
    def purse {
     to getBalance() :int { return balance }
     to sprout() :any { return mint.makePurse(0) }
     to getDecr() :any { return sealer.seal(decr) }
     to deposit(amount :int, src) :void {
      unsealer.unseal(src.getDecr())(amount)
      balance += amount
     }
    }
    return purse
   }
  }
  return mint
 }

اشیاء در E با کلمه کلیدی def تعریف می شوند و در تعریف شی،کلمه کلیدی to شروع هر متد است. عبارات محافظ در این مثال نحوه تعیین یک محدودیت مقدار را نشان می دهد (مانند :(int >= 0) یا :(0..balance) ).

نمونه ضرابخانه، از یک مکانیزم داخلی به نام سیلر استفاده می کند . تابع makeBrandPair دو شیء مرتبط ایجاد می کند، یک sealer و یک unsealer، به طوری که sealer می تواند یک شی را در یک جعبه مهر و موم کند و unsealer تنها شی ای است که می تواند محتویات جعبه را بازیابی کند. برای توضیح دقیق تر این مثال پول به وب سایت E مراجعه کنید. [۵]

همچنین ببینید

  • مدل قابلیت شی

منابع

  1. Handy, Alex (14 November 2016). "The future of software security". SD Times.
  2. Seibel, Peter (21 December 2009). "Coders at Work: Reflections on the Craft of Programming". Apress. pp. 95–96.
  3. "E's History". www.erights.org.
  4. Miller, Mark S.; Tribble, E. Dean; Shapiro, Jonathan (2005). "Concurrency Among Strangers" (PDF). Trustworthy Global Computing. Lecture Notes in Computer Science. 3705: 195–229. doi:10.1007/11580850_12. ISBN 978-3-540-30007-6.
  5. Rees, Jonathan; Miller, Mark (2001). "From Objects To Capabilities - Simple Money". erights.org. ERights. Retrieved 8 July 2014. Before presenting the following simple example of capability-based money, we must attempt to head off a confusion this example repeatedly causes. We are not proposing to actually do money this way! A desirable money system must also provide for..
  1. Handy, Alex (14 November 2016). "The future of software security". SD Times.
  2. Seibel, Peter (21 December 2009). "Coders at Work: Reflections on the Craft of Programming" (به انگلیسی). Apress. pp. 95–96.
  3. "E's History". www.erights.org.
  4. Miller, Mark S.; Tribble, E. Dean; Shapiro, Jonathan (2005). "Concurrency Among Strangers" (PDF). Trustworthy Global Computing. Lecture Notes in Computer Science. 3705: 195–229. doi:10.1007/11580850_12. ISBN 978-3-540-30007-6.
  5. Rees, Jonathan; Miller, Mark (2001). "From Objects To Capabilities - Simple Money". erights.org. ERights. Retrieved 8 July 2014. Before presenting the following simple example of capability-based money, we must attempt to head off a confusion this example repeatedly causes. We are not proposing to actually do money this way! A desirable money system must also provide for...