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

Made with Slides.com