-
AWK'in yaratıcısı Dr. Brian Kernighan ile kısa bir röportaj
-
Dr. Brian Kernighan'a giriş
- Dr. Brian Kernighan, Bell Labs'ta UNIX'in geliştirilmesine katkıda bulunan Kanadalı bir bilgisayar bilimcisidir
- Dennis Richie ile birlikte C programlama dili üzerine temel kitaplardan biri olan "The C Programming Language" kitabının ortak yazarıdır
- 2000 yılından beri Princeton University'de yeni nesil programcılar yetiştirmektedir
- İlk "Hello World!" programını yazan kişi olarak tanınır
-
AWK'nin yeni fikri
- AWK'nin temel fikri ilişkilendirmeli dizilerdir (associative arrays)
- O dönemde bu yeni bir kavramdı, ancak bugün çoğu dilde kütüphane işlevleri olarak (Java veya C++'ta hash map'ler) ya da dilin kendisinde (Perl ve Python'da dictionary'ler) kullanılmaktadır
- İlişkilendirmeli diziler çok güçlü bir yapıdır ve çeşitli veri yapılarını simüle etmek için kullanılabilir
- Pattern-action paradigması da o dönemde yaygın olarak kullanılmıyordu, ancak belirli hesaplamaları düzenlemek için etkili bir yöntemdir
-
Programlama dilini oluştururken başvurulan kaynaklar
- Dr. Kernighan: "Yok"
- 1970'lerde yeni özel amaçlı diller çok fazlaydı ve başvurulabilecek önceki kaynak neredeyse yoktu
- Yacc, gramerleri kolayca oluşturup denemeyi mümkün kılan önemli bir araçtı
- Lex, sözcüksel düzeyde aynı rolü üstlenerek birçok sıkıcı kodu bir kurallar kümesiyle değiştirdi
- Lex ve Yacc, pattern-action dilinin örnekleriydi ve birbirlerini olumlu yönde besleyen bir döngü oluşturuyordu
-
Programlama dili tasarımıyla ilgilenen gençlere tavsiye
- Küçük bir özel amaçlı dil tasarlayıp uygulamalarını tavsiye ediyor
- Bunun çok eğlenceli ve faydalı olduğunu, ayrıca Rust ya da C++'a alternatif bir dil yapmaktan çok daha kolay olduğunu söylüyor
- Otomatikleştirilebilecek bir iş bulunmasını ve buna uygun basit bir derleyici ile çalışma zamanı oluşturulmasını öneriyor
- Jon Bentley'nin uzun zaman önce yazdığı ilgili bir makalenin hâlâ geçerli olduğunu belirtiyor
-
Görsel kaynağı
- Wikimedia Commons
-
GN⁺ Özeti
- Dr. Brian Kernighan, UNIX ve C dilinin geliştirilmesine katkıda bulunan önemli bir isimdir ve ilişkilendirmeli diziler ile pattern-action paradigmasını tanıtan AWK dilinin yaratıcısıdır
- İlişkilendirmeli diziler, bugün çoğu programlama dilinde kullanılan güçlü bir veri yapısıdır
- Genç programcılar için küçük özel amaçlı diller tasarlayıp uygulamak faydalıdır
- Yacc ve Lex, gramer ve sözcüksel analizleri kolaylaştıran araçlardır ve pattern-action dilleri için iyi örneklerdir
1 yorum
Hacker News yorumları
Brian Kernighan hakkında pek bilinmeyen çeşitli bilgiler: 2000’de Princeton CS bölümüne katıldı, ancak Bell Labs Research’te olduğu 1993 civarında Princeton’da zaten en az bir ders vermişti.
Bir öğrenci sık sık pre-1.0 Linux çalışan bir 386sx dizüstü getirirmiş; Brian awk’nin ayrıntılı davranışını hatırlayamadığında o öğrenci awk komutunu çalıştırıp “referans implementasyonu” gösterirmiş. Yani Brian Linux’la görece erken dönemde tanışmış sayılır.
1994 sonbaharında AT&T’nin ücretsiz telefon numarası rehberini internete koyduğuna dair bir yazı da var: https://www.cs.princeton.edu/~bwk/800.html
İlginizi çekerse Lex Fridman’ın BK ile yaptığı bir buçuk saatlik röportaj epey iyi: https://www.youtube.com/watch?v=O9upVbGSBFo
Bazen bu çağda yaşıyor olmak inanılmaz bir ayrıcalıkmış gibi geliyor. Bir matematikçinin Euler’le ya da bir fizikçinin Newton’la röportaj yapabilmesine benziyor.
Masterminds of Programming kitabında Aho ve Weinberger’in de yer aldığı daha kapsamlı bir röportaj var. Şiddetle tavsiye ederim.
https://en.wikipedia.org/wiki/Brian_Kernighan
http://www.linuxjournal.com/article/7035
http://www-2.cs.cmu.edu/~mihaib/kernighan-interview/index.html
https://web.archive.org/web/20090428163341/https://www.princeton.edu/~mike/unixhistory
https://web.archive.org/web/20131126220450/http://princetonstartuptv.com/post/49379235060/the-legendary-brian-kernighan-on-teaching-writing
Bu hafta 1983 tarihli The Unix Programming Environment’ı okuyorum; yaklaşık 35 yıl gecikmiş sayılırım. Kitapta awk gerçekten öne çıkıyor ve bugün popüler olan JavaScript, Lua, Python, Perl, Tcl gibi dillere en yakın şey gibi görünüyor.
awk’nin “ilişkisel dizi” dediği şeye JavaScript doğrudan “nesne” diyor. 1979’daki 7. sürüm Unix’in awk kaynak kodu https://www.tuhs.org/cgi-bin/utree.pl?file=V7/usr/src/cmd/awk ölçütüne göre yalnızca 2680 satır; çalıştırılabilir dosyanın 46KB olup PDP-11’in 64KB adres alanında çalışması şaşırtıcı. O sürümde ve 4 yıl sonra kitapta yer alan awk’de kullanıcı tanımlı fonksiyonlar yokmuş gibi görünüyor; V7 Bourne shell için de durum aynıymış gibi. Ama bc’de vardı.
46KB’lık çalıştırılabilir dosya Turbo Pascal 3.02’den de biraz büyüktü: https://prog21.dadgum.com/116.html Tabii Turbo Pascal’da regex motoru yoktu.
functionanahtar sözcüğü,for e in a, noktalı virgülsüz sözdizimi, string merkezli tip işleme,delete x[e]gibi öğelere bakınca JavaScript’in temelinin awk olduğu oldukça açık; Brendan Eich de böyle söylemişti: https://brendaneich.com/2010/07/a-brief-history-of-javascript/01983,01979gibi yazmak yıl yazma biçimi olmadığı gibi, aslında sayı yazma biçimi olarak da tuhaf.Uzun zaman önce birinin Usenet
.sig’inde “Perl margarindir, awk tereyağıdır” yazdığını hatırlıyorum. Sırası ters de olabilir.Perl’in çok kusuru var, ama Perl’i keşfettikten sonra awk’yi çok daha az kullanır oldum.
80'lerde Avustralya'daki bir Unix konferansında Dr. Kernighan'a imzalattığım K&R kitabım var. En değer verdiğim eşyalardan biri.
O kitap, Kernighan/Pike'ın The Practice of Programming'i ve Byte dergisi gibi şeyler 1980'lerdeki benim “Stack Overflow”umdu.
Onun ilişkisel dizilerden “nispeten yeni bir şey” gibi söz etmesi ilginç. Çünkü Lisp'te neredeyse 20 yıl öncesinden beri vardı.
1990'larda programlamaya başladığımda bile C dünyasının önemli bir kısmı, hash table gibi ilişkisel veri yapılarını biraz egzotik görüyor ve ancak gerçekten başka çare kalmadığında başvurulacak şeyler olarak değerlendiriyordu. Programlama dünyasının hızlı hareket ettiğini düşünürüz ama aslında öyle değil; özellikle o dönemde daha da yavaştı. 1960'lar ve 70'lerde bazı dillerde ortaya çıkan özelliklerin yaygın biçimde benimsenmesi çoğu zaman birkaç on yıl aldı. Lisp'in performansı da o dönemde diğer seçeneklere kıyasla epey kötüydü; bu yüzden kendi özelliklerini tanıtmak için iyi bir örnek olmayabilirdi.
awk yavaş makineler ve küçük bellekler üzerinde doğdu; dizilerinin özellikleri de bu ortamın sonucuydu. İndekslerin string ile sınırlanması ve sözdizimsel kolaylıklar olsa bile tek boyutla sınırlı kalması bunun örnekleri. Daha genel bir uygulamanın çok boyutlu dizilere ya da en azından dizi elemanı olarak dizi koyma yöntemine izin vereceği söyleniyor. SNOBOL4'ün kararlı sürümü 1967: https://en.wikipedia.org/wiki/SNOBOL
Dolayısıyla Lisp'in yerleşik ilişkisel dizilerine alist veya property list'leri dahil etmezsek, awk'ın doğduğu dönemle hemen hemen aynı zamana ya da biraz sonrasına denk geliyor gibi görünüyor.
Herhangi bir dilde doğrusal aramayla birkaç dakika içinde ilişkisel dizi benzeri bir şey yapılabilir; ama bu, SNOBOL4, MUMPS, awk, Perl, Python, Tcl, Lua, JavaScript'te olduğu gibi dil özelliği olarak yerleşik olmasından tamamen farklıdır. İlk dönem Lisp'in veri yapılandırma için sunduğu şeyler
cons,car,cdridi; bunlar aynı şey değil. awk'tan önce Unix içinde de bağlayıcının sembolleri, C derleyicisi, assembler, dosya sistemi dizinleri biçimindeki çekirdek ve shell değişkenleri gibi ilişkisel diziler içeren programlar vardı; ama bunlar programlama dili özelliği olarak sunulmuyordu. Bourne shell, değişken adlarını birleştirerekeval myarray_$key=$valgibi bir şekilde bunu taklit edebildiği için en yakın örnekti; V7 Bourne shell'deki shell değişkeni işleme de ikili ağaç aramasıyla uygulanmıştı.Düzenli ifadelerden lex, yacc ve awk'a uzanan gelişim çizgisi çok etkileyici. Önceki çalışmaların üzerine inşa edilerek daha genel sonuçlar üretildiği fikri ikna edici biçimde ortaya çıkıyor.
Tepki çekecek bir söz olacak ama GitHub'da, bu kodlama efsanelerinden daha iyi yazılmış depolara sahip çok sayıda programcı olduğunu düşünüyorum. O zamanlar yetenek havuzu çok daha küçüktü.