Zig S-expression motoru ve yazılı KiCad modellerinin nasıl çalıştığını, Python'a (pyzig_sexp) nasıl expose edildiğini ve parsing, formatting ile freeing işlemlerindeki değişmezleri öğrenin. KiCad dosya parsing, S-expression oluşturma veya layout senkronizasyonu yaparken kullanın.
cd ~/.claude/skills
git clone https://github.com/atopile/atopile.git atopile mkdir -p ~/.claude/skills/sexp
curl -fsSL https://raw.githubusercontent.com/atopile/atopile/HEAD/.claude/skills/sexp/SKILL.md \
-o ~/.claude/skills/sexp/SKILL.md Sexp alt sistemi şunları sağlar:
pyzig_sexp extension modülü aracılığıyla Python'a açık hale getirilmiş.Kaynak-of-truth dokümanları ve kod:
src/faebryk/core/zig/README.md (üst düzey genel bakış)src/faebryk/core/zig/src/sexp/* (tokenizer/AST/yapı)src/faebryk/core/zig/src/python/sexp/sexp_py.zig (Python API + kritik bellek kuralları)from pathlib import Path
from faebryk.libs.kicad.fileformats import kicad
pcb = kicad.loads(kicad.pcb.PcbFile, Path("board.kicad_pcb"))
_text = kicad.dumps(pcb)
src/faebryk/core/zig/src/sexp/tokenizer.zig (tokenization + satır/sütun takibi)src/faebryk/core/zig/src/sexp/ast.zig (SExp ağacı + KiCad pretty formatting)src/faebryk/core/zig/src/sexp/structure.zig (decode/encode + hata bağlamı)src/faebryk/core/zig/src/sexp/kicad/* (yazılı KiCad modelleri)src/faebryk/core/zig/src/python/sexp/init.zig (PyInit_pyzig_sexp dışa aktarır)src/faebryk/core/zig/src/python/sexp/sexp_py.zig (modül + tür bağlama oluşturma)src/faebryk/core/zig/gen/sexp/*.pyisrc/faebryk/libs/kicad/fileformats.py (ad alanlarını modüller + önbelleğe alma + loads/dumps)src/faebryk/libs/kicad/fileformats.py (birincil entegrasyon katmanı)src/faebryk/exporters/pcb/kicad/*src/faebryk/exporters/pcb/layout/layout_sync.pysrc/atopile/kicad_plugin/*SExp parsing/formatting (tokenizer.zig, ast.zig)structure.zig + sexp/kicad/*.zig)pcb, netlist) şu şekilde açığa çıkarır:
loads(data: str) -> Filedumps(file: File) -> strFile.free(...)faebryk.libs.kicad.fileformats.kicad bu modülleri sarar ve kicad.loads(...)/kicad.dumps(...) sağlar.src/faebryk/core/zig/src/sexp/*src/faebryk/core/zig/src/python/sexp/sexp_py.zigato dev compile (faebryk.core.zig içe aktarır)src/faebryk/core/zig/gen/sexp/*.pyi altındaki stub'ların buna göre güncellediğini doğrulasrc/faebryk/libs/kicad/fileformats.py ayarla.kicad_pcb / .kicad_sch yükle, dump et ve KiCad'in bunu kabul ettiğini doğrula (formatting duyarlı).zig test src/faebryk/core/zig/src/sexp/ast.zigzig test src/faebryk/core/zig/src/sexp/structure.zigfaebryk.libs.kicad.fileformats.kicad tercih et.kicad.loads(...) içindeki shared-object önbelleğe almaya dikkat et: yol tabanlı yüklemeler önbelleğe alınır ve referans olarak döndürülür (mutasyonlar paylaşılır).Python bağlamaları, ayrıştırılan structs giriş arabelleğine işaretçiler içerdiği için giriş S-expression dizesini kalıcı bir ayırıcıya çoğaltır.
Çıkarımlar:
loads(...) işlemleri, döndürülen *File üzerinde hiçbir zaman free(...) çağırmazsanız belleği büyütebilir.free(...) çağırma.2 veya daha fazla bağımsız görevin paralel olarak yürütülebileceği ve aralarında state paylaşımı ya da sıralı bağımlılık olmadığı durumlarda kullanın.
Ayrı bir oturumda inceleme kontrol noktaları ile yürütülecek yazılı bir uygulama planınız olduğunda kullanın.
Mevcut oturumda bağımsız görevlerle uygulama planlarını yürütürken kullanın
Herhangi bir hata, test başarısızlığı veya beklenmeyen davranışla karşılaştığınızda, çözüm önerisi sunmadan önce kullanın.
Herhangi bir feature ya da bugfix uygulamaya başlamadan önce kullanın.
Yeni beceriler oluştururken, mevcut becerileri düzenlerken veya dağıtımdan önce becerileri doğrularken kullanın.