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