PDA

View Full Version : چند سوال در مورد رابی



saeed_Z_F
سه شنبه 09 بهمن 1386, 17:12 عصر
سلام
من چند تا سوال در مورد رابی دارم که اگه بهم دقیق جواب دین ممنون میشم :
1- تفاوت های اصلی بین جاوا و رابی چیه مثلا میدونم که کد نویسی با رابی راحت تره ولی می خام کلی بدونم مثلا موارد کاربردشون سرعت اجراشون و...
2- متولی رابی در دنیا کیه مثلا متولی جاوا شرکت سان .
3- آیا رابی مثل جاوا یک زبان مفسری یعنی اول به یک کد میانی ترجمه میشه بعد اون کد تفسیر میشه .
4 - آیا برای اجرای برنامه های رابی بر روی سیستم عامل ها و پلتفرم های مختلف احتیاج به مفسر هست .

ممنون از راهنماییتون .

Inprise
سه شنبه 09 بهمن 1386, 19:31 عصر
تلفظ صحیحش روبی هست . یک زبان آزاد هست و نه روبی و نه Rails متولی تجاری ندارن . سرعت توسعه با روبی سریعتر هست و انعطاف بیشتری داره ولی سرعت اجراش مزیتی بر جاوا نداره یا شاید بشه گفت بهتر هم نیست . هم بصورت اسکریپت و هم بصورت زبان میانی قابل استفاده است و چند VM مختلف برای اجرای کدهای میانی روبی وجود داره . مثل بقیه زبانها برای اجرا روی سیستم عاملهای مختلف یا باید مفسر وجود داشته باشه از یا قبل برنامه اجرائی Standalone‌ تولید شده باشه . میشه از روبی خروجی جاوا هم گرفت ( Jruby ) و میشه برنامه های نوشته شده با روی رو به کمک ترجمهء JRuby روی App Server های جاوا اجرا کرد .

saeed_Z_F
سه شنبه 09 بهمن 1386, 21:28 عصر
سلام
با توضیحی که دادید روبی به دلیل syntaxراحتش سرعت توسعرو بالا میبره . آیا تا حالا با JavaFX کد نوشتید syntax شبیه به روبی داره و قراره استاندارد برنامه نویسی کلاینت ساید جاوا بشه البته بخام بهتر از لحاظ کاربردی بگم میشه مثل فلش یعنی برای تولید محتوای پویا استفاده میشه که چون برروی پلتفرم جاوا قرار داره می تونه در همه جا مورد استفاده قرار بگیره .آیا با اینکه روبی متولی نداره vm هاش بروز هست و برای سیستمهای مختلف در دسترس هست ؟
یه سوال دیگه هم دارم اینه که مثلا جاوا قدرت اصلیش توی موبایل و برنامه های سازمانیه می خواستم بدونم روبی قدرت اصلیش توی چه کاربردای است و اینکه اصلا در چه مواردی کاربرد داره .
ولی خداییش syntax فوق العاده راحتی داره .

Inprise
سه شنبه 09 بهمن 1386, 21:47 عصر
ابعاد برجسته و منحصر به فرد روبی رو نمیشه در چند خط توضیح داد . منم میخواستم که در یک فرصت خوب یه مقاله مفصل بنویسم که تا بحال پیش نیومده . بهر حال روبی زبان فوق العاده منعطف و سریعی هست ، خصوصا برای کسانی که از جاوا یا سی اومدن . روبی برای خودکار سازی وظایف روزمره و کار با بانکهای اطلاعاتی گزینه خیلی خوبی هست . کلاسها و کتابخانه های متعددی داره که تقریبا اغلب API های متداول و مورد استفاده روی سیستم عاملها رو کپسوله میکنه ( امروز چند ساختار مشابه در حدود یک گیگ مستندات آفیس رو با حدود سی خط روبی که در یک ربع نوشته شد تغییر دادم ، با توانائی های فعلی ام با هیچ زبان دیگری علیرغم تسلط نمیشد چنین کاری رو به این شکل انجام داد ) . روبی و ریلز حمایت تجاری خاصی ندارن اما جامعه فعالی دارن . مهمترین کاربرد فعلی روبی توسعه برنامه های وب هست با ریلز . اینجا برنامه وب چیزی مشابه برنامه های PHP یا دات نت نیست . اصلا نگاه روبی و ریلز به برنامه وب متفاوته . معروفترین فریم ورک روبی Rails هست . من با JavaFX کمی آشنا هستم ولی همونطور که در اون یکی تاپیک نوشتم و لابد خوندی شخصا با جاوا خداحافظی کردم و بعیده که دیگه ازش استفاده کنم . برای کاربردهای موبایل وسازمانی چیزی مشابه جاوا نیست و روبی هم در این زمینه هیچ حرفی برای گفتن نداره .

