hotchpotch/wikipedia-multilingual-ir-pairs huggingface dataset:
スキー スキーの歴史
1907年、ハンネス・シュナイダーによって、オーストリアのサンクト・アントンなどにスキー学校が設立される。シュナイダーによって、アルプスの急峻な山々の滑降に対応し シュテムなどの技術が体系化された。これは「アールベルグ・バイブル（アールベルグスキー術）」と呼ばれ、後のアルペンスキー技術に多大な影響を与えた。この技術と書籍は日本にも輸入され、さらにシュナイダー自身も1930年に来日し、滞在中に映画の上映・講演・雪上での実技指導を行っている。
1921年にローザンヌのオリンピック会議で冬季オリンピックの開催が検討され、1924年にフランスのシャモニーにて第1回冬季オリンピック（シャモニーオリンピック）が開催された。この大会ではクロスカントリースキー、ノルディック複合、スキージャンプがスキー競技として採用されている。冬季オリンピック開催の同年には国際スキー連盟 (FIS) も誕生した。アルペン競技は第4回のガルミッシュ＝パルテンキルヒェンオリンピック（1936年）から採用されている。
スキー スキーの歴史
1930年頃、オーストリア・チロル地方の「インスブルック派」と呼ばれる人々が、アールベルグスキー術でのシュテム技術の高速滑走の不利を感じて新しい技術を模索していたが、その中でアントン・ゼーロスはシュテム技術を用いずに立ち上がり抜重とローテーションを回転原動力としたパラレル技術を考案し、「テンポ・パラレルシュブンク」を完成した。その後、エミール・アレがアントン・ゼーロスの技術を徹底的に研究して、自ら世界チャンピオンの実績を残し、その技術を「スキー・フランセ（フランス・スキー術）」として発表した。その一方で、オーストリアのトニイ・ドウチアとクルト・ラインルは身体をひねり込むローテーションを否定して外向・外傾の技術を主張し、1933年に「今日のスキー」を出版した。またミュンヘン大学のオイゲン・マティアス教授は、スキー傷害の観点からローテーションを使わない技術を模索し、サンモリッツのスキー学校長ジョバニ・テスタとの共同研究で1936年に「自然なスキー」を出版した。なお、日本においては1940年に「今日のスキー」が、1941年には「スキー・フランセ」がそれぞれ邦訳出版され、ほぼ時を同じくしてそれぞれの技術が日本に紹介される事となった。
1951年にはオーストリアのツールスで「第1回国際スキー教育会議（略称、インタースキー、以降も同様）」が開催され、以後2年ごとに開催される。
スキー スキーの歴史
1955年開催の「第3回インタースキー」においては、シュテファン・クルッケンハウザー教授によってオーストリアの伝統的なシュテム技術を改善し、新たに「バインシュピール技術」を発表、同年に「オーストリア・スキー教程」を発刊した。バインシュピール技術が世界各国から注目された事で、フランス提唱のローテーション技術との間で激しい論争が展開されるが、この事が一般スキーヤーの技術と指導法に対する関心を集めてスキー普及にも貢献した。その一方で、その後のより高速を求める競技スキーの世界で技術の共通化傾向が見られるようになり、1968年のアスペンで行われた「第8回インタースキー」において「世界のスキーはひとつ」をキャッチフレーズに、各国の技術の長所を取り入れた、現在のスキー技術に通じる技術の融合の方針へと進んでいった。その後「第9回インタースキー」（ガルミッシュ・パルテンキルヘン）において、「ヴェーレンテクニック（オーストリア）」「アバルマン（フランス）」「シュロイダーテクニック（西ドイツ）」「OKテクニック（スイス）」「曲進系（日本）」といった各国開発の技術が発表されたが、名称の違いこそあれ、技術内容は類似していた。これらの技術を確固たる理論構成に導く研究をしたのがオーストリアのフランツ・ポピヒラーで、1974年に「新オーストリア・スキー教程」を出版し、下肢の運動ではなく、ナチュラルスタンス（自然体）でシンプルかつ機能的な運動というコンセプトとした考えの元に「シュヴィンゲン技術」と名付け、「プルークボーゲン」「シュテムターン」「パラレルウムシュタイゲン」「パラレルターン」「シェーレンウムシュタイゲン」に系統づけて理論化し、1991年の「第14回インタースキー」（オーストリア・サンアントン）において発表し、世界的に大きな影響を与えた。
スキー スキーの歴史
1980年代になると交互操作とステップ系の技術に関心が集まり、1983年の「第12回インタースキー」（イタリア）において日本が人間の基本動作である「バイベタリズム」をターンの主運動とする独自の指導法を提唱した。これは「シュヴィンゲン」とともに注目を引く事となった。
1990年代からカービングスキーやショートスキーなど、ターンのしやすい板が普及し、この事でかつてのバインシュピール的なスキー技術が影をひそめる事となる。2003年にはオーストリアが「第17回インタースキー」（スイス・で開催）において「パラレルカービングターン技術」としての成果を発表した。
2010年頃からはバックカントリーの人気の高まりから、トップ側が反り上がったロッカーと呼ばれる技術を用いた板が広まってきた。
スキー スキーの歴史
日本におけるスキーの伝来は明治時代後期の1890年代からだが、1911年（明治44年）1月12日に新潟県中頸城郡高田町（現・上越市）において、オーストリア＝ハンガリー帝国陸軍少佐（オーストリア＝ハンガリー帝国時代）のテオドール・エードラー・フォン・レルヒ（テオドール・エドレル・フォン・レルヒとも）が陸軍第13師団に着任し、歩兵第58連隊の営庭を利用して堀内文次郎連隊長や鶴見宜信大尉らスキー専修員を含む軍人に技術を伝授したことが、日本における本格的なスキー普及の第一歩とされ、かつ、日本におけるスキー発祥と言われている。この史実にちなんで、全日本スキー連盟では2003年に1月12日を「スキーの日」と制定した。
レルヒは日本陸軍の長岡外史中将が率いる第13師団の御用商人でもあり、高田町を本拠にする実業家である五十嵐彌五八（後に辰豊と改名）の経営する旅館「高陽館」に寄宿して高田歩兵第58連隊に着任、その翌年の1912年には北海道旭川第7師団に着任した。
スキー スキーの歴史
レルヒ以前、1908年に札幌農学校のスイス人講師が2本杖のスキーを滑ってみせたこと（詳細は三角山を参照のこと）、また1916年に欧州から帰国した遠藤吉三郎がノルウェー式の2本杖スキーを普及させたことから北海道では2本杖が主流となった。また、1923年には第一回全日本スキー選手権大会が開催され、2本杖が1本杖を成績で圧倒したことから、全国的にも2本杖が主流となっていった。
スキーは登山用具としても注目され、1923年1月には、当時の日本登山界のリーダーである槇有恒、板倉勝宣、三田幸夫が冬の立山登山に利用した（板倉は帰路遭難死）。
1924年のシャモニーオリンピック開催と国際スキー連盟誕生を受け、日本では翌年の1925年に全日本スキー連盟が創設された。
1940年と1941年に相次いで、「今日のスキー」と「スキー・フランセ」がそれぞれ邦訳出版され、それぞれの技術が紹介されるが（上記参照）、日本のスキー関係者の間では「外傾技術」に共鳴する人が多く、1947年（昭和22年）には外傾技術を中心とした全日本スキー連盟のテキスト「一般スキー術」が出版された。しかし当時でも少なからずローテーション技術を主張する声があり、1954年（昭和29年）にピエール・ギョーとアンリ・オレイエが来日して全国各地でフランス・スキー技術の指導が行われた事でローテーション技術と外傾技術の議論が活発に行われた。
スキー スキーの歴史
1958年（昭和33年）に「オーストリア・スキー教程」が日本でも出版され、その直後にはオーストリア職業スキー教師連盟のルディ・マットが来日し、全国各地でオーストリアスキー技術が紹介・指導された事で日本のスキー技術はオーストリア・スキーに傾倒していき、1959年（昭和34年）にはバインシュピール技術が基となる「SAJスキーテキスト」が発刊された。その後の1960年（昭和35年）にルディ・マットが再来日したほか、1963年（昭和38年）にはオーストリア国立スキー学校総責任者のシュテファン・クルッケンハウザー教授とデモンストレーターのフランツ・フルトナー他2名が来日して、全国各地で講演・映画上映・実地指導を行い、これを受けてバインシュピール技術が日本のスキー界に根付いていった。
1965年（昭和40年）には「第7回インタースキー」（オーストリア・バドガシュタイン）に、日本から初めて10名（うちデモンストレーター5名）の代表団が送り込まれた。以降、日本は毎回参加し、1979年（昭和54年）にはアジア初となる日本・蔵王で「第11回インタースキー」が、1995年（平成7年）には日本・野沢温泉で「第15回インタースキー」が開催された。
その他
アルペンスキーではないが、北海道・サハリンの先住民アイヌにおいては、雪中かんじきとして2種の履物ヌソオフトとストーが見られる。ヌソは犬ぞりの意味で御者が身に着ける幅が広いスキーのような形状の物で、ストーは当時の新聞では露式寒敷とされていたロシアやサハリンから伝来したカンジキ式スキーである。こういった物が日本には伝来していたが、日本には20世紀に至るまでスキーは定着していなかった。
1923年（大正12年）に、第1回冬季オリンピック大会の選考会を兼ねて、北海道小樽で第1回全日本スキー選手権大会が開催された。
冬季オリンピックの参加は1928年（昭和3年）の第2回冬季オリンピック（スイス・サンモリッツ大会）が初となり、7名の選手が送り込まれた。
1956年（昭和31年）には第7回冬季オリンピック（イタリア・コルチナ・ダンペッツオ大会）に参加した回転（スラローム）選手の猪谷千春が2位に入賞し、日本初のメダリストとなった。
以降の日本のスキーに関連した冬季オリンピック（メダリスト）については以下を参照の事。
またメダルには届かなかったが、第20回冬季オリンピック（イタリア・トリノ）では皆川賢太郎が4位に入賞、湯浅直樹が7位に入賞し、アルペンスキーでは猪谷千春以来50年ぶりの入賞を果たしている。
オリンピック以外では、ノルディック複合個人総合で1993年（平成5年）から1995年（平成7年）にかけてのワールドカップ（ノルディック複合）で荻原健司が3連覇を成し遂げ、さらに1995年での世界選手権でもこの種目で優勝している。また、アルペンスキーでは海和俊宏・岡部哲也・木村公宣がワールドカップ（アルペン）で上位入賞を果たしている。
スキー 必要な用具
スキーで雪上を歩行したり、ジャンプ、滑降、登行するために、以下のような用具が必要である。
また、身に付けるものに
などがあると良い。
スキー アルペンスキー技術
アルペンスキー技術は大きく分けて、推進技術と制動技術の2種類に分類される。推進のものには、真下方向に向かって真っ直ぐに滑る直滑降やレールターン・カービングターンなどがある。制動のものには、谷脚に体重を乗せ、板はフォールライン（最大傾斜線）に垂直または斜滑降方向に向きつつ、真下や斜め方向に向かってスキー板をずらして滑る横滑りや、プフルークボーゲン・ステムターンと、パラレルターンにおけるスキッディングターンなどがある。
スキー スキー競技
アルペンスキー
アルペン（競技スキー）
回転（スラローム、SL）
大回転（ジャイアントスラローム、GS）
スーパー大回転（スーパーG、SG）
滑降（ダウンヒル、DH）
複合（コンバインド、CB）
スピードスキー（キロメーターランセ）
フリースタイル
モーグル
デュアルモーグル
エアリアル
アクロ（旧バレエスキー）
スキークロス
ハーフパイプ
スロープスタイル
基礎スキー（デモスキー）
C Sharp
C#（シーシャープ）は、マイクロソフトが開発した汎用のマルチパラダイムプログラミング言語である。C#は、Javaに似た構文を持ち、C++に比べて扱いやすく、プログラムの記述量も少なくて済む。また、C#は、Windowsの.NET Framework上で動作することを前提として開発された言語であるが、2016年6月からはクロスプラットフォームな.NETランタイム上で動作する。デスクトップ・モバイルを含むアプリケーション開発や、ASP.NETをはじめとするWebサービスの開発フレームワーク、ゲームエンジンのUnityでの採用事例などもある。
C Sharp 概要
開発にはボーランドのTurbo PascalやDelphiを開発したアンダース・ヘルスバーグを筆頭として多数のDelphi開発陣が参加している。
構文はC系言語（C言語、C++、Javaなど）の影響を受けており、その他の要素には、以前、ヘルスバーグが所属していたボーランド設計のDelphiの影響が見受けられる。また、主要言語へのasync/await構文や、ヘルスバーグが言語設計に関わるTypeScriptでのジェネリクス採用など、他言語への影響も見られる。
C#は共通言語ランタイム（CLR）などの共通言語基盤（CLI）が解釈する共通中間言語（CIL）にコンパイルされて実行される。
C Sharp 概要
また、C#はマルチパラダイムをサポートする汎用高レベルプログラミング言語で、静的型付け、タイプセーフ、スコープ、命令型、宣言型、関数型、汎用型、オブジェクト指向（クラスベース）、コンポーネント指向のプログラミング分野を含んでいる。他にも自動ボックス化、デリゲート、プロパティ、インデクサ、カスタム属性、ポインタ演算操作、構造体（値型オブジェクト）、多次元配列、可変長引数、async/await構文、null安全などの機能を持つ。また、Javaと同様に大規模ライブラリ、プロセッサ・アーキテクチャに依存しない実行形態、ガベージコレクション、JITコンパイルによる実行の高速化、AOTコンパイラによる高速実行、などが実現されている（もっともこれらはC#の機能というより.NET によるものである）。
共通言語基盤といった周辺技術も含め、マイクロソフトのフレームワークである「.NET」の一部である。また、以前のVisual J++で「非互換なJava」をJavaに持ち込もうとしたマイクロソフトとは異なり、その多くの仕様を積極的に公開し、標準化機構に託して自由な利用を許すなど、同社の姿勢の変化があらわれている。
.NET構想における中心的な開発言語であり、XML WebサービスやASP.NETの記述にも使用される。他の.NET系の言語でも記述可能だが、.NET APIはC#からの利用を第一に想定されており、他の.NET系言語（特に2023年以降新構文の追加なしと宣言されたVB.NET）では利用できない、あるいは将来的に利用できなくなる機能が存在する。
マイクロソフトの統合開発環境（Microsoft Visual Studio）では、Microsoft Visual C#がC#に対応している。また、Visual Studio Codeに専用のC#向け拡張（C# DevKit）を導入することでクロスプラットフォームで開発することが可能。
共通言語仕様のCLSによって、他のCLS準拠の言語（F#やVisual Basic .NET、C++/CLIなど）と相互に連携することができる。
C Sharp 言語仕様
さまざまな意味において、基盤である共通言語基盤（CLI）の多くの機能を反映している言語であるといえる。C#にある組み込み型のほとんどは、共通言語基盤のフレームワークに実装されている値型と対応している。
しかし、C#の言語仕様はコンパイラのコード生成については何も言及していないため、CLRに対応しなければならないとか、 CILなどの特定のフォーマットのコードを生成しなければならないとかいうことは述べられていない。
そのため、理論的にはC++やFORTRANのように環境依存のマシン語を生成することも可能である。しかし、現在存在するすべてのC#コンパイラはCLIをターゲットにしている。
.NET 7.0以降で可能になった事前コンパイルの一種である「Native AOT」でデプロイすることで実行可能な環境依存のバイナリを出力することが可能である。しかしながらこの手法もCLIとランタイムを事前に各アーキテクチャ向けのバイナリに変換しているだけであり、CLIを経由することに変わりはない。
C Sharp 言語仕様
特殊な例としては、UnityのScripting Backendである「IL2CPP」や「Burst」がある。IL2CPPはC#をコンパイルしたCILをさらにC++コードへと変換後、ネイティブバイナリへC++コンパイラによってコンパイルされる。BurstはC#をコンパイルしたCILをLLVMコンパイラによってネイティブバイナリへコンパイルするものである。
最新のC#ではHello Worldを下記の通りに1行で記述できる。
上記のコードは、コンパイラによって下記の様なコードに展開される。
次の言語機能によって実現されている。ただし、未対応の古いコンパイラを用いる場合は、省略できない。
C#では、CやC++と比較してさまざまな制限や改良が加えられている。また、仕様の多くはC#言語というよりは、基盤である.NETそのものに依拠している。Javaで導入された制限および改良をC#でも同様に採用しているものが多いが、C#で新たに導入された改良がのちにJavaにも同様に採用されたものもある。その例を次に挙げる。
C Sharp 言語仕様
C#にはブール型boolが存在し、while文やif文のように条件をとるステートメントには、bool型の式を与えなければならない。C言語では、ブール型が無くint型（0を偽とし、非0を真とする）に兼用させた上、（ヌルポインタを偽とみなすこととするといろいろと便利だった、ということもあり）ポインタでもwhile文やif文に与える式にできる、という仕様としていた。これは便利なこともあったが、本来比較式を記述すべきところで誤って代入式を記述してもコンパイル適合となってしまうなど、ミスが見逃されることもあった。C#ではミスを防止するために、そのような仕様ではなくブール型を独立させ、またブール型を厳密に要求する場所を多くしている。
組み込み型のサイズおよび内部表現が仕様で定められており、プラットフォームや処理系に依存しない。浮動小数点数はIEEE 754に準拠する。文字および文字列はUTF-16エンコーディングを採用する。
C# 9.0以降では CPUによってサイズの異なる整数型 nint/nuintが追加された 
C# 11.0 以降では文字列をUTF-8として扱う「UTF-8文字列リテラル」が追加された
C Sharp 言語仕様
ポインタをサポートする。ポインタはunsafeスコープ内のみで使用することができ、適切な権限をもつプログラムのみがunsafeとマークされたコードを実行することができる。オブジェクトへのアクセスの大部分は管理された安全な参照によってなされ、大部分の算術演算はオーバフローのチェックがなされる。unsafeポインタは値型や文字列を指すことができる。セーフコードでは、必ずしもそうする必要はないものの、IntPtr型を通してポインタをやりとりすることができる。
マネージドなメモリを明示的に解放する方法は存在せず、参照されなくなったメモリはガベージコレクタによって自動的に解放される。ガベージコレクタは、メモリの解放忘れによって起こるメモリリークを解消する。C#は、データベース接続のようなアンマネージドなリソースに対しても明示的に制御する方法を提供している。これはIDisposableインタフェースとusingステートメントまたはusing宣言によってなされる。
例えばC/C++のprintf()関数のように名前空間レベルに存在するフリー関数を定義することはできない。ほとんどの場合クラスおよび構造体は名前の衝突を避けるために名前空間に所属する。
C Sharp 言語仕様
C#はC++に比べて型安全である。既定の暗黙変換は、整数の範囲を広げる変換や、派生クラスから基底クラスへの変換といった、安全な変換のみに限定される。これは、コンパイル時、JITコンパイル時、そして一部の動的なケースでは実行時に強制される。ブール型と整数型、列挙型と整数型、の間は暗黙変換はできない。暗黙変換をユーザー定義する際は、明示的にそのように指定しなければならない。これはC++のコンストラクタとは違った仕様である。
アクセサの定義と利用を簡略化するためにプロパティ構文を利用できる。C++およびJavaにおけるカプセル化では、通例getter/setterアクセサとなるメンバー関数あるいはメソッドを定義して利用するが、C#ではプロパティ機能により、カプセル化を維持しつつ、あたかもフィールドを直接読み書きするような直感的な構文でオブジェクトの状態にアクセスすることができる。プロパティによってメンバーのアクセス制御やデータの正当性チェックを実行することができる。なお、イベントハンドラーに利用するデリゲートのカプセル化にはイベント構文 (event) が用意されている。
部分型（英: Partial Type）が導入された。以下のようにクラスや構造体の宣言にpartial修飾子をつけることで、その宣言を分割することができる。
これは以下と同義である。
C Sharp 言語仕様
これによって、巨大なクラスを分割したり、自動生成されたコードを分離したりすることができる。partial修飾子はすべての宣言につける必要がある。
ジェネリクスが導入された。これは.NET Framework 2.0の機能である。クラス、構造体、インタフェース、デリゲート、メソッドに対して適用することができる。
.NETのGenericsはC++のテンプレート、あるいはJavaにおけるそれとも異なるもので、コンパイルによってではなく実行時にランタイムによって特殊化される。これによって異なる言語間の運用を可能にし、リフレクションによって型パラメーターに関する情報を取得することができる。また、where節によって型パラメーターに制約を与えることができる。一方、C++のように型パラメーターとして式を指定することはできない。なお、ジェネリックメソッドの呼び出し時に引数によって型パラメーターが推論できる場合、型パラメーターの指定は省略できる。
静的クラスが導入された。static属性をクラスの宣言につけることで、クラスはインスタンス化できなくなり、静的なメンバーしか持つことができなくなる。
yieldキーワードによるコルーチンを使うことで、イテレータの生成を楽に実装できるようになった。
クロージャの機能を提供する匿名デリゲートが導入された。
C Sharp 言語仕様
プロパティのgetもしくはsetアクセサのどちらかにアクセス修飾子を指定することでアクセス制御が別個にできるようになった。次の例では、getアクセサはpublic、setアクセサはprivateである。
nullを保持できる値型、Nullableが導入された。
int?はNullable<int>の糖衣構文である。また、nullを保持しているNull許容型のインスタンスをボックス化しようとすると、単に空参照（null）に変換される。
また、null結合演算子 (??)が導入された。これは、nullでない最初の値を返す。
この演算子は主にNullable型を非Nullable型に代入するときに使われる。
var キーワードが導入され、型推論を利用したローカル変数の宣言ができるようになった。
C Sharp 言語仕様
拡張メソッド（英: extension method）が導入された。既存のクラスを継承して新たなクラスを定義することなく、新たなインスタンスメソッドを疑似的に追加定義することができる。具体的には、入れ子になっていない、非ジェネリックの静的クラス内に、this 修飾子をつけた、拡張メソッドを追加する対象の型の引数を最初に持つメソッドをまず定義する。これによって、通常の静的メソッドとしての呼び出しの他に、指定した型のインスタンスメソッドとしての呼び出しを行うことができるメソッドを作ることができる。以下に例を挙げる:
この例は、文字列（string型のインスタンス）を指定した回数繰り返し連結したものを返すメソッドRepeatを、既存のstring型に追加している。このメソッドは、以下のように呼び出すことができる:
また、列挙型やインタフェースなど本来メソッドの実装を持ち得ない型に、見かけ上インスタンスメソッドを追加することも可能である。以下に例を挙げる:
このメソッドは以下のように呼び出すことができる:
拡張メソッドは糖衣構文の一種であり、カプセル化の原則に違反するものではないが、必要な場合に限り注意して実装することがガイドラインとして推奨されている。
C Sharp 言語仕様
部分メソッドが導入された。部分型（partial型）内で定義されたprivateで、かつ戻り値が voidのメソッドに partial修飾子をつけることでメソッドの宣言と定義を分離させることができる。定義されていない部分メソッドは何も行わず、何らエラーを発生させることもない。例えば:
上のコードにおいて Method() を呼び出すと、Did something. と表示されるだけだが、ここで以下のコード:
を追加した上でMethod()を呼び出すと、[DEBUG: Some message] Did something.と表示される。
ラムダ式が導入された。この名前はラムダ計算に由来する。
以下の匿名メソッド
は、ラムダ式を使って次のように記述できる:
ラムダ式は匿名メソッドと同様に扱えるが、式形式のラムダがExpression<TDelegate>型として扱われた場合のみ匿名メソッドとして扱われず、コンパイラによって式木を構築するコードに変換される。匿名デリゲートが実行前にコンパイルされたCILを保持するのに対し、式木はCILに実行時コンパイル可能であるDOMのような式の木構造そのものを保持する。これはLINQクエリをSQLクエリなどに変換する際に役立つ。
C Sharp 言語仕様
以下は、3つの任意の名前の変数、整数、括弧、及び四則演算子のみで構成された式を逆ポーランド記法に変換する汎用的なコードである:
オブジェクトの初期化が式として簡潔に記述できるようになった。
また、コレクションの初期化も同様に簡潔に記述できるようになった。
但し、上のコードでは匿名の変数に便宜的に __p、__l、__d と命名している。実際はプログラマはこの変数にアクセスすることはできない。
プロパティをより簡潔に記述するための自動実装プロパティが導入された。プロパティの定義にget; set;と記述することで、プロパティの値を保持するための匿名のフィールド（プログラマは直接参照することはできない）と、そのフィールドにアクセスするためのアクセサが暗黙に定義される。また、C# 5.0までは get;とset;のどちらか片方だけを記述することは出来なかったが、C# 6.0からはget;のみが可能。以下のコード:
は、以下のようなコードに相当する動作をする:
但し、上のコードでは匿名のフィールドに便宜的に__valueと命名している。実際はプログラマはこのフィールドにアクセスすることはできない。
一時的に使用される型を簡単に定義するための匿名型が導入された。以下に例を挙げる:
上の式は、以下の内容のクラスを暗黙に定義する。定義されたクラスは匿名であるが故にプログラマは参照できない。
C Sharp 言語仕様
同じ型、同じ名前のプロパティを同じ順序で並べた匿名型は同じであることが保証されている。即ち、以下のコード:
において、her.GetType() == him.GetType()はtrueである。
newキーワードを用いた配列の宣言の際、型を省略できるようになった。匿名型の配列を宣言する際に威力を発揮する。
LINQをサポートするために、クエリ式が導入された。これはSQLの構文に類似しており、最終的に通常のメソッド呼び出しに変換されるものである。以下に例を示す:
上のコードは以下のように変換される:
C# 3.0で追加された構文の多くは式であるため、より巨大な式（当然クエリ式も含まれる）の一部として組み込むことができる。旧来複数の文に分けたり、作業用の変数を用意して記述していたコードを単独の式としてより簡潔に記述できる可能性がある。
出井秀行著の『実戦で役立つ C#プログラミングのイディオム/定石&パターン』（技術評論社、2017年）という書籍ではクエリ構文よりメソッド構文を推奨しており、クエリ構文ではLINQの全ての機能を使用できるわけではないこと、メソッド呼び出しは処理を連続して読める可読性があること、メソッド呼び出しであればMicrosoft Visual Studioの強力なインテリセンスが利用できることを理由に、著者はクエリ構文をほとんど使用していないと記している。
C Sharp 言語仕様
dynamicキーワードが導入され、動的型付け変数を定義できるようになった。dynamic型として宣言されたオブジェクトに対する操作のバインドは実行時まで遅延される。
VBやC++に実装されているオプション引数・名前付き引数が、C#でも利用できるようになった。
ジェネリクスの型引数に対してin、out修飾子を指定することにより、ジェネリクスの共変性・反変性を指定できるようになった。
静的usingディレクティブを利用することで、型名の指定無しに他クラスの静的メンバーの呼び出しを行えるようになった。利用するにはusing staticの後に完全修飾なクラス名を指定する。
catchの後にwhenキーワードを使用することで、処理する例外を限定することができるようになった。
out引数で値を受け取る場合、その場所で変数宣言可能となった。
is式の構文が拡張され、型の後ろに変数名を宣言できるようになった。拡張されたis式はマッチした場合に宣言した変数にキャストした値を代入し、さらにtrueと評価される。マッチしなかった場合はfalseと評価され、宣言した変数は未初期化状態となる。
C Sharp 言語仕様
switch文のマッチ方法が拡張され、caseラベルに従来の「定数パターン」に加え、新たに「型パターン」を指定できるようになった。また、「型パターン」のcaseラベルでは、when句に条件を指定することができる。「型パターン」を含むswitch文では、必ずしも条件が排他的でなくなったため、最初にマッチしたcaseラベルの処理が実行される。
タプルのための軽量な構文が導入された。従来のSystem.Tupleクラスとは別に、System.ValueTuple構造体が新しく追加された。
2個以上の要素を持つタプルのための記法が導入された。引数リストと同様の形式で、タプルを記述できる。
多値戻り値を簡単に扱えるように、分解がサポートされた。
分解はタプルに限らない。Deconstruct()メソッドが定義されたクラスでも、分解を利用できる。
以下に、DateTime型に分解を導入する例を示す。
上記のコードでDateTime型にDeconstruct()拡張メソッドを定義し、
のように左辺で3つの変数に値を受け取ることができる。
分解、out引数、パターンマッチングで、値の破棄を明示するために_が利用できるようになった。破棄された値は、後で参照することはできない。
refキーワードの使用方法が拡張された。これによって、安全な参照の使い道が広がった。
C Sharp 言語仕様
戻り値の型をrefで修飾することで、オブジェクトの参照を戻り値とすることができる。
変数の寿命は変わらないため、メソッド終了時に破棄されるローカル変数をref戻り値とすることはできない。
ローカル変数の型をrefで修飾することで、参照を代入することができる。
Mainメソッドの戻り値として、Task型、Task(int)型が認められた。
型推論可能な場面では、defaultの型指定は省略可能となった。
C#7.2で追加された仕様は以下の通り。
値型におけるパフォーマンス向上を意図した複数の機能が追加された。
引数にinを指定することで、読み取り専用参照渡しを指定できる。また、戻り値にref readonlyを指定することで、読み取り専用参照戻り値を指定できる。
これにより、構造体のコピーを避けると共に、意図しない値の変更を抑止できる。
構造体宣言時にreadonlyを指定することで、真の読み取り専用構造体を定義できる。readonly構造体の全てのフィールドはreadonlyでなければならず、thisポインタも読み取り専用となる。
これにより、メンバーアクセス時の意図しない防御的コピーを抑止できる。
C Sharp 言語仕様
構造体宣言時にrefを指定することで、ヒープ領域へのコピーを防ぐ構造体がサポートされる。ref構造体では、box化できない、配列を作成できない、型引数になることができない、など、ヒープ領域へのコピーを防ぐための厳しい制限がかかる。
この機能は、Span<T>のような構造体をサポートするために利用され、unsafe文脈以外でのstackallocの利用をも可能とする。
C#4.0で追加された名前付き引数が末尾以外でも利用できるようになった。
同一アセンブリ内、かつ、継承先からのアクセス許可を表すprivate protectedアクセス修飾子が追加された。
十六進リテラルの0x、二進リテラルの0bの直後のアンダースコアが認められた。
C#7.3では以下の仕様が追加された。
C# 8.0で追加された仕様は以下の通り。
参照型にnull許容性を指定できるようになった。参照型の型名に?を付加した場合にnull許容参照型となる。
参照型の型名に?を付加しない場合、null非許容参照型となる。
フロー解析レベルでのnull許容性チェックが行われる。null許容値型のNullable<T>のような新しい型は導入されない。
参照型のnull許容性は、null許容コンテキストによって有効、無効の切り替えが可能である。C#7.3以前の互換性のために、既定では無効となっている。
C Sharp 言語仕様
null許容参照型の変数名の後に !を使用することで、フロー解析時の警告が免除される。
インタフェースのメンバーに既定の実装を指定できるようになった。また、インタフェースに静的メンバーを持つことができるようになった。
さらに、インタフェースのメンバーにアクセシビリティを指定できるようになった。
switch式が追加された。プロパティパターン、タプルパターン、位置指定パターンの追加により、再帰的なパターンマッチングが可能になった。
IAsyncEnumerable<T>インタフェースを返すことで、イテレータ構文と非同期構文の共存が可能になった。
await foreachによって非同期ストリームを列挙する。
IndexとRangeを指定できる専用構文が追加された。
C# 9.0で追加された仕様は以下の通り。
C# 10.0で追加された仕様は以下の通り。
C# 11.0で追加された仕様は以下の通り。
エスケープなどの加工を施さない文字列を3個の二重引用符で括って表現できる様になった。未加工の文字リテラルとも呼ばれる。
属性の型が型引数を持てる様になった。
リストや配列に対するパターンマッチが可能になった。
また、Span<char>やReadOnlySpan<char>に対して文字列を用いたパターンマッチが可能になった。
C Sharp 言語仕様
型引数に「数値型または数値型に類似している型」である事を示す制約を付け加える機能が導入された。また、それに呼応して下記の変更が行われた。
ジェネリック型数値演算を用いた一例を下記に示す。
C# 12.0で追加された仕様は以下の通り。
レコード型（record）以外のクラス（class）と構造体（struct）でプライマリコンストラクターが使えるようになった。
配列、コレクション、Span<T>などの初期化の記法が共通の記法（[]）で書けるようになった。
コレクション式で複数のコレクションをインライン展開できる新しい演算子（..）が追加された。
C# 13.0で追加された仕様は以下の通り。
エスケープ文字を表すエスケープシーケンスとして\eが追加された。これに従って\x1bの使用は非推奨となった。
オブジェクト初期化子においても^演算子を用いたアクセスが可能となった。これにより、初期化子内でも配列やリストなどの末尾から値へアクセスできる。
コレクション式に対応している型であれば、引数にparams修飾子を付けられる様になった。
プロパティとインデクサにもpartial修飾子の指定が可能となった。
任意のオブジェクトで排他制御される問題への対策として、lock文専用のLockクラスが用意された。以下の様に使う。
C# 14.0で追加された仕様は以下の通り。
新たに extension ブロックが導入され、拡張プロパティと拡張インデクサーを実装できる様になった。この機能は、拡張メンバー（英: extension members）または拡張宣言（英: extension declarations）などと呼称される。特定の型に対してメンバーを外部の型から後付する事ができる。型引数を受け取るには、extension キーワードの後ろに <T> と記述する。また、動的メンバーだけではなく静的メンバーを追加する事もできる。
整数型に新たなプロパティを追加するコードを以下に示す。
プロパティのアクセサー内で field キーワードを用いる事でバッキングフィールドを自動生成できる。従ってプロパティ専用の変数を新たに定義する必要は無い。既に field という名称の変数が存在する場合、代わりに @field または this.field と記述しなければならない。
get アクセサーのみで用いる場合は以下の様に記述できる。
対して、set アクセサーのみで用いる場合は以下の様に記述できる。
両方のアクセサーで同時に用いる事も、set の代わりに init 内で用いる事も、従来通り get; set; と記述する事もできる。バッキングフィールドに属性を付与する場合は、プロパティ宣言の直前に [field: AttributeClassName()] と記述する。
null 条件演算子を代入演算子の左辺でも用いられる様になった。
例えば、次の様なクラスが定義されているものとする。
通常は、if 文を用いて null ではない場合にのみ代入処理が実施される様にしなければならない。
新しい演算子によって、変数の検証を略記できる様になった。
複合代入演算子の動作を上書きできる様になった。コピーコストの削減が目的である。他の演算子と同じ書式で定義できる。
C Sharp 実装
C#の言語仕様は標準化団体Ecma Internationalを通じて公開・標準化されており、第三者がマイクロソフトとは無関係にコンパイラや実行環境を実装することができる。
マイクロソフト製
Visual Studio 2015 以降で使用されている、.NETコンパイラプラットフォーム（コードネームRoslyn）。ApacheライセンスのオープンソースプロジェクトでGitHubで公開されている。Windows、macOS、Linuxで動作する。C#のコンパイラはC#、VB.NETのコンパイラはVB.NETで実装されている。以前のコンパイラと比べて、リファクタリングやIDE、スクリプティングなどへの利用が可能なAPIが公開されており、コンパイラ以外への様々な応用が可能。
Visual Studio 2013 まで使われていた、マイクロソフトによるVisual C# コンパイラ。
2006年のC# 2.0当時の、マイクロソフトによるShared Source Common Language Infrastructure。共通言語基盤（CLI）とC#コンパイラがソースコードで公開されている。
C Sharp 名称
ECMA-334 3rd/4th/5th edition によると、C# は「C Sharp（シーシャープ）」と発音し、LATIN CAPITAL LETTER C (U+0043)の後に NUMBER SIGN # (U+0023)と書く。MUSIC SHARP SIGN ♯ (U+266F) ではなく NUMBER SIGN # (U+0023)を採用したのは、フォントやブラウザなどの技術的な制約に加え、ASCIIコードおよび標準的キーボードには前者の記号が存在しないためである。
「#」を接尾辞とする名称は、他の .NET 言語にも使用されており、J#（Javaのマイクロソフトによる実装）、A#（Adaから）、F#（System Fなどから）が含まれる。更には、Gtk#（GTK などの GNOME ライブラリの .NET ラッパ）、Cocoa#（Cocoa (API) のラッパ）などのライブラリにも使用されている。そのほか、SharpDevelopなどの「Sharp」を冠する関連ソフトウェアも存在する。
C Sharp 名称
C# という名称の解釈として、「（A-Gで表された）直前の音を半音上げる」という音楽記号の役割に着目し、「C言語を改良したもの」を意味したのではないか、というものがある。これは、C++の名称が「C言語を1つ進めたもの」という意味でつけられたことにも似ている。アンダース・ヘルスバーグは、「C#」が「C++++」（すなわち「C++ をさらに進めたもの」）にみえるのが由来である、と語っている。
2月15日
2月15日（にがつじゅうごにち）は、グレゴリオ暦で年始から46日目にあたり、年末まであと319日（閏年では320日）ある。
2月15日 記念日・年中行事
かまくら（ 日本） 
秋田県横手市で行われるお祭り。水神様をまつる小正月行事で毎年2月15日、16日に開催される。約450年の歴史があるといわれており、かまくらの中に子どもたちが入って「はいってたんせ（かまくらに入ってください）」「おがんでたんせ（水神様をおがんでください）」と言いながら、甘酒やお餅を振る舞う。もともとはかまくらの中にまつられた水神様にお賽銭を上げて、家内安全・商売繁盛・五穀豊穣などを祈願する行事だったが、時代の変化とともに現在のような形になった。
西行忌（ 日本）
歌人・西行法師は文治6年2月16日（新暦1190年3月23日）73歳で入寂。西行は藤原氏の出自で、鳥羽院（鳥羽法皇）の北面武士として活躍するが、保延6年（1140年）、23歳で出家する。その後、諸国を巡る漂白の旅に出て、多くの和歌を残す。
桜をこよなく愛していた西行は、「願はくは 花の下にて 春死なむ そのきさらぎの 望月のころ」という歌を残し、2月15日から1日後の2月16日にこの世を去った。「望月のころ」という西行の願いを汲み、2月15日が「西行忌」とされている。
C++
C++（シープラスプラス）は、汎用プログラミング言語のひとつである。派生元であるC言語の機能や特徴を継承しつつ、表現力と効率性の向上のために、手続き型プログラミング・データ抽象・オブジェクト指向プログラミング・ジェネリックプログラミングといった複数のプログラミングパラダイムが組み合わされている。C言語のようにハードウェアを直接扱うような下位層向けの低水準言語としても、複雑なアプリケーションソフトウェアを開発するための上位層向け高水準言語としても使用可能である。アセンブリ言語以外の低水準言語を必要としないこと、使わない機能に時間的・空間的コストを必要としないことが、言語設計の重要な原則となっている。
C++は、1983年にAT&Tベル研究所の計算機科学者ビャーネ・ストロヴストルップによって公開された。また様々なプラットフォームでその開発環境が導入された。1998年からISOとIECの共同で言語仕様とテンプレートライブラリの標準化が行われるようになり、その後2003年、2011年、2014年、2017年、2020年、2023年に標準規格が改訂されている。2025年時点での最新規格は「ISO/IEC 14882:2024」通称「C++23」。
C++ 歴史
ストロヴストルップはプログラミング言語C with Classes（クラス付きのC言語）の開発を1979年に開始した。彼は大規模なソフトウェアの開発に有用な特徴をSimulaが備えていることに気がついたが、Simulaは実行速度が遅く実用的ではなかった。一方でBCPLは実行速度こそ速かったものの、大規模なソフトウェア開発を念頭に置いた場合にあまりにも低級だった。
これらの事情を鑑みて、ストロヴストルップは当時既に汎用的な言語だったC言語にSimulaの特徴を取り入れることを試みた。この取り組みにあたってはALGOL68やAda、CLU、ML等の言語の影響も受けている。最初はクラスと派生クラス、型検査機構の強化、インライン関数、デフォルト引数の機能を、Cfrontを介してC言語に追加した。1985年10月に最初の商用リリースがなされた。
C++ 歴史
1983年にはC with ClassesからC++に名称を変更した。この際に、仮想関数と、関数と演算子の多重定義、参照型、const型、ユーザー制御可能な自由領域メモリ制御、型検査機構の改良、BCPL形式の（「//」による）行単位のコメントなどの機能が追加された。1985年には『The C++ Programming Language』の初版が出版された（邦訳『プログラミング言語C++』1988年)）。この時点では公式な標準が策定されていなかったために、この本が事実上のリファレンスとなった。1989年C++のバージョン2.0として、多重継承と抽象クラス、静的メンバ関数、constメンバ関数、protectedメンバ等の機能が追加されたものがリリースされた。1990年に『The Annotated C++ Reference Manual (ARM)』（邦訳『注解C++リファレンスマニュアル』）が出版され、将来の標準化の土台となるものを提供した。後に追加された機能にはテンプレートと例外処理、名前空間、新形式のキャスト、ブール型が含まれた。
C++ 歴史
ARMが事実上の標準として使われた時代が続いたが、標準化が進んだ。C++言語の最初の標準は1998年にISO/IEC 14882:1998として承認された。2003年の改訂版を経て、2011年にメジャーアップデートとして制定されたのがISO/IEC 14882:2011、通称「C++11」である。このバージョンは、元々、非公式に「C++0x」と呼ばれていた。2000年代中に制定され、正式に「C++09」と呼称されることを見越した仮称だったが、2000年代中には実現しなかった。2011年8月10日まで続いた最終国際投票で C++0x は全会一致で承認された。これにより C++0x と呼ばれてきた C++ の次期改正案はついに国際標準になり、C++11と呼べるようになった。
C++言語の進化に伴い、標準ライブラリもまた進化していった。C++標準ライブラリに最初に追加されたのは、従来のC言語の printf() や scanf() といった関数を置き換えるストリームI/Oライブラリである。また、C++98における標準ライブラリへの追加で最も重要なものはStandard Template Library (STL) である。C++11では、正規表現による検索・置換や複数スレッドでの同時実行、ハッシュテーブル・ハッシュセットの追加などさらなる拡充が続いている。
C++ 歴史
長年にわたる作業の後、ANSIとISOの合同委員会はプログラミング言語C++を1998年に標準化した (ISO/IEC 14882:1998)。1998年の標準の公式なリリースから数年間にわたって委員会は不具合の報告を続け、2003年に改訂版を出版した。2003年12月に制定された日本工業規格（現：日本産業規格）JIS X 3014:2003「プログラム言語C++」（日本産業標準調査会、経済産業省）は、ISO/IEC 14882:2003 (E) の日本語訳である。
2007年11月15日、C++ Technical Report 1 (TR1) という技術報告書（テクニカルレポート）がリリースされた。これは規格の公式な一部ではなかったが、次の版のC++に含まれると期待される、標準ライブラリへの数多くの拡張を与えた。TR1の内容は、多少の修正を加えてC++11に取り込まれている。
2011年9月1日、C++98以来初の大きな改訂となるISO/IEC 14882:2011が発行された。
2014年8月18日、ISO/IEC 14882:2014 (C++14) が投票で承認され、同年12月15日に公式に発行された。
2017年11月30日、ISO/IEC 14882:2017 (C++17) が公式に発行された。
C++ 歴史
2020年9月4日、ISO/IEC 14882:2020 (C++20) が投票で承認され、同年12月15日、ISO/IEC 14882:2020 (C++20)に公式に発行された。
2023年2月、ISO/IEC 14882:2023 (C++23)の技術仕様がISO C++ 規格会議にてまとまり、2024年10月19日に発行された。2019年末から始まったCovid-19の世界的流行により、開発者同士の対面によるミーティングの開催を図ることが難しくなったことから、C++23の仕様策定は難航した。
Boost C++ライブラリを開発しているBoostコミュニティはC++の方向性の決定に大きく貢献し、さらにC++標準化委員会へ改良すべき点などを意見している。2006年当時はマルチパラダイムプログラミングをより自然に行えるようにすることに力が注がれており、C++の関数型プログラミングやメタプログラミングの可能性を模索していた。
C++ 歴史
C++という名称はRick Mascittiの功績で、最初に使用されたのは1983年の12月である。初期の研究期間では、開発中の言語は「C with Classes」と呼ばれていた。最終名は、変数の値を一つ加算する、C言語の++（インクリメント）演算子からの派生である。また一般的な命名規則での「+」の使用は、機能強化されたコンピュータプログラムを意味する。ストロヴストルップによれば「この名前は、C言語からの変更の革新的な本質を示している」ということである。C+は、より初期の無関係なプログラミング言語の名前である。
ストロヴストルップは著書『The C++ Programming Language』の前文で名前の起源を語り、ジョージ・オーウェルの小説『1984年』の付録から「C++」が連想されるかもしれないと付け加えている。ニュースピークという架空の言語の解説に宛てられた3つの章の中に、科学技術に関する専門用語とジャーゴンの解説に宛てられた「C vocabulary」という章がある。ニュースピークで「ダブルプラス」は最上級の修飾語である。ゆえにニュースピークで「C++」は「最も極端な専門用語またはジャーゴン」という意味になるだろう。
1992年、Rick Mascittiは名前について非公式に質問されると、彼はおふざけのつもりで命名したという旨の回答をした。彼はこの言語の正式な名称になるとは夢にも思っていなかった。
C++ 哲学
ビャーネ・ストロヴストルップは著書『C++の設計と進化(1994)』でC++を設計する際に用いたルールを述べている。
C++のコンパイラがどのようにコードを出力しメモリのレイアウトを決めるのかということについては『Inside the C++ Object Model』(Lippman, 1996)に記載されている。ただしコンパイラが出力するコードの仕様はコンパイラ制作者の裁量に任されている。
C++ 標準ライブラリ
1998年に施行されたANSI/ISO C++ 規格は言語仕様とライブラリの2つのパートで構成される。ライブラリ規格の大半はStandard Template Library (STL) とC言語の標準ライブラリの改良版についての内容である。標準規格以外にも様々なライブラリが数多く存在し、リンカを使用することにより、C言語/FORTRAN/Pascal/BASICのような言語を用いて作成されたライブラリを利用できる。規格外のライブラリが利用できるかどうかはコンパイラに依存する。
C++ 標準ライブラリ
C++標準ライブラリはC++向けに若干の最適化が施されたC言語標準ライブラリを含んでいる。C++標準ライブラリの大部分はSTLである。 コンテナ（可変長配列やリストなど）、コンテナを配列のように扱えるようにするイテレータ、検索やソートを行うアルゴリズムといった有用なツールが提供されている。さらにmapやmultimapのような連想配列や、setやmultisetのようなソート済みコンテナも提供され、これらは全てインターフェイスに互換性がある。テンプレートを用いることにより、あらゆるコンテナ(またはイテレータで定義したシーケンス)に適用できる汎用的なアルゴリズムを記述できる。C言語と同様にライブラリの機能には#include ディレクティブを使ってヘッダファイルを読み込むことによってアクセスする。C++には69本の標準ヘッダファイルがあるが、このうち19本については非推奨となっている。
STLは標準規格に採用される前は、ヒューレット・パッカードの（一時はシリコングラフィックスの）商用ライブラリだった。STLは標準規格の単なる一部分に過ぎず規格書にSTLという表記は見られないが、入出力ストリーム、国際化、デバッグ機能、およびC言語標準ライブラリ等の、STL以外の部分と区別するために、今でも多くの人がSTLという用語を使っている。
大半のC++コンパイラはSTLを含むC++標準ライブラリの実装を提供している。STLPortのようなコンパイラ非依存のSTLも存在する。様々な目的でC++標準ライブラリを独自に実装しているプロジェクトは他にもある。
C++の標準ライブラリは大きく次のように分けられる。多種多様な実行環境が存在することを考慮して、GUIに関するライブラリは標準に含まれていない。
C++ 外部ライブラリ
以下に、C++で広く使われていると思われるライブラリを挙げる。
Boost C++ライブラリ
様々なC++汎用ライブラリの集合。正規表現を扱うBoost.Regexや無名関数（ラムダ計算）を簡潔に記述できるBoost Lambda Libraryなどがある。C++11やC++14などでも、Boostに存在するライブラリが標準ライブラリに採用されたり、標準ライブラリとして提案された項目がBoostで先行して実装されたりしている。これにより、実際に実装・使用することでの知見が得られ、標準ライブラリとして採用される際に活かされている。
POCO C++ Libraries
汎用C++ライブラリ。 Javaクラスライブラリに類似。
Apache Xerces
C++での主要XMLパーサの一つ。Java版も存在する。
CppUnit
C++でのユニットテストフレームワーク。 クラス毎の動作確認に威力を発揮する。
C++ 特徴
C言語に、オブジェクト指向プログラミングをはじめとする様々なプログラミングパラダイムをサポートするための改良が加えられたものといえる。ただし、他のプログラミング言語と違い、旧来のCと同様に手続き型言語としても扱えるという特徴がある。また、C言語と比べて型チェックが厳しくなっており、型安全性が向上している。このことから、C++をbetter Cというふうに呼ぶことがある。すなわち、基本的にC言語に対して上位互換性がある。初期のC++はCへのトランスレータとして実装され、C++プログラムを一旦Cプログラムに変換してからコンパイルしていた。
ただし、C++という名称が定まった当初の時期から、C言語とC++との間には厳密な互換性はない。当時、Cとの互換性について議論の末、「C++とANSI Cの間には不正当な非互換性はない」という合意が形成されることとなった。そのため、正当な非互換性を巡って多くの議論が発生した。ただし、まだANSIによるC言語の標準規格も策定途中の時期である。