Crystal

KBU Programlama Günleri III

27.02.2016

Serdar Doğruyol

Lead Developer - Protel

  • Ruby Türkiye, Crystal Türkiye Organizatörü
  • Açık kaynak geliştiricisi
  • Dil meraklısı :)

@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 vs. 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

Ö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

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

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

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
require "kemal"

get "/" do
  "Hello World!"
end

ws "/socket" do |socket|
  socket.send "Hello from Kemal!"
end

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-2

Made with Slides.com