


Hanya kerana bosan, sementara menunggu sesi temuduga susulan saya, saya membina perpustakaan mesin negara, dikuasakan oleh genruler. Saya membina satu pada masa lalu, tepatnya, semasa kerja pertama saya selepas tamat pengajian. Pelaksanaan ini secara longgar berdasarkan reka bentuk yang digubal oleh penyelia saya ketika itu. Projek ini juga bertujuan untuk mempamerkan cara peraturan DSL boleh digunakan.
Menurut ringkasan berguna yang dikembalikan oleh carian Google pada mesin keadaan terhingga (penekanan saya)
A “mesin keadaan terhingga” bermaksud model pengiraan di mana sistem hanya boleh berada dalam bilangan keadaan berbeza yang terhad pada bila-bila masa dan peralihan antara keadaan ini dicetuskan oleh input tertentu, pada asasnya membenarkan ia untuk memproses maklumat berdasarkan satu set syarat yang ditetapkan tanpa kemungkinan mempunyai bilangan keadaan yang tidak terhingga; “terhingga” di sini merujuk kepada set terhad kemungkinan keadaan sistem boleh wujud dalam.
Pustaka menerima kamus yang mewakili skema mesin keadaan terhingga. Sebagai contoh, kami ingin membina sistem penjejakan pesanan
Rajah mesin keadaan terhingga yang dijana oleh Graphviz
Dan skema akan kelihatan seperti ini (dalam bentuk YAML yang dipotong untuk kejelasan)
machine: initial_state: pending_payment states: pending_payment: name: pending payment transitions: order_authorization: name: order is authorized destination: authorized rule: (condition.equal (basic.field "is_authorized") (boolean.tautology)) authorized: name: authorized action: authorize_order transitions: order_partially_paid: name: order is partially paid destination: partially_paid rule: (boolean.tautology) order_fully_paid: name: order is fully paid destination: paid rule: (boolean.tautology) ...
Oleh itu, untuk menetapkan segala-galanya, kami memanggil
import genstates import yaml import order_processor with open("states.yaml") as schema: machine = genstates.Machine(yaml.safe_load(schema), order_processor)
Jadi dalam contoh fiksyen ini, kami akan menerima beberapa muatan apabila terdapat perubahan dalam pesanan. Sebagai contoh, apabila penjual mengakui pesanan, kami mendapat
{ "is_authorized": true, ... }
Kami kemudiannya boleh menyemak melalui perpustakaan
state = machine.initial # assume the order is created transition = machine.get_transition(state, "order_authorization") assert transition.check_condition(payload)
Semakan juga menjalankan semakan pengesahan tambahan jika ditakrifkan dalam skema. Ini berguna jika anda berhasrat untuk mengembalikan mesej ralat kepada pemanggil.
try: assert transition.check_condition(payload) except ValidationFailedError as e: logger.exception(e)
Kadangkala, kita tahu bahawa setiap kali muatan tiba, ia sepatutnya mencetuskan peralihan, tetapi kita tidak selalu tahu yang mana satu. Oleh itu, kami hanya menyampaikannya ke Machine.progress
try: state = machine.progress(state, payload) except ValidationFailedError as e: logger.exception(e)
Setelah mengetahui keadaan apa yang pesanan itu harus berkembang, kita boleh mula menulis kod untuk bekerja pada logik
# fetch the order from database order = Order.get(id=payload["order_id"]) current_state = machine.states[order.state] # fetch next state try: new_state = machine.progress(current_state, payload) except ValidationFailedError as e: # validation failed, do something logger.exception(e) return except MissingTransitionError as e: # can't find a valid transition from given payload logger.exception(e) return except DuplicateTransitionError as e: # found more than one transition from given payload logger.exception(e) return # do processing (example) log = Log.create(order=order, **payload) log.save() order.state = new_state.key order.save()
Sebaik-baiknya, saya juga boleh mengekstrak logik pemprosesan, itulah sebab saya mengimport pesanan_pemproses pada mulanya. Dalam definisi keadaan kebenaran, kami turut menentukan tindakan
authorized: name: authorized action: authorize_order ...
Jadi dalam modul order_processor, kami mentakrifkan fungsi baharu yang dipanggil authorized_order
def authorize_order(payload): # do the processing here instead pass
Supaya perkara berikut mungkin berlaku, apabila kod pengurusan negeri dipisahkan daripada logik pemprosesan yang lain
machine: initial_state: pending_payment states: pending_payment: name: pending payment transitions: order_authorization: name: order is authorized destination: authorized rule: (condition.equal (basic.field "is_authorized") (boolean.tautology)) authorized: name: authorized action: authorize_order transitions: order_partially_paid: name: order is partially paid destination: partially_paid rule: (boolean.tautology) order_fully_paid: name: order is fully paid destination: paid rule: (boolean.tautology) ...
Walau bagaimanapun, saya masih mengusahakannya sekarang dan harus melakukannya dalam keluaran seterusnya. Sementara itu, ia juga mampu melakukan sesuatu yang serupa dengan memetakan dan mengurangkan jika setiap negeri mempunyai tindakan yang ditentukan. Sila semak projek untuk kemajuan pembangunan. Dan kedua-dua genruler dan genstates kini menggunakan PyPI, yay!
Sekarang, bagaimana dengan perkara AI?
Saya memuat turun Codeium Windsurf selepas perpustakaan agak boleh digunakan. Saya akhirnya menggunakannya untuk menghilangkan kebergantungan dari genruler, dan menambahkan dokumentasi dan README pada projek itu. Untuk genstates, saya menggunakan lata untuk menghasilkan dokumentasi, README, serta ujian. Secara keseluruhannya, rasanya saya mempunyai pengaturcara pertengahan hingga senior untuk membantu saya menyelesaikan tugasan yang akan saya berikan kepada pelatih saya atau pun junior.
Kebanyakan logik teras masih datang dari hujung saya, secerdik model bahasa pada masa ini, mereka masih melakukan kesilapan di sana sini dan oleh itu, memerlukan pengawasan. Saya juga bereksperimen dengan model qwen2.5-coder:7b, dan ia berfungsi dengan baik, walaupun agak perlahan disebabkan stesen kerja saya yang buruk. Saya dapati harga yang diminta oleh Codeium adalah adil, jika saya ingin membina produk saya sendiri dan berjaya menjana wang daripadanya.
Walaupun bahagian penjanaan berfungsi dengan baik, tetapi menulis kod sebenar tidaklah sehebat itu. Saya tidak pasti sama ada Pylance berfungsi dengan baik di sana, menganggap ia adalah hak milik, atau sama ada ia disebabkan oleh penyiapan windsurf ajaib, editor saya tidak lagi dapat melakukan auto-import perpustakaan apabila saya menulis kod. Sebagai contoh, apabila saya melengkapkan fungsi reduce() secara automatik dalam kod saya, dalam vscode ia akan memasukkan secara automatik daripada import functools reduce ke dalam kod saya. Walau bagaimanapun, ini tidak berlaku dalam luncur angin, yang menjadikannya sedikit menjengkelkan. Walau bagaimanapun, memandangkan ini adalah baharu, pengalaman pengekodan harus diperbaiki dari semasa ke semasa.
Sebaliknya, saya masih mencari editor yang lebih ringan, dan zed memang menarik perhatian saya. Walau bagaimanapun, sejak Surface Book 2 saya meninggal dunia baru-baru ini, saya hanya tinggal dengan Samsung Galaxy Tab S7FE apabila saya jauh dari pejabat rumah saya. Oleh itu, vscode dengan frontend web (dan ia boleh digunakan secara mengejutkan) yang disambungkan ke stesen kerja saya masih menjadi editor utama saya (malah ia berfungsi dengan sambungan neovim).
AI Generatif yang dikuasakan oleh LLM dengan pantas mengubah kehidupan kita, tiada gunanya untuk menentangnya. Walau bagaimanapun, IMHO, kita juga harus mempunyai beberapa kekangan diri untuk tidak menggunakannya untuk segala-galanya. Ia benar-benar harus digunakan sebagai pelengkap kepada kerja inovatif atau kreatif, bukan pengganti kepada inovasi dan kreativiti.
Kita juga harus tahu apa yang dihasilkannya, bukannya menerima secara membuta tuli apa yang dilakukannya. Sebagai contoh, dalam genruler, saya membuatnya menambah baik README asal saya dengan contoh yang lebih luas. Daripada menerimanya sebagaimana adanya, saya membuatnya untuk menjana ujian untuk semua contoh yang dijana dalam README, jadi kod contoh itu lulus dan berfungsi seperti yang saya maksudkan.
Secara keseluruhan, ya, saya rasa editor yang dipertingkatkan AI Generatif ini berbaloi dengan wang yang mereka minta. Akhirnya, ini adalah alatan, ia bertujuan untuk menawarkan bantuan untuk bekerja, bukan menggantikan orang yang menekan papan kekunci.
Atas ialah kandungan terperinci Membina perpustakaan mesin negeri dengan bantuan daripada alatan AI. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Tutorial ini menunjukkan cara menggunakan Python untuk memproses konsep statistik undang -undang ZIPF dan menunjukkan kecekapan membaca dan menyusun fail teks besar Python semasa memproses undang -undang. Anda mungkin tertanya -tanya apa maksud pengedaran ZIPF istilah. Untuk memahami istilah ini, kita perlu menentukan undang -undang Zipf. Jangan risau, saya akan cuba memudahkan arahan. Undang -undang Zipf Undang -undang Zipf hanya bermaksud: Dalam korpus bahasa semulajadi yang besar, kata -kata yang paling kerap berlaku muncul kira -kira dua kali lebih kerap sebagai kata -kata kerap kedua, tiga kali sebagai kata -kata kerap ketiga, empat kali sebagai kata -kata kerap keempat, dan sebagainya. Mari kita lihat contoh. Jika anda melihat corpus coklat dalam bahasa Inggeris Amerika, anda akan melihat bahawa perkataan yang paling kerap adalah "th

