Crystal Programlama Dili ve Kemal
@sdogruyol
kodla.co
01.05.2016
Serdar Doğruyol
Lead Developer - Protel
@sdogruyol
- Rubyist, Crystal meraklısı
- Ruby Türkiye, Crystal Türkiye Organizatörü
- Açık kaynak geliştiricisi
- Gerçek bir Polyglot
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
Neden
- Java, C vs. yorucu
- İngilizceye yakın
- Expressive (anlamlı, ifade eden)
Java
class OlusturmakIstemedigimAmaJavaninZorlaOlusturttuguSinif {
public static void main() {
System.out.println("Hello World");
}
}
Crystal
puts "Hello World"
Hadi 1,2,3,4,5,6 sayılarından çift olanları filtreleyip yeni bir liste oluşturalım.
Java
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 }
Hadi 1,2,3,4,5,6 sayılarından çift olanları filtreleyip yeni bir liste oluşturalım.
Crystal
array = [1, 2, 3, 4, 5, 6]
array.select &.even? # => [2, 4, 6]
2.days.ago
# 2016-02-23 22:10:05 +0200
Ö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
Dil | CPU(%) | Kaynak(MB) |
---|---|---|
Crystal (Kemal) | 1.85 | 11.2 |
Node.js (ws) | 38.95 | 906.3 |
WebSocket
30x az CPU zamanı
80x az Memory
https://gist.github.com/sdogruyol/bdd400a6eac13e26228e
Dil | Zaman(sn) | 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 |
Threadring
https://github.com/kostya/crystal-benchmarks-game
Dil | Zaman(sn) | Kaynak(MB) |
---|---|---|
C | 1.59 | 0.4 |
Crystal | 1.74 | 1.3 |
Ruby | 91.01 | 7.3 |
NBody
https://github.com/kostya/crystal-benchmarks-game
Self Hosted
Kendisiyle kendini yazmak???
Shards
=
RubyGems
- Çok güçlü bir paket yöneticisi
- 700'den fazla paket mevcut
- Geliştiricilerin tekrar kullanılabilir kod parçalarını paylaşmalarını sağlıyor.
Kemal
http://kemalcr.com
Kolay
Hızlı
Modern
- RESTful
- WebSocket ile gerçek zamanlı uygulama
- JSON
- Static File Serving
- Kolay ekle / çıkar middleware
- View templating
require "kemal"
get "/" do
"Merhaba Kodla!"
end
Kemal.run
Kendi başına çalışabilen dahili web sunucusu
require "kemal"
ws "/socket" do |socket|
socket.send "Hello from Kemal!"
end
Kemal.run
Dahili WebSocket desteği
Framework | Requests Per Sec | Avg. Resp. Time |
---|---|---|
Kemal (Production) | 100238 | 395.44μs |
Sinatra (Puma) | 2274 | 43.82ms |
Mükemmel Performans
Kullananlar
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)
Kaynaklar
Crystal for Rubyists
http://www.crystalforrubyists.com
Crystal Docs
http://crystal-lang.org/docs/
Sorular?
Teşekkürler
@sdogruyol
https://slides.com/sdogruyol/crystal-ve-kemal
Crystal Programlama Dili ve Kemal
By Serdar Dogruyol
Crystal Programlama Dili ve Kemal
Crystal Programlama Dili ve Kemal Web Geliştirme Çatısı hakkında kodla.co 2016 etkinliğinde yaptığım sunum
- 3,483