For faster navigation, this Iframe is preloading the Wikiwand page for 束縛 (コンピュータ).

束縛 (コンピュータ)

この記事は検証可能参考文献や出典が全く示されていないか、不十分です。 出典を追加して記事の信頼性向上にご協力ください。(このテンプレートの使い方)出典検索?"束縛" コンピュータ – ニュース · 書籍 · スカラー · CiNii · J-STAGE · NDL · dlib.jp · ジャパンサーチ · TWL (2012年10月)

束縛またはバインディング: binding)は、主に「対応付け」や「関連付け」などの意味で用いられるコンピュータ用語である。コンピュータ関連で「束縛」という語が使われるものはいくつかあり、それぞれ具体的な内容は異なるので、以下いくつかの例を示す。

言語束縛

[編集]

言語束縛または言語バインディング (language binding) とは、ライブラリOSサービスのAPIが特定のプログラミング言語向けに提供されていることを指す。

多くのライブラリは、C言語C++などのシステムプログラミング言語で書かれている。そのようなライブラリをJavaのような高級言語で使うには、そのライブラリのJavaバインディングなどが作成されなければならない。

ライブラリの言語束縛を各種用意するのは、ソフトウェアの再利用のためであり、ライブラリそのものを複数の言語で作成するよりも効率的である。また、システム言語と同じ機能を高級言語で記述できないためという場合もある。

名前束縛

[編集]

名前束縛 (name binding) あるいは名前結合とは、識別子に対応付けることを意味する。値に束縛された識別子を、その値への参照と呼ぶ。コンピュータ自体には識別子という概念は存在しないため、機械語レベルでの束縛は存在しない。つまり、名前束縛はプログラミング言語による抽象化の一種である。束縛とスコープには密接な関連があり、スコープによって束縛がどの時点で発生するかが決定される。

識別子の束縛のためにその識別子がプログラム内に出現する箇所を「定義」と呼ぶ。それ以外の箇所でその識別子が出現する場合、その識別子は束縛済みであり、値への参照として使用されていると見ることができる。

定義時

[編集]

スコープに着目して、名前束縛を分類することがある。静的スコープにおいては、名前束縛はプログラム実行前に行われる。これを静的束縛 (static binding) もしくは早期束縛[注釈 1] (early binding) と呼ぶ。動的スコープにおいては、名前束縛はプログラム実行中に行われる。これを動的束縛 (dynamic binding) もしくは遅延束縛 (late binding) と呼ぶ。[要出典]

C++Javaなどの静的型付けオブジェクト指向言語における、仮想関数テーブルを利用した動的ディスパッチ英語版の意味で動的束縛や遅延束縛といった言葉が使われることもある。しかし、仮想関数テーブルの構造はコンパイル時に静的に確定するものであり、これは静的束縛/事前束縛の一種である[1][2][3]

Pythonなどの動的プログラミング言語や、C#/VB.NETなどの動的型付けの機能もサポートする静的型付け言語において、動的束縛や遅延束縛という用語が使われることもある[4][2]。この動的束縛は、スコープによる分類とは無関係である[注釈 2]

コンパイルされたプログラムはメモリ上でリロケータブル(再配置可能)であることが多い。従って、メモリ参照は基本的に動的束縛である。各変数や関数への参照は、何らかのベースアドレスからのオフセットで示され、実行時までそのアドレスは確定できない。これは細かい区別であるが、プログラミング言語レベルでの束縛とマシンレベルのそれとは異なる。

再束縛とミューテーション

[編集]

再束縛 (rebinding) とミューテーション (mutation) とは異なる。再束縛とは、参照している識別子を変化させることであり、ミューテーションとは、参照されている値を変化させることである。次のようなJavaコードを見てみよう。

LinkedList<String> list;
list = new LinkedList<String>();
list.add("foo");
list = null;

識別子listは当初何も参照していない(未初期化状態)[注釈 3]。そして、あるオブジェクト(文字列の連結リスト)に再束縛される。次に、このlistから参照されている連結リストに対するミューテーションとして、文字列が追加される。最後にlistnullに再束縛される。

コマンドバインディング

[編集]

コマンドバインディングまたはキーバインディングとは一般に、アプリケーションソフトウェアにおいて上級者向けに提供されるキーボードマクロや、機能とキーの関連付けを指す。多くの場合、バインディングは変更や追加が可能だが、削除はできない(つまり、キー押下の組合せと機能の関連付けをなくすることはできない)。

コマンドバインディングの例として、Mac OSの多くのアプリケーションでは、セーブ動作にショートカットキーCommand-Sが関連付けられており、GUIによるメニュー操作なしでセーブ機能が使えるようになっている。Emacsでは "save-buffers-kill-emacs" コマンドがCtrl-X Ctrl-Cという一連のキー押下に対応しており、セーブして終了するというよく使う機能に対して毎回 "save-buffers-kill-emacs" と入力する必要がない。Microsoft Excelのようなアプリケーションでは、一連の操作をマクロとして生成でき、それを起動する簡単なコマンドとバインディング可能である。

コンピュータゲームにも同様のバインディングは存在する。例えば、「撃つ」という動作を任意のキーに関連付けるのもバインディングである。反射神経が必要なゲームでは、コントローラの各ボタンへの機能割り当てをユーザーがカスタマイズできることが多い。

ソケットのバインド

[編集]

ネットワークソケットにおいて、ソケットのファイル記述子とローカルポート番号およびIPアドレスを関連付けることをバインドと呼ぶ[5][6]

BSDソケットではbind()関数を用いる。Winsock 1.x/2.xにも互換APIが実装されている[7][8]

脚注

[編集]

注釈

[編集]
  1. ^ 「事前束縛」とも。
  2. ^ PythonやC#/VB.NETは動的スコープをサポートせず、静的スコープ(レキシカルスコープ)のみをサポートする言語である。
  3. ^ Javaでは、フィールドに関してはコンパイラが型に応じて適切な既定値を割り当てるが、ローカル変数に関しては既定値は割り当てられない。

出典

[編集]

関連項目

[編集]
{{bottomLinkPreText}} {{bottomLinkText}}
束縛 (コンピュータ)
Listen to this article

This browser is not supported by Wikiwand :(
Wikiwand requires a browser with modern capabilities in order to provide you with the best reading experience.
Please download and use one of the following browsers:

This article was just edited, click to reload
This article has been deleted on Wikipedia (Why?)

Back to homepage

Please click Add in the dialog above
Please click Allow in the top-left corner,
then click Install Now in the dialog
Please click Open in the download dialog,
then click Install
Please click the "Downloads" icon in the Safari toolbar, open the first download in the list,
then click Install
{{::$root.activation.text}}

Install Wikiwand

Install on Chrome Install on Firefox
Don't forget to rate us

Tell your friends about Wikiwand!

Gmail Facebook Twitter Link

Enjoying Wikiwand?

Tell your friends and spread the love:
Share on Gmail Share on Facebook Share on Twitter Share on Buffer

Our magic isn't perfect

You can help our automatic cover photo selection by reporting an unsuitable photo.

This photo is visually disturbing This photo is not a good choice

Thank you for helping!


Your input will affect cover photo selection, along with input from other users.

X

Get ready for Wikiwand 2.0 🎉! the new version arrives on September 1st! Don't want to wait?