Dalam Julia, sintak untuk mencetak string diformat adalah sebagai berikut:
@printf("Hello %d\n", 5)
Mengapa @printf
makro bukan fungsi? Itu sehingga dapat menerima menyesuaikan jumlah dari argumen?
Mengambil variabel jumlah argumen tidak masalah untuk normal Julia fungsi [1]. @printf
adalah makro sehingga dapat mengurai dan menafsirkan format string pada waktu kompilasi dan menghasilkan kode kustom untuk yang format tertentu string. Orang-orang mungkin tidak menyadari bahwa C's printf
fungsi re-parsing dan kembali menafsirkan format string setiap kali anda menelepon printf
. Fakta bahwa itu's secepat itu merupakan sebuah keajaiban kecil gila pointer dalam pemrograman. Serius, lihat saja terdekat anda libc's printf
implementasi. It's benar-benar gila.
Julia menggunakan pendekatan yang berbeda: @printf
adalah makro yang diterjemahkan format string menjadi efisien kode tertentu ke dalam format spesifikasi. Jika anda berpikir tentang hal itu, yang printf-gaya format string adalah benar-benar hanya sebuah cara untuk mengekspresikan fungsi yang mengambil tetap jumlah dan tipe argumen dan cetakan mereka dalam cara tertentu. Perhatikan bahwa saya mengatakan bahwa format string adalah fungsi, bukan printf itu sendiri, yang secara konseptual fungsi generator, mengubah format ke formatters. Fakta bahwa ini adalah semua berdesakan dalam fungsi run-time di C adalah sedikit ketidakcocokan karena itu menjadi satu-satunya pilihan yang masuk akal dalam C. bahkan, karena ini, sampai sangat baru-baru ini, itu adalah agak mudah untuk menembak diri di kaki dengan melewati nomor yang salah atau jenis argumen untuk C's printf. Ini hanya lebih baik sekarang karena penyusun telah khusus-casing untuk memahami semantik printf format.
Dalam teori, Julia's @printf
dapat dibuat lebih cepat dari C karena menghasilkan's kode kustom, tetapi dalam prakteknya, saya punya waktu yang cukup sulit pencocokan C, apalagi pemukulan itu. Tapi saya berpikir bahwa's karena saat ini desain sistem I/O dan bagaimana saya'm menggunakannya, tidak melekat batasan. I/O hal ini karena untuk perbaikan meskipun, dan ketika itu terjadi, kita mungkin benar-benar akan mampu mengalahkan C di format cetak dengan memanfaatkan fakta bahwa @printf
adalah makro.