言語サポートとは? わかりやすく解説

言語サポート

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2018/02/16 08:45 UTC 版)

両端キュー」の記事における「言語サポート」の解説

C++ Standard Template Library にクラステンプレートとして std::deque用意されている。内部実装方法規定されていないが、通常1つ上の固定サイズ配列用いて実装されている。両端だけでなくランダムアクセスサポートしており、キュー中間部分直接読み書きできる(ただし、キュー両端への挿入削除がO(1)なのに対し中間への挿入削除はO(n)となる)。 Java 6 Collections FrameworkDeque インタフェースがあり、両端での追加取出し機能提供している。これを実装したクラスとして ArrayDeque や LinkedList がある。こちらも前者動的配列実装後者連結リスト実装である。 Python 2.4 collections モジュールがあり、両端キューオブジェクトをサポートしている。 PHP 5.3 SPL extension に 'SplDoublyLinkedList' クラスがあり、両端キューデータ構造実装使えるそれまで配列関数 array_shift/unshift/pop/push しか使えなかった。

※この「言語サポート」の解説は、「両端キュー」の解説の一部です。
「言語サポート」を含む「両端キュー」の記事については、「両端キュー」の概要を参照ください。


言語サポート

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/04/29 20:30 UTC 版)

連結リスト」の記事における「言語サポート」の解説

LISPSchemePrologといったプログラミング言語は、片方向リスト組み込み装備している。多く関数型言語では、リスト構成するノードを「consセル」と呼ぶ。consセルには "car" 部分と "cdr" 部分があり、"car" 部はそのノードデータへの参照、"cdr" 部は次のノードへの参照格納している。consセルは他のデータ構造にも使われるが、主な用途リスト構成することである。 抽象データ型テンプレートサポートする言語では、連結リスト抽象データ型テンプレート使って連結リスト構築できるオブジェクト指向プログラミング言語では、次のようなクラス連結リスト用に用意されている。 C++STL) - std::listクラスJava - java.util.LinkedListクラス .NET - System.Collections.Generic.LinkedListクラス 以下に、C言語での片方向リストの例を示す。 #include /* for printf */#include /* for malloc */typedef struct ns {int data;struct ns *next;} node;node *list_add(node **p, int i) { /* add head */ node *n = malloc(sizeof(node)); /* you normally don't cast a return value for malloc */ n->next = *p; *p = n; n->data = i; return n;}node *list_add_tail(node **p, int i) { /* add tail */ node *n; node *ptr; if (*p == NULL) { n = list_add(p, i); } else { ptr = *p; while (ptr->next != NULL) { ptr = ptr->next; } n = malloc(sizeof(node)); n->next = NULL; n->data = i; ptr->next = n; } return n;}void list_remove(node **p) { /* remove head */ if (*p != NULL) { node *n = *p;*p = (*p)->next;free(n); }}void list_remove_tail(node **p) { /* remove tail */ if (*p != NULL) { if( (*p)->next == NULL ) { list_remove(p); } else { node *ptr = *p; node *pre; while (ptr->next != NULL) { pre = ptr; ptr = ptr->next; } pre->next = NULL; free(ptr); } }}void list_remove_all(node **p) { /* remove all node */ while (*p != NULL) { list_remove(p); }}node **list_search(node **n, int i) { while (*n != NULL) { if ((*n)->data == i) { return n; } n = &(*n)->next; } return NULL;}void list_print(node *n) { if (n == NULL) { printf("list is empty\n"); } while (n != NULL) { printf("print %p %p %d\n", n, n->next, n->data); n = n->next; }}int main(void) { node *n = NULL; list_add(&n, 0); /* list: 0 */ list_add(&n, 1); /* list: 1 0 */ list_add(&n, 2); /* list: 2 1 0 */ list_add(&n, 3); /* list: 3 2 1 0 */ list_add(&n, 4); /* list: 4 3 2 1 0 */ list_print(n); list_remove(&n); /* remove first (4) */ list_remove(&n->next); /* remove new second (2) */ list_remove(list_search(&n, 1)); /* remove cell containing 1 (first) */ list_remove(&n->next); /* remove second to last node (0) */ list_remove(&n); /* remove last (3) */ list_print(n); return 0;}

※この「言語サポート」の解説は、「連結リスト」の解説の一部です。
「言語サポート」を含む「連結リスト」の記事については、「連結リスト」の概要を参照ください。


言語サポート

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/03/16 18:58 UTC 版)

インライン関数」の記事における「言語サポート」の解説

