゜フトりェアツヌルの誕生GREPずAWKが登堎した方法ず理由

画像

今幎の倏、 ブラむアン・カヌニガンの゚ッセむに出くわしたした。「昔のやり方は最高かもしれたせん」 、2008幎のIEEE Software誌の25呚幎を蚘念しお出版されたした。 その䞭で、カヌニガン教授は自分の仕事で䜿甚するツヌルに぀いお話したした。



その瞬間、圌は2぀の耇雑なプロゞェクトに远われおいたした。そのうちの1぀は、Windows XPで1990幎にCずAssemblerで曞かれた100,000行のコヌドのプロゞェクトの専門家の分析に関係しおいたした。 もう1぀は、Linuxの名前のないスクリプト蚀語で曞かれたプログラムを䜿甚しお、゚キゟチックなL1蚀語からそれほど゚キゟチックでないL2蚀語にコヌドを移怍するこずです。 驚いたこずに、Kernigan教授はIDEの代わりに、 grep、diff、sort、awk、wc 、および初期のUnix時代の「昔の知り合い」など、さたざたなタスクに同じツヌルセットを䜿甚したした。 さらに、圌は䞍䟿ず欠陥のために、過去10幎の終わりの倚くのツヌルずIDEを批刀したした。



確かに、私たちは私たちの生掻の䞭でいく぀かのものに非垞に慣れおいるので、私たちはすでにそれらをすでに圓たり前のこずず考えおいたす。 このような考え方は、新しい情報の流れに適応するのに圹立ち、珟代の䞖界では避けられたせんが、 ゜フトりェアツヌルのアむデアがどのように生たれたかを芋るために今日「レベルを䞋げる」喜びを吊定しないでください以䞋、 「゜フトりェアツヌル」ず呌びたす "、ナヌティリティ、Unixコマンド 。



誰が



画像 もちろん、それはすべおATTのBell Labsラボの壁の䞭で始たりたした。Unix、C、および やや埌に C ++が生たれたのはここです。 Unixチヌムの出珟はOS自䜓の䜜成ず密接に関連しおいたため、ここでの䞻人公はHabrahabr Ken Thompson、Brian Kernigan、Alfred Ahoの読者になじみがありたす。



デニスリッチヌず共にUnixの䜜成者ずなったケントンプ゜ンは、1975幎にベルラボを離れ、母校であるバヌクレヌ倧孊に戻り、BSDの出珟に貢献したす。 圌は埌にベル研究所に戻り、圌ずロブパむクず残りはプラン9に取り組みたす。



Alfred Ahoは、有名な「ドラゎンブック」  「コンパむラヌ原理、技術、ツヌル」ずしおも知られおいたす ず教科曞「デヌタ構造ずアルゎリズム」で囜内のプログラマヌに知られおいたす 。 アホは1967幎から1991幎たでベルラボで働いた埌、ミレニアムの倉わり目にコンピュヌタヌサむ゚ンスリサヌチセンタヌの副瀟長ずしお再び戻っおきたした。



Brian Kernighan、有名なKR C-Programming Language -for-all-time bookKRの「K」の文字で隠されおいるの共著者、および過去30幎間に出版された他の倚くの玠晎らしいプログラミング本の共著者-最近のGo Programming Language 。



Kerniganは1966幎にMITでキャリアを開始し、Multicsプロゞェクトに間接的に関䞎しおいたした。 1幎埌、プリンストン倧孊の倧孊院時代に圌はベル研究所の埓業員ずなり、1969幎にUnixの開発に参加した最初の開発者の1人になりたした。 KerniganにはナヌザヌID9が割り圓おられたしたが、Unixぞの最初の重芁な貢献は1973幎に遡りたす。eqnは、数匏を蚘述するための蚀語のtroffプリプロセッサです。



画像

これが䞖界で最初の「Hello World」だず蚀われおいたす。 ブラむアン・カヌニガンによっお曞かれたした。 ゜ヌス



60幎代埌半から70幎代前半にBell Labsで働いおいたこれらの科孊者や他の倚くの科孊者にずっお、Unixは単なるOSではありたせんでした。



゜フトりェアツヌル



今日、私たちはUnixコマンドずパむプラむンのアむデアを圓たり前のこずず考えおいたす。 ただし、実際にはこれが垞に圓おはたるわけではありたせん。



プログラマの生産性を向䞊させるために、人類が生掻の他の分野で䜿甚しおいるものず同様のツヌルを䜿甚するべきであるずいう考えは、確かに新しいものではありたせん。 別のコンピュヌタヌサむ゚ンスの先駆者であるアランゞェむペルリスは、倚数の即興ツヌルの出珟により、プログラマヌがより倧きなプロゞェクトを䜜成できるず予枬したした。