saeed_Z_F
چهارشنبه 10 بهمن 1386, 14:51 عصر
ممنون از راهنماییتون تا جایی که من با تحقیق فهمیدم سرعت اجرای برنامه های روبی از جاوا بطور تقریبا قابل توجهی کمتره .
همین الان جاوا توی برنامه های large scale (منظورم تعداد خط کد است ) مشکل داره و قراره توی JDK 6 Update N بهتر بشه حالا اگه روبی کاراییش از جاوا هم پایین تر باشه که خیلی بده .
اگه برداشتم غلطه برام توضیح بدین .
ممنون

amir222
پنج شنبه 11 بهمن 1386, 12:22 عصر
ببین دوست عزیز شما برای هر چیزی نیاز داری که یه بهایی پرداخت کنی. مثلا وقتی برنامت رو با سی می نویسی قبول میکنی که سختی و زمان درازی رو بگزرونی ولی در عوض برنامت بالاترین کارایی رو داشته باشه...
برای روبی همین وضع به همین شکله. همونطور که قابلیت های اضافه شده به ++C باعث شد کدهاش تا حدودی کند تر از سی اجرا بشه, قابلیت های روبی هم نسبت به زبان های دیگه مستلزم پرداخت بهایی هست. و این بها هم کم شده سرعته! کسی که چنین زبان هایی رو انتخاب میکنه یعنی راحتی, کیفیت, و سرعت توسعه رو به جای سرعت اجرای برنامه انتخاب کرده. هر چند که در روبی می تونید قسمتی از کدهاتون رو در C پیاده سازی کنید تا سرعت اجراتون سریعتر از معادل همون برنامه در جاوا بشه!

aros.kabir
یک شنبه 14 بهمن 1386, 20:09 عصر
روبی


روبی (به انگلیسی: Ruby ) یک زبان برنامه نویسی انعطافپذیر ،پویا و شی گرا است. روبی سینتکس پرل و شی گرایی اسمال‌تاک را ترکیب میکند و در برخی امکانات با پایتون و لیسپ و Dylan و CLU مشترک است. روبی یک زبان مفسر single-pass است. پیاده سازی اصلی آن یک نرم افزار آزاد منتشر شده تحت
یک مجوز بازمتن است.

تاریخچه
این زبان توسط یوکیهیرو ماتز ماتسوموتو ایجاد شد که کار بر روی روبی را در 24 فوریه سال 1994 آغاز کرد و در سال 1995 آنرا
بصورت عمومی منتشر کرد. روبی نام جواهر منتسب به ماه جولای است که ماه تاسیس یک کالج است. در اکتبر 2006 آخرین نسخه پایدار 1.8.5 است. روبی نسخه 1.9 (با یکسری تغییرات اساسی) نیز در حال توسعه است. در حال حاضر موج بحرانی در جامعه روبی بوجود آمده که دلیل آن وجود چند مشکل در پیاده سازی فعلی روبی است که راه حل مشخصی برای آنها مدنظر نیست. تیم اصلی توسعه روبی تلاشهای خود را بر روی پروژه YARV متمرکز کرده اند، اما پیشرفت آن کند است. در این اثنا چند پیاده سازی رقیب از روبی بوجود آمده اند، بخصوص جی روبی (به انگلیسی JRuby) که یک تلاش برای اتصال روبی به پلتفرم جاوا است و رابینیوس (به انگلیسی Rabinius) که یک مفسر است که بعنوان یک زیر پروژه توسط ایوان فونیکس (Evan Phoenix) ایجاد شده توجه زیادی را در هفته های اخیر به خود جلب کرده است. با عرضه نسخه 2.0 روبی و YARV در آینده باید دید که چه سرنوشت در انتظار روبی است.


