Seorang developer telah merilis koleksi open-source fungsi perhitungan fase bulan dalam berbagai bahasa pemrograman, yang diberi nama Werewolf Early Warning System. Proyek ini mengimplementasikan algoritma astronomi yang sama dalam delapan bahasa berbeda, mulai dari bahasa tingkat sistem seperti C++ dan Rust hingga bahasa scripting seperti Python dan JavaScript.
Bahasa yang Didukung:
- Tingkat Sistem: C/C++, Rust, Zig
- Scripting: Lua, JavaScript, Python
- DSL: awk, bc
- Penambahan Terbaru: Raku
Aturan Copy-Paste Menciptakan Tantangan Pemrograman yang Menarik
Yang membuat proyek ini sangat menarik adalah persyaratan aturan copy-paste yang ketat. Setiap fungsi harus benar-benar mandiri, memungkinkan developer untuk menyalin dan menempel kode langsung ke dalam proyek mereka tanpa dependensi atau perubahan lingkungan. Batasan ini telah memicu diskusi di antara developer tentang bagaimana pembatasan semacam itu mempengaruhi gaya coding dan performa.
Persyaratan ini memaksa programmer untuk berpikir berbeda tentang pendekatan biasa mereka. Alih-alih mengandalkan library eksternal atau variabel global, setiap implementasi harus murni dan mandiri. Ini menciptakan ketegangan yang menarik antara praktik clean code dan batasan praktis.
Seorang developer mencatat bahwa implementasi Rust kemungkinan berjalan lebih cepat daripada versi C, bukan karena Rust secara inheren lebih cepat, tetapi karena persyaratan mandiri mengarah pada pilihan optimasi yang berbeda. Kode Rust menggunakan operasi floor tunggal dengan closure, sementara versi C memerlukan dua operasi fmod untuk mempertahankan keterbacaan dalam batasan tersebut.
Lebih dari Sekadar Pembagian Waktu Sederhana
Proyek ini mengatasi kesalahpahaman umum tentang perhitungan fase bulan. Banyak developer awalnya mengasumsikan bahwa Anda dapat dengan mudah membagi waktu sejak Unix epoch dengan periode siklus bulan. Namun, fase lunar melibatkan perhitungan astronomi yang lebih kompleks, termasuk menyelesaikan persamaan Kepler dan memperhitungkan mekanika orbital.
Algoritma ini berasal dari program moontool John Walker dari tahun 1980-an, yang sendirinya didasarkan pada Practical Astronomy With Your Calculator. Setiap implementasi mengembalikan usia bulan dalam radian, yang kemudian dapat dikonversi menjadi fraksi yang diterangi, nama fase, dan representasi emoji.
Fitur Utama Algoritma:
- Mengembalikan "usia" bulan dalam radian
- Formula: (1-cos(x))/2 menghasilkan fraksi yang tersinari
- Usia bulan dalam hari: kalikan usia yang dinormalisasi dengan ~29.5
- Berdasarkan algoritma moontool dari John Walker tahun 1980-an
- Sumber asli: "Practical Astronomy With Your Calculator"
Kontribusi Komunitas dan Penyempurnaan Teknis
Proyek ini telah menarik kontribusi dari komunitas pemrograman, termasuk penambahan terbaru implementasi Raku. Versi Raku menampilkan beberapa fitur bahasa yang elegan, termasuk dukungan modulo Euclidean bawaan dan konstanta pi asli.
Diskusi teknis telah muncul seputar peluang optimasi, dengan beberapa developer menyarankan bahwa normalisasi sudut ke rentang [0, 2) alih-alih [0, 360) dapat meningkatkan performa dan akurasi, terutama saat menggunakan fungsi matematika khusus seperti sinpi dan cospi.
Proyek ini mendemonstrasikan bagaimana batasan pemrograman dapat mengarah pada solusi kreatif dan pembelajaran lintas bahasa. Dengan mengimplementasikan algoritma identik di berbagai bahasa sambil mempertahankan persyaratan kemurnian yang ketat, proyek ini menawarkan wawasan tentang bagaimana desain bahasa mempengaruhi struktur kode dan trade-off performa.
Referensi: moonphase - Werewolf Early Warning System