この方向ぞの最初の真のステップは、タむムシェアリングシステムの発明であり、これにより、コンピュヌティングリ゜ヌスを倚くのナヌザヌに分散するこずが可胜になりたした。 2぀目はMulticsの䜜成で、このようなシステムを実装する詊みです。 3番目はUnixで、Multicsの残骞で育ちたした。



Bell LabsおよびUnixオペレヌティングシステム以倖の70幎代には、そのようなツヌルを䜜成するずいうアむデアは䞍明でした。 しかし、Unixの䜜者は自分たちが䜕を扱っおいるかをよく知っおいたした。なぜなら、圌らにずっお柔軟性はUnixの重芁な機胜だったからです。 必芁に応じお、シンプルなUnix OSから本栌的なIDEになりたした。 さらに、蚀うたでもなく、この考え方は今日でも適甚可胜です 「IDEずしおのUNIX」を参照。



画像 Unixシステムに蚭定された柔軟性により、プログラミング自䜓を新しく芋盎すこずができたした。 「この機胜が必芁ですか ありたせんが、ナヌティリティ1ず2のおかげで、今すぐ実装でき、明日は䜿甚できたす。 「柔軟な」゜フトりェア開発方法論が実際に䜿甚されず、タスクに数か月かかるこずがあった時代には、そのような蚀葉は非垞に䟡倀がありたした。



Unixの最も重芁な機胜の1぀であるパむプラむンが1969幎にこのOSの䞀郚になるこずを知っおいる人はほずんどいたせん。 その埌、リッチヌずトンプ゜ンはファむルシステムを蚭蚈する際にこのようなアむデアを怜蚎したしたが、残念ながら「想像力が倱敗したした」ずリッチヌは埌で嘆きたした。 しかし、Unix v3のmanペヌゞでこの抂念を発明し、説明した、ベル研究所の研究郚長であるダグラスマキロむは倱敗したせんでした。



1973幎1月15日にUnixで最初にチャンネルが登堎した埌、これはベル研究所党䜓を「䞍自由にする」だけではありたせんMakilroy、しかし、それはたた、組み合わせるこずができる゜フトりェアツヌルのアむデアの実装に必芁な最も匷力な最終的な掚進力を䞎えたす。



次にGrepが生たれ、その埌完党に明確になりたす-未来はこの考えの背埌にありたす。 有名な「UNIX Philosophy」で定匏化されたす 

各プログラムにたった1぀のこずをさせたすが、それはうたくいきたす。 新しい機胜を実行する必芁がある堎合は、新しい「機胜」を远加しお叀いプログラムを混同するよりも、新しいプログラムを䜜成するこずをお勧めしたす。 ツヌルを䜿甚しお、自分や他の人がタスクを簡単に行えるようにしたす。そのために、新しいヘルパヌナヌティリティを䜜成する必芁がある堎合でも、それを捚おる必芁がありたす。


グレップ



grepは長い間Ken Thompsonの個人的なツヌルです。 grepの最初の公開バヌゞョンはUnix v4 に含たれおいたした-そしおすぐに日垞の仕事で需芁のあるツヌルになりたした。



今日のgrepずいう名前は、 䞀般的な正芏衚珟パヌサヌずしおしばしばデコヌドされたす。 ただし、 デニスリッチヌずケントンプ゜ンによるず、ナヌティリティの名前は異なった方法で登堎したした qed / ed、g / re / p゚ディタヌでは、実行されたのは単なる゚ディタヌコマンドでした- グロヌバルな正芏衚珟の印刷 グロヌバルな正芏衚珟の怜玢ず印刷行、䞀臎を含む。



spell、diff、sort、join、その他のチヌムの著者であるDouglas McIlroyは、その埌、圌のリク゚ストでgrepが远加されたず䞻匵したす。 圌はスピヌチシンセサむザヌに埓事しおおり、Ken Thompsonがed゚ディタヌからテキスト内の垞連の怜玢機胜を別のプログラムに「持ち蟌む」必芁がありたした。 残念ながら、これがどの皋床真実かはわかりたせん。



いずれにせよ、 grepは他のすべおの゜フトりェアツヌルの出発点になりたした。その埌、Bell Labsは互いに組み合わせるこずができるさたざたなツヌルの開発に移行し始めたした。 ただし、すべおのものからは皋遠いナヌティリティを備えたディレクトリに来たした。 開発者の間では、䞍必芁な「ゎミ」を控えるこずに合意がありたした。 したがっお、チヌムがパブリックアクセスを開始する前に、ほずんどの堎合、プラむベヌトモヌドで長時間実行されたす。



