Kapan saya harus menggunakan autoload alih-alih membutuhkan?

30

Dari apa yang saya mengerti requiredigunakan untuk memuat potongan kode besar (sesuatu seperti modul) meskipun juga dapat memuat fungsi individu.

Muatan otomatis di sisi lain, hanya mencatat fungsi dan membatalkan pemuatan ke waktu eksekusi.

Saya baru saja membaca sebuah artikel yang menganjurkan penggunaan autoloadsecara eksklusif.

Apakah lebih baik autoloaddaripada daripada require? Apa beberapa kasus penggunaan khas untuk masing-masing kasus ini?

caisah
sumber
3
@Gilles: FWIW, saya tidak setuju dengan tag yang telah Anda hapus autoloaddan requiredari pertanyaan ini. Menambahkan tag librariestidak masalah, tetapi sekarang siapa pun yang mencari, menggunakan tag, untuk pertanyaan tentang autoloadatau requiretidak akan menemukan ini. Keduanya adalah fungsi penting Emacs-Lisp yang akan dicari orang. Sangat buruk. Dan pikirkan betapa membantu elispdan libraries(terutama elisp) akan benar-benar dalam praktek untuk situs Emacs: mereka tidak banyak berbeda di Emacsland, saya khawatir. (Tetapi tidak, saya tidak menentang memiliki dan menggunakannya.)
Drew
@Drew aku akan diskusi meta yang berlaku . Jika Anda berpikir bahwa prinsip umum ini tidak berlaku di sini, tolong angkat pada meta.
Gilles 'SO- stop being evil'
1
@Gilles: Selesai . Ya, saya membaca itu dan berpikir bahwa mungkin itulah yang memotivasi Anda. Saya tidak setuju dengan banyak prinsip umum. Itu tidak berarti bahwa mengikuti mereka dengan selimut selalu adalah TRT.
Drew
2
Saya setuju dengan Drew: karena pertanyaan ini khusus tentang membedakan kasus penggunaan untuk autoloaddan requiresaya pikir tag tersebut dibenarkan. Faktanya, memberi label pada pertanyaan ini [hanya] dengan librariesgeneralisasi berlebihan. Saya menggunakan satu requireuntuk memicu memuat "my-foobar-cfg", yang, seperti namanya, hanya berisi konfigurasi saya, bukan perpustakaan.
paprika

Jawaban:

28

autoloadbukan pengganti require. Biasanya requiredigunakan untuk memastikan bahwa file tertentu dimuat. autoloaddi sisi lain memberi Emacs petunjuk di mana file menemukan fungsi yang diberikan tanpa memuat file segera. Hanya ketika fungsi autoloaded dipanggil adalah file yang sesuai dimuat.

Pada dasarnya dengan autoloadAnda dapat menunda pemuatan seluruh file saat Anda benar-benar membutuhkannya. Inilah sebabnya mengapa (terutama paket besar) biasanya mendefinisikan fungsi entri sebagai autoloads.

Jika Anda ingin melakukan kustomisasi berat untuk suatu paket biasanya Anda kurang beruntung autoload. Jika Anda masih ingin menghindari requiremaka Anda dapat menunda kustomisasi Anda sampai setelah file dimuat dengan menggunakan eval-after-load.

Manual Emacs mencakup topik ini di bagian berikut:

paprika
sumber
2
Mungkin perlu disebutkan juga: autoloadadalah (kurang lebih) tentang memberikan definisi perintah, sehingga Anda dapat menggunakan perintah itu. requireadalah tentang membuat segala sesuatu di perpustakaan (dan di perpustakaan yang perpustakaan butuhkan , secara rekursif) tersedia. Ada lebih banyak untuk Emacs daripada perintah. (Tapi ya, tentu saja setelah perintah autoloaded dipanggil, seluruh pustaka dimuat.)
Drew
4

Dalam hal inisialisasi Emacs, jangan membuat pilihan. Pengguna GitHub jwiegley memiliki makro deklarasi penggunaan-paket yang sangat baik , yang akan membutuhkan atau memuat ulang secara otomatis paket yang ditentukan oleh kebutuhan. Paling baik digunakan untuk menunda pemuatan paket yang dapat dimuat sesuai permintaan.

Andy
sumber
3

Jika Anda ingin fitur tertentu dimuat dan tersedia langsung ketika Emacs Anda sudah mulai, gunakan wajib, kalau tidak gunakan autoload. Saya pribadi sangat menghargai waktu startup (saya sebenarnya me-restart Emacs beberapa kali per minggu, kadang-kadang beberapa kali per hari), jadi saya menerima bahwa itu akan memakan sedikit waktu ketika Emacs secara otomatis memuat fungsi tertentu ketika saya membutuhkannya. Jadi, pikirkan apa yang Anda inginkan tersedia langsung setelah Emacs dimulai dan apa yang dapat dimuat saat dibutuhkan.

Mathias Dahl
sumber