فلسفه

ایده اصلی ماتز در طراحی روبی خوشنود کردن برنامه نویسان با کمتر کردن کارهای تکراری بود که آنها بایستی انجام میدادند، همراه با پیروی از اصول طراحی خوب رابط کاربر. او تاکید داشت که طراحی سیستمها بایستی بر نیازهای انسانها تاکید داشته باشند، نه نیازهای کامپیوتر.



""معمولا افراد و بخصوص مهندسان کامپیوتر بر روی ماشینها تمرکز میکنند. آنها چنین فکر میکنند “با انجام اینکار ماشین سریعتر عمل خواهد کرد. با انجام اینکار ماشین موثرتر عمل خواهد کرد. با انجام اینکار ماشین غیره و غیره و غیره” آنها بر روی ماشین تمرکز میکنند. اما در اصل ما باید بر روی انسانها تمرکز کنیم، بر روی اینکه انسانها ترجیح میدهند چطور برنامه نویسی کنند یا اینکه انسانها ترجیح میدهند چگونه ماشینها را مدیریت کنند. ما ارباب هستیم. ماشینها غلامند.""


گفته میشود روبی از اصل کمتر غافلگیر کردن (POLS) پیروی میکند، به این معنی که زبان اصولا قابل پیش بینی رفتار میکند و مانند همان چیزی که برنامه نویس انتظارش را دارد. جمله قبل از ماتز سرچشمه نگرفته است، و روبی بیشتر از الگویی پیروی میکند که عبارت “اصل عدم غافلگیری ماتز” میتواند آنرا بهتر بیان کند، و برنامه نویسان زیادی آنرا بسیار نزدیک به طرز تفکر خود یافتند.



""هرکس پیشینه خود را دارد. ممکن است یکنفر از پایتون آمده باشد، دیگری ممکن است از پرل آمده باشد، و ممکن است آنها با دیدن ابعاد مختلف زبان غافلگیر شوند. بعد آنها پیش من میایند و میگویند “من با دیدن این امکان زبان بسیار غافلگیر شدم، بنابراین روبی اصل عدم غافلگیری را نقض میکند.” صبر کنید. اصل عدم غافلگیری تنها برای شما
نیست. اصل عدم غافلگیری بمعنی کمتر کردن غافلگیری من است. و این بمعنی کمتر کردن غافلگیری شما بهد از اینکه روبی را بطور کامل یاد گرفتید. برای مثال من یک برنامه نویس سی پلاس پلاس بودم قبل از ایننکه روبی را طراحی کنم. من بطور اختصاصی دو یا سه سال با سی پلاس پلاس برنامه نویسی کردم و بعد از دو سال برنامه نویسی سی پلاس پلاس
آن همچنان من را غافلگیر میکرد.""

aros.kabir
یک شنبه 14 بهمن 1386, 20:10 عصر
معنی شناسی