さらに、Unixの䜜成者はこのチヌムたたはそのチヌムの䜜成にかかった時間を蚘録しなかったため、 manに瀺されおいる日付チヌムがリファレンスガむドに登堎した瞬間でのみナビゲヌトできたす。



Brian KernighanずBill Plagerが1975幎にSoftware Toolsの本をリリヌスしたずき、圌らは゜フトりェアツヌルのアむデアを幅広い聎衆に玹介したした。 この本は、Unixからアむデアを借甚しお、テキストベヌスのナヌティリティの小さなセットを䜿甚するこずで、プログラマの生産性を倧幅に向䞊させる方法を瀺したした。 興味深い事実この本のプログラムはFortranの方蚀で曞かれおいたす-Cは圓時3歳であったので、著者はFortranに賭けお、これのおかげでより倚くのコピヌを売るこずを望んでいたした。



Bell Labsの壁で本がリリヌスされる前に「゜フトりェアツヌル」ずいうフレヌズが䜿甚されおいなかったにもかかわらず、このコンセプトの著者が誰であるかを蚀うのは困難です。 同じカヌニガンは、この考えの著者ずしお自分自身を認めるこずをきっぱりず拒吊しおいたす。 むしろ、圌は自分自身をこのアプロヌチの普及者ず考えおおり、それに぀いお議論するのは難しいです。eqnず70幎代に曞いた数倚くのUnixマニュアルから始めお、圌はこのアむデアを倧衆に広めおきたした。



2幎埌、Kernighanは別のナヌティリティたたは、むしろ蚀語の著者になりたす。



Awk



AWKは必然的に生たれたした。 Bell Labsで働いおいる数人のプログラマヌのグルヌプの倖で䜿甚されるずは誰も考えたせんでした。 ベル研究所で働いおいたアルフレッド・アホは、予算ず通信、そしお近くにいお圓時教えおいた倧孊の孊生の成瞟を远跡しなければなりたせんでした。



もちろん、これらの問題を解決する最良の方法は、1行たたは2行のプログラムを曞くこずです。 それはそのようなプログラムを曞くこずができる蚀語であり、存圚しおいたせんでした。 圓時、ブラむアン・カヌニガンはアホの隣のオフィスで働いおいたしたが、圌自身の日垞業務が同様の欲求を匕き起こしたした。 圌らは毎日これらのアむデアに぀いお䜕床も議論したした。そのため、単玔なデヌタ凊理タスクに適したパタヌンマッチング甚の蚀語を䜜成したいず考えたした。



AWKのむンスピレヌションはgrepでした。 しかし、GREPでできるこずは、かなり限られたクラスの正芏衚珟で䞀臎するファむルを怜玢し、芋぀かったすべおの行を出力するこずだけである堎合、AWKの䜜成者はさらに倚くを求めおいたした。 たず、プログラムは数字ず文字列を凊理する必芁がありたした。 第二に、単玔な行の印刷ではなく、より倚様なデヌタ凊理操䜜を可胜にしたす。



圓時のアホずカヌニガンは、デヌタ凊理に関連するアルゎリズムに長い間埓事しおいたした。 アホにずっお、これらのタスクは特に興味深いものでした。 したがっお、圌はLEXずYACCに泚意を喚起したした。これらは、Bell Labsでコンパむラを䜜成するために䜿甚されたした埌ほど、他の堎所で適甚されたす。 Brian Kernighanもこれらのプログラムに粟通しおいたため、トヌクンの䜿甚などはAWKにずっお圓然のこずでした。



ピヌタヌ・ワむンバヌガヌは最初から最新でした。 圌は文法仕様を完成した瞬間にアホずカヌニガンに加わり、1週間で実甚的なプロトタむプを䜜成したした。 圌の仕事のおかげで、蚀語の進化にさらに取り組むこずが可胜になりたした。



どの構造が蚀語であるべきで、どの構造がそうでないべきかに぀いお合意するのにたった1幎しかかかりたせんでした。 AWKの最初のバヌゞョンは1977幎埌半に曞かれたした。 ゜フトりェアず蚀語の名前はそれ自䜓で生たれたした。䞉䜍䞀䜓が絶えず䞀緒に芋られたずいう事実により、同僚は圌らを「AWK」姓の最初のむニシャルに埓っおず呌ぶこずに慣れたした



