1 पॉइंट द्वारा GN⁺ 2024-07-19 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • 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 टिप्पणियां

 
GN⁺ 2024-07-19
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

    • यह समझने में भ्रम है कि gawk awk का reference implementation है या असल में जो काफी अलग था वह gsed था
    • “वह छात्र” शायद खुद लेखक ही था, ऐसा आभास होता है
  • अगर रुचि हो, तो Lex Fridman का BK के साथ किया गया डेढ़ घंटे का interview काफी अच्छा है: https://www.youtube.com/watch?v=O9upVbGSBFo

    • Computerphile YouTube channel पर भी BK के कई interviews हैं: https://www.youtube.com/results?search_query=computerphile+kernighan
      कभी-कभी लगता है कि इस दौर में जीना कितना बड़ा विशेषाधिकार है। यह कुछ वैसा है जैसे कोई mathematician Euler का interview कर सके या कोई physicist Newton का interview कर सके
    • पहले उनके कुछ talks देखकर मुझे खास नहीं लगा था, लेकिन इस interview में ads के बाद जब असली बातचीत शुरू होती है, शुरुआती हिस्से से ही यह काफी अच्छा लगता है
  • Masterminds of Programming किताब में Aho और Weinberger तक को शामिल करने वाला अधिक व्यापक interview है। जोरदार सिफारिश करता हूं

  • इस हफ्ते मैं 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 में थे

    • जिन awk versions में user-defined functions नहीं थे, उन्हें old awk, या उल्टा बनाए गए नाम oawk से भी जाना जाता है। Heirloom में ज्यादा परिचित nawk के साथ उसका descendant लगने वाला implementation अब भी मौजूद है: https://heirloom.sourceforge.net/man/awk.1.html
      46KB executable भी Turbo Pascal 3.02 से थोड़ा बड़ा था: https://prog21.dadgum.com/116.html हालांकि Turbo Pascal में regex engine नहीं था
    • awk उससे भी आगे है। function keyword, 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/
    • वही किताब पढ़कर मैं भी इसी निष्कर्ष पर पहुंचा। उसके बाद The UNIX-Haters Handbook पढ़ने के बाद लगा कि awk जैसे Unix tools अब अफसोस की बात है कि पर्याप्त अच्छे नहीं रह गए हैं
    • 01983, 01979 जैसा लिखना न तो साल लिखने का तरीका है, और सच कहें तो numbers लिखने के तरीके के तौर पर भी अजीब है
    • साल के आगे 0 की वजह से काफी भ्रम हुआ। लगा जैसे कोई obscure date format हो
  • बहुत पहले याद है कि किसी ने 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 को प्रचारित करने के लिए अच्छा उदाहरण न रही हो
    • The AWK Programming Language के पहले edition के मुफ्त PDF में लिखा है कि associative arrays SNOBOL4 tables से प्रेरित थीं, लेकिन उनसे अधिक general नहीं थीं
      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
    • Common Lisp में तो स्वाभाविक रूप से hash table built-in है। Pitmanual देखने पर MacLisp में ऐसा नहीं दिखता, जबकि ZetaLisp/LML और InterLisp में है
      इसलिए अगर Lisp की built-in associative arrays में alist या property list को शामिल न करें, तो वे awk के जन्म के समय के लगभग समकालीन, या थोड़ी बाद की लगती हैं
    • Lisp की alist भी एक अर्थ में “associative array” ज़रूर है, लेकिन वह language feature से ज़्यादा list से बनी structure है, और awk में जिन उपयोगों के लिए यह चाहिए, उनके लिए उसकी efficiency पर्याप्त नहीं है
      किसी भी भाषा में 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 बहुत छोटा था

    • जानना चाहूँगा कि आज के लोगों में आप किसे outstanding मानते हैं। नई पीढ़ी के careers और वे आज क्या कर रहे हैं, यह follow करना हमेशा मज़ेदार होता है
    • मुझे नहीं लगता कि किसी ने कभी दावा किया है कि Brian Kernighan इतिहास के सबसे महान programmer हैं
    • यह भोली-भाली बात है, लेकिन सच में जिज्ञासा है। बेहतर को आप मापेंगे कैसे?