زبان برنامه نویسی کریستال Crystal یک زبان برنامه نویسی جدید برای آموزش برنامه نویسی است که نحوه نگارش آن تا حد بسیار زیادی از زبان برنامه نویسی Ruby الهام گرفته شده است. این زبان برنامه نویسی در حال حاضر در نسخه آلفا خود به سر میبرد و توسعه دهندگان آن در تلاش برای توسعه هرچه بیشتر آن هستند.
یکی از چیزهایی که مد نظر توسعه دهندگان زبان برنامه نویسی کریستال بوده است، تمرکز روی راندمان توسعه دهنده، امنیت برنامه و افزایش سرعت است. این زبان کاملاً OOP یا شیئ گرا است و کدهایی که توسعه دهندگان با استفاده از زبان برنامه نویسی Crystal مینویسند به زبان ماشین (همان صفر و یک) تبدیل شده و با توجه به اینکه بسیاری از کارها در زمان کامپایل شدن صورت میگیرد (به طور کلی منظور از کامپایل شدن، تبدیل کدها به زبان قابل فهم توسط سیستم است)، سرعت برنامههای نوشته شده با این زبان بالا خواهد بود و همین سرعت بالا، زبان برنامه نویسی کریستال را به گزینه خوبی برای برنامه نویسی مبدل می سازد.
نمونه کد Hello World در زبان برنامه نویسی کریستال
puts "Hello world!"
این زبان به هیچ وجه روی یک VM یا «ماشین مجازی» اجرا نمیشود بلکه اصطلاحاً از چیزی تحت عنوان LLVM برای اجرای آن استفاده می گردد. علاوه بر این، امکانی نیز در این زبان برنامه نویسی برای توسعه دهندگان فراهم شده تا بتوانند اسکریپت های نوشته شده با زبان C را نیز با این زبان ادغام کنند و شاید یکی از دلایلی که چنین قابلیتی در زبان کریستال فراهم شده، سرعت بالای زبان برنامه نویسی سی در اجرای کدها است.
در حال حاضر، اطلاعات خیلی زیادی از این زبان در دست نیست و می بایست منتظر بمانیم و ببینیم که این زبان چند درصد از سهم بازار را میتواند به خود اختصاص دهد و آیا همانطور که زبان برنامه نویس سوئیفت توانست در کمتر از یک سال به عنوان یکی از محبوبترین زبانهای برنامه نویسی دنبا مبدل گردد، آیا چنین پتانسیلی برای زبان کریستال هم وجود خواهد داشت یا خیر.
یکی از چیزهایی که مد نظر توسعهدهندگان زبان برنامهنویسی Crystal بوده تمرکز روی راندمان دولوپر، امنیت اپلیکیشن و افزایش سرعت بوده است مضاف بر اینکه کریستال کاملاً OOP (شیئگرا) است و کدهایی که دولوپرها با استفاده از این زبان مینویسند به زبان ماشین یا همان ۰ و ۱ تبدیل شده و با توجه به اینکه بسیاری از کارها در زمان کامپایل صورت میگیرد، سرعت برنامههای نوشته شده با این زبان بالا خواهد بود و همین سطح از پرفورمنس کریستال را به گزینهٔ خوبی دولوپرهایی که دغدغهٔ سرعت دارند مبدل میسازد (به طور خلاصه، کامپایل به معنی تبدیل شدن کدها به زبان قابلفهم توسط سیستم است.) به عنوان نمونه برنامهٔ Hello World در زبان برنامهنویسی کریستال داریم:
puts "Hello world!"
این زبان به هیچ وجه روی یک VM (ماشین مجازی) اجرا نمیشود بلکه اصطلاحاً از چیزی تحت عنوان LLVM برای اجرای آن استفاده میگردد. علاوه بر این، امکانی نیز در این زبان برنامهنویسی برای دولوپرها فراهم شده تا بتوانند اسکریپتهای نوشته شده به زبان C را نیز با این زبان ادغام کنند و شاید یکی از دلایلی که چنین قابلیتی در زبان کریستال فراهم شده، سرعت بالای زبان برنامهنویسی C در اجرای کدها است.
کریستال یک زبان اصطلاحاً Statically Typed است و از همین روی جلوی بسیاری از ارورها در حین کامپایل برنامه گرفته خواهد شد (همچنین در حین کامپایل، کلیهٔ رفرنسها به مقادیر Null هم مشخص خواهند شد.) نکتهٔ دیگری که در مورد دیتاتایپهای این زبان وجود دارد این است که هرگز نیازی به مشخصسازی تایپ (نوع) دادهها در این زبان نیست چرا که این کار به صورت خودکار انجام میشود:
def shout(x) # Notice that both Int32 and String respond_to `to_s` x.to_s.upcase end foo = ENV["FOO"]? || 10 typeof(foo) # => (Int32 | String) typeof(shout(foo)) # => String
همچنین این زبان امکان کدنویسی Concurrent (همزمان) را هم به دولوپرها میدهد که این مهم از طریق قابلیتی تحت عنوان Fiber فراهم شده است.
Crystal یک زبان برنامه نویسی با اهداف زیر می باشد:
زبان برنامه نویسی Crystal دارای ویژگی های خاص خود می باشد که در ادامه به بیان چند مورد از آن ها می پردازیم:
نحو Crystal به شدت از ruby الهام گرفته شده است، بنابراین طبیعی است که خواندن و نوشتن در آن آسان باشد و یادگیری آن برای توسعه دهندگان روبی راحت تر است.
نوع Crystal به صورت ایستا چک شده، بنابراین هر نوع خطا سریعا توسط کامپایلر گرفتار و حل خواهد شد به جای اینکه در زمان اجرا با شکست مواجه شود.
Crystal از موضوعات سبز به نام الیاف (fibers) برای رسیدن به همزمان شدن استفاده می کند. الیاف با استفاده از کانال ها مانند Go یا clojure بدون نیاز به تبدیل به حافظه مشترک یا قفل، ارتباط برقرا می کنند.
Crystal دارای یک دستور العمل اختصاصی است که با استفاده از کتابخانه ها بومی می تواند به از بین بردن نیاز به اجرای مجدد وظایف سطح پایین بپردازد.