membaca dan memahami kode c

8

Saya ingin memahami kode kernel linux, dan saya telah mengalaminya tetapi saya tidak dapat merasakan sepenuhnya apa yang terjadi (saya berkonsentrasi pada bagian jaringan dari kernel linux), jadi siapa pun di antara Anda dapat menyarankan yang baik praktik membaca kode C (atau bahasa lainnya) secara umum dan khusus untuk bagian jaringan dari kernel linux. Terima kasih sebelumnya

davidhaskins
sumber
12
Kernel Linux gila. Itu melakukan banyak hal aneh demi kinerja. Dengan demikian jauh lebih sulit dibaca daripada level aplikasi c. Jangan pernah menulis kode seperti itu!
Byron Whitlock

Jawaban:

10

Jika Anda perlu belajar C dengan membaca terlebih dahulu, maka kernel Linux tidak akan memulai: ini adalah program tingkat rendah yang agak tidak biasa (meskipun saya merasa terstruktur dengan baik).

Sebaliknya, lihat kode sumber untuk beberapa program utilitas BSD, misalnya yang ada di OpenBSD . Bacalah manualnya untuk mendapatkan spesifikasi program semi-formal dan tingkat tinggi.

Ambil salinan Bacaan Kode Spinellis dan / atau Praktek Pemrograman Kernighan dan Pike .

Terakhir, bacalah buku bagus tentang Unix atau Linux kernel internal dan mulailah membaca kernel. (Saya menemukan Desain Sistem Operasi Unix oleh Maurice J. Bach (sekitar 1986) masih menjadi awal yang baik, bahkan untuk Linux.)

Fred Foo
sumber
terima kasih larsmans, buku membaca kode berbicara banyak tentang c, dapatkah Anda menyarankan buku serupa tentang C ++
@ hue: Saya belum pernah menemukan buku yang cukup tentang C ++. Jika orang lain tahu satu, saya akan tertarik.
Fred Foo
2

Apa yang saya kagumi ketika saya mencoba melakukan hal yang sama (yang ingin Anda lakukan) adalah menemukan begitu sedikit komentar yang relevan (jika ada) dalam kode yang sedemikian rumit.

Dokumentasi harus berupa kode, benar, tetapi fitur komentar ada dalam bahasa pemrograman C karena suatu alasan.

Jika mereka telah dihapus, itu mungkin juga karena suatu alasan: untuk menjauhkan Anda darinya.

Saya dengan tulus meragukan bahwa semua pengembang kernel harus bekerja pada basis kode yang telah dibersihkan ini dan pandangan saya tentang hal itu adalah (setidaknya) penulis dari setiap "fitur" kernel yang diberikan (seperti epoll, demi diskusi) tetap tersimpan versi pribadi dari kode DENGAN semua komentar yang hilang.

Mengapa saya percaya ini?

Salah satu pengembang kernel terkemuka, mencoba meyakinkan saya untuk merilis kode sumber server G-WAN sebagai open-source, menyarankan saya untuk "membuatnya sesulit mungkin untuk membaca".

Dia menambahkan bahwa taktik ini bekerja luar biasa untuknya selama beberapa dekade pada semua proyek "open-source" -nya.

Menjaga Anda tetap pada bagian penting dari proyek "open-source" yang banyak digunakan jelas menciptakan peluang ketika pendapatan Anda secara eksklusif berasal dari konsultasi.

Jadi, kembali ke pertanyaan Anda, hal paling berguna yang dapat Anda lakukan untuk memahami kode ini adalah mempelajarinya langkah demi langkah dan TAMBAH komentar yang hilang.

Kemudian, secara progresif, itu akan mulai masuk akal (dan Anda akan menemukan mengapa komentar telah dihapus).


sumber
4
-1 untuk tuduhan anonim.
Walaupun saya setuju bahwa komentar itu penting, orang tentu bisa berpendapat bahwa kernel Linux ditulis oleh para ahli dan hanya dimaksudkan untuk dibaca / dimodifikasi oleh para ahli lainnya. Banyak komentar yang menurut Anda dan Anda bermanfaat mungkin akan dianggap "berisik" bagi audiens target, seperti halnya kami tidak akan pernah menulis:i++ // increment i by 1
Cody Gray
@ Larsman, saya menampilkan diri di akun saya jadi ini BUKAN tuduhan anonim.
@Cody, hari Anda akan menulis kode secepat G-WAN (saya berharap Anda bisa), Anda akan mengerti bahwa sementara saya sangat berkomentar kode saya, saya mungkin tidak perlu "i ++" untuk berkomentar.
3
-1. Saya berharap saya bisa mengurangi lebih banyak.
0

Yang kadang membantu saya adalah debugging melalui kode. Visualisasi data aktual dan jalur aktual cenderung membuatnya lebih mudah dipahami bagi saya. Seperti yang ditunjukkan oleh anggota lain, kode kernel linux adalah titik awal yang sangat buruk untuk memahami c.

refro
sumber