روبی شی گرا است: هر بیت از داده یک شی است، حتی کلاسها و typeها که در بسیاری از زبانها بعنوان داده اصلی در نظر گرفته شده اند (مانندboolean، integer و “nil”). هر تابع یک متد ست. مقادیر نامگذاری شده (متغیرها) بهنوان یک ارجاع (reference) به اشیا در نظر گرفته میشوند، نه خود اشیا. روبی از ارث بری با مقدار دهی پویا (dynamic dispatch)، میکسین (mixin) و singleton methods (مربوط به و تعریف شده برای یک نمونه شی منحصر بفرد بجای تعریف شدن در داخل کلاس) پشتیبانی میکند. با این وجود روبی از ارث بری چندگانه پشتیبانی نمیکند، کلاسها میتوانند ماژولها را بعنوان
mixinها وارد کنند. برنامه نویسی رویه ای (procedural) پشتیبانی میشود ولی هر چیزی که بصورت رویه ای در روبی (که خارج از محدوده یک شی خاص است) انجام شود در واقع در داخل یک نمنه شی بنام main انجام میگیرد. از آنجایی که این کلاس والد تمام کلاسهای دیگر است، تغییرات آن در تمام کلاسها قابل مشاهده است. روبی بعنوان یک زبان برنامه
نویسی چند الگویی مطرح است: روبی به شما اجازه میدهد تا رویه ای برنامه نویسی کنید (تعریف توابع/متغیرها خارج از کلاسها آنها را جزئی از شی ریشه 'self' قرار میدهد)، یا شی گرا (هر چیزی یک شی است) برنامه نویسی کنید، یا تابعی رفتار کنید. روبی از introspection و reflection و meta-programing و همچنین از نخها (threads) پشتیبانی
بعمل میاورد. روبی دارای امکان dynamic typing است و از parametric polymorphism پشتیبانی بعمل میاورد. بر طبق لیست سئوالات متداول روبی “اگر شما پرل را دوست دارید، روبی را دوست خواهید داشت و با سینتکس آن خود را در خانه خود حس خواهید کرد. اگر شما اسمال تاک را دوست دارید، روبی را دوست خواهید داشت و با روال روبی خود را
در خانه حس خواهید کرد. اگر شما پایتون را دوست دارید، شما ممکن است از اختلافات عظیم موجود مابین فلسفه طراحی روبی و پایتون بهانه گیری کنید و البته ممکن است اینطور نباشد.”

امکانات



- شی گرائی

- چهار سطح از حوزه دید متغیر شامل: global, class ,instance ,local

- exception handling

- پشتیبانی از iterators و closures (بر اساس تبادل بلوکهای کد)

- پشتیبانی محلی از regular expressions (شبیه پرل) در سطح زبان

- operator overloading

- جاروب اتوماتیک زباله از حافظه (automatic garbage collecting)

- قابلیت حمل بالا

- پشتیبانی شراکتی از multi-threading در تمام پلتفرمهای با استفاده از green threads

- کتابخانه های اشتراکی/DLL در اکثر پلتفرمها

- introspection, reflection و meta-programming

- کتابخانه استاندارد بزرگ

- پشتیبانی از dependency injection

- continuations و generators



در حال حاضر روبی فاقد پشتیبانی کامل از یونیکد است ولی UTF-8 بطور نسبی پشتیبانی میشود.

تعامل



توزیع استاندارد روبی دارای یک مفسر تعاملی خط فرمان بنام irb است که میتواند برای آزمایش سریع کد بکار رود. یک نشست با این برنامه تعاملی بصورت زیر است:








$ irb

irb(main):001:0> puts "Hello, World"

Hello, World

=> nil

irb(main):002:0> 1+2

=> 3



همچنین وجود ماژول readline به کاربر
امکان استفاده از shell های مختلف را با پشتیبانی از تاریخچه تغییرات میدهد.









Readline.readline('', true) #
param true means ~ "enable history"

aros.kabir
یک شنبه 14 بهمن 1386, 20:14 عصر
سینتکس



سینتکس روبی بسیار شبیه سینتکس پرل و پایتون است. اعلان کلاسها و متدها توسط کلمات کلیدی انجام میشود. در مقایسه با پرل متغیرها الزاما با یک علامت خاص شروع نمیشوند. (وقتی از چنین علائمی استفاده شود علامت حوزه دید متغیر را تغییر میدهد.) بارزترین تفاوت روبی از سی و پرل آنست که کلمات کلیدی (بجای براکت) برای تعریف بلوکهای کد
استفاده میشوند. سطر جدید بعنوان پایان یک جمله بکار برده میشود در عین حال که برای اینکار میتوان از یک سمی کالون (;) نیز استفاده کرد. تورفتگیها معنی خاصی ندارند (برعکس پایتون). نمونه هایی از سینتکس روبی را میتوانید در بخش مثالها ببینید.





