Kompiler D Terbaru

Tim pengembangan LDC ditutup tahun lalu dengan versi 1.19.0 dari kompiler D menggunakan LLVM , dan tim inti memulai tahun baru dengan versi 2.090.0 dari kompiler referensi DMD . Dan jika Anda belum pernah mendengar, belum lama ini ada berita penting tentang D-compiler berdasarkan GCC, GDC . Rias!

LDC 1.19.0


Rilis ini berisi pembaruan untuk kompiler LDC ke versi D dari frontend 2.089.1, yang merupakan versi saat ini pada saat rilis, segera setelah Natal Katolik. Majelis yang dirakit didasarkan pada LLVM 9.01 .

Di antara yang menarik dalam rilis ini adalah beberapa simpati untuk Android. Pustaka DRuntime / Phobos yang sudah jadi sekarang tersedia untuk semua target Android. Rilis ini dapat digunakan bersama dengan Android Project D Adam Ruppe , kompilasi program dan antarmuka bantu, sekarang dalam versi beta yang hampir selesai , untuk pengembangan pada Android D dengan LDC.

Pengguna Windows akan menemukan bahwa pustaka tautan berbasis MinGW yang dibundel telah diperbarui. Sekarang mereka diturunkan dari file .def dari paket MinGW-w64 7.0.0 . Pustaka ini memungkinkan Anda untuk menggunakan pustaka sistem Windows tanpa harus menginstal Windows SDK.

DMD 2.090.0


Versi terbaru DMD diumumkan pada 7 Januari . Dia keluar dengan 10 perubahan besar dan 71 bug tertutup, disediakan oleh 48 penulis bersama .

Dengan rilis ini, sekarang lebih banyak dimungkinkan dengan parameter malas. D telah lama mendukung opsi malas :
Argumen parameter lazy tidak dievaluasi sampai fungsinya dipanggil. Argumen diproses hanya jika / ketika parameter dievaluasi di dalam fungsi.
Oleh karena itu, argumen lazy dapat dieksekusi 0 kali atau lebih.
Di bawah tenda, mereka diimplementasikan sebagai delegasi. Sekarang Anda dapat pergi ke delegasi pangkalan dengan mengambil alamat parameter, yang sebelumnya dilarang.

import std.stdio; void chillax(lazy int x) { auto dg = &x; assert(dg() == 10); writeln(x); } void main() { chillax(2 * 5); } 

Rilis ini juga membuat usang D idiom yang digunakan oleh mereka yang perlu membedakan antara finalisasi (penghancuran objek non-deterministik, biasanya diprakarsai oleh pengumpul sampah) dan penghancuran normal (penghancuran objek deterministik) dari bagian dalam kelas atau destruktor struktur.

Dalam kondisi GC saat ini, setiap operasi GC selama finalisasi dilarang. Namun, D tidak menyediakan finalizer dan destruktor yang terpisah. Hanya ada ~ ini , yang disebut destruktor, terlepas dari kenyataan bahwa ia memainkan kedua peran. Ini kadang-kadang membuatnya sulit untuk menerapkan destruktor untuk jenis yang dirancang untuk pengalokasi GC dan non-GC. Panggilan apa pun ke GC selama pembersihan dapat mengakibatkan kesalahan InvalidMemoryOperationError. Ini menyiratkan perlunya solusi yang disebutkan di atas.

Sekarang Anda dapat memanggil fungsi GC statis, core.memory.GC.inFinalizer, untuk mendapatkan status Anda di destruktor. Ini mengembalikan true jika utas saat ini sedang menyelesaikan, dalam hal ini Anda tidak ingin melakukan tindakan apa pun yang melibatkan operasi dengan GC. (Saya mengharapkan sesuatu seperti ini sebelum menulis artikel berikutnya dalam seri GC saya ).

Gdc


Berkat kerja keras Ian Bucklau, Johannes Pfau dan semua sukarelawan yang mendukung dan berkontribusi selama bertahun-tahun, GDC diterima di GCC 9 pada akhir 2018 dan tersedia sebagai bagian dari kit GCC 9.1 yang dirilis Mei lalu. GCC 9.2 dirilis Agustus lalu. Versi GDC ini mengimplementasikan versi 2.076 dari ujung depan D. Anda dapat membangunnya sendiri atau menginstalnya dari tempat yang sama di mana Anda biasanya mendapatkan GCC 9.x.

Dari penerjemah


Masalah blog ini hampir sepenuhnya memblokir blok dari artikel yang akan datang tentang pemrograman yang andal, termasuk D, well, dengan pengecualian kritik dan keadaan dengan IDE, oleh karena itu ternyata sangat sukses.

Source: https://habr.com/ru/post/id483440/


All Articles