de-vraag
  • Pertanyaan
  • Tag
  • Pengguna
Notifikasi
Imbalan
Registrasi
Setelah Anda mendaftar, Anda akan diberitahu tentang balasan dan komentar untuk pertanyaan Anda.
Gabung
Jika Anda sudah memiliki akun, masuk untuk memeriksa pemberitahuan baru.
Akan ada hadiah untuk pertanyaan, jawaban, dan komentar tambahan.
Lebih
Sumber
Sunting
Ben Hamner
Ben Hamner
Question

Dalam Julia, mengapa @printf makro bukan fungsi?

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?

61 2013-11-05T06:22:19+00:00 2
Pemrograman
julia
Solution / Answer
 StefanKarpinski
StefanKarpinski
5 November 2013 в 8:38
2013-11-05T08:38:37+00:00
Lebih
Sumber
Sunting
#22715598

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.

 StefanKarpinski
StefanKarpinski
Jawaban edit 5 November 2013 в 8:46
106
0
 ivarne
ivarne
5 November 2013 в 8:38
2013-11-05T08:38:02+00:00
Lebih
Sumber
Sunting
#22715593

Hal ini untuk kinerja. The printf makro mengambil konstan format string (misalnya. "Halo %d\n") dan menghasilkan kode dioptimalkan untuk string tersebut.

5
0
Tambahkan pertanyaan
Kategori
Semua
Teknologi
Budaya / Rekreasi
Kehidupan / Seni
Ilmu Pengetahuan
Profesional
Bisnis
Pengguna
Semua
Baru
Populer
1
Галина Утяшова
Terdaftar 21 jam yang lalu
2
Asilbek Qadamboyev
Terdaftar 4 hari yang lalu
3
Akshit Mehta
Terdaftar 6 hari yang lalu
4
me you
Terdaftar 1 minggu yang lalu
5
Никита иванов
Terdaftar 1 minggu yang lalu
ID
KO
RU
© de-vraag 2022
Sumber
stackoverflow.com
di bawah lisensi cc by-sa 3.0 dengan atribusi