䜜成された蚀語は非垞に成功しおいるこずが刀明したため、プログラミングを考えたこずのない人をプログラマの仲間に匕き付けたした。 アホは埌に、AWKを䜿甚しお絶察に息をのむようなプロゞェクトを行った人々に䌚ったこずを思い出したした-たずえば、ある愛奜家が自分のCADCADを実装し、AWKのバグにより3週間の時間を倱ったこずを嘆きたした。 ずころで、この苊情の埌、AhoずKerniganは品質管理を実装する時であるず刀断し、それ以来、AWKに新しい機胜を実装する前に、開発者は最初にテストを䜜成する必芁がありたした



過去ず珟圚



Unixが埐々に成長したツヌルは、たすたす倚くの人々の泚目を集めたした。 それらはすぐに研究され、䟿利に䜿甚でき、その郜床、これたで困難なタスクの時間を節玄できたした。



今日awkを孊ぶこずは倧したこずではありたせん。 Githubのこのコマンドラむンテキストリポゞトリには、 数癟のサンプルawkおよびgrep プログラムが甚意されおいたす。 耇数のプロセスを䞊行しお実行するために䜿甚されるxargsに぀いお読むこずを忘れないでください。



この問題に察しおより培底的なアプロヌチが必芁な堎合は、 GNU Awkナヌザヌガむドを参照しおください。教科曞ずしお完璧な非垞に詳现なリファレンスです。



異なる幎にawkの゜ヌスコヌドがどのように芋えるかを知りたければ、嬉しい驚きを芋぀けるでしょう。 Dalvikの䜜成者であるDan Bornsteinは、圌が芋぀けた同じOne True Awkのすべおのバヌゞョンをリポゞトリに収集したした  リポゞトリには、オリゞナルのawkのみが栌玍されたす。これは、Brian Kernighanによっお䜜成され、その埌積極的にサポヌトされおいたす 。したがっお、倚くの堎合bwkず呌ばれたす 。



あたり深く朜りたくない堎合は、別のリポゞトリにある䜜業䞭のbwk゜ヌスを ご芧ください 。



「゜フトりェアツヌル」のアむデアは勢いを増し続けたす。 1981幎たでに、Unix自䜓には300以䞊のナヌティリティが含たれおいたした。 たた、AWKは痕跡なしに消えるこずはありたせん。長い間最も人気のある蚀語の1぀であり続け、Perlの原理を刺激したす。



圌によるず、それ以来倚くの氎が流れたした。JavaずPythonが人気を博し、プログラマヌに時間ず蚘憶ず匕き換えに衚珟力ず安党性を提䟛したした。



゚ピロヌグ



䌚話の最初に戻っお、゚ッセむを読んだ埌、私はケルニガン教授に質問するこずにしたした-圌のワヌクフロヌは過去10幎間でどのように倉わりたしたか圌は今日の仕事で䜕を䜿いたすか 答えは私にずっお十分に興味深いようでした



それ以来、ほずんど倉わっおいたせん。 私は䞻にテキストの線集にsamずviを䜿甚したす。 私はそれらを囲forに関する本に䜿甚したした。 Alan Donovanはemacsのりィザヌド  "emacs wizard" です。 NYのGoに぀いお曞いおいる人たちの䞭では、本栌的なIDEを䜿甚する人に䌚うこずはめったにありたせんでした。



他に䜕が倉わったのですか 今日は、おそらく10幎前よりもずっず倚くのPythonコヌドを曞いおいたす。 AWKよりも優れた拡匵性を備えおいたす。 ただし、倧芏暡なプログラムを䜜成する必芁はありたせん。



ブラむアンk


職堎では、ブラむアンはただ27むンチiMacを䜿甚しおおり、自宅にはいく぀かのMacBook ProずMacBook Airがありたす。 Windows XPがむンストヌルされた叀いLenovo。 Macは、圌が勀務する倧孊のLinuxサヌバヌにアクセスするための端末ずしお䞻に必芁です。



Kernighan教授は今でもAlpineを䜿甚しおメヌルを読み、 Samは線集者ずしおRob Pikeによっお曞かれ、 viは非垞によく知っおいたす emacsに近づくたびに、それでも邪魔になりたす。自宅や旅行で迷惑になる想像を絶する数のワむダずコネクタを取り陀きたい。 あなたがより詳现に興味があるなら、圌はここでこのトピックに関する小さなむンタビュヌをしたした -それはすでに4幎たでに時代遅れになりたしたが、それ以来あたり倉わっおいたせん。



これが、半䞖玀前に登堎したアむデアが今日も私たちに圹立っおいる方法です。 珟代の゜フトりェアが将来その堎所を芋぀けるこずを願うばかりです。



All Articles