なぜコヌドをテキストファむルに蚘述しお保存するのですか





シンプルなテキストデヌタ圢匏は玠晎らしいこずです。 いいえ、冗談はありたせん。 たずえば、通垞のtxtファむルを取り䞊げたす。 たあ、矎しさ アむアンにはテキスト゚ディタヌがあり、ファむルを開いたり、読み曞きしたりできたす。 すぐに䜿甚できる自尊心のあるプログラミング蚀語は、テキストファむルを操䜜する手段を提䟛したす。 たたは、ここに初期のネットワヌクプロトコルSMTP、POP3、HTTP 1.0がありたす。 これは䞀般に、私の目に涙が溢れるような至犏です。 telnetを䜿甚しおサヌバヌに接続し、コマンドを発行しお回答を読むこずができたす クラむアント、サヌバヌ、スニファヌ、プロキシを曞くのは楜しいです。



しかし、時間が止たらず、プログラマの利䟿性は、残念ながらたたは幞いなこずにテクノロゞヌを遞択するための䞻芁な基準ではなくなりたした。 突然、矎しいテキストファむルにグラフィックス、写真、リンクを远加する必芁がありたした。今では、pdf圢匏ずdoc圢匏がありたす。 ネットワヌクプロトコルは䞀般に灜害です。䜕らかの理由で、人々はトラフィックの圧瞮、暗号化、倚重化、その他の恐ろしいこずを必芁ずしおいたした。 そしお今、すでにHTTP / 2があり 、telnetがうたく機胜したせん。 Googleのような矎しいRESTの異なるラスカルでさえ、いやいや、圌らはいく぀かのgRPCに眮き換えようずしおいたす 。 そしお、これはただ今日のテキストファむルはほずんど保存されおいないず䞻匵し始めおいたせん-䜕らかの理由で、誰もがテキスト゚ディタで開いたずきに完党に読めない䜕らかのデヌタベヌスを䜿甚したすが、効果的に怜玢、構造化、むンデックス付け、など



そしお、ここで私が話したいこずのトピックに来たす。 ご芧のずおり、すべおのデヌタストレヌゞ圢匏、プロトコル、およびその他のものは、最適な倖芳を探すのに長い道のりを歩んできたした。 ただし、プログラマヌは、50幎前たたはそれ以䞊に祖父が行ったように、プログラムのコヌドをテキストファむルに曞き続けおいたす。 䜿甚するOS、ファッショナブルな蚀語、IDEがどれほどクヌルであっおも、コヌドを蚘述した結果はテキストファむル内の文字になりたす。 それは、理論的には絶察に必芁ではないずいうこずです。コンピュヌタヌぞの私たちの手玙は、野りサギの停止信号のように必芁だからです。 圌は実行するために機械呜什を必芁ずしたす、それを我々がそこにある手玙でそれらを蚘述するこずはちょうどより䟿利です。 しかし、実際には、「サむクル」たたは「機胜」は、名前の付け方や保管堎所に関係なく、それらが䜕であるかです。 「バラは、少なくずもバラず呌んでも、バラの銙りがする。」



はい、テキストファむルにコヌドを蚘述するこずに慣れおいたす。 ファむルを開くず、プログラムのコヌドが衚瀺されるようです。 それの䞀郚、ずいうか。 どういうわけか。 なるほど。 さお、たたはあなたは理解するず思いたす。 しかし、ここでもFacebookで投皿を開いおいるのがわかりたす。Facebookはこの投皿をテキストファむルに保存したせんでした。



ストレヌゞコヌドがテキスト文字列のセットずしお䜜成する問題を芋おみたしょう。





これはすべお、私たちが䜿甚するすべおのツヌルで凊理するには非垞に䞍䟿です。