C++およびC99以降C言語inline キーワードによるインライン関数標準サポートしている。Microsoft Visual C++バージョン2017においてもC99をフルサポートしておらず、C言語モードでは inline キーワードをサポートしていないが、代わりにインライン関数独自拡張の __inline キーワードで対応しているMicrosoft Visual C++g++などは、インライン関数として指定されていなくてもインライン展開べき関数自動的に展開するオプション用意している。Adaでは pragmaインライン関数として使うことができる。Delphi (Object Pascal) はバージョン2005以降インライン関数サポート追加したJavaJavaScript言語仕様には存在しないが、JITコンパイラ最適化一環インライン展開することもある。OracleJava SEコンパイラはインラインディレクティブオプションをサポートする関数型言語など他の多く言語インライン関数サポートしていないが、インライン展開積極的に行うことが多い。インライン展開方針コンパイラによって異なる。 C99/C++でのインライン関数定義例および使用例を以下に示す。 inline int max(int a, int b) { if (a > b) return a; else return b;}...int x = 1, y = -2;int z = max(x--, y); // 1 C++ではクラスおよび構造体のインラインメンバー関数定義するともできるクラスおよび構造体の型定義内に直接実装記述したメンバー関数は、暗黙的にinlineとなる。 class MyClass { int m_number1; int m_number2;public: explicit MyClass(int number1, int number2) : m_number1(number1), m_number2(number2) {} inline int getNumber1() const { return this->m_number1; } int getNumber2() const { return this->m_number2; } // 暗黙的に inline となる。 int getSum() const;};inline int MyClass::getSum() const { return this->m_number1 + this->m_number2; } C++では、関数テンプレートコンパイラ暗黙的に宣言と定義を自動生成するデフォルトコンストラクタC++11以降constexpr関数暗黙的にinlineである。

※この「言語サポート」の解説は、「インライン関数」の解説の一部です。
「言語サポート」を含む「インライン関数」の記事については、「インライン関数」の概要を参照ください。


言語サポート

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/03/21 14:22 UTC 版)

選択アルゴリズム」の記事における「言語サポート」の解説

リスト最大値と最小値求め機能を持つ言語多々あるが、汎用的選択組み込み機能持っている言語ほとんどないC++例外的に nth_element メソッドテンプレート持っており、線形時間での選択期待できることを保証している。その実装がこれまで説明したアルゴリズム使用している可能性は高いが、規定はされていない。(ISO/IEC 14882:2003(E) と 14882:1998(E)セクション25.3.2参照また、SGI STL の nth_elementを参照C++ では、partial_sort アルゴリズム提供されており、k 個の最小要素ソートした状態で選択する処理を O(nlog k) の時間で行う。k 個の最大要素選択するアルゴリズム提供されていないが、順序判定逆転させれば簡単に実現できるPerlにはCPANより Sort::Key::Top というモジュール出ていて、n 個の要素選択する関数群が提供されている。 ソートアルゴリズムの言語サポートの方が多いため、実際に単純にソート行ってから選択する方法が(性能的には不利であるが)多く使われている。

※この「言語サポート」の解説は、「選択アルゴリズム」の解説の一部です。
「言語サポート」を含む「選択アルゴリズム」の記事については、「選択アルゴリズム」の概要を参照ください。


言語サポート

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/06/21 21:57 UTC 版)

例外処理」の記事における「言語サポート」の解説

幾つかのプログラミング言語では組み込み例外処理機能用意している。例えAdaC++JavaScalaC#JavaScriptOCamlがそうである。これらの言語では専用言語機能によってプログラマ例外処理記述する手間軽減している。 例外発生したことを見落として常時動作継続してしまうと、より深刻・致命的な異常を招くおそれがある。それを避けるには例外発生したことのチェック綿密に行い例外検出され場合には適切な事後処理を行う他ない。しかし、大規模なプログラムではこのようなチェック膨大なものとなり、本来目的としている正常時の処理よりも多く記述を必要とする場合すらある。 そこで、これらの言語では例外発生チェックをほぼ自動化している。例外発生する現在の処理を中断する発生した例外事後処理担当できるハンドラ探して次々コールスタック関数呼び出し)を遡り適切なハンドラを見つけるとそれに事後処理任せる。これにより、遡る途中にあったこの例外処理する能力持たない処理は自動的に中断されることになる。 Schemeでは言語レベルでの例外処理持たないが、これは継続存在するため例外をライブラリレベルで実現できるからである(標準仕様であるSRFI-34で定義されている)。

※この「言語サポート」の解説は、「例外処理」の解説の一部です。
「言語サポート」を含む「例外処理」の記事については、「例外処理」の概要を参照ください。


言語サポート

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/09/26 22:08 UTC 版)

ロック (計算機科学)」の記事における「言語サポート」の解説

