Crystal
Özgür Yazılım ve Linux Günleri 2016
27.03.2016
Serdar Doğruyol
Lead Developer - Protel
- Rubyist, Crystal Meraklısı
- Ruby Türkiye, Crystal Türkiye Organizatörü
- Açık kaynak geliştiricisi
- Polyglot
@sdogruyol
Nedir
Ruby kadar kolay, C kadar hızlı, verimlilik ve sadelik üzerine odaklanmış, açık kaynak kodlu derlenen bir programlama dilidir.
Ruby???
Dünyanın en güzel programlama dili :)
“İnsanlar, özellikle bilgisayar mühendisleri, makineler üzerine yoğunlaşıyor. Makineler üzerine yoğunlaşıyorlar ama aslında biz insanlara ve onların nasıl programlama yaptığına odaklanmalıyız. Çünkü insanlar efendi ve makineler onların köleleridir.”
Yukihiro Matsumoto - Matz
Tarihçe
Manastech
Ary Borenszweig @asterite
Juan Wajnerman @waj
- Ekim 2012'de geliştirilmeye başlandı.
- Güncel stabil sürüm 0.12.0
- Hala Beta aşamaşında.
Neden
- Java, C vb. yorucu
- İngilizceye yakın
- Expressive (anlamlı, ifade eden)
class OlusturmakIstemedigimAmaJavaninZorlaOlusturttuguSinif {
public static void main() {
System.out.println("Hello World");
}
}
Java
Crystal
puts "Hello World"
Hadi 1,2,3,4,5,6 sayılarından çift olanları filtreleyip yeni bir liste oluşturalım.
public static int[] filterEven(int[] array) {
int[] aggregator = new int[array.length];
int aggregatorSize = 0;
for (int i : array) {
if (i % 2 == 0) {
aggregator[aggregatorSize] = i;
aggregatorSize += 1;
}
}
return aggregator;
}
int[] array = { 1, 2, 3, 4, 5, 6 };
filterEven(array); // => { 2, 4, 6, 0, 0, 0 }
Java
Hadi 1,2,3,4,5,6 sayılarından çift olanları filtreleyip yeni bir liste oluşturalım.
array = [1, 2, 3, 4, 5, 6]
array.select &.even? # => [2, 4, 6]
Crystal
2.days.ago
# 2016-02-23 22:10:05 +0200
Kod yazıldığından çok okunur.
Özellikler
- Tamamen Nesne Yönelimli
- Ruby benzerliği
- C kadar performanslı ve az kaynak tüketen
- LLVM sayesinde native code üretimi
- Dinamik bir dil gibi tip belirtmeden değişken tanımlayabilme
- Compile-time değerlendirme ile kod oluşturma ile gereksiz kodu azaltma
Performans
Threadring
Dil | Zaman (saniye) | Kaynak (mb) |
---|---|---|
Crystal | 0.59 | 3.3 |
Go | 1.43 | 2.3 |
Erlang | 1.89 | 17.1 |
Scala | 6.42 | 1.5 |
Ruby | 41.73 | 30.0 |
https://github.com/kostya/crystal-benchmarks-game
NBody
Dil | Zaman (saniye) | Kaynak (mb) |
---|---|---|
C | 1.59 | 0.4 |
Crystal | 1.74 | 1.3 |
Ruby | 91.01 | 7.3 |
https://github.com/kostya/crystal-benchmarks-game
Binary Trees
Dil | Zaman (saniye) | Kaynak (mb) |
---|---|---|
Java | 0.59 | 282.2 |
C | 5.08 | 32.4 |
Crystal | 6.14 | 107.6 |
Ruby | 27.95 | 115.5 |
https://github.com/kostya/crystal-benchmarks-game
Concurrency
Spawn / Channel
# Create a Channel to communicate with background
channel = Channel(Bool).new
# Create a request loop in background
spawn do
loop do
response = HTTP::Client.get "http://www.example.com"
response.status_code == 200 ? channel.send true : channel.send false
end
end
- Go benzeri concurrency
- Tek bir CPU üzerinde milyonlarca Fiber oluşturulabilir.
Self Hosted
Kendisiyle kendini yazmak???
Shards
=
RubyGems
- Çok güçlü bir paket yöneticisi
- 500'den fazla paket mevcut
- Geliştiricilerin tekrar kullanılabilir kod parçalarını paylaşmalarını sağlıyor.
Kemal
http://kemalcr.com
- Süper Hızlı
- Süper kolay
- Tam teşekküllü :)
- RESTful
- WebSocket
- JSON
- Static File Serving
- Kolay ekle / çıkar middleware
- View templating
WebSocket
Dil | CPU (%) | Kaynak (mb) |
---|---|---|
Crystal (Kemal) | 1.85 | 11.2 |
Node.js (ws) | 38.95 | 906.3 |
https://gist.github.com/sdogruyol/bdd400a6eac13e26228e
30x az CPU zamanı
80x az Memory
require "kemal"
get "/" do
"Hello World!"
end
ws "/socket" do |socket|
socket.send "Hello from Kemal!"
end
Kimler kullanıyor?
Kod Zamanı!
https://play.crystal-lang.org
Topluluk
MINASWAN
みなさん
Matz is nice so we are nice
- Crystal Türkiye (@crystal_turkiye)
- Crystal Weekly Bülteni (crystalweekly.com)
- Crystal Mail Grubu
- Crystal IRC Grubu (freenode #crystal-lang)
Dökümantasyon
Crystal for Rubyists
http://www.crystalforrubyists.com/
Crystal Docs
http://crystal-lang.org/docs/
Sorular?
Teşekkürler
@sdogruyol
https://slides.com/sdogruyol/crystal-oylg2016
Crystal OYLG 2016
By Serdar Dogruyol
Crystal OYLG 2016
- 1,553