deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak Hacker News – Front Page (hnrss.org)

e, Chez Scheme ile R6RS library'lerinden inşa edilmiş, öz-farkındalıklı bir Emacs benzeri editördür

e adlı konsol editörü, Emacs tarzı buffer'ları, pencereleri ve aramayı Chez Scheme R6RS library'leri olarak uygular; hot-reload yapan bir modül sistemi ve M-x üzerinden erişilen canlı bir Scheme top level sunar.

e, Chez Scheme ile R6RS library'lerinden inşa edilmiş, öz-farkındalıklı bir Emacs benzeri editördür

Chez Scheme ile yazılmış küçük bir editör

Yazarı paveluv tarafından GitHub'da yayımlanan ve Hacker News ana sayfasında öne çıkan e adlı proje, tamamen Chez Scheme ile yazılmış kompakt bir konsol metin editörüdür. Projenin README'sine göre ruhen Emacs benzeri ama açıkça bir Emacs klonu değildir: küçük kalmayı başaran fikirleri — buffer'lar, bölünmüş pencereler, bir kill ring, artımlı arama, canlı bir Scheme top level — alır ve orada durur.

Editör bir dizi R6RS library'den oluşuyor

E'si alışılmadık kılan mimari tercihtir. README, tüm editörü her şeyin bir R6RS library olduğu bir Scheme sistemi olarak tanımlar: değişmez (immutable) bir API yayınlayan minimal bir çekirdek ve söz dizimi modülleri, parantez eşleme, düzenleme yardımcıları, hatta M-x komut mekanizmasının kendisi için çekirdeğin üzerine katmanlanan uzantı modülleri. Sınırları gelenek değil, dilin kendisi zorlar — iç ayrıntılar dışarıdan görünmezdir ve export edilen bağlar yeniden atanamaz.

Canlı değerlendirme ve hot reloading

M-x, Scheme ifadelerini editörün canlı top level'ında çalıştırır; sembol tamamlama, yazarken parametre ipuçları, komum geçmişi ve bir transcript buffer'ı mevcuttur. Yazar, e'nin kendi içinden geliştirildiğini belirtir: bir modülün kaynağını editör içinde kaydetmek onu çalışan oturuma yeniden yükler, başka yerde düzenlenen dosyalar ise reload-module! çağrısıyla toplanır. Bir modül yeniden yüklendiğinde kayıtlar değiştirilir ve bağımlı modüller yeniden derlenir; açık buffer'lar ise yerinde kalır.

Günlük düzenleme özellikleri

Özellik seti tanıdık zeminde gezinir. C-x C-f bir dosyayı kendi buffer'ında açar, C-x 2 ve C-x 3 geçerli pencereyi böler ve her pencere kendi point'ini, kaydırma konumunu ve durum satırını korur. C-s, Emacs tarzı akıllı büyük/küçük harf davranışıyla artımlı bir arama başlatır: eşleme yalnızca arama dizisinin tamamen küçük harf olduğu sürece büyük/küçük harfe duyarsızdır ve tek bir büyük harf yazmak tam eşlemeye geçer. M-% her zaman tam eşleşen bir query-replace gerçekleştirir.

Geri alma (undo) alışılmadık derecede sözlüdür: README'ye göre her undo adımı ne yaptığını bildirir; örneğin "hello" ekleme işleminin geri alınması ya da "xx"'den "yy"'ye bir replace-all. Ardışık yazılan karakterler tek bir adımda birleşir, bir paste tek adımdır ve bir M-x komutu etiketli tek bir adımdır.

Girinti, editörün zorladığı tek biçimlendirme kuralıdır; bir satır içindeki boşluklar yazara bırakılır ve satırlar asla birleştirilmez ya da bölünmez. scheme-mode Emacs benzeri girinti sağlar, TAB bir satırı girinti durakları arasında döndürür ve format-buffer! ayrıca sekmeleri genişletir, satır sonu boşluklarını kırpar ve parantez kurallarını uygular — let ailesi bağlamaları ve cond tarzı cümleler için köşeli parantez, başka yerlerde yuvarlak parantez. Aynı kurallar, bir komut satırı biçimlendiricisini de çalıştıran bağımsız bir (scheme-format) library'de yaşar.

Dağıtım modeli

Chez Scheme ve Unix benzeri bir terminal dışında bağımlılık yoktur ve derleme ya da kurulum adımı yoktur: bir checkout yerinde çalışır, library'lerini ilk açılışta derler ve sonrasında yaklaşık 100 ms'de başlar. Her kurulum kendine yeterlidir — loader yalnızca betiğin yanındaki lib/ dizinini kullanır ve derlenmiş nesneler yerelde kalır — böylece e bir depoya vendored edilebilir ve o projeyi klonlayan herkes onunla birlikte çalışan bir editör elde eder. Vendored bir kopyanın lib/ dizinine bırakılan projeye özgü modüller o projeye yerel kalır. Bir platform notu: Chez port'unun yorumlayıcıyı yeniden adlandırdığı FreeBSD'de başlatıcının shebang satırının ayarlanması gerekir.

Tuş atamaları bir config.e dosyasından yeniden bağlanabilir ve C-h k bir tuşu, atamasının nereden geldiğini ve bağlama göre anlamlarını açıklar — bu, yazarın editörü öz-farkındalıklı olarak nitelemesinin nedenlerinden biridir.

Neden önemli

Emacs, bir editörün üzerine kullanıcı arayüzü yerleştirilmiş bir dil runtime'ı olabileceğini gösterdi; ama uzantı modeli modern modül sistemlerinden çok daha eski. e, bu fikri R6RS library'leri üzerinde yeniden kurma denemesidir; burada çekirdeği değişmez ve iç ayrıntıları gizli tutan şey disiplin değil, modül sisteminin kendisidir. Chez Scheme'in hızlı native derlemesiyle birleşince neredeyse anında başlama sunar ve vendoring modeli projelerin sıfır kurulumla tutarlı bir editörle gelmesini sağlar. Küçük ama ilkeli bir Lisp sisteminin günlük bir editör olarak ne kadar ileri gidebileceğini merak edenler için e, kompakt ve okunabilir bir cevaptır.

  • #scheme
  • #chez-scheme
  • #text-editor
  • #open-source
  • #r6rs

İlgili yazılar