5 puan yazan darjeeling 2026-02-05 | 1 yorum | WhatsApp'ta paylaş

Özet:

  • Yaklaşık 20 yıldır PLY (Python Lex-Yacc) tabanlı çalışan C dili ayrıştırıcısı pycparserın, LLM kodlama ajanı (Codex) kullanılarak elle yazılmış bir Recursive Descent ayrıştırıcısıyla tamamen değiştirilme süreci ele alınıyor.
  • Harici bağımlılığın (PLY) kaldırılması, bakım zorluğunun azaltılması ve performansta %30 artış gibi sonuçlar elde edildi; ayrıca büyük ölçekli eski kod tabanı refaktörlerinde LLM'lerin pratik faydası gösterildi.
  • LLM'in ürettiği kodun kalite sorunlarını (okunabilirlik, karmaşıklık vb.) çözmek için insan geliştiricinin yinelemeli incelemesi ve prompt mühendisliğinin önemi vurgulanıyor.

Ayrıntılı özet:

  1. Arka plan ve motivasyon
    pycparser, günde yaklaşık 20 milyon indirme alan önemli bir açık kaynak projedir. Daha önce C99 dilbilgisini işlemek için PLY kütüphanesini kullanıyordu, ancak zamanla şu sorunlar birikti:
  • Bağımlılık sorunu: PLY kütüphanesinin bakımı durdurulduğu için (Archived) güvenlik ve sürdürülebilir bakım riskleri ortaya çıktı.
  • Dilbilgisi karmaşıklığı: C11, C23 gibi yeni standartlar ve genişletilmiş dilbilgisi desteklenirken, YACC'a özgü reduce-reduce çakışmaları sıklaşarak genişletmeyi zorlaştırdı.
  • Felsefi değişim: Yazar, zamanla parser generator yerine doğrudan yazılmış bir Recursive Descent ayrıştırıcısının anlama ve bakım açısından daha avantajlı olduğuna ikna oldu.
  1. LLM (Codex) ile işbirliği süreci
    Yazar, tek başına bir haftadan uzun süreceğini düşündüğü bu işi LLM'e vermeye karar verdi. pycparser'ın sahip olduğu 2.500 satırdan fazla güçlü test paketi, LLM çıktısını doğrulayan bir "guardrail" görevi gördü.
  • İlk taşıma: "lexer'ı olduğu gibi bırakıp yalnızca parser'ı Recursive Descent'e çevir" şeklindeki prompt üzerine Codex, bir saatten uzun süre çalışarak testleri geçen bir prototip üretti.
  • Yinelemeli iyileştirme: İlk kod işlevsel olarak kusursuzdu, ancak okunabilirliği düşüktü ve istisna işlemeyi kontrol akışında aşırı kullanıyordu; bu da kalite açısından eksiklikler doğuruyordu. Yazar, Git branch'lerini aktif biçimde kullanarak onlarca commit boyunca kodu iyileştirdi.
  1. Sonuçlar ve çıkarımlar
  • Performans artışı: Elle yazılmış ayrıştırıcı, önceki YACC tabanlı sürümden yaklaşık %30 daha hızlıydı.
  • Kod kalitesi ve bakım: LLM, tembelce ya da gereksiz derecede karmaşık kod yazma eğiliminde olsa da, geliştirici açık talimatlar verdiğinde (ör. "X'i Y ile değiştir", "yorum ekle") etkili şekilde karşılık verdi.
  • Statik tiplemenin önemi: Sonraki çalışmalarda Python Type Annotation eklendiğinde, LLM'in öneri doğruluğu daha da yükseldi. Yazar, gelecekte kodlama ajanlarının Rust veya TypeScript gibi güçlü tipli dillerde daha da etkileyici performans göstereceğini öngörüyor.
  1. Sonuç
    Yazar, bu projeyle LLM'lerin basit bir oyuncak değil, gerçek üretkenliği 10 katın üzerinde artırabilen araçlar olduğunu doğruladı. Yaklaşık 30-40 saat sürecek bir işi 4-5 saatte tamamladı ve geliştiricinin akışa (Flow) girmesini hızlandıran bir katalizör olarak LLM'in değerini yüksek değerlendirdi.

1 yorum

 
ng0301 2026-02-05

Zaten en başta o işi 30~40 saatte yapmayı düşünmek bile tam bir usta işi...