Kiat apa yang dapat Anda tawarkan ke kode porting seseorang?
8
Apa saran (kiat, teknik, gotcha, dan lain-lain) yang Anda miliki untuk seseorang yang memindahkan pustaka kode dari satu bahasa ke bahasa lain, atau menulis ulang agar berfungsi di lingkungan kompiler, yang berbeda?
jangan "port" - yaitu, mengkloning sesuatu ke bahasa baru yang mempertahankan fitur-fitur bahasa asli. Benar-benar menulis ulang sehingga memiliki hasil tes yang sama.
S.Lott
@ S.Lott Itulah yang saya maksud dengan "port".
Moshe
1
Apa yang Anda maksud dengan port? Ini sebuah petunjuk. Jangan mengomentari pertanyaan Anda sendiri. perbarui pertanyaan Anda menjadi lengkap dan jelas. Jangan pernah mengomentari pertanyaan Anda sendiri karena itu pertanyaan Anda. Anda memilikinya dan Anda bisa membuatnya sempurna. Jangan ragu untuk menghapus komentar yang membentuk jejak yang sulit untuk diikuti ketika komentar Anda mengasumsikan kami tahu apa yang Anda bicarakan dengan kata-kata seperti "Itulah yang saya maksudkan". Apa yang dimaksud dengan "itu"?
S.Lott
Jawaban:
2
Setiap platform (bahasa dan sistem perpustakaan) memiliki persona sendiri. Cara programmer Ruby mendesain API mereka memanfaatkan fitur dan budaya unik yang menjadikan Ruby seperti apa adanya. Ini jelas berbeda dari cara pengembang C atau C ++ mendesain API mereka, yang pada gilirannya berbeda dari cara pengembang Java atau C # melakukannya.
Anda ingin mengambil ide-ide dari platform asli, dan membentuknya menjadi konsep-konsep yang membuat platform baru itu apa adanya. Tidak ada yang terasa lebih alami daripada menggunakan perpustakaan yang dirancang dengan cara yang sama sekali berbeda dari perpustakaan lain di platform. Ada sejumlah platform pemrograman yang sebenarnya dirancang dengan baik, dan elegan. Anda ingin memanfaatkan kekuatan itu untuk port Anda.
Ketahui kemampuan asli bahasa "kerangka" dan "dari" Anda / kerangka kerja.
Saya porting perpustakaan kalender ke iOS dari Javascript. iOS memiliki kelas kalender yang kuat sedangkan JavaScript tidak memiliki apa-apa yang berguna bagi saya. (Saya bertobat dari kalender agama ke kalender Gregorian dan sebaliknya.)
Saya menghabiskan waktu menulis ulang seluruh perpustakaan di Objective-C hanya untuk menyadari bahwa kode saya sebagian besar berlebihan. (Omong-omong, saya melakukan pekerjaan yang buruk dan mendapatkan hasil yang tidak akurat. Saat itulah saya mengambil langkah mundur dan menyadari kesalahan saya.)
Beberapa lusin baris metode konversi diganti dengan enam atau lebih baris kode kerangka kerja asli.
Jika ini adalah proyek penting (sering porting), tulis rencana pengujian lengkap (idealnya dengan unit test dalam bahasa target) SEBELUM porting setiap bagian kode dan seluruh sistem.
Tidak ada cara di dunia bahwa porting akan 100% akurat pada percobaan pertama, jadi Anda harus memastikan terlebih dahulu bahwa Anda menangkap semuanya.
Jika memungkinkan, jalankan rencana yang sama untuk kode asli karena tidak ada jaminan bahwa itu ditulis dengan benar, dan, pada kenyataannya, memiliki perilaku yang setara mungkin tergantung pada implementasi yang salah.
Bangun diagram pohon / hierarki kelas sehingga Anda tahu mana yang harus port pertama. Petakan tipe data dasar (int -> Int32?). Lakukan hal yang sama untuk struktur data.
Jawaban:
Setiap platform (bahasa dan sistem perpustakaan) memiliki persona sendiri. Cara programmer Ruby mendesain API mereka memanfaatkan fitur dan budaya unik yang menjadikan Ruby seperti apa adanya. Ini jelas berbeda dari cara pengembang C atau C ++ mendesain API mereka, yang pada gilirannya berbeda dari cara pengembang Java atau C # melakukannya.
Anda ingin mengambil ide-ide dari platform asli, dan membentuknya menjadi konsep-konsep yang membuat platform baru itu apa adanya. Tidak ada yang terasa lebih alami daripada menggunakan perpustakaan yang dirancang dengan cara yang sama sekali berbeda dari perpustakaan lain di platform. Ada sejumlah platform pemrograman yang sebenarnya dirancang dengan baik, dan elegan. Anda ingin memanfaatkan kekuatan itu untuk port Anda.
sumber
Ketahui kemampuan asli bahasa "kerangka" dan "dari" Anda / kerangka kerja.
Saya porting perpustakaan kalender ke iOS dari Javascript. iOS memiliki kelas kalender yang kuat sedangkan JavaScript tidak memiliki apa-apa yang berguna bagi saya. (Saya bertobat dari kalender agama ke kalender Gregorian dan sebaliknya.)
Saya menghabiskan waktu menulis ulang seluruh perpustakaan di Objective-C hanya untuk menyadari bahwa kode saya sebagian besar berlebihan. (Omong-omong, saya melakukan pekerjaan yang buruk dan mendapatkan hasil yang tidak akurat. Saat itulah saya mengambil langkah mundur dan menyadari kesalahan saya.)
Beberapa lusin baris metode konversi diganti dengan enam atau lebih baris kode kerangka kerja asli.
sumber
Jika ini adalah proyek penting (sering porting), tulis rencana pengujian lengkap (idealnya dengan unit test dalam bahasa target) SEBELUM porting setiap bagian kode dan seluruh sistem.
Tidak ada cara di dunia bahwa porting akan 100% akurat pada percobaan pertama, jadi Anda harus memastikan terlebih dahulu bahwa Anda menangkap semuanya.
Jika memungkinkan, jalankan rencana yang sama untuk kode asli karena tidak ada jaminan bahwa itu ditulis dengan benar, dan, pada kenyataannya, memiliki perilaku yang setara mungkin tergantung pada implementasi yang salah.
sumber
-> Fokus pada fungsi bukan dengan cara yang telah dikodekan.
-> Berpikir sebelum menulis, karena beberapa elemen sudah dapat ditangani oleh bahasa, platform dll.
-> Gunakan keunggulan platform baru.
sumber
"Porting" - saat Anda menggunakan kata tersebut - hanya TDD dengan kode lawas yang mengganggu.
Lakukan uji kasus dengan benar. Konfirmasikan bahwa kode lawas melewati kasus uji.
Kemudian buang kode lawas.
Kemudian tulis kode baru yang lolos uji kasus dalam bahasa baru.
sumber
Bangun diagram pohon / hierarki kelas sehingga Anda tahu mana yang harus port pertama. Petakan tipe data dasar (int -> Int32?). Lakukan hal yang sama untuk struktur data.
sumber