C-toxcore: Jangan sertakan header khusus OS dalam file .h

Dibuat pada 11 Sep 2016  ·  5Komentar  ·  Sumber: TokTok/c-toxcore

Saat ini, network.h menyertakan banyak header khusus platform (seperti u.h , windows.h , dan unistd.h ). Kita harus membatasi ini ke satu file (atau beberapa file).

Saya sarankan kita membuat abstraksi tipis pada fasilitas OS untuk jaringan, dan yang lain untuk jam monoton. Kami kemudian dapat memiliki satu file per jenis platform (misalnya ${module}_win32.c , _unix.c , _osx.c , _posix.c , ...) dan mengompilasinya secara kondisional sesuai dengan praprosesor simbol, seperti yang sudah kita lakukan. Kelemahannya adalah sedikit lebih banyak overhead deklarasi, karena saat ini #ifdef s tersebut berada di dalam fungsi yang perlu didefinisikan ulang untuk setiap platform. Keuntungannya adalah tidak ada atau sedikit #ifdef s dalam kode itu sendiri, dan kode khusus platform ada dalam satu set file kecil alih-alih (seperti sekarang) dalam abstraksi platform pencampuran file 1100 baris dengan kode aplikasi.

P1 cleanup good first issue

Komentar yang paling membantu

Bagaimana kalau kita membuat antarmuka "sistem" yang dapat diimplementasikan oleh "sistem windows" dan "sistem posix" dan "sistem uji"? Sistem pengujian dapat digunakan dalam pengujian unit dan mensimulasikan sistem tanpa benar-benar melakukan panggilan sistem.

Semua 5 komentar

Kedengarannya bagus

Bagaimana kalau kita membuat antarmuka "sistem" yang dapat diimplementasikan oleh "sistem windows" dan "sistem posix" dan "sistem uji"? Sistem pengujian dapat digunakan dalam pengujian unit dan mensimulasikan sistem tanpa benar-benar melakukan panggilan sistem.

Saya tidak setuju dengan saran implementasi. Saya lebih suka melihat semua fungsi dalam satu file {network,time,...}.c , dengan #ifdef s digunakan untuk membungkus fungsi yang perlu ditulis secara berbeda untuk setiap platform.

Manfaat metode ini dibandingkan file terpisah, adalah kita dapat memaksa semua kode khusus platform sebagai fungsi statis, dan mengekspos satu API untuk tingkat toxcore yang lebih tinggi. Detail implementasi platform apa pun akan mudah dilihat dari satu file. Keunikan platform akan membutuhkan abstraksi, dan penanganan dalam satu file, bukan di beberapa file. Ini juga akan membuat file cmakelists.txt lebih mudah dipelihara (Sudah mulai menjauh dari kami.) Dan kemudian ditinjau, dengan sistem peninjauan kami saat ini.

Tidak sepenuhnya diperbaiki

@GrayHatter setuju. Mari kita memiliki satu file yang mengimplementasikan spesifikasi OS.

Saya membatalkan penetapan @Diadlo untuk saat ini. Saya pikir ini adalah bug yang bagus untuk dikerjakan oleh kontributor baru, karena memberikan paparan pada banyak basis kode dan kode jaringan. Ini adalah refactoring yang agak menarik yang tidak berdampak pada fungsionalitas, jadi lebih mudah untuk diuji.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat