以下を考慮してください。
cd ~
cd $HOME
最初のコマンドは、あまり抽象的ではない2番目のコマンドのための可能な砂糖構文であると言いたいと思います。
プログラミングの初心者にシェルに焦点を当てて、どのようにコマンドが抽象化されるのかを示すために、次のように尋ねます。
砂糖ではなく構文シェル(Bash)コマンドを「低」タイプのコードに変換する方法、例えばアセンブリコードまたは機械語コード(またはcd $HOME
アセンブリ表現などの間のすべて)。
これを達成し、コンピュータコマンドが単純なものから複雑なものにどのように変化するかを示すために、どのソフトウェア(おそらくシェル)を使用できますか?
答え1
Bashに言及したので、cd
アセンブリ言語に変換する方法は次のとおりです。
git://git.savannah.gnu.org/bash.git
cd bash
./configure
make
cd builtins
./mkbuiltins -D . cd.def
gcc -S -DHAVE_CONFIG_H -DSHELL -I. -I.. -I.. -I../include -I../lib -I. -g -O2 -Wno-parentheses -Wno-format-security cd.c
次に、対応するアセンブリ言語をbuiltins/cd.s
。 (インストールする必要がある開発ツールがたくさんあります。インストール方法はディストリビューションによって異なり、./configure
何が欠けているかを教えてくれます。)
私はこれが特にプログラミング初心者にとって非常に役に立つと思います。
答え2
高度なシェルコマンドを実行するには、複雑なプログラムであるシェルが必要です。
カーネルを呼び出す一連のコマンドでない限り、アセンブリまたは機械語コードはプロセスの現在のディレクトリを変更しません。カーネルはシェルよりも複雑なソフトウェアであり、実行は簡単ではありませんchdir
。ファイルシステム抽象化階層もあります。
一般的に言えば、特にプログラミング初心者にとって、アセンブリコードや機械コードの利点はほとんどありません。