چیزهای غافلگیر کننده



با وجود اینکه طراحی روبی بر اصل عدم غافلگیری استوار است ، بطور طبیعی برخی امکانات آن از زبانهایی مانند سی و پرل متفاوت است:


- نامهایی که با حرف بزرگ شروع میشوند به عنوان ثابت (constant) در نظر گرفته میشوند، بنابراین متغیرهای محلی بایستی با حروف کوچک آغاز شوند.

- به منظور وضوح مقادیر اعشاری (float) ، بایستی با یک صفر بعد از نقطه مشخص شوند (99.0) یا اینکه از یک تبدیل صریح (99.to_f) استفاده شود. تنها اضافه کردن یک نقطه بعد از عدد (.99) کافی نیست زیرا در این حالت اعداد مستعد پذیرش بعنوان یک متد هستند.

- مقادیر بولین اطلاعات غیر بولین سخت گیرانه هستند: 0 ، “” و [] برابر با true هستند. در سی عبارت 0 : 1 ? 0 برابر با صفر (همان false) است در حالیکه در روبی نتیجه آن 1 است زیرا تمام اعداد برابر true هستند و فقط nil و false برابر false
هستند. یک نتیجه فرعی از این عمل آنست که در روبی متدها بر طبق قرارداد -- برای مثال یک جستجوی regular-expression – در صورت موفقیت اعداد، رشته ها، لیستها یا سایر مقادیر غیر false را بر میگردانند، و در صورت شکست nil برمیگردانند. این قرارداد در اسمال‌تاک هم بکار میرود که تنها اشیا مخصوص true و false میتوانند در
عبارات بولین استفاده شوند.

- در نسخه های ماقبل از 1.9 عدم وجود نوع داده کاراکتر (در مقایسه با سی که نوع داده char را برای کاراکترها داراست) ممکن غافلگیر کننده باشد. در هنگام بریدن رشته ها [0]“abc” مقدار 97 را برمیگرداند (یک integer که شماره کد اسکی اولین حرف رشته است.)، برای بدست آوردن “a” باید از [0,1]“abc” (یک زیر رشته بطول 1) یا
"abc"[0].chr استفاده کرد.



در ضمن برخی مسائل در مورد خود زبان برجسته است:



- در مورد سرعت، عملکرد روبی در قیاس با بسیاری از زبانهای کامپایل شده پایین تر است (همانند هر زبان تفسیر شده دیگر) و همچنین در قیاس با زبانهای اسکریپت نویسی اصلی مانند پرل و پایتون همین حالت وجود دارد. هرچند که در نسخه های آینده روبی بصورت بایت کد (bytecode) کامپایل خواهد شد و بر روی YARV (خلاصه Yet Another Ruby
VM) اجرا خواهد شد. در حال حاضر حافظه بکار رفته در برنامه های نوشته شده در روبی کمتر از حافظه بکار رفته در همان برنامه ها که با پرل و پایتون نوشته شده اند، است.

- حذف پارانتزهای متدها در روبی ممکن است به نتایج غیر منتظره ای در متدهایی با چند آرگومان منتج شود. توجه کنید که توسعه دهندگان روبی اشاره کرده اند که حذف پارانتزها در متدهایی با چند آرگومان در آینده ممنوع خواهد شد. در هر صورت حذف پارانتزها در متدهای تک آرگومان توصیه میشود.



مثالها



مثال کلاسیک Hello world:







puts "Hello World!"



مقداری کد اساسی روبی:









# Everything, including a literal, is an
object, so this works:

-199.abs # 199

"ruby is cool".length # 12

"Rick".index("c") # 2

