Keluaran bahasa pengaturcaraan Crystal 1.2

Pengeluaran bahasa pengaturcaraan Crystal 1.2 telah diterbitkan, pembangunnya cuba menggabungkan kemudahan pembangunan dalam bahasa Ruby dengan ciri prestasi aplikasi tinggi bahasa C. Sintaks Crystal hampir, tetapi tidak serasi sepenuhnya dengan, Ruby, walaupun beberapa program Ruby berjalan tanpa pengubahsuaian. Kod pengkompil ditulis dalam Crystal dan diedarkan di bawah lesen Apache 2.0.

Bahasa ini menggunakan semakan jenis statik, dilaksanakan tanpa perlu menyatakan secara eksplisit jenis pembolehubah dan hujah kaedah dalam kod. Program kristal disusun ke dalam fail boleh laku, dengan makro dinilai dan kod dijana pada masa penyusunan. Dalam program Crystal, adalah mungkin untuk menyambungkan pengikatan yang ditulis dalam C. Penyelarasan pelaksanaan kod dijalankan menggunakan kata kunci "spawn", yang membolehkan anda menjalankan tugas latar belakang secara tidak segerak, tanpa menyekat benang utama, dalam bentuk benang ringan yang dipanggil gentian.

Pustaka standard menyediakan satu set besar fungsi biasa, termasuk alatan untuk memproses CSV, YAML dan JSON, komponen untuk mencipta pelayan HTTP dan sokongan WebSocket. Semasa proses pembangunan, adalah mudah untuk menggunakan arahan "main kristal", yang menjana antara muka web (localhost:8080 secara lalai) untuk pelaksanaan kod interaktif dalam bahasa Kristal.

Perubahan utama:

  • Menambah keupayaan untuk menetapkan subkelas kelas generik kepada elemen kelas induk. kelas Foo(T); kelas akhir Bar(T) < Foo(T); hujung x = Foo x = Bar
  • Makro kini boleh menggunakan garis bawah untuk mengabaikan nilai dalam gelung for. {% untuk _, v, i dalam {1 => 2, 3 => 4, 5 => 6} %} p {{v + i}} {% end %}
  • Menambahkan kaedah "wujud_fail?" pada makro. untuk menyemak kewujudan fail.
  • Pustaka standard kini menyokong integer 128-bit.
  • Ditambahkan Modul Boleh Diindeks::Mutable(T) dengan pelaksanaan operasi lanjutan untuk koleksi seperti BitArray dan Deque. ba = BitArray.new(10) # ba = BitArray[0000000000] ba[0] = true # ba = BitArray[1000000000] ba.rotate!(-1) # ba = BitArray[0100000000]
  • Menambah kaedah XML::Node#namespace_definition untuk mengekstrak ruang nama tertentu daripada XML.
  • Kaedah IO#write_utf8 dan URI.encode telah ditamatkan dan harus digantikan dengan IO#write_string dan URI.encode_path.
  • Sokongan untuk seni bina x32 86-bit telah dialihkan ke tahap kedua (pakej siap sedia tidak dijana lagi). Pemindahan ke tahap pertama sokongan untuk seni bina ARM64 sedang disediakan.
  • Kerja berterusan untuk memastikan sokongan penuh untuk platform Windows. Menambah sokongan untuk soket Windows.
  • Pakej universal telah ditambahkan untuk macOS, berfungsi pada kedua-dua peranti dengan pemproses x86 dan pada peralatan dengan cip Apple M1.

Sumber: opennet.ru

Tambah komen