-
AWK के संस्थापक Dr. Brian Kernighan के साथ एक संक्षिप्त इंटरव्यू
-
Dr. Brian Kernighan का परिचय
- Dr. Brian Kernighan कनाडा के एक कंप्यूटर वैज्ञानिक हैं, जिन्होंने Bell Labs में UNIX के विकास में योगदान दिया
- Dennis Richie के साथ मिलकर उन्होंने C प्रोग्रामिंग भाषा पर आधारित मूल पुस्तक "The C Programming Language" का सह-लेखन किया
- 2000 से वे Princeton University में अगली पीढ़ी के प्रोग्रामरों को तैयार कर रहे हैं
- वे पहला "Hello World!" प्रोग्राम लिखने के लिए प्रसिद्ध हैं
-
AWK का नया विचार
- AWK का मुख्य विचार associative arrays है
- उस समय यह एक नया कॉन्सेप्ट था, लेकिन आज यह अधिकांश भाषाओं में library function (Java या C++ में hashmaps) या भाषा की मूल सुविधा (Perl और Python में dictionaries) के रूप में इस्तेमाल होता है
- associative arrays एक बहुत शक्तिशाली संरचना है, जिसका उपयोग विभिन्न data structures को simulate करने में किया जा सकता है
- pattern-action paradigm भी उस समय व्यापक रूप से उपयोग में नहीं था, लेकिन यह किसी विशेष computation को व्यवस्थित करने का एक प्रभावी तरीका है
-
प्रोग्रामिंग भाषा बनाते समय संदर्भित सामग्री
- Dr. Kernighan: "कोई नहीं"
- 1970 के दशक में उस समय कई नई special-purpose भाषाएँ थीं, और संदर्भ के लिए लगभग कोई पूर्व सामग्री नहीं थी
- Yacc एक महत्वपूर्ण tool था, जिसने grammar को आसानी से बनाने और उस पर प्रयोग करने की सुविधा दी
- Lex ने lexical स्तर पर वही भूमिका निभाई और बहुत-सा उबाऊ code को rules के एक set से बदल दिया
- Lex और Yacc pattern-action भाषाओं के उदाहरण थे, और उन्होंने एक-दूसरे के लिए सकारात्मक चक्र बनाया
-
प्रोग्रामिंग भाषा डिजाइन में रुचि रखने वाले युवाओं के लिए सलाह
- वे सलाह देते हैं कि एक छोटी special-purpose भाषा को डिजाइन और implement करके देखें
- यह बहुत मज़ेदार और उपयोगी है, और Rust या C++ का विकल्प बनाने वाली भाषा तैयार करने से कहीं आसान है
- वे सुझाव देते हैं कि ऐसे काम खोजें जिन्हें automate किया जा सके, और उनके लिए एक सरल compiler और runtime बनाएं
- Jon Bentley का बहुत पहले लिखा गया संबंधित लेख आज भी प्रासंगिक है
-
इमेज स्रोत
- Wikimedia Commons
-
GN⁺ का सारांश
- Dr. Brian Kernighan UNIX और C भाषा के विकास में योगदान देने वाले एक महत्वपूर्ण व्यक्तित्व हैं, और वे AWK भाषा के संस्थापक हैं, जिसने associative arrays और pattern-action paradigm को पेश किया
- associative arrays आज अधिकांश प्रोग्रामिंग भाषाओं में इस्तेमाल होने वाली एक शक्तिशाली data structure है
- युवा प्रोग्रामरों के लिए छोटी special-purpose भाषाओं को डिजाइन और implement करना लाभदायक है
- Yacc और Lex grammar और lexical analysis को आसान बनाने वाले tools हैं, और pattern-action भाषाओं के अच्छे उदाहरण हैं
1 टिप्पणियां
Hacker News की राय
कम ज्ञात Brian Kernighan से जुड़े कुछ विविध तथ्य: वे 2000 में Princeton CS विभाग से जुड़े, लेकिन Bell Labs Research में रहते हुए 1993 के आसपास ही Princeton में कम से कम एक क्लास पढ़ा चुके थे
एक छात्र अक्सर pre-1.0 Linux चलाने वाला 386sx लैपटॉप लाता था, और जब Brian को awk के बारीक व्यवहार याद नहीं रहते थे, तो वह छात्र awk command चला कर “सही implementation” बता देता था। इसलिए कहा जा सकता है कि Brian ने Linux को काफी शुरुआती दौर में देखा था
1994 की शरद ऋतु में AT&T की toll-free phone directory को इंटरनेट पर डालने वाला उनका एक लेख भी है: https://www.cs.princeton.edu/~bwk/800.html
अगर रुचि हो, तो Lex Fridman का BK के साथ किया गया डेढ़ घंटे का interview काफी अच्छा है: https://www.youtube.com/watch?v=O9upVbGSBFo
कभी-कभी लगता है कि इस दौर में जीना कितना बड़ा विशेषाधिकार है। यह कुछ वैसा है जैसे कोई mathematician Euler का interview कर सके या कोई physicist Newton का interview कर सके
Masterminds of Programming किताब में Aho और Weinberger तक को शामिल करने वाला अधिक व्यापक interview है। जोरदार सिफारिश करता हूं
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
इस हफ्ते मैं 1983 की The Unix Programming Environment पढ़ रहा हूं, यानी लगभग 35 साल देर से। किताब में awk सचमुच अलग चमकता है, और आज लोकप्रिय JavaScript, Lua, Python, Perl, Tcl जैसी भाषाओं के सबसे करीब दिखता है
awk जिसे “associative array” कहता है, JavaScript उसे बस “object” कहता है। 1979 के 7th Edition Unix का awk source https://www.tuhs.org/cgi-bin/utree.pl?file=V7/usr/src/cmd/awk के मुताबिक सिर्फ 2680 lines का है, और executable 46KB का था जो PDP-11 के 64KB address space में चलता था—यह हैरान करने वाली बात है। लगता है उस version और चार साल बाद किताब में आए awk में user-defined functions भी नहीं थे, और V7 Bourne shell में भी शायद नहीं थे। लेकिन bc में थे
46KB executable भी Turbo Pascal 3.02 से थोड़ा बड़ा था: https://prog21.dadgum.com/116.html हालांकि Turbo Pascal में regex engine नहीं था
functionkeyword,for e in a, semicolon के बिना syntax, string-केंद्रित type handling,delete x[e]जैसे elements देखें तो काफी साफ है कि JavaScript की नींव awk थी, और Brendan Eich ने भी ऐसा कहा है: https://brendaneich.com/2010/07/a-brief-history-of-javascript/01983,01979जैसा लिखना न तो साल लिखने का तरीका है, और सच कहें तो numbers लिखने के तरीके के तौर पर भी अजीब हैबहुत पहले याद है कि किसी ने Usenet
.sigमें लिखा था: “Perl margarine है, awk butter है।” शायद क्रम उल्टा भी रहा होPerl में कमियां तो बहुत हैं, लेकिन Perl खोज लेने के बाद मैंने awk का इस्तेमाल काफी कम कर दिया
मेरे पास 80 के दशक में ऑस्ट्रेलिया की Unix कॉन्फ्रेंस में Dr. Kernighan से साइन करवाई हुई K&R किताब है। यह मेरी सबसे प्रिय चीज़ों में से एक है
वही किताब, Kernighan/Pike की The Practice of Programming, और Byte मैगज़ीन जैसी चीज़ें 1980 के दशक में मेरा “Stack Overflow” थीं
यह दिलचस्प है कि वे associative arrays को “काफी नई चीज़” जैसा बताते हैं। क्योंकि Lisp में वे लगभग 20 साल पहले से मौजूद थीं
जब मैंने 1990 के दशक में programming शुरू की, तब भी C दुनिया का बड़ा हिस्सा hash table जैसी associative data structures को कुछ exotic मानता था, और उन्हें तभी निकालकर इस्तेमाल करता था जब सचमुच कोई और चारा न हो। हम सोचते हैं कि programming की दुनिया तेज़ी से चलती है, लेकिन असल में ऐसा नहीं है, और खासकर उस दौर में तो और भी धीमी थी। 1960–70 के दशक में किसी भाषा में आई feature को व्यापक रूप से अपनाए जाने में अक्सर कई दशक लग जाते थे। उस समय Lisp की performance भी दूसरे विकल्पों की तुलना में काफी खराब थी, इसलिए हो सकता है कि वह अपनी features को प्रचारित करने के लिए अच्छा उदाहरण न रही हो
awk धीमी मशीनों और छोटी memory में पैदा हुआ था, और arrays के गुण भी उसी माहौल का परिणाम थे। जैसे subscripts को strings तक सीमित रखना, और syntactic sugar होने के बावजूद 1-dimensional तक सीमित रखना। कहा गया है कि अधिक general implementation होती तो multi-dimensional arrays या कम-से-कम array elements के रूप में arrays रखने की अनुमति देती। SNOBOL4 stable version 1967 का है: https://en.wikipedia.org/wiki/SNOBOL
इसलिए अगर Lisp की built-in associative arrays में alist या property list को शामिल न करें, तो वे awk के जन्म के समय के लगभग समकालीन, या थोड़ी बाद की लगती हैं
किसी भी भाषा में linear search से associative array जैसी चीज़ कुछ मिनटों में बनाई जा सकती है, लेकिन यह SNOBOL4, MUMPS, awk, Perl, Python, Tcl, Lua, JavaScript की तरह language feature के रूप में built-in होने से बिल्कुल अलग है। शुरुआती Lisp ने data structuring के लिए
cons,car,cdrदिए थे, और वह वही चीज़ नहीं है। awk से पहले Unix के अंदर भी linker symbols, C compiler, assembler, filesystem directory के रूप में kernel, shell variables जैसे associative arrays वाले programs थे, लेकिन वे programming language feature के रूप में उपलब्ध नहीं थे। Bourne shell सबसे करीब था, क्योंकि variable names जोड़करeval myarray_$key=$valजैसे तरीके से इसकी नकल की जा सकती थी, और V7 Bourne shell में shell variables की processing binary tree search से implement की गई थीregex से lex, yacc, awk तक चला आया development का flow बहुत प्रभावशाली है। यह बात भरोसेमंद ढंग से दिखती है कि पहले के काम के ऊपर बनाकर अधिक general परिणाम निकाला गया
यह बात आलोचना झेल सकती है, लेकिन मुझे लगता है GitHub पर ऐसे बहुत से programmers होंगे जिनके repositories इन coding legends से भी बेहतर लिखे हुए हैं। उस समय talent pool बहुत छोटा था