バリア (計算機科学)」も参照 プラットフォームOS)やプログラミング言語によっては、様々なロックサポートしている。 POSIXスレッドAPIはロックサポートを提供するMicrosoft WindowsWindows APIによってスレッド間およびプロセス間のロックサポートを提供する。 CとC++プラットフォームOS固有のロック機能API容易にアクセス可能であるが、C99までのISO/IEC標準では、スレッド排他制御のための標準API存在しなかった。C11以降POSIXスレッドベースのスレッドライブラリ標準化したが、必須ではなくオプション扱いである。C++03までのISO/IEC標準でも、同様にスレッド標準サポートしていなかったが、C++11以降Boost C++ライブラリベース標準化されスレッディング機能サポートしている。OpenMP標準一部コンパイラサポートしており、プラグマ使ってクリティカルセクション指定できるVisual C++ ではコードsynchronize 属性付与でき、同期しなければならないメソッド指定できるが、WindowsアーキテクチャVisual C++ コンパイラにおける「COMオブジェクト固有である。 Javasynchronized という修飾子提供しており、コードブロックであるメソッドまたはオブジェクトに対してロック配置でき、並行性セーフデータ構造特徴とするライブラリ提供している。 C#言語には、lock という予約語があり、他のスレッド邪魔されずに実行可能なコードブロック定義するVB.NET では SyncLock という予約語があり、C#lock とほぼ同様である。 Python にはそのような予約語はないが、ロック取得解放のための低レベル排他制御機構使用可能である。 Ruby同期のための予約語提供していないが、低レベル排他制御オブジェクト明示的に使用することは可能である。 x86アセンブリ言語では、LOCK というプレフィックス配することで不可分操作であることを保証でき、他のプロセッサ途中で干渉してくるのを避けることができる。 Objective-C では "@synchronized" という予約語コードブロックロック配することができ、また NSLock、NSRecursiveLock、NSConditionLockというクラスや NSLocking というロックプロトコル提供している。

※この「言語サポート」の解説は、「ロック (計算機科学)」の解説の一部です。
「言語サポート」を含む「ロック (計算機科学)」の記事については、「ロック (計算機科学)」の概要を参照ください。


言語サポート

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/09/26 21:23 UTC 版)

参照 (計算機科学)」の記事における「言語サポート」の解説

アセンブリ言語では、参照メモリアドレス配列インデックス表現される。これを使うには注意が必要である。メモリアドレス何を指しているかわからないし、指しているものの大きさ構造も意味もアドレスからはわからないそのような情報ロジック自体組み込むその結果間違ったプログラム参照間違って解釈してエラー発生しプログラマ途方にくれることになる。 最初不透明参照ひとつとしてLISP言語consセルがある。これは単純化すれば他の2個のLISPオブジェクトへの参照から構成されるデータ構造であり、他のconsセルへの参照も持つことが出来る。この構造単純な線形リスト構成するともできるし、「ドットリスト」と呼ばれる二分木構成するともできる。 他の初期言語FORTRAN明示的な参照持っていないが、参照渡し暗黙のうちにそれを使っている。 C言語導入されポインタは、原始的な参照形態のひとつである。これはアセンブリ言語の生アドレス (raw address) 表現似ているが、ポインタ参照しているデータ誤って解釈されることのないようコンパイル時に使用される静的データ型概念導入しているという点で異なる。しかし、C言語は「弱い型システム」を採用していることから、型変換(あるデータ型の値を明示的に他のデータ型の値に変換すること)によって不正なポインタ容易に生成することができるため、誤った解釈依然として生じうる。Cの後継とも言えるC++は、新たな型変換演算子導入標準ライブラリでのスマートポインタ導入などによりポインタの型安全性強化しよう試みているが、Cとの互換性維持のため意図的にこれらの安全機構を出し抜くことができる能力依然として有している。なお、C++には、さらに型としても「参照」というものがある(#C++の「参照」を参照)。 ガベージコレクションサポートするような多く高水準言語では、reference などと称される不透明な参照採用している。これらの参照C言語のポインタのようなデータ型であるが、参照を生のアドレス値に変換したり、逆にアドレス値から参照生成したり、といった危険な変換できないという点でC言語よりずっと安全になっている。このように管理された」言語 (managed language) では、参照実際には指すべきデータへのポインタへのポインタになっていることが多い。C/C++から見れば、これらの言語二段ポインタ参照使っていることになる(典型的な実装としては)。ガベージコレクタだけが不透明性生む中間のポインタ直接アクセスすることができる。一般に参照同士演算サポートされていない

※この「言語サポート」の解説は、「参照 (計算機科学)」の解説の一部です。
「言語サポート」を含む「参照 (計算機科学)」の記事については、「参照 (計算機科学)」の概要を参照ください。

ウィキペディア小見出し辞書の「言語サポート」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「言語サポート」の関連用語

言語サポートのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



言語サポートのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaの両端キュー (改訂履歴)、連結リスト (改訂履歴)、インライン関数 (改訂履歴)、選択アルゴリズム (改訂履歴)、例外処理 (改訂履歴)、ロック (計算機科学) (改訂履歴)、参照 (計算機科学) (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2024 GRAS Group, Inc.RSS