Category: Türkçe

Date:

Crystal programlama dili, "Ruby statik tipli bir dil olsaydı nasıl olurdu?" sorusuna vereceğiniz cevap diyebiliriz. Henüz alpha aşamasında, geliştirme çok hızlı bir şekilde ilerliyor. Ruby'deki bir çok özellik bu dilde de yerini almış durumda. Eksikler de zamanla kapatılıyor. An itibariyle son sürüm 0.9.1. Dilin sözdizimi açık ve seçik. Python gibi ferah ve okunabilir kod yazılabiliyor. Ruby'i sevmemiştim ama Crystal'i sevdim diyebilirim. Bununla birlikte Python'a da benzediği için öğrenmek zor olmadı. Şu anda az sayıda özelliği var. Sade ve basit. Go'ya göre çok daha kolay. Derleyicisi yine Crystal ile yazılmış. LLVM ile optimizasyon yapılabiliyor.

Performans

Performansı çok yüksek. Günde 10 milyon talep karşılayıp sadece 185MB RAM ve %30 CPU tüketen uygulama en güzel örnek olsa gerek. Bununla birlikte Node.JS'in %38.5 CPU ve 900MB ile karşıladığı 10.000 WebSocket bağlantısını %1.85 CPU ve 11MB RAM ile karşılayan Kemal buna gösterilebilecek örneklerden.

Nasıl öğrenebilirim

Dili öğrenmeye Tutorial sayfasından başlayabilirsiniz. Henüz tüm özellikleri yansıtmıyor ama başlangıç açısından iyi. Takıldığınız, eksik gördüğünüz noktalar olursa API Belgelendirmesi çok işinize yarayacaktır. Aşkın Gedik'in geliştirdiği Örneklerle Crystal sayfası da somut örnek görme açısından güzel. Harici modüllerin kod içi belgelendirmelerine DocCrystal adresinden ulaşılabiliyor.

Harici Modüller

Geliştirilen harici modülleri ise Shards Paket Listesi üzerinden görebilirsiniz. Shards, projelerin bağımlılıklarını yöneten pip, maven, ivy, sbt gibi bir sistem. Crystal kurulumuyla birlikte geliyor. Bağımlılıklar proje içerisindeki shards.yml dosyasında belirtildikten sonra shards install diyerek tüm bağımlılıkları kurabiliyorsunuz.

Bununla birlikte C bindingi yazmak crystal_lib ile bir hayli kolaylaşmış. Önce boş bir üreteç (generator) sınıf yazıp scripti çalıştırıyorsunuz. Size bindingi sağlayan dolu bir sınıf üretiyor. Örnek: crystal-igraph. Bu sayede C ile yazılmış kütüphaneleri Crystal içinde kullanabiliyorsunuz.

Geliştirmeye nasıl başlarım

Yeni proje oluşturmak için cyrstal init app uygulama ya da crystal init lib kutuphane komutu işleri bir hayli kolaylaştırıyor. Hazır bir proje şablonunu sizin için oluşturuyor. Size dosyaları düzenlemek kalıyor. Kod içi belgelendirme ve örnekler crystal doc komutuyla yerelde HTML olarak üretilebiliyor. Eğer projeniz github üzerindeyse DocCrystal üzerinde belirtilen adrese giderek kendi projenizin belgelendirmesini üretebiliyorsunuz. Birim testler ise Spec denilen sınıf ile yapılıyor. Örnek Testler'i buradan inceleyebilirsiniz. crystal spec komutu ile testleri çalıştırabilirsiniz. crystal tool format komutu ile kodlarınızı formatlayabilirsiniz.

Nereden destek alırım

Proje Manastech firması tarafından yürütülüyor ve Apache 2.0 lisanslı. Aktif bir topluluğu var ve hata bildirimi, özellik talebi gibi işler Crystal'ın github issues sayfası üzerinden işliyor. Yardımlaşma amaçlı Issues sayfası kullanılabildiği gibi Google Grubu ve irc.freenode.org üzerindeki #crystal-lang kanalı tercih ediliyor.

Topluluk

Hem Crystal'in gelişimine, hem de modül üretimine Türklerin ciddi katkısı var. Örneğin arkadaşım Serdar Doğruyol'un geliştirdiği web çatısı (framework) olan Kemal çok sayıda yıldız alıp Shards Paket Listesi listesinin başına yükselmiş durumda. Kemal'in performans sonuçlarına baktığınızda çok iyi sonuçlar verdiğini görebiliyorsunuz. WebSocket desteği de oldukça kolay kullanılabiliyor. Fatih Kadir Akın'ın Kemal kullanarak geliştirdiği statik blog sunucusu Kamber de oldukça popüler. Bir diğer proje de Sedat G. Çiftçi ve Serdar Doğruyol'un geliştirdiği yerli (native) OSX uygulaması geliştirmeyi hedefleyen Hoop projesi.

Projelerim

Ben de hızlı bir tutorial göz gezdirmesiyle kodlamaya başladım ve ağ (çizge) analizi imkanı sağlayan IGraph için C binding (crystal-igraph) taslağı yazdım. Sonra dili daha iyi öğrenmeye imkan sağlar diye doğrudan Crystal ile bir ağ analizi modülü geliştirmeye başladım: Chizge. Chizge Graph'ın Türkçe'si olan Çizge'nin ASCII hali. Popüler olursa camiaya Yoğurt'tan sonra bir kelime daha kazandırmış olacağız. Geliştirirken NetworkX'ten esinlendim. Henüz emekleme aşamasında. Doğrudan NetworkX isimlendirmesini takip ediyorum. Zamanla eksikler kapanacaktır. Forkları beklerim.

Kurulum

Dökümantasyonda belirtilen yollardan ya da virtualenv benzeri crenv aracıyla istediğiniz Crystal sürümünü kurabilirsiniz. Dil hızla geliştiği için kodlarınız bir sonraki sürümde çalışmaz hale gelebilir. Bunu önlemek için crenv ile bir sürüm belirleyip proje bazlı o sürümde sabitlenebilirsiniz.

Nasıl katkıda bulunabilirim

0.9.1'den 1.0 sürümüne ulaşana kadar derleyici ciddi sınamalardan geçiriliyor. Çok sayıda hata düzeltmeleri yapılacak, yeni özellikler eklenecek. Bu süreçte hata bildirimleri, düzeltmeleri ve geliştirme destekleri çok makbule geçecektir.


Share: FacebookGoogle+Email


comments powered by Disqus