"Nice Day Isn't It?".split(//).uniq.sort.join # " '?DINaceinsty"



Collections



ایجاد و استفاده از یک آرایه:







a = [1, 'hi', 3.14, 1, 2, [4, 5]]



a[2] # 3.14

a.reverse # [[4, 5], 2, 1, 3.14, 'hi', 1]

a.flatten.uniq # [1, 'hi', 3.14, 2, 4, 5]



ایجاد و استفاده از یک هش:







hash = {:water => 'wet', :fire => 'hot'}

puts hash[:fire] # Prints: hot



hash.each_pair do |key, value| # Or: hash.each do |key, value|

puts "#{key} is #{value}"

end



# Prints: water is wet

# fire is hot



hash.delete_if {|key, value| key == :water} # Deletes :water => 'wet'



Blocks and
iterators



هر دو سینتکس برای ایجاد یک بلوک کد:







{ puts "Hello, World!" }



do puts "Hello, World!" end



ارسال پارامتر به یک بلاک تا یک
closure شود:







# In an object instance variable, remember a
block.

def remember(&b)

@block = b

end



# Invoke the above method, giving it a block that takes a name.

remember {|name| puts "Hello, #{name}!"}



# When the time is right (for the object) -- call the closure!

@block.call("John")

# Prints "Hello, John!"





بازگشت closure از یک متد:







def foo(initial_value=0)

var = initial_value

return Proc.new {|x| var = x}, Proc.new { var }

end



setter, getter = foo

setter.call(21)

getter.call # => 21



دادن جریان کنترل یک برنامه به یک بلوک
که در هنگام فراخوانی ایجاد شده:






def a

yield "hello"

end



# Invoke the above method, passing it a block.

a {|s| puts s} # Prints: 'hello'








# Perhaps the following needs cleaning up.



# Breadth-first search

def bfs(e) # 'e' should be a block.

q = [] # Make an array.

e.mark # 'mark' is a user-defined method. (??)

yield e # Yield to the block.

q.push e # Add the block to the array.

while not q.empty? # This could be made much more Ruby-like.

u = q.shift

u.edge_iterator do |v|

if not v.marked? # 'marked?' is a user-defined method.

v.mark

yield v

q.push v

end

end

end

end

bfs(e) {|v| puts v}



ایجاد حلقه بر روی آرایه ها و
enumoration ها با استفاده از بلوکها:







a = [1, 'hi', 3.14]

a.each {|item| puts item} # Prints each element

(3..6).each {|num| puts num} # Prints the numbers 3 through 6

[1,3,5].inject(0) {|sum, element| sum + element} # Prints 9 (you can pass
both a parameter and a block)



بلوکها با بسیاری از متدهای داخلی روبی
کار میکنند:







File.open('file.txt', 'w+b') do |file|

file.puts 'Wrote some text.'

end # File is automatically closed here



یا:







File.readlines('file.txt').each do |line|

# Process each line, here.

end



استفاده از یک enumoration و یک بلوک
برای جذر گرفتن اعداد 1 تا 10:






(1..10).collect {|x| x*x} => [1, 4, 9, 16, 25,
36, 49, 64, 81, 100]

aros.kabir
یک شنبه 14 بهمن 1386, 20:21 عصر
کلاسها



کد زیر یک کلاس بنام Person را تعریف میکند.







class Person

def initialize(name, age)

@name, @age = name, age

end



def <=>(person)

@age <=> person.age

end



def to_s

"#{@name} (#{@age})"

end



attr_reader :name, :age

end



group = [ Person.new("John", 20),

Person.new("Markus", 63),

Person.new("Ash", 16)

]



puts group.sort.reverse



کد بالا سه نام را بر حسب سن از زیاد
به کم چاپ میکند:







Markus (63)

John (20)

Ash (16)



استثناها



یک استثنا (exception) توسط اعلان raise ایجاد میشود:







raise



یک پیام اختیاری میتواند به استثنا
اضافه شود:







raise "This is a message"



شما همچنین میتوانید تعیین کنید که چه
نوعی از استثنا را میخواهید ایجاد کنید:







raise ArgumentError, "Illegal arguments!"