蚘述するすべおのコヌドは、IDE、そのプラグむン、コンパむラ、デバッガ、静的分析ツヌル、バヌゞョン管理、ビルドサヌバヌなど、将来の䞀連のプログラムによっお読み取られたす。 それらはすべお、 信じられないほどテキスト圢匏に䌌おいたす実際、いいえ。 それらのそれぞれは、それらを読み、分析したす぀たり、各プログラミング蚀語で数十の開発チヌムの圹に立たない䜜業をすでに芋おいたす。 そしお時々、圌らは間違っおいたり、間違っおいたり、間違っおいたりせず、あなたのコヌドを少し異なっお理解したす。 IDEずそのプラグむンのいく぀かが、同じコヌドに察しお異なるオヌトコンプリヌトツヌルずリファクタリングツヌルを提䟛できるこずは呚知の事実です。 ただし、1぀のツヌルで、䜜成した文字をASTのような衚珟メタデヌタ付きで拡匵されおいる堎合もあるに倉換し、これをすべお「プロゞェクトコヌドベヌス」ず呌ばれるデヌタベヌスに保存しおおくず䟿利です。 そしお、特定のプロトコルに埓っお、すべおのツヌルがこのデヌタベヌスを䜿甚しお、安定した暙準化された予枬可胜な結果を​​取埗したす。 今日知っおいる理想に最も近いものは、 KytheずいうGoogleのプロゞェクトです 。 理想にはただほど遠いですが、方向は正しいです。



これはすべお、人々に読み曞きするのはひどく䞍䟿です。

「テキストよりも明確なものは䜕ですか」ず尋ねたす。 はい、できたす。 テキストは情報を提瀺するための優れた手段ですが、可胜な限りではなく、垞に最高ずは限りたせん。 本に察する珟圚の関心を芋おください-かなり萜ちたした。 情報の倚くの衚珟が、より掻発に、より速く私たちに知芚されるからです。 同じ芖聎芚シリヌズ。 たたはむンフォグラフィック。 たたはテキストでさえ-しかし、固䜓の壁ではなく、䜕らかの圢で構造化、゜ヌト、グルヌプ化、およびフィルタヌ凊理されたす。 はい、このようなコヌドを䜜成できたす。 自分でこの目暙を蚭定したら、座っおそれを行いたす。 そしお、私たちはそれをしたす-他に遞択肢はありたせん。 そしお、これらすべおを無料で自動的に入手するのはどれほど玠晎らしいこずでしょう。 芋たいようにコヌドを芋るこずができるように。 コヌドでSELECTを蚘述する-ク゚リパラメヌタに䞀臎するアヌティファクトのみを衚瀺したす。 たたは、ダむアグラムの圢匏で2぀のノヌド間でデヌタを送信するこずを想像しおください。 たたはアニメヌション。 名前ではなくメモリで関数を怜玢するには、「3぀以䞊のパラメヌタがあり、2番目のパラメヌタが倉曎されたした」。 たたは、3サむクルありたした。 たたは「圌女は時間ずずもに䜕かをした」。 珟圚、そのようなツヌルはありたすか いいえ 愚か者のように座っお正芏衚珟を曞いおください。



コヌドを曞くこずは読むこずよりもさらに悪い。 プログラマの䞀郚はブラむンドタむピングを研究しおいたす。誰かはVimホットキヌを詰め蟌み、誰かはお気に入りのIDEのメニュヌをマりスで぀぀いおいたす。 これをしなければならないずいう事実は恐怖です アルゎリズムの䜜成は芞術であり、魔法であり、創造の行為です。 そしお、私たちは石のaxesを取り、圌らの助けを借りお宇宙船を構築したす。 そしお今日、これらのハンマヌしかありたせん。 そしお、毎日、ハンドルの圢状ずそれに固定する玉石の皮類を倧幅に倉曎する新しいハンマヌがありたす。実際、宇宙船を構築するための道具に私たちを近づけるむオタはありたせん。



コヌドの曞匏蚭定スタむル

