Kötü haberler, Emacs
(eshelyaron.com)- Emacs 30’un registers özelliğindeki değişikliklere yönelik bir eleştiri yazısıydı, ancak şu anda herkese açık metinde özgün içerik kaldırılmış durumda
- Özgün metin, Emacs’in son dönemdeki gelişimini aşırı derecede eleştirel ele aldığı ve ilgili kişilere karşı nazik olmadığı gerekçesiyle silinmiş
- Kaldırılan içeriği görmek isteyenlere yalnızca yazarın web sitesindeki Git logunu incelemeleri yönünde bir not bırakılmış
- Geriye kalan temel nokta, yazarın Emacs’in biraz farklı bir branch sürümünü günlük kullanım için kullanmaya başladığı
- Şu anki açık metinle Emacs 30 registers özelliğindeki somut değişiklikleri veya teknik tartışma noktalarını doğrulamak zor
Kaldırılan Emacs 30 eleştiri yazısı
- Özgün metin, Emacs 30’un registers özelliğinde kötüye gittiği düşünülen değişiklikleri ele alan bir yazıydı
- Açık metinde, özgün yazının Emacs’in yakın dönem geliştirmelerini aşırı biçimde eleştirdiği ve ilgili kişilere karşı nazik olmadığı için kaldırıldığı bilgisi yer alıyor
- Önceki blog yazılarına kıyasla çok daha fazla ilgi görmüş olması da kaldırılma gerekçeleri arasında anılıyor
Şu anda doğrulanabilen bilgiler
- Kaldırılan yazıyı mutlaka okumak istiyorsanız bu web sitesinin Git logunu inceleyebilirsiniz
- Yazar, Emacs’in biraz farklı bir branch sürümünü günlük kullanım için kullanmaya başladığını belirtiyor
- Şu anda açık olan metinde, Emacs 30 registers özelliğindeki değişikliklerin somut sorunları, örnekleri veya yama içeriği yer almıyor
1 yorum
Hacker News yorumları
Emacs geliştirme dalına, kasıtlı olsun ya da olmasın, uyumluluğu bozan bir değişiklik girip bazı kullanıcılar endişelerini dile getirdiğinde süreç bunu hemen geri almak şeklinde ilerlemez.
Artıları ve eksileri tartışmak, çeşitli çözümleri uygulayıp iyileştirmek ve ardından bir uzlaşma noktası bulmak gerekir. Kullanıcıların endişelerini dile getirmesinin üzerinden yalnızca 3 gün geçtiğine göre bu sürecin çoktan bitmiş olması gerektiğini söylemek zor.
Eli’nin son yanıtının özü de şuydu: “İlk tartışmaya katılan iki kişi yeni davranışın eski davranıştan çok daha makul olduğunu düşündü, ama şimdi karşı görüşler de geldiğine göre davranışı tartışmaya devam edebilir, ardından varsayılan değeri konuşabiliriz.”
Emacs’in geliştirilme biçiminde ciddi sorunlar olduğunu düşünüyorum; ancak kullanıcıların normalde emacs-devel’deki inatçı kişileri suçlayıp, kendi hoşlanmadıkları bir değişiklik girince de dünyanın sonu gelmiş gibi davranmaları da bir sorun. Bu, bakımcıların savunmacı hale gelmesine yol açıyor.
E-posta dizisini okuduğunuzda bunun “kibir”den ziyade güçlü bir görüş ayrılığı olduğu görülüyor; uzlaşmanın zaman alması kaçınılmaz. Biri kendi bakış açınıza göre hemen geri adım atmıyor diye onu herkesin önünde “kibirli” diye nitelemek ve diziyi okumayacak bir kalabalığı işin içine çekmeye çalışmak, tacize yakın görünüyor.
Ayrıca değişikliği isteğe bağlı hale getiren yamanın görmezden gelindiğini söylemek de dürüstçe değil. O yama yalnızca isteğe bağlılık eklemiyordu; başka değişiklikleri de kaldırdığı için reddedildi. Sorumluluğu bu şekilde tek bir kişiye yüklemek de kabul edilebilir değil.
Kullanıcılar tepki vermeseydi, açıklanan sürece göre karşı çıktıkları ilk değişikliğin aynen girmiş olması kuvvetle muhtemeldi. clojure-mode’da da rms, uzun süredir korunan Clojure topluluğu yazarının adını alıp yeniden yazmaya çalışmıştı; insanlar listede itiraz ederek bunu durdurdu, ama sonrasında bu kişilere abarttıkları söylendi. Bu yüzden “abartı” eleştirisi pek anlamlı görünmüyor.
Geniş toplulukla tartışmadan kullanıcı akışını bozan bir özelliği ana dala koyarsanız insanların öfkelenmesi doğaldır. Bu tür bir birleştirme, eski araçların topluluk desteğini kaybetme biçimidir.
Uyumluluğu bozan bir değişikliği hemen geri almayı ciddi biçimde değerlendirmiyorlarsa, bu Emacs geliştiricilerinin artık geriye dönük uyumluluğa eskisi kadar önem vermediğinin işareti olur ve bu da mevcut kullanıcıların kayda değer bir kısmını gözden çıkarmak anlamına gelir.
https://www.murilopereira.com/the-values-of-emacs-the-neovim...
Temel değerler önemlidir. Emacs bakımcıları temel değerleri ihlal etti ve topluluğun bundan rahatsız olması haklı.
Kullanıcı iş akışlarını bozup bunu isteğe bağlı hale bile getirmemek, opt-in bir yana kapatılabilir bile yapmamak, kullanıcı deneyimini umursamazca yok saymak gibi görünüyor.
Anladığımı özetlersem, yakın zamanda Emacs’te kopyalamadan biraz daha genel olan register işlemlerini değiştiren bir commit kabul edilmiş.
Artık Emacs ne olup bittiğini gösteren bir minibuffer açıyor ve değişikliği Enter ya da buna karşılık gelen bir girişle onaylamanız gerekiyor. Asıl yazının yazarı bunu, varsayılan davranışı değiştirdiği, kolayca bir ayarla kapatılamayabileceği ve yeterince tartışılmadığı için korkunç bir uyumluluk kırılması olarak görüyor.
Vim benzetmesiyle, geçerli satırı
dregister’ına kopyalamak için"dyyyazdığınızda, ardından bir scratch buffer açıp metni ve buffer’ı göstererek kapatmak için bir tuş girişi istemesi gibi. Register’ları anlayan tipik bir Vim kullanıcısı için berbat olurdu; ancak görsel modda kopyalayanlar gibi “neyin kopyalandığını açıkça gösteren” davranışı tercih edenler de olabilir.Yazının geri kalanı, asıl yazı yazarının tartışma başlatmaya çalıştığını ama commit’in yazarı Thierry’nin bunu engellediğini ve örtük olarak Emacs geliştirici topluluğunun geri kalanının da sorumluluk taşıdığını söylüyor.
Emacs’i onlarca yıldır kullanıyorum ama register’lara derinlemesine girmedim; kişisel olarak kopyalama için kill/yank, karmaşık düzenlemeler için de çoklu imleçler ya da tek seferlik klavye makroları kullandım. Yine de Emacs’te kas hafızasına güvenmek isteyenler için çok sayıda isteğe bağlı gelişmiş düzenleme özelliği var.
Buraya bir onay tuşu eklemek garip. Elektronik piyanoya “alışılmadık akoru onaylama pedalı” takmak gibi; hızlı ve karmaşık bir giriş eylemine bir adım daha ekliyor.
Emacs’in mükemmel geri alma desteği var; dolayısıyla “d register’ındaki içeriği yapıştırayım mı?” diye sormak yerine doğrudan yapıştırıp, kullanıcı yanlış seçtiyse geri almasına izin vermek yeterli.
Bu yüzden burada uyumluluğu kırmak garip; kapatma yolu da yoksa birçok kullanıcının kızması anlaşılır. Emacs modern GUI alışkanlıklarından daha eski bir araç, bu yüzden yeni kullanıcılara vscodium kadar tanıdık gelemez; bu nedenle power user’lara mümkün olduğunca iyi hizmet etme tarafının da ikna edici bir yanı var.
kill-ring-save, varsayılanM-wbundan etkilenmiyor; yalnızca daha gelişmiş bir özellik olan register’a kaydetme değişiyor.Register, pano yani kill ring’in bir üst kümesi değildir.
Ayrıca bu değişikliğin yapılandırılamaz olacağını söyleyenler Emacs’in özelleştirilebilirliğini pek bilmiyor gibi. “Ayar” yalnızca kolaylık içindir; isterseniz kodun tamamını değiştirebilirsiniz. Bu, Emacs’in Elisp kısmı ve olduğu gibi girse bile birkaç dakika içinde davranışı değiştiren bir paket çıkar. Fork gerektiren bir şey değil; burada fork’tan bahsetmek olsa olsa performatif bir jest sayılır.
Geri alınmazsa, ek tuş girişini benim yerime işleyecek bir makro parçası bulabilmeyi umuyorum. Emacs zaten basit işler için bile çok tuş girişi gerektiriyor; bu değişiklik için kendi makromu yapacak kadar uzman değilim.
Görünüşe göre bu iş, Thierry’nin register davranışında birkaç sorun bulup düzeltmeye çalışmasıyla başladı.
En önemli kusur,
C-x r SPCilesave-to-registerçalıştırıldıktan sonra basılan sonraki herhangi bir tuşun, o tuşa karşılık gelen register’a metni kaydetmesiydi. Özellikle Emacs’in evrensel iptal tuşu olanC-gbile burada çalışmıyor; bunun yerine metin ya da konum^gadlı register’a kaydediliyordu.jump-to-registerya dainsert-registeryanlışlıkla çalıştırılsa bileC-ggibi bir şeyle iptal edilemiyor, mutlaka bir register seçmek gerekiyordu.İkincisi, register’lar metin, konum ya da boş değerlerden birini içerebilir.
jump-to-registeryalnızca konum içeren register’larda çalışır,insert-registerise metin bekler. Emacs komut çalıştırılırken boş olmayan register’ların önizlemesini sağlıyordu; ancak örneğin içinde string olan register’ları dajump-to-registeradayı olarak gösteriyor, ayrım yapmıyordu.Thierry bu sorunları ve kod incelemesi geri bildirimlerini düzeltmeye çalıştı; incelemeciler de ek etkileşim doğsa bile bunun önemli bir değişiklik olduğunu düşündü. Normal bir register seçiminin ardından
RETbasmak ya da^ggibi garip bir register’a kaydetmek için ek tuş kullanmak gibi uyumluluk kırılmalarını, elde edilen faydaya kıyasla kabul edilebilir gördüler.Asıl yazının yazarı yeni davranış ile eski davranış arasında geçiş yapan bir anahtar istedi ve kendisine yama göndermesi söylendi; ancak sunduğu yama, yukarıda bahsedilen iyileştirmelerin hepsini geri alıyor ve bambaşka bir özellik olan “boş olmayan register’ın üzerine yazmayı onaylama”yı bayrak tabanlı şekilde uyguluyordu. Thierry bunu uygulayıp denedi ve kısa bir geri bildirim verdi; yazar ise fiilen “buna gerek yok” diye yanıtladı.
Sonrasında daha fazla kişi özelliği kullanınca, kırıcı değişikliğin etkisinin küçük olduğu yönündeki Thierry ve ilk incelemecilerin inancı yanlış çıktı; Thierry de yeni çalışmayı korurken eski akışa da izin veren bir bayrak oluşturmaya başladı. Özellikle fazladan
RETgereksiniminin kaldırılması özden ziyade yan etkiye yakındı.Genel olarak süreç oldukça iyi işliyor gibi görünüyor; bağlamı yok sayıp “kabaca çalışıyorsa hiçbir şekilde değiştirilmemeli” şeklindeki anti-hacker bir tavırla tartışmayı zorlamaya çalışan taraf daha çok asıl yazının yazarı gibi duruyor.
dyy’nin geçerli satırı silmek anlamına geleceğini tahmin ederdim.Ama muhtemelen acemi olduğumun kanıtı da budur.
Bu posta listesi başlığına bakılırsa ilgili davranışı geri alan bir seçenek eklenecek gibi görünüyor: https://yhetil.org/emacs/87h6kr9817.fsf@posteo.net/#t
Bu seçenek asıl yazı yayımlanmadan önce zaten anılmış gibi, ama yazar görmemiş olabilir. Bu sorunu çözecek gibi görünüyor; yine de gözden kaçırdığım bir şey olabilir.
Düzeltme: Aşağıda ginko’nun yanıtına bakılırsa hâlâ RETURN tuşuna basmak gerekecek gibi.
RETgerekiyor gibi görünüyor.https://yhetil.org/emacs/87a5qi1vui.fsf@posteo.net/
register-use-previewsbu davranışın toggle’ı gibi görünüyor.Ancak
neverolarak ayarlansa bile belirli iş akışlarında onayın çıktığı bir bug’dan söz ediliyor. Gerçekten bir seçenekse endişelerin çoğu çözülecek gibi.Emacs’te kas hafızası birinci sınıf bir mesele konumuna yükseltilmeli
Çünkü biriktirdiğim kas hafızası bozulmuştu. Sakinleşene kadar epey kötü niyetli düşünceler de geçirdim. Önemsiz görünebilir ama “kas hafızasına ihanet” suçuna verilen tepkinin “fork you” noktasına kadar büyümesinin nedenini anlayabiliyorum.
Bu, Emacs için olduğu kadar Google Maps veya iOS için de aynı şekilde geçerli.
Kas hafızası, her küçük etkileşimde görsel olarak kontrol etmek zorunda kalmadan, yazılımı “bakmadan” yarı asenkron biçimde kullanmayı sağlar. Ne yazık ki masaüstü yazılımlarında klavye kullanımını giderek daha zahmetli hâle getiren ya da tamamen imkânsızlaştıran bir eğilim var.
İyi bir rant, ama ele aldığı özelliğin gerçekte ne olduğunu açıklamaması ikna ediciliğe yardımcı olmuyor.
Emacs register’ları çok eski bir soyutlama. Register’lara ayrı bir pano gibi değer koyup geri alabilirsiniz; temel ASCII sembolleri
[a-zA-Z0-9]ile ilişkilendirilmiş 62 tane oldukları için esnek ve hızlı bir klavye arayüzü sunarlar. Register’dan klavye makrosu çalıştırmak gibi eğlenceli şeyler de mümkündür. Bunları çok kullananlar var ama ben şahsen kullanmıyorum.Yazarın kızmasının nedeni, varsayılan bağlamanın değişmesi ve eskiden tamamen klavye ve home row ile yapılan bir işin önüne modal UI sokulması. Makul bir şikâyet gibi geliyor; benim kas hafızama işlemiş bir özellik böyle değiştirilseydi ben de sinirlenirdim.
Seçme ile yapıştırma arasına her seferinde onay isteyen modal bir diyalog girse ve eski davranışa dönmek için bir ayar da olmasa kesinlikle öfkelenirdim. Eski davranışı seçenek olarak uygulamak yeterli. Kelimenin tam anlamıyla birkaç satır kodla yapılabilir.
C-aregister erişimini bozması.Tanıdığım biri konumlar için harfleri, metin için
C-harfkullanıyor. Birileri için çok uç bir durum olabilir ama bu kişilerin çok öfkeleneceğini düşünüyorum.https://yhetil.org/emacs/8334wawfvg.fsf@gnu.org/ adresinde Eli, “itiraz geldiğine göre davranışın ne olması gerektiğini tartışmaya devam ediyoruz; sonuca vardığımızda varsayılanı konuşabiliriz” diyor.
Orijinal yazı yazarının yorumu iyi değil. Kararlılık isteyen kullanıcılar release branch’te olmalı ya da master’daki commit’i sabitlemeli.
Geliştirme branch’inin, devam eden özelliklerin geliştirilmesi için kullanılması beklenmeli; bu tür özelliklerin cilalanması zaman alabilir. master’ı takip ediyorsanız sık sık uyumluluğu bozan değişikliklerle karşılaşırsınız ve iş akışınızı bozan bir şey olduğunda önceki commit’e dönmeye alışkın olmanız gerekir. Daha iyi seçenek release’te kalmaktır.
Emacs’in özü, aşırı derecede özelleştirilebilir bir platform olması; bir özelliğin davranışını beğenmiyorsanız birkaç satır Lisp ile kendiniz düzeltebilirsiniz.
Obscure bir özellik değişikliği yüzünden tüm projeyi fork’lamak hiç mantıklı değil. TECO makrolarıyla uygulandığı dönemlerden, yaklaşık 1981’den beri Emacs kullanıyorum ama register kullanmıyorum.
Aksi hâlde platform her değiştiğinde herkesin tüm özelleştirmelerini yeniden yazması ya da düzeltmesi gerekir.
Bu patch aynen kalır ve biri tam olarak eski şekilde kullanmak isterse, fiilen Emacs’in yerel deposuna geri alma patch’i uygulayıp kendi değişikliklerini bunun üzerine koymak zorunda kalır. Upstream Emacs değiştikçe yeni değişiklikleri almak için rebase yapmak gerekir.
Bu bir özel forktur. Sonsuza kadar fork’lu kalıp sonsuza kadar rebase etmektir.
Kabaca, shipped dosya yerine ya da arkasından kendi dosyanızı yükleyip fonksiyonu yeniden tanımlayan bir monkey patch de yapabilirsiniz; ama bu da bir tür fork’tur. Malzemeyi bir proje olarak bir yerde saklamanız ve değişiklikler monkey patch’i bozduğunda uyarlamaya hazır olmanız gerekir.
Emacs’ten ayrılalı 20 yıl oldu ama bu değişikliğin epey yıkıcı olduğunu anlıyorum.
Anlamadığım şey, “mutfak lavabosuna kadar her şey var” diye övünen Emacs’in neden eski davranışa dönme seçeneği eklemediği.
O patch bir flag ekliyordu ama diğer tüm iyileştirmeleri de ortadan kaldırıyordu.
Yazının tonu epey “neckbeard” havasında. Üç nerd’ün kullandığı son derece obscure bir özellik; Kutsal Kabir Kilisesi’ndeki yerinden oynatılamayan merdiven değil.
Ücretsiz çalışan bir maintainer’ın size önceden sormadan biraz değiştirmesi, mutlaka “master’ı bozdu” anlamına gelmez. Burada söz konusu olan kararlı sürüm ya da tag’lenmiş release değil, master.
Elbette mümkün olan tek çözüm, bir başka Emacs fork’u ya da yeniden uygulaması denemek.
Bu seferki kesinlikle başarılı olacak ve diğerleri gibi tamamen alakasız bir varlığa dönüşmeyecek.
Ancak fork’un ana projeyi pazarlık masasına çekip çekmemesi pek önemli değil. Orijinal yazının yazarı o patch’i kendi yerel deposunda sonuna kadar taşıyıp sürdürme yeteneğine ve isteğine sahip. Fork’u tamamlamak için eksik olan tek şey, o yerel depoyu herkese açmak.
Belki de mainline maintainer’larını ikna etmeye yöneliktir.