Artikel ini menerangkan cara menggunakan sup yang indah, perpustakaan python, untuk menghuraikan html. Ia memperincikan kaedah biasa seperti mencari (), find_all (), pilih (), dan get_text () untuk pengekstrakan data, pengendalian struktur dan kesilapan HTML yang pelbagai, dan alternatif (sel

Berurusan dengan imej yang bising adalah masalah biasa, terutamanya dengan telefon bimbit atau foto kamera resolusi rendah. Tutorial ini meneroka teknik penapisan imej di Python menggunakan OpenCV untuk menangani isu ini. Penapisan Imej: Alat yang berkuasa Penapis Imej

Artikel ini membandingkan tensorflow dan pytorch untuk pembelajaran mendalam. Ia memperincikan langkah -langkah yang terlibat: penyediaan data, bangunan model, latihan, penilaian, dan penempatan. Perbezaan utama antara rangka kerja, terutamanya mengenai grap pengiraan

Python, kegemaran sains dan pemprosesan data, menawarkan ekosistem yang kaya untuk pengkomputeran berprestasi tinggi. Walau bagaimanapun, pengaturcaraan selari dalam Python memberikan cabaran yang unik. Tutorial ini meneroka cabaran -cabaran ini, memberi tumpuan kepada Interprete Global

Tutorial ini menunjukkan mewujudkan struktur data saluran paip tersuai di Python 3, memanfaatkan kelas dan pengendali yang berlebihan untuk fungsi yang dipertingkatkan. Fleksibiliti saluran paip terletak pada keupayaannya untuk menggunakan siri fungsi ke set data, GE

Serialization dan deserialization objek Python adalah aspek utama dari mana-mana program bukan remeh. Jika anda menyimpan sesuatu ke fail python, anda melakukan siri objek dan deserialization jika anda membaca fail konfigurasi, atau jika anda menjawab permintaan HTTP. Dalam erti kata, siri dan deserialization adalah perkara yang paling membosankan di dunia. Siapa yang peduli dengan semua format dan protokol ini? Anda mahu berterusan atau mengalirkan beberapa objek python dan mengambilnya sepenuhnya pada masa yang akan datang. Ini adalah cara yang baik untuk melihat dunia pada tahap konseptual. Walau bagaimanapun, pada tahap praktikal, skim siri, format atau protokol yang anda pilih boleh menentukan kelajuan, keselamatan, kebebasan status penyelenggaraan, dan aspek lain dari program

Modul Statistik Python menyediakan keupayaan analisis statistik data yang kuat untuk membantu kami dengan cepat memahami ciri -ciri keseluruhan data, seperti biostatistik dan analisis perniagaan. Daripada melihat titik data satu demi satu, cuma melihat statistik seperti min atau varians untuk menemui trend dan ciri dalam data asal yang mungkin diabaikan, dan membandingkan dataset besar dengan lebih mudah dan berkesan. Tutorial ini akan menjelaskan cara mengira min dan mengukur tahap penyebaran dataset. Kecuali dinyatakan sebaliknya, semua fungsi dalam modul ini menyokong pengiraan fungsi min () dan bukan hanya menjumlahkan purata. Nombor titik terapung juga boleh digunakan. Import secara rawak Statistik import dari fracti


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Muat turun versi mac editor Atom
Editor sumber terbuka yang paling popular

ZendStudio 13.5.1 Mac
Persekitaran pembangunan bersepadu PHP yang berkuasa

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Dreamweaver Mac版
Alat pembangunan web visual
