Bloom یک زبان برنامهنویسی است که قابلیت آنالیز کد بدون استفاده از سینتکسهای پیچیده و مبهم را دارا است و به منظور حذف ناسازگاریها بین پلتفرمهای اصطلاحاً Distributed (توزیعشده) و زبانهای برنامهنویسی که به صورت ترتیبی اجرا میشوند، طراحی شده است.
برنامهنویسی و اجرای کدها بدون رعایت ترتیب
زبانهایی مانند Java و C بر اساس مدل Von Neumann طراحی شدهاند. در این مدل، برنامهها طبق دستورالعمل شخصی دولوپر و با ترتیب خاصی اجرا میشوند؛ اما سیستمهای توزیعشده اینگونه کار نمیکنند و بیشترین ایراد در برنامهنویسیهای توزیعشده سنتی نیز یکسری ناسازگاریها و ناهماهنگیهای مختلف است (به طور مثال، از برنامهنویسان انتظار میرود تا پلی بین یک مدل برنامهنویسی که معمولاً به شیوۀ ترتیبی نوشته شده و اجرا میشود اما در واقعیت نیاز به اجرا به شیوۀ غیرترتیبی و توزیعشده دارد، ایجاد کنند.)
بلوم با هدف مطابقت و بهرهبرداری از واقعیت اجرای برنامهها به شیوۀ بدون ترتیب در سیستمهای توزیعشده طراحی شده است؛ به عبارت دیگر، برنامهنویسان بلوم برنامههایی را توسعه میدهند که در آن مجموعهای از دستورهای بدون ترتیب استفاده شده است و یکسری ساختارها تعریف میشود تا در صورت نیاز، ترتیب یا نظم خاصی را برای اجرای دستورالعملها بر برنامه اعمال کنند.
رویکرد مجتمع این زبان
این مدل برنامهنویسی، ترکیبی از چند نمونه قابلیتهای مدلهای برنامهنویسی موازی مانند MapReduce ،SQL و ذخیرهسازی دادهها به صورت Key/Value را دارا است. ساختار دادهها در بلوم ترکیبی از مجموعۀ ساختارهای متفاوت هستند و نَه متغیرهای اسکالر و استراکچرهای تودرتو مانند لیستها و صفها. در واقع، این ساختارهای داده منعکسکنندۀ واقعیت ترتیب غیرقطعی در سیستمهای توزیعشده هستند.
همچنین بلوم سینتکسی ساده و آشنا برای برنامهنویسان به منظور کار با این ساختارهای داده را فراهم کرده است. در Bud، که یک DSL بر اساس زبان Bloom است، بسیاری از این سینتکسها مستقیماً از زبان روبی گرفته شدهاند؛ همچنین برخی ویژگیهای مدل برنامهنویسی MapReduce و زبان برنامهنویسی SQL نیز در آن به کار گرفته شده است. به عنوان نمونه سورسکد نوشته شده با این زبان داریم:
require 'rubygems'
require 'bud'
class HelloWorld
include Bud
bloom do
stdio <~ [["hello world!"]]
end
end
HelloWorld.new.tick
سازگاری بر اساس قانون CALM
در کامپایلر بلوم، به منظور درک صحیح سازگاریها و هماهنگیهای لازم در کدهای توزیعشده، از تکنیکهای قدرتمند آنالیز کد بر اساس اصل CALM استفاده میشود. CALM مخفف عبارت Consistency As Logical Monotonicity و به معنای «سازگاری و هماهنگی کدها به مانند وجود یکپارچگی منطقی بین آنها» است. یکی از نوآوریهای کلیدی زبان برنامهنویسی Bloom، توانایی تضمین ویژگیهای سازگاری برنامههای توزیعشده بر اساس اصل CALM است (همچنین Bud شامل ابزار آنالیز برنامه است و در برنامۀ دولوپر خطوطی از کد را مشخص میکند که با نظم خاصی اجرا خواهند شد.)
کد مختصر و آشنا برای برنامهنویسان
Bloom یک زبان برنامهنویسی سطح بالا است و به این منظور طراحی شده تا اطمینان حاصل شود که برای سیستمهای توزیعشده واقعی میتوان کد توزیعشده نوشت. در نتیجه، برنامههای بلوم بسیار کوچکتر از برنامههای معادل در زبانهای سنتیتر به اصطلاح Imperative هستند.