Habréのホリバヌ「スペヌスに察するタブ」を芚えおいたすか これらは戊いでした。 「コヌドの曞匏蚭定スタむル」は、䜕らかの理由で存圚する抂念ですが、原則ずしお存圚するべきではありたせん。 プログラマヌは自分のプロゞェクトのためにそれを遞択し、準拠しようずしたすそれに時間を費やしたす。 どんなナンセンス コヌドが、クラス、メ゜ッド、ルヌプ、倉数、条件を衚す゚ンティティの接続セットの圢匏でバむナリファむルに栌玍される理想的な䞖界を想像しおください。 この堎合、各プログラマヌは、少なくずもタブ、少なくずもスペヌス、少なくずも子猫のアむコンが描かれるように、このコヌドを衚瀺するツヌルをカスタマむズできたす。 これらの「どの行が䞭括匧」であり、「小数点の埌にスペヌスが必芁かどうか」は、単に過去のものです。 同様に、コヌドをデヌタベヌスに保存するず、このプログラマヌのスタむルで蚭蚈されたコヌドから、フォヌマットなしの単なるコヌドに倉換されたす。 そしお、そのIDEの別のプログラマヌが圌にずっお䟿利な圢匏でむンポヌトしたした。



コヌドメタデヌタ

最近、投皿でその泚釈がフラッシュされたした-Javaコヌドには堎所がありたせん。 もちろん、圌らはそこに属しおいたせん。 コヌドではないからです。 これはメタデヌタです。 他に䜕もないので、それらをコヌドで蚘述したす。 たあ、近くの別のXMLファむルで、さらに悪いこずに。 Pythonのデコレヌタ、Cの属性、任意の蚀語のメ゜ッドに関するコメントなど、Javaの泚釈 -メタデヌタである必芁がありたす。 このメタデヌタを怜玢し、すばやくオン/オフを切り替え、リファクタリングする䟿利なツヌルが必芁です。 もちろん、「珟圚のように、コヌドで」それらを瀺す機䌚が必芁です。 しかし、それらをコヌドに「埋め蟌む」こずは、奜きなすべおの写真のように、すぐに胞からタトゥヌをたたくようなものです。 劇的すぎる、倧きすぎる結果。



アスペクト指向プログラミング

アスペクト指向プログラミングに぀いお最初に読む人は誰でも、そのアむデアの矎しさに染み蟌んでいたす。 もっず機胜的に気に入っおいたす。 しかし、実際の䞖界ではどこにあるのでしょうか しかし、圌ではありたせん。 アスペクト指向プログラミングは、単玔に䞀連のテキスト文字列ずしお蚘述されたコヌドの抂念に圓おはたらないためです。 少なくずも䜕かをアスペクトスタむルで曞こうずするず、リフレクションのゞャングルに連れお行かれるか、コヌドベヌス党䜓に浞透し自動化できない倧芏暡な線集が必芁になりたす。



ここで、コヌドが構造化された圢匏で効果的に保存されおいるこずを想像しおください。 そしお、それを扱うツヌルがありたす。 だから、すべおのクラスのすべおのメ゜ッドのすべおの入力パラメヌタヌのロギングを远加する必芁がありたすか はい、簡単です。すべおのメ゜ッドの属性を倉曎する1぀のコマンド "SET logging = true Where item =" method "など+ログの圢匏を決定する1行のコヌド。2回のクリックで削陀されたす。各機胜で行うのか、プロファむリングするのか、認蚌ずアクセス制埡なのか、コントラクトをチェックするのか、そしお、それらがすべおクラス、メ゜ッドであり、これらすべおを远加しおもコヌドが倉曎されない堎合はどうでしょうか。たたは、いく぀かの偎面のセットデバッグ環境甚のもの、䜕か 生産のための別のものに぀いお。



倧きなコヌドベヌスサむズ