استثناها توسط rescue کنترل میشوند.
این عنوان میتواند استثناهایی را که از StandardError مشتق میشوند بگیرد:







begin

# Do something

rescue

# Handle exception

end



توجه داشته باشید که تلاش برای گرفتن تمام استثناها توسط یک rescue یک اشتباه معمول است و برای گرفتن تمام استثناها باید بصورت زیر عمل کرد:







begin

# Do something

rescue Exception

# Handle exception

end



یا یک استثنای بخصوص:







begin

# ...

rescue RuntimeError

# handling

end



و نهایتا امکان آن وجود دارد که تعیین
کرد شی استثنا برای عنوان کنترل کننده مهیا شود:







begin

# ...

rescue RuntimeError => e

# handling, possibly involving e

end



همچنین آخرین استثنا در یک متغیر جهانی بصورت !$ ذخیره میشود.



پیاده سازیها

روبی دو پیاده سازی اصلی دارید: مفسر رسمی روبی که بیشتر مورد استفاده قرار میگیرد، و JRuby که یک پیاده سازی بر اساس جاوا است.



سیستم عاملها



روبی برای سیستم عاملهای زیر ارائه میشود:



- بیشتر انواع یونیکس

- لینوکس

- داس (رایانه)

- ویندوز مایکروسافت Vista/2003/2000/NT/XP/98/95

- مکینتاش OSX

- BeOS

- Amiga

- MorphOS

- Acron RISC OS

- OS/2

- Syllable



پیاده سازیهای دیگر نیز ممکن است وجود داشته باشد.

اجازه نامه



مفسر روبی و کتابخانه های آن تحت مجوز دوگانه آزاد و باز متن GPL و اجازه نامه روبی منتشر شده است.



منابع و کتابخانه ها



آرشیو برنامه
های روبی (http://raa.ruby-lang.org/) (RAA) و همچنین
RubyForge (http://rubyforge.org/)
منابعی برای انواع مختلف برنامه ها و کتابخانه های نوشته شده با روبی هستند که حاوی بیش از دو هزار آیتم هستند. با اینکه تعداد برنامه های موجود قابل قیاس با تعداد برنامه های موجود در پرل و پایتون نیست، ولی طیف وسیعی از ابزارهای مختلف برای توسعه سریع روبی موجود است.
RubyGems (http://rubygems.org/) برنامه
استاندارد مدیریت بسته ها برای کتابخانه های روبی است و بسیار شبیه بهCPAN (http://www.cpan.org/) در پرل است، همچنین نحوه استفاده از آن بیشتر شبیه ابزار apt-get در لینوکس دبیان است.

پانوشتها


-The Ruby Programming Language by Yukihiro Matsumoto on 2000-06-12 (informit.com) (http://www.informit.com/articles/article.asp?p=18225)

-
The Philosophy of Ruby, A Conversation with Yukihiro Matsumoto, Part I by Bill
Venners on 2003-09-29 (Artima Developer) (http://www.artima.com/intv/ruby4.html)

-
How Does Ruby Compare With Python (rubygarden.org) (http://www.rubygarden.org/faq/entry/show/14)

- The
Computer Language Shootout Benchmarks (http://shootout.alioth.debian.org/)

-
Ruby License (ruby-lang.org) (http://www.ruby-lang.org/en/LICENSE.txt)




پیوند به بیرون


-
Wikibooks has a book on the topic of Ruby Programming (http://en.wikibooks.org/wiki/Ruby_Programming/)

- Ruby language home page (http://www.ruby-lang.org/en/)

-
Ruby programming language (http://dmoz.org/Computers/Programming/Languages/Ruby/) at the Open Directory Project

-
comp.lang.ruby Usenet group (http://groups.google.com/group/comp.lang.ruby)

- Try Ruby for
yourself in your web browser (http://tryruby.hobix.com/)






منبع




ویکی پدیای انگلیسی (http://en.wikipedia.org/wiki/Ruby_%28programming_language%29)


با تشکر از همه دوستان
(http://en.wikipedia.org/wiki/Ruby_%28programming_language%29)