Apa artinya (memerlukan 'paket) untuk emacs dan apa bedanya dengan load-file?

10

Saya baru mulai menggunakan emacs beberapa hari yang lalu dan saya membaca di suatu tempat yang (require 'package-name)tidak diperlukan ketika paket tersebut diinstal menggunakan paket-instal. Tetapi mengapa, apa yang (require 'package-name)sebenarnya dilakukan dan bagaimana bedanya load-fileatau loadprosedurnya?

Chakravarthy Raghunandan
sumber
7
Salah satu hal pertama yang harus kita pelajari di Emacs adalah M-x describe-functionmembaca doc-string. alias C-h fKetik M-x describe-function RET require RETdan membaca doc-string. Kemudian ketik M-x describe-function RET load-file RETdan baca string-doc. Kemudian ketik M-x describe-function RET load RETdan baca string-doc. Setelah membaca ketiga dokumen, harap edit pertanyaan Anda untuk membandingkan dan membedakan ketiga fungsi tersebut dan mengklarifikasi apa yang masih belum Anda pahami terkait dengan hal tersebut. Kami menggunakan prosedur yang sama untuk variabel - yaitu M-x describe-variable,.
lawlist

Jawaban:

13

Jika Anda loadperpustakaan berulang kali, file itu akan dibaca dan kodenya dievaluasi berulang kali (setiap kali Anda memuatnya).

Jika Anda requireperpustakaan berulang kali, ini akan loadmenjadi perpustakaan sekali (paling banyak - dan tidak sama sekali jika perpustakaan sudah dimuat).

requirememberikan efisiensi ini bahkan jika requiretidak digunakan untuk memuat perpustakaan pada awalnya, karena (sebagian besar) perpustakaan berisi kode (provide 'FEATURE)untuk FEATUREnama khusus mereka . Kode itu dievaluasi ketika perpustakaan dimuat, terlepas dari bagaimana itu dimuat, dan pada saat itu memperbarui data yang requirememeriksa ketika memutuskan apakah perlu melakukan sesuatu.

Sebagian besar Anda ingin menggunakan requirekode Anda sendiri, jika Anda perlu memastikan bahwa perpustakaan yang diberikan telah dimuat.

Alasan Anda sering tidak perlu melakukan ini dengan paket ELPA adalah manajer paket secara otomatis memproses cookie pengisian otomatis apa pun dalam paket, dan menghasilkan file pengisian otomatis untuk paket itu. Ketika sistem paket diinisialisasi ketika Anda memulai Emacs, file pengisian otomatis untuk setiap paket dievaluasi, yang mengidentifikasi semua fungsi yang dimuat secara otomatis. Ketika fungsi autoloaded dipanggil, pustaka yang berisi definisi sebenarnya dari fungsi dimuat secara otomatis.

Pembuat paket dapat menambahkan cookie pengisian otomatis ke setiap fungsi yang diharapkan oleh pengguna untuk dipanggil secara langsung dan, asalkan harapan mereka benar, Anda tidak perlu menelepon requireatau dengan cara lain memuat paket secara eksplisit untuk menggunakannya.

Perhatikan bahwa Anda juga dapat menetapkan autoloads kustom Anda sendiri. Lihat C-hig (elisp) Autoload RETdan juga (elisp) Hooks for Loadingjika Anda ingin menggunakan pustaka pemuatan malas dan konfigurasi perpustakaan yang ditangguhkan di konfigurasi Anda sendiri. (Yang terakhir mengatakan "jangan mengevaluasi kode ini sampai perpustakaan ini telah dimuat", yang berhubungan baik dengan "jangan memuat perpustakaan ini sampai dibutuhkan" mekanisme pengisian otomatis).

phils
sumber
2
Karena Anda sudah mereferensikan manual Elisp, saya pikir simpul terkait lainnya adalah (elisp) Named Features.
Basil