Rilis bahasa pemrograman Crystal 1.5

Rilis bahasa pemrograman Crystal 1.5 telah diterbitkan, pengembangnya mencoba menggabungkan kemudahan pengembangan dalam bahasa Ruby dengan kinerja aplikasi tinggi yang melekat dalam bahasa C. Sintaks Crystal mirip, tetapi tidak sepenuhnya kompatibel dengan Ruby, meskipun beberapa program Ruby berjalan tanpa pengerjaan ulang. Kode kompiler ditulis dalam Crystal dan didistribusikan di bawah lisensi Apache 2.0.

Bahasa ini menggunakan pemeriksaan tipe statis, diimplementasikan tanpa perlu secara eksplisit menentukan tipe variabel dan argumen metode dalam kode. Program kristal dikompilasi menjadi file yang dapat dieksekusi, dengan evaluasi makro dan pembuatan kode pada waktu kompilasi. Dalam program Crystal, diperbolehkan untuk menghubungkan binding yang ditulis dalam bahasa C. Paralelisasi eksekusi kode dilakukan menggunakan kata kunci β€œspawn”, yang memungkinkan Anda menjalankan tugas latar belakang dalam mode asinkron, tanpa memblokir thread utama, dalam bentuk thread ringan yang disebut serat (Fiber).

Pustaka standar menyediakan sejumlah besar fungsi umum, termasuk alat untuk menangani CSV, YAML, dan JSON, komponen untuk membangun server HTTP, dan dukungan WebSocket. Selama proses pengembangan, akan lebih mudah untuk menggunakan perintah β€œcrystal play”, yang menghasilkan antarmuka web (localhost:8080 secara default) untuk eksekusi kode interaktif dalam bahasa Crystal.

Perubahan besar:

  • Kompiler telah menambahkan pemeriksaan korespondensi antara nama argumen dalam implementasi metode abstrak dan definisinya. Ketidakcocokan nama sekarang menghasilkan peringatan: abstract class FooAbstract abstract def foo(number : Int32) : Nil end class Foo < FooAbstract def foo(name : Int32) : Nil p name end end 6 | def foo(name : Int32) : Nil ^β€” Peringatan: parameter posisi 'name' sesuai dengan parameter 'number' dari metode yang diganti FooAbstract#foo(number : Int32), yang memiliki nama berbeda dan dapat mempengaruhi passing argumen bernama
  • Saat Anda menetapkan nilai variabel ke argumen metode yang tidak diketik, argumen tersebut sekarang dibatasi oleh jenis variabel tersebut. class Foo @x : Int64 def inisialisasi(x) @x = x # parameter x akan bertipe @x end end
  • Menambahkan anotasi ke parameter metode atau makro diperbolehkan. def foo(@[MungkinTidak Digunakan] x); akhir#OK
  • Menambahkan dukungan untuk menggunakan konstanta sebagai indeks dan nama dalam tupel. KEY = "s" foo = {s: "String", n: 0} menempatkan foo[KEY].size
  • Menambahkan metode File#delete? baru ke File API untuk menghapus file dan direktori. dan Dir#delete?, yang mengembalikan false jika file atau direktori tidak ada.
  • Memperkuat perlindungan metode File.tempfile, yang sekarang tidak mengizinkan karakter nol dalam string yang membentuk nama file.
  • Menambahkan variabel lingkungan NO_COLOR untuk menonaktifkan penyorotan warna pada output compiler dan interpreter.
  • Pekerjaan yang ditingkatkan secara signifikan dalam mode juru bahasa.

Sumber: opennet.ru

Tambah komentar