Whenever: Pustaka Python yang Menyelesaikan Masalah Terkenal DateTime

BigGo Editorial Team
Whenever: Pustaka Python yang Menyelesaikan Masalah Terkenal DateTime

Pembangun Python telah lama bergelut dengan modul datetime dalam pustaka standard, yang walaupun telah wujud selama lebih dua dekad, mengandungi banyak perangkap dan kes-kes pinggir yang boleh menjatuhkan pemprogram yang berpengalaman sekalipun. Pustaka baharu yang dipanggil Whenever bertujuan untuk menyelesaikan masalah-masalah ini dengan menyediakan alternatif yang selamat dari segi jenis dan sedar DST yang mengambil inspirasi daripada pustaka datetime yang mantap dalam bahasa pengaturcaraan lain.

Perbincangan mengenai Whenever menyoroti titik kesakitan biasa dalam ekosistem Python: pengendalian datetime penuh dengan tingkah laku yang tidak dijangka yang boleh menyebabkan pepijat halus dalam kod pengeluaran. Ramai pembangun menyatakan kelegaan kerana menemui pustaka yang secara khusus menangani isu-isu ini, dengan beberapa berkongsi kisah peperangan tentang pepijat berkaitan datetime yang mereka hadapi.

Masalah Pustaka Standard

Modul datetime bawaan Python telah dikritik kerana pengendalian Waktu Jimat Siang (DST) dan kekurangan keselamatan jenis. Salah satu isu yang paling banyak disebut adalah bahawa datetime tidak mengambil kira DST dengan betul ketika melakukan operasi aritmetik dalam satu zon waktu. Sebagai contoh, menambah 8 jam ke waktu tidur pada jam 10 malam semasa peralihan DST akan salah mengembalikan 6 pagi dan bukannya 7 pagi, kerana pustaka tidak mengambil kira jam yang hilang.

Aduan besar lain adalah bahawa sistem jenis Python tidak dapat membezakan antara datetime naif (tanpa maklumat zon waktu) dan datetime sedar (dengan maklumat zon waktu). Ini menjadikannya mustahil untuk menguatkuasakan pada tahap pemeriksaan jenis sama ada fungsi mengharapkan satu atau yang lain, yang membawa kepada potensi pepijat.

Saya seorang pengaturcara berpengalaman tetapi apabila saya berurusan dengan objek datetime, saya melakukan yang terbaik dengan ujian unit dan kemudian hanya berharap tiada kes-kes 'pinggir' ini berlaku kepada kami. Maksudnya: Saya tidak benar-benar tahu bagaimana ia berfungsi di dalamnya.

Pustaka Alternatif dan Kekangan Mereka

Sebelum Whenever, pembangun telah beralih kepada alternatif seperti Arrow dan Pendulum, tetapi pustaka-pustaka ini tidak sepenuhnya menangani isu-isu teras. Arrow mengekalkan masalah asas yang sama seperti pustaka standard dan menjadikan pemeriksaan jenis lebih sukar dengan mengurangkan semuanya kepada satu jenis Arrow sahaja. Pendulum cuba memperbaiki beberapa perangkap berkaitan DST tetapi telah mengalami kemerosotan prestasi dari masa ke masa dan kelihatan berada dalam keadaan limbo penyelenggaraan dengan hanya satu keluaran dalam empat tahun terakhir.

Ramai pengulas menyatakan bahawa mereka telah mencuba pelbagai pustaka tetapi masih berasa tidak pasti tentang kes-kes pinggir. Seorang pembangun menyebut bahawa dia telah menggunakan Arrow, Delorean, dan Pendulum sebelum memilih Whenever kerana ia lebih sesuai dengan apa yang saya lakukan dengan datetime dan kelihatan lebih aktif diselenggarakan.

Perbahasan Kebergantungan

Pengumuman Whenever mencetuskan perbahasan hangat tentang sama ada menggunakan pustaka pihak ketiga atau kekal dengan pustaka standard. Sesetengah pembangun menyatakan keutamaan untuk mengelakkan kebergantungan sama sekali, berhujah bahawa mereka membunuh projek dan mewujudkan beban penyelenggaraan. Yang lain membantah bahawa untuk domain kompleks seperti pengendalian datetime, pustaka yang diselenggarakan dengan baik yang dicipta oleh pakar domain adalah berbaloi dengan kos kebergantungan.

Pembangun penjagaan kesihatan khususnya menekankan bahawa mereka lebih suka menggunakan kebergantungan yang dipercayai daripada mengambil risiko melaksanakan logik datetime yang kompleks sendiri. Sentimen ini digemakan oleh yang lain yang menunjukkan bahawa walaupun pustaka standard diuji dengan baik, kecacatan reka bentuk asasnya tidak dapat diperbaiki tanpa perubahan yang merosakkan.

Prestasi dan Pelaksanaan

Whenever menawarkan kedua-dua pelaksanaan Rust dan Python tulen, dengan versi Rust menyediakan manfaat prestasi yang ketara. Menurut tanda aras yang dikongsi oleh pengarang, pelaksanaan Rust mengatasi kedua-dua pustaka standard dan alternatif pihak ketiga yang lain. Versi Python tulen adalah kira-kira 10 kali lebih perlahan daripada versi Rust tetapi masih secara umumnya lebih cepat daripada Arrow dan Pendulum.

Sesetengah pengguna menyatakan kebimbangan tentang kerumitan menggunakan pakej binari atau membina dari sumber, terutamanya mengenai pelaksanaan Python tulen yang memerlukan pembolehubah persekitaran khas untuk dipasang. Pengarang mengakui kebimbangan ini tetapi menjelaskan pertukaran yang terlibat dalam keputusan pembungkusan.

Perbandingan Perpustakaan

Ciri Whenever datetime Arrow Pendulum
Selamat-DST ⚠️
Sedar jenis/naif
Pantas ⚠️

Ciri-ciri Utama Whenever

  • Aritmetik DST yang selamat
  • API yang selamat dari segi jenis mencegah pepijat biasa
  • Berdasarkan konsep terbukti dari bahasa pengaturcaraan lain
  • Prestasi tinggi (terutamanya versi Rust)
  • Sokongan untuk aritmetik tarikh
  • Ketepatan nanosaat
  • Tersedia dalam Rust atau Python tulen

Melihat ke Hadapan

Kemunculan Whenever mencerminkan corak yang lebih luas yang dilihat dalam ekosistem bahasa lain. Java menghadapi isu datetime yang serupa sebelum memperkenalkan API baru dalam Java 8 (JSR-310) yang diilhamkan oleh pustaka popular Joda Time. JavaScript kini melaksanakan Temporal, API datetime baru yang menangani kebimbangan serupa.

Sesetengah pengulas menyatakan harapan bahawa Whenever boleh mengikuti jalan yang serupa, akhirnya mempengaruhi penambahbaikan kepada pustaka standard Python. Buat masa ini, bagaimanapun, pembangun yang bekerja dengan datetime dalam Python mempunyai pilihan baru yang menjanjikan untuk menjadikan kod mereka lebih boleh dipercayai dan boleh diselenggarakan.

Memandangkan pengendalian datetime terus menjadi aspek pembangunan perisian yang mencabar merentasi bahasa, pustaka seperti Whenever yang menggabungkan pengajaran yang dipelajari dari ekosistem lain menyediakan alat yang berharga untuk pembangun yang ingin menulis kod yang betul dan selamat dari segi jenis tanpa jatuh ke dalam perangkap biasa.

Rujukan: Whenever