グヌグルは最近、1億行のコヌドを持っおいるず蚀ったおそらくすでにそれ以䞊。 非垞に倚くの、おそらく、誰も持っおいたせんが、倧芏暡な組織の゚ンタヌプラむズプロゞェクトの1〜2癟䞇行はすでにかなり䞀般的です。 そしお、このコヌドベヌスをナビゲヌトする方法を教えおください。 お気に入りのgrepはどれくらい良いですか 参照の怜玢のような機胜ですか リファクタリングはどうですか テキストは遅くお厄介なものです。 迅速に操䜜したい人は誰でも、どのむンデックスを䜜成する必芁がありたす。 これらのむンデックスは長期にわたっお構築され、コヌド自䜓ずは別個に存圚し、各ツヌルによっお再発明されたす。 私たち自身が英雄的に解決しようずしおいる問題を䜜成したした。 この時点で、構造ロギングに関する最近のレポヌトを思い出し、同様の問題に぀いお語りたした。テキスト圢匏でログを䜜成し、Logstashのような個別のプログラムを䜜成しお、これらのテキスト圢匏を解析し、以前に蚘録された情報を抜出したすもちろん、 、すべおが蚘述されおいるわけではなく、すべおが抜出されおいるわけではなく、コンテキストが倱われ、すべおのステップで非同期化されたす。 䞀般的に、興味深いレポヌト、芋おください。 さお、ログに぀いおは、トラブルの芏暡に぀いおはすでに理解しおいたすが、コヌド自䜓はただそうではないこずがわかりたした。



長いコンパむル時間

出くわす最初のプログラミング蚀語を芋お、そのナヌザヌが望む機胜を掚枬しおみおください。 「4本のトランクず空党䜓がオりムの䞭にいる」ずいうゞョヌクのように、ランダムに撮圱するこずができ、「コンパむル/解釈時間を短瞮するのがいいだろう」こずがわかりたす- 些现なものから、 Yandexぞのリク゚ストそしおSportlotoにしない理由 。 これは必芁です、それはあなたが熱心にキヌボヌドを叩くずきそしおあなたはしばしばこれを行う、コンパむラずむンタプリタは䜕もしたせん、そしお時々のみ、アセンブリを開始するコマンドたたはスクリプトの解釈を芁求する無気力な倢から目芚めたすメモリずすべおのCPUコアがゞョブを実行したす。 そしお、ちょうど孊期党䜓で䜕もしなかった孊生のように、あなたは緊匵し、倚くの時間ず努力を費やす必芁があるこずが突然刀明したした。 しかし、なぜ、以前は䜕もしなかったのですか コヌドを保存するための圢匏が、プログラムの蚘述されたテキストを䜕らかの䞭間圢匏トヌクンのストリヌムより少し倧きいが、完成したバむナリコヌドより少し小さいに倉換する堎合、コンパむルははるかに高速になりたす。



蚀語間開発ツヌルの欠劂

すべおのプログラミング蚀語、すべおのフレヌムワヌク、すべおのOSが独自の憲章を持぀修道院であるずいう事実により、システムのさたざたな郚分を蚘述する䟿利な調敎のためのツヌルは絶察にありたせん。 いいえ、もちろん、あらゆる皮類のIDEがありたす。 しかし、今日私が完党に兞型的なプロセスを実行できるデバッガヌを芋せおくださいPythonスクリプトはC ++プログラムを起動し、ネットワヌク䞊のGoでマむクロサヌビスを取埗し、デヌタベヌスに登り、そこでいく぀かのストレヌゞファむルを取埗し、その埌すべおがPythonスクリプトに戻りたした「。 そしお、デバッガヌはすべおを䞎えおくれたした-スクリプトからストレヌゞ、コヌルスタック、環境党䜓たで、あらゆるレベルのブレヌクポむント。 そのため、コマンドラむンを介しおパラメヌタヌが枡され、ここでそれがREST芁求にシリアル化され、このように返されるこずがわかりたした。 そのようなこずはありたすか そのようなこずはありたせん。 コヌドは文字だからです。 他にもありたすが、ここには他にもありたす。 1぀のコンパむラがそれらを組み立お、もう1぀のコンパむラがここにありたす。 そしお、どういうわけかそれらを接続するこずは困難です。 しかし、コヌドがコヌドであり、コヌド関数、パラメヌタヌ、ルヌプ、条件を含むがあり、ここにもコヌドがある堎合は、それらの間のブリッゞを転送できたす。これらのブリッゞを歩くず䟿利です。



だからどれくらい



All Articles