- Geçmişte Ada geliştirme ortamı, kod biçimlendirme sorununu zaten çözmüş bir deneyime sahipti
- Geliştiriciler kodu DIANA ara gösterimi (IR) biçiminde ele alıyor ve herkes kendi istediği pretty-printing ayarlarıyla görüntülüyordu
- Günümüzde de linter ya da biçimlendirme politikaları nedeniyle tekrarlanan verimsizlikler ve tartışmalar sürüyor
- O dönemin Rational R1000 iş istasyonu, yenilikçi geliştirme ortamı ve özellikler sunuyordu
- Yazı, kod biçimlendirme sorununda bir nesil önceki yaklaşımdan yararlanarak bugünün geliştirme pratiklerini değiştirecek fikirler öneriyor
Kod biçimlendirme tartışması – 1980'lerin çözümü
- Yazar, lise yıllarında Ada derleyicisi üzerinde çalışan bilgisayar bilimi öğretmeni Mr. Paige ile yaşadığı deneyimden söz ediyor
- 2016'da linter aracı ayarlarından duyduğu rahatsızlığı dile getirip “neden hâlâ böyle sorunlar yaşıyoruz?” diye sorduğunda, bu sorunun aslında 40 yılı aşkın süre önce çözüldüğünü öğreniyor
Ada ve DIANA'nın ortaya çıkışı
- Ada geliştiricileri metin kaynak kodu saklamak yerine, DIANA (Descriptive Intermediate Attributed Notation for Ada) adlı bir ara gösterim kullanıyordu
- Her geliştirici, kaynağı kendi pretty-printing ayarlarıyla istediği biçimde görüntüleyebiliyordu
- Biçimlendirme tartışmaları ya da linter sorunları yoktu; editörde program ağacı doğrudan düzenlenebiliyordu (modern projectional editing yaklaşımına benzer)
Rational R1000 – öncü bir geliştirme ortamı
- Rational R1000 iş istasyonu, artımlı derleme, statik analiz, sürüm kontrolü, hata ayıklama gibi çeşitli gelişmiş özellikleri yerleşik olarak sunuyordu
- DoD gibi devlet projelerinde, Uluslararası Uzay İstasyonu'nda (ISS), F-22 savaş uçağı gibi kritik yazılım geliştirme çalışmalarında kullanıldı ve UML'nin doğuşuna da katkı sağladı
- Grady Booch'a göre R1000, DIANA tabanlı bir makineydi; kaynak kodu saklamıyor, yalnızca DIANA ağacının pretty-printing çıktısını kullanıyordu
DIANA tabanlı geliştirmenin avantajları
- Biçimlendirme tartışmalarına, linter ayarlarına ya da editör ortamını tek tip hale getirmeye ihtiyaç yoktu
- Donanım hızlandırması sayesinde artımlı derleme, kolay refactoring, hızlı entegrasyon gibi yenilikçi bir geliştirme deneyimi sunuyordu
- Geliştirme verimliliği ve büyük sistemler üzerinde çalışma açısından önemli etkiler yarattı
Günümüz için çıkarımlar
- Donanım hızlandırmalı derleme artık daha az önemli olsa da, biçimlendirme sorununu çözme konusunda bugün hâlâ eksikler var
- Ana akım yaklaşım projectional editing ya da canlı ortamlar olmasa da, geçmişteki bu yaklaşım gibi daha verimli ve daha az tartışmalı geliştirme pratiklerinin benimsenmesini düşünmenin zamanı gelmiş olabilir
Kaynaklar
- Yazar, bu konuyu araştırırken R1000 ile ilgili çeşitli belge ve teknik raporlara atıfta bulunuyor
4 yorum
Bildiğim kadarıyla paylaşılan kodu ortak bir ayar üzerinden otomatik olarak biçimlendiren bir özellik zaten var ve şirketler de bunu oldukça yaygın kullanıyor.
Bence asıl mesele otomatik formatlama değil; belirli bir formatlamanın üstün olduğuna dair algının ya da kendi formatlamamı bırakıp yabancı bir formatlamaya uyum sağlama sürecinin baştan gereksiz olması. Çünkü mantık, formatlamaya bağlı olmayan bir ara gösterimi saklayıp ardından kullanıcının tercihine göre bunu rahat ettiği biçimde pretty-print etmek.
Aslında söylemek istediğim, otomatik biçimlendirmeyle ara temsillere gerek kalmadan mevcut dillerle aynı işi yapmanın mümkün olduğuydu; ama açıklamam yetersiz kalmış.
Hacker News görüşleri
registergibi sözcükleri memnuniyetle kullanan bir kültür varken pointer'ların yıldız işaretiyle (*) gösterilmesi gibi gelenekler var. Oysa her gösterim daha sezgisel ve daha açık olabilirken, insanlar inatla karmaşık ve ayırt etmesi zor yöntemlere bağlı kalıyor. Simgeler ya da reserved keyword'ler de daha tanıdık ve doğal terimlerle değiştirilebilirdi ama geleneksel/mevcut kabullere aşırı bağlılık yüzünden okunabilirlikten ödün verildiğini düşünüyorum. Örnek olarak C kodundakistrcpyfonksiyonunun daha açık ve daha okunaklı terimler ve sözdizimiyle baştan kurgulanabileceği anlatılıyor.char *argv[]gibi örneklerle karmaşık bildirimlerin okunabilirlik sorunu eleştiriliyor. Ayrıca C++ tarzı formatting'in (char* a, bgibi) yanlış anlamaya yol açabileceği, bu yüzden bu tarzın kaçınılması gereken bir yaklaşım olduğu söyleniyor.shouldveunnecessarykelimelerinin bağlamını anlamak faydalı olur.=işaretine göre hizalanması mı, yoksa yapının derinliğini daha görünür kılmak için girintiyle tab eklenmesi mi seçileceği farklı sonuçlar doğurur. Değerin kendisini vurgulamak isterseniz sayıları sağa hizalayabilirsiniz; yapıyı vurgulamak isterseniz member değişkenlerini gözle daha rahat izlenecek şekilde hizalayabilirsiniz. Yazarın vurgulamak istediği kod boyutu değişebilir. Ek metadata olmadan bu bilgi AST'den çıkarılamaz deniyor.setValue([bar, glob], 1)gibi yapılarla ya da stil override için yorum sözdizimiyle çeşitli çözümler uygulanabilir.