なんとなくそう思ってたけど、プログラムの世界で「途中の状態をそのままキープしておく」って、めちゃくちゃ難しいらしいんだよね✨
例えば動画の巻き戻しみたいに、「ここまでやった部分を保存しておいて、あとでそこからまた再開したい」っていう機能、実はパソコンのプログラムでもすごく重要なんだって😳
「カール」ってなに?💭
この話の中で出てくる「curl(カール)」は、もともとプログラムの処理の途中状態を保存する仕組みのことなんだ。
たとえば、エラーが起きたときに「ここまで戻ってやり直そう!」ってときに役立つ✨
でもね、この「カールを保つ」=途中の状態を維持することが想像以上に手間がかかるんだよ😮💨
なぜ難しいの?🤔
プログラムが動いている間には、いろんな変数や情報がどんどん変わる。
それを途中でパチッと止めて、あとからまた同じ場所からスタートするには、全部の情報をちゃんと覚えておく必要があるんだ。
しかも、一部だけ戻してもダメ。
関連している他の情報も全部整合性を保ちながら戻さないと、変な動きになっちゃう💥
具体的にはこんな問題があるよ!📌
- メモリの内容を丸ごと保存するのは重い
- 外部のファイルやデバイスとの連携が複雑
- プログラムの構造によっては巻き戻しがそもそも難しい
これって見た目はシンプルだけど、裏側はけっこう頭を使う作業なんだな〜って思ったよ💗
どうやって解決してるの?🧠
記事では、Linuxの開発者たちがこの問題に取り組んでいる様子が紹介されてる。
「やっぱり根本的にはシステム全体で状態をしっかり管理することが必要」って結論に至ってたよ✨
たとえば、ファイルの状態やメモリの中身をきちんと整理して保存したり、戻ったときに矛盾が起きないように気を付けたり。
これができれば、途中から再開もスムーズになるんだって🥺
なんだかプログラムの「巻き戻し」って、映画の巻き戻しボタンみたいに単純じゃなくて、奥が深いな〜って思ったよ🌸
こういう地味だけど大事な仕組みがちゃんと動いてるから、普段ぼーっと使ってるパソコンやスマホも便利に使えてるんだなって感じたよ💡✨
コメント
ハンナ
企業から開発やセキュリティ情報を急かされても、いつも「サポート契約を読んでね」で返してるよ。
クリス
まさにこれの例がxkcdにあるよ:https://xkcd.com/2347/
リリー
面白くも怖い連絡事例はここにまとめてある:https://daniel.haxx.se/blog/2021/02/19/i-will-slaughter-you/
グレース
curlが10億台に使われてる? それはlibcurlの数は入ってなさそうで少なすぎる印象。
ロバート
curlは軽いけど、メンテは軽くないんだよね。
ハンナ
大手企業は依存してるOSSメンテに寄付もしないし、AIでさらに負担増やしてるのは情けない。
クロエ
sqliteをちょっと思い出すね。
クリス
curlやsqliteは大きくはないけど、たいてい一人の開発者がほとんど仕切ってる印象だよ。
ロバート
一人でやる方がプロジェクトに愛着持って丁寧に育てやすいんだよね。
グレース
rubyも同じで、決定は一人がしてて、他は手伝いという感じ。
エイダン
このまとめはAIが書いたものだよ。
ベン
18万行もあるって、逆に重すぎてcurl使いたくなくなるよね。 中身何してるんだろ?