はてなキーワード: UNIXとは
プログラミングを始める人からよく「WindowsとMacどっちがいいですか?」と聞かれる。
このときに「どっちでも同じことができますよ」と答える人がいるが、これは半分正しくて半分間違っている。
しかし、問題は「同じことがどれだけスムーズにできるか」であり、ここには大きな差がある。
【大前提】
◾️MacはUnixベースのOSであり、最初から開発者向けの環境が整っている。
・ Node、Python、Git、Dockerなどが素直に動く
そのため、余計な設定をほとんどせずにすぐ開発を始めることができる。
言い換えると、Macは「コードを書くこと」に集中できる環境になっている。
◾️Windowsはそのままだと開発に向いていない
一方でWindowsは、一般ユーザーや企業用途を前提に設計されているOSであり、開発は後付けに近い。
・ cmdやPowerShellはUnix系のコマンドと互換性がない
・教材のコマンドがそのまま使えない
・「PATHが通っていない」などの初歩的なトラブルが頻発する
さらに、DockerやNodeなどのツールもそのままでは安定しないことが多く、環境構築の難易度が上がる。
結果として、初心者は「コードを書く前に詰まる」ことが非常に多い。
現在の開発環境はほぼすべてUnix文化の上に成り立っている。
・ Docker
つまり、Macはそのまま実務環境に近いが、Windowsはそのままだと別世界になってしまう。
ただし、Windowsでも開発ができないわけではない。
WindowsではWSL(Windows Subsystem for Linux)を使うことで、Linux環境を動かすことができる。
これにより、
bashが使える
Dockerなども安定する
つまり、WindowsでもMacとほぼ同じ環境を再現できる。
◾️結論
MacとWindowsの違いは「できること」ではなく「開発体験」にある。
そのため、初心者にとってはこの差が非常に大きい。
最も現実的な答えは以下になる。
「どちらでも開発は可能。ただし、初心者ならMac、もしくはWindowsならWSLを使うべき」
一言でまとめると
Macはそのまま開発に使える
◾️問題
最近のモダン開発はUnix依存なんだけど、昔ちょっとパソコンやってた人が知識更新せずwinでも大丈夫とかクソアドバイスしちゃう。
さらに上記を間に受けた初心者(初心者だからこそwinしかもってない)教材通りのコマンドが使えず、初歩的なトラブルだらけで設定で挫折してしまう。開発体験の差が強く出る。
WSL導入も辛い人ような人こそmacでお気楽開発してからwinでもいいのに。PCアドバイスおじさんが余計なこといってwinで詰む。
Appleのパソコンに出会ったのは、大学生の時だった。Macintosh IIfxという当時としてはかなり高価なマシンが研究室に鎮座してて、MS-DOSとUNIXしか使ったことのない俺はその一貫した操作性に衝撃を受けた。で、98ノートしか持ってなかった俺は、アルバイトをしまくってMacを買った。最初に買ったのはCollarClassicって一体型のマシンで、その後もずっとずっとMacだった。Windows95が出た時も「こんなのMacOSのパクリだよ」とディスりまくっていた。周囲のいろんな人にMacを勧めまくった。今思うと痛い人間である。
それが変わったのはWindows2000が出たくらい。職場で導入したPCに入ってたそれは、触っててびっくりするほど優秀なOSで、当時肥大化して不安定の極みだったMacOSとは雲泥の差だった。周りの人はみんな薄くて軽いWindowsマシンを持ってて、俺の持っているのは厚くて重くてやぼったいPowerBookだった。しばらくしてMacにもOSXが出てくるのだが、出た当初は実に使えないOSだった。
当時俺はMacのソフトを開発する会社にいた。MacOSからOSXに、そしてプロセッサがIBMのPowerPCからIntelのx86に代わる激動期だった。APIもCarbonからCocoaに。でも資料は少なくAppleからの情報開示は限定的で本当にどうしていいのかわからなかった。技術的な質問をしても返事なんて帰ってこない。その点、隣の島のWindowsソフトを開発する部署を見ると様子が全く違うのだった。資料は豊富で、OSの後方互換性は極限まで配慮され、Microsoftのサポートは手厚く、技術コミュニティも活発だった。プロセッサが変わるときにAppleのカンファレンスにも出向いたが、肝心なことは何一つ教えてくれなかった。
弊社は小さい会社だったが、日本でMacを使う際にそれなりに存在感のあるソフト群を提供していて、日本のMac文化を支えてきたつもりだった。でも、なんかもうAppleがだんだん嫌になってきていたのだな。会社がMacのソフト開発から撤退するタイミングで、俺のパソコンもWindowsになった。UIデザインは好みじゃなかったが、それさえ目をつぶれば案の定こちらのほうが数倍使いやすく、あっという間になれた。マグネシウム合金を使った軽くてかっこいいDynabookやVAIOを買った。その後ThinkPadに落ち着いたけど。
その後、ソフトバンクからiPhoneが出た。速攻で買った。当時俺はウィルコムのW-ZERO3のヘヴィユーザーで、自分でアプリも作ったりして体の一部と言っていいくらいに使いこなしていたけど、iPhoneを使ってこれからは絶対にAppleの時代が来るなと思った。そして新しいiPhoneが出るたびに買った。Androidなんて見向きもしなかったし、会社でAndroidタブレットを使った業務システムを作ったときは、使いにくくてキレそうになった。Appleウォッチももちろん買った。
Appleが再び好きになって、久しぶりにMacBookも買った。でもThinkPadに慣れ切っていた俺の指にはMacの薄いキーボードは全然なじめなかった。結局なぜかあれほど使っていたMacには戻らないで、早々にThinkpadに戻った。WindowsのWSL環境が充実するにつれて、職場のエンジニアもWindowsにスイッチする人が増えてきた。それでもiPhoneはずっと手放さなかった。
そんな時に、会社の部下がMotorolaの折り畳みスマホを持ってきていた。スマホが折りたためるとこんなに便利でかっこいいのかよ…。気がづいたら帰り道のヨドバシで同じものを買っていた。折りたためるのにiPhoneよりずっと安かった。そして使ってみた。なんだ、全然使いやすいじゃん。というか、使えば使うほどこれいいじゃんと思えてくる。折りたためるというメリット以外にも、Androidは面白そうだと思った。
そうなると、みんなが絶賛するPixelも欲しくなってくる。で、メインスマホのiPhone16proをPixel9にMNPしてしまった。結論から言うと、自分にはiPhoneよりPixelのほうが合ってた。だいたい、iPhoneでもGoogleのアプリばっかり使っていたのであって、合わないはずはなかったんだ。スマートウォッチはMiBandにした。軽くて小さくて電池はやたら持つ。Appleウォッチとは比べ物にならないくらいの安物だが、使ってみると別にこれでいいじゃんとしか思えなかった。
というわけで、再びAppleにさよならすることになった。どうでもいい個人的な話だけど、一応書いておきます。でもまた、なんかの形でAppleのデバイスを使えたらいいな。
さて、まずは事の経緯から。
娘が中学生になり、第一子の息子が中学生になった時と同様、パソコンを買い与えることになりました。ここまでは良いです。私も了承しています。
何故なら夫はプログラマー、情報技術者であり、私はそこまで詳しくはありませんが、相応の資格や会社での立場を持っているようです。生活に困らない程度には稼いで下さっているので、その点は本当に感謝しています。
しかし今回の娘のパソコン導入を巡って、私たち夫婦は喧嘩になりました。夫は「娘に買い与えるパソコンのOSはFreeBSDにする」と言うのです。
実は息子のパソコンのOSもFreeBSDで、我が家にあるパソコンはすべて中身がFreeBSDです。その理由が夫の言葉を借りるなら「俺はFreeBSDが好きなんだ」。意味がわかりませ……いや、意味はわかります。言葉の意味はわかります。なぜそうするのかがわからないということです。
一方、娘が欲しいと言ったのはMacBook Air。デザインも可愛くてお洒落、デザイナーさんも使っているし、はてなーにも愛されています。ところが夫は言います。「いや一般目線でWindowsへ行きたいって言うならまだしもMacって意味わからなくないか?」と疑問の表情を隠さないんです。
そこで私は、ついに反撃に出ました。
「ねぇ、macOSってNeXTSTEP由来で、Darwinの中にはFreeBSDのコードも結構入ってるんでしょ?」
すると夫、ピタッと黙りました。
そうです。macOSのカーネルXNUはMachが中核で、そこにBSD層とIOKitを載せたハイブリッドで、そのBSD層には、FreeBSD由来のネットワークスタックやVFS、POSIXシステムコール実装が使われています。ユーザーランドに至っては、libcや各種UNIXツールなど、かなりの部分がFreeBSD由来だったような気がします。
「macOSはFreeBSD“ベース”ではないのは分かってるよ?Machが土台で、完全なBSDカーネルじゃない。でもさ、DarwinってFreeBSD 5.x頃のコードを大量に取り込んでるよね?重要な部分でしっかり使われてるよね?」
「それに、あなたがいつも言ってるじゃない。『UNIX系なら出来ることに大差はない』って。macOSも立派なUNIX認証OSだし、POSIX準拠だし、BSDユーザーランドだし、『FreeBSDの思想が入っていない』とは言えないよね?」
もう一息です。
夫は必死に反論します。「いや、カーネルの中核はMachだから」「同期は取れてないし」「割合で言えばBSD部分は全部じゃない」。
私は頷きます。「うん、知ってる。全部じゃない。でも重要な部分で使われているけど、全体の基盤ではないって話でしょ?」
新築や家電では私の意見を聞いてくれるのに、何故かパソコンだけは譲らないんです。
でも今回は違います。あなたの大好きなFreeBSD、もうMacの中に一部は住んでます。
頼みの息子も「言うほど不便じゃない。まぁ動かないSteamのゲームがたまにあるけどSwitchゲー動かないみたいなもんだし慣れたわ別ゲーやりゃ良いし」とそっけない感じ。そもそもこの子は小学生の頃からSwitchで遊んでて、この子にとってゲーム機もFreeBSDなんです!味方として頼りにならない!
別にMacBook Airで良いと思いませんか?FreeBSDそのままなんて使ってる人見たこと無いじゃないですか!そんなにFreeBSDそのものであることが大事ですか!?Machの上でBSD層が動き、FreeBSD由来のユーザーランドを使うUNIXならよくないですか???どうやったら夫を倒せますか教えて下さい!!!!!
Linuxは情報処理技術者でよく分かっている人間が利用する物と捉えて良い。
一般ユーザでは多数派である Windows , macOS を利用した方が良いと考える。
これは下記の理由による。
※「Linuxフリーク」は夫の個人の考え方であり、押しつける物ではない
OSの違いが分かっていないのですから、解決方法も自分で探さなければならない。
よって「Linuxで出来ないこと=駄目な物」と捉えかねない。
フォント、印刷をとっても文字ずれを起こしたり、表示が崩れたり。
課題提出をするときにも特定のアプリケーションでの保存形式の提出を指示されたりもします。
それらの問題解決に時間を割くより、【勉強】に時間を割くべき。
一般的に出回っている物であれば、操作、問題解決方法は皆が分かりますので解決時間が早くすみます。
その上で、パソコンのOSに違いが興味が出てくるのであれば相談に乗ってあげれば良いでしょう。
OSが違えば動作も違い、悩みが出るのは承知のことなのではないでしょうか>夫さん
※指導要綱とパソコンの諸元は確認されましたか? <==掲載されているのは最低諸元なので注意
性能よりも単純に持ち運びを出来た方が良いということにつきます。
友人との関係性維持のためにパソコンを持ち歩いた方がその場で検索したりデータを編集したり。
人間関係は重要視したほうがよいのでラップトップをお勧めします。
macOSは古くの由来からすれば スティーブ・ジョブズの NextSTEP から移植されたものなので中身は UNIXだよ
と質問とした所、
いい質問。ただ、**今回私が提示した C# コード(MemoryMappedFile + Parallel.For で CR を数える)**には、明確に一つの「このネット上の記事/リポジトリをそのままコピーした」元ネタはありません。
いくつか似たアイデアを使ってる部分と参考になる記事/ドキュメントはあるので、それらを紹介します:
---
*Microsoft ドキュメント — Memory-Mapped Files (.NET)*
([Microsoft Learn][1])
*Kieren Johnstone: 高速に MemoryMappedFile からバイト列を読む方法(StackOverflow)*
`MemoryMappedViewAccessor` を使って unsafe コードからポインタを取得し、Marshal.Copy で効率よく読み出す方法。
([Stack Overflow][2])
*Red-Gate: Sharing is Caring: Using Memory Mapped Files in .NET*
MemoryMappedFile を使ったキャッシングなどの応用。
*Stephen Cleary のブログ: Memory-Mapped Files と Overlaid Structs*
メモリマップトファイルへ構造体を重ねて(オーバーレイ)扱う方法など。
([blog.stephencleary.com][4])
---
もしよければ、**あなたのコード(CR を数えるもの)に特化した元ネタをさらに探してみます**。やりましょうか?
[1]: https://learn.microsoft.com/en-us/dotnet/standard/io/memory-mapped-files?utm_source=chatgpt.com "Memory-Mapped Files - .NET"
[2]: https://stackoverflow.com/questions/7956167/how-can-i-quickly-read-bytes-from-a-memory-mapped-file-in-net?utm_source=chatgpt.com "How can I quickly read bytes from a memory mapped file in ..."
[3]: https://www.red-gate.com/simple-talk/development/dotnet-development/sharing-caring-using-memory-mapped-files-net/?utm_source=chatgpt.com "Sharing is Caring: Using Memory Mapped Files in .NET"
[4]: https://blog.stephencleary.com/2023/09/memory-mapped-files-overlaid-structs.html?utm_source=chatgpt.com "Memory-Mapped Files and Overlaid Structs"
ChatGPT:
が、出てきて、やってくれと言ったら、こういうのが出てきた。
了解しました — 広く(英語・日本語・GitHub・ブログ・StackOverflow 等)再検索しました。結論と見つかった“近い”ソースをまとめます。
結論(要点)**
「あなたが求めている**MemoryMappedFile を使い、UTF-8 バイナリ中の `CR`(0x0D)だけを数える・マルチスレッドで分割して処理する**」という **完全一致の“元ネタ”ソースコード**は、公開された web 上のリポジトリや記事の中では見つかりませんでした(複数の検索ワード/検索対象で確認)。([hyr.mn][1])
ただし、ほぼ同種の要素(メモリマップドファイルの読み方・大きなファイルの行数カウント・バイト単位カウントを高速化する手法)は複数見つかりました。これらを組み合わせれば、先に示した実装は典型的なパターンであることが確認できます。([Microsoft Learn][2])
見つかった“近い”・参考になりそうなソース(抜粋)**
1. .NET の公式ドキュメント(MemoryMappedFile の説明) — `MemoryMappedFile` の基本と CreateViewStream / CreateViewAccessor の使い方。必須の参照。([Microsoft Learn][2])
2. 「Counting lines with C#」というブログ記事(C# で改行(CR/LF)カウントに関する実装と GitHub リンク) — 行数カウントを目的とした実装パターンがある。([hyr.mn][1])
3. StackOverflow:MemoryMappedFile から高速にバイトを読む方法(`MemoryMappedViewAccessor` / unsafe ポインタ / Marshal.Copy 等の議論) — 高速実装のヒント。([Stack Overflow][3])
4. StackOverflow/Q&A:ファイル中の LF/CR の数を求める方法に関するスレッド(`grep -c $'\r'` 等の unix 例や C# でのカウント方法の議論)。([Stack Overflow][4])
5. GitHub のサンプルリポジトリ(MemoryMappedFile のテスト/サンプル) — メモリマップドファイルを使う実装例。([GitHub][5])
もう少し深掘りできます(選択肢)**
(A) GitHub を **リポジトリ全体**(コード本体)に絞ってさらにクエリを投げ、Gist や commit レベルまで探索します(よりコストがかかるため広範検索)。
(B) ブログ・技術記事を対象に **全文一致(コード断片)検索** を行い、私が先に示した C# コードの実際の一節(たとえば `mmf.CreateViewStream(offset, size)` や `Interlocked.Add(ref totalCount, localCount)` など)を直接検索して完全一致を探します。
(C) 「オリジナルは GitHub にあるはず」と思われるなら、あなたが覚えている**リポジトリ名の断片/作者名/投稿日**などを教えていただければ、それを手がかりに探します(断片情報があるとヒット率がぐっと上がります)。
どれを優先して探しましょうか?(A: GitHub全探査 / B: コード断片で全文検索 / C: あなたからヒント提供)
※続けて深掘りする場合は、すぐにさらに広い検索を行って該当ソースを探します(そのまま実行します)。
[1]: https://hyr.mn/catching-flowers-with-a-net?utm_source=chatgpt.com "Counting lines with C# - hyr.mn"
[2]: https://learn.microsoft.com/en-us/dotnet/standard/io/memory-mapped-files?utm_source=chatgpt.com "Memory-Mapped Files - .NET"
[3]: https://stackoverflow.com/questions/7956167/how-can-i-quickly-read-bytes-from-a-memory-mapped-file-in-net?utm_source=chatgpt.com "How can I quickly read bytes from a memory mapped file in ..."
[4]: https://stackoverflow.com/questions/35182022/how-to-calculate-count-of-line-feed-or-carriage-return-characters-from-a-text-fi?utm_source=chatgpt.com "How to calculate count of line feed or carriage return ..."
[5]: https://github.com/byGeek/MemoryMappedFileTest?utm_source=chatgpt.com "test csharp code for using memory mapped file."
ダサいからなんなの?ダサくて上等だ。普通にプロでもwindowsサーバーとかに主に関わってる人もいるわけでITの仕事が全部unixだと思ってるのおかしい。
dorawiiより
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 https://anond.hatelabo.jp/20251113165348# -----BEGIN PGP SIGNATURE----- iHUEARYKAB0WIQTEe8eLwpVRSViDKR5wMdsubs4+SAUCaRWOjgAKCRBwMdsubs4+ SBu0AQDCk+381mDVI03iAQpYSAOZY6FCGhhwwXzJqzDcRo+DmQD/S65odOwdUQRk H/G1AzmlMJFWB6kKNGjLhqCtDOw0GwY= =WFd7 -----END PGP SIGNATURE-----
ChatGPTに聞いたらええんちゃうか
いい質問ですね!
これ、実は「どっちが正しい」みたいな決着はなくて、言語文化や時代背景によって意見が分かれる話題なんです。
---
1. for(;;) vs while(1) vs while(true)
* `for(初期化; 条件; 更新)` のすべてを省略すると無条件ループになる。
* 昔は「最適化や挙動が明確」という理由で好まれることもあった。
* ただし「1って何?ブール値?」と初学者には直感的でないかも。
* C++やJava、C#などブール型が明確な言語では「一番可読性が高い」。
* 「ずっと真の間繰り返す」という自然な書き方なので、最近はこちらが推奨されることが多い。
* Cではtrueを使うには stdbool.h をインクルードする必要があるので、昔は避けられがちだった。
---
2. 「for(;;)派」の人は誰?
ネットでよく言われるのは、Linuxカーネルのコード規約とか古いUNIX文化の影響です。
* 「無限ループは for(;;) を使う」とカーネル開発のスタイルガイドで書かれている。
* 理由は「歴史的にCで最も標準的で、誰もが見慣れているから」。
要するに「C文化圏ではfor(;;)が王道」というだけで、現代の教育やC++/Javaなどの文脈では while(true) の方が読みやすい、という感じです。
---
3. まとめると
なので、初学者が「while(true)の方が可読性高い」と思うのは大正解です 👍
---
👉質問: