プログラミングの型システムに関する記事を読んでいると、共変や反変といった用語が出てくることがある。 TypeScript や Flow についての記事でも、見かけることがある。 それらは TypeScript を使う上で必須の知識ではないが、把握しておくに越したことはない。 この記事では、TypeScript を題材にして、変性について説明していく。 TypeScript に関する議論を理解できるようになることがこの記事の目的であり、より詳細な、学術的、数学的な内容には踏み込まない。 この記事の内容は、TypeScript のv3.9.5で動作確認している。 変性 変性(variance)とは、任意の型Tに対してどのような性質を持つのか示したものであり、以下の 4 種類がある。 不変性(invariance) Tそのものが必要 共変性(covariance) Tそのものか、そのサブタイプが
Parsing Expression Grammar(PEG)は、分析的形式文法の一種であり、形式言語をその言語に含まれる文字列を認識するための一連の規則を使って表したものである。PEGは再帰下降構文解析を文法を示すためだけに純粋に図式的に表現したものと見ることもでき、具体的な構文解析器の実装やその用途とは独立している。 PEGにおける構文(文法)の定義は文脈自由文法のバッカス・ナウア記法によるそれに似ているが、文脈自由文法では一般に「|」(縦棒、バーティカルバー)で表される「これらのうちどれか」ではなく、「最初の解析がうまくいったらそれを、失敗なら次を順に試してゆき、成功したものを採用」(「/」であらわす)という意味を使う。 このため、文脈自由文法とは異なり、PEGには曖昧さは存在しない。文字列を構文解析する場合、正しい構文木は常に1つしかない。このためPEGはコンピュータ言語の構文解析
This is an index to notable programming languages, in current or historical use. Dialects of BASIC (which have their own page), esoteric programming languages, and markup languages are not included. A programming language does not need to be imperative or Turing-complete, but must be executable and so does not include markup languages such as HTML or XML, but does include domain-specific languages
正規表現の"正規"って何 ある時ふと思いました。 「正規表現の"正規"って何だろう?」 「何を根拠に"正規"を名乗っているのか?」 と。 「誰かが『これが正規の表現だ』と言ったはず」で、 「それは周りにどうやって"正規"だと認められたのだろう」 ということが気になったので調べてみました。 "正規表現"という名前でなくて、"ジャックさんの表現"とか"記号ごちゃごちゃ表現"だったらこんな疑問も持たなかったのですけど。 数学における"正規"とは 一般に"正規"というと、"正規品"や"正規の手順"といったように"本物の(genuine)"や"公式な(official)"といった意味がありますが、数学の"正規"はちょっと違います。 数学で"正規"(および"正則"、英語では"regular"または"non-singular")は、ある概念に強い制限をかけたもの、という意味です。強い制限をかけたものは取
リンカーは、増分リンク情報に .ilk データベース ファイルを作成して使用します。 解説 増分リンクを行う場合、LINK は最初の増分リンク中に作成した .ilk ステータス ファイルを更新します。 このファイルは、ターゲット EXE または DLL ファイルと同じベース名を持ち、拡張子 .ilk。 その後の増分リンク中に、LINK によって .ilk ファイルが更新されます。 .ilk ファイルがない場合、LINK はフル リンクを実行し、新しい.ilk ファイルを作成します。 .ilk ファイルが使用できない場合、LINK は非増分リンクを実行します。 インクリメンタル リンクの詳細については、 /INCREMENTAL (インクリメンタル リンク) リンカー オプションを参照してください。 ファイルの名前と場所を指定する方法については、「 /ILK (増分データベース ファイルの名
はじめに Next.js で MPA を構築していると、ページ単位でアクアセスコントロールを行うニーズやケースがよく発生します。 ここでのアクセスコントロールは、ページごとにアクセス可能な条件を定義したり、ルールにそぐわないアクセスを別のページに転送させるなどの処理を意味します。 例えば、一般ユーザ向けのページと、登録済みユーザ向けのマイページを持つケースを考えてみると… 一般ユーザ向けページは誰でもアクセス可能 マイページはログイン済みのユーザのみアクセス可能 ログインのためのサインイン・アップフォームのページも存在するが、ログイン済みであればマイページにリダイレクトされる ただし、パスワードリセットのフォームは誰でもアクセス可能 今回は上記のルールを実装する上での、いくつかのアクセスコントロールパターンを考えます。 個人的には中規模以上のプロジェクトではパターン3をおすすめします。その
IEEE(米国電気電子学会)の「IEEE Spectrum」誌は2021年8月24日(米国時間)、プログラミング言語の年次ランキングの最新版「Top Programming Languages 2021」を公開した。 このランキングは55種類のプログラミング言語を、8つのソースに基づく11の指標について評価し、スコア化して集計したものだ。インタラクティブなアプリケーションとして公開されている。 各指標に対する重み付けによって次の4種類のランキングが作成されており、その他、独自の重み付けによってカスタムランキングを作成することもできる。 ・IEEE Spectrum 一般的なIEEE会員の興味や関心を反映した総合ランキング ・Trending 急成長している言語のランキング ・Jobs 雇用主からの需要が高い言語のランキング ・Open オープンソースハブで人気の高い言語のランキング これら
はじめに 本記事は Kotlin Advent Calendar 2019 12日目の記事です。 KotlinはJavaと比較してモダンと言われ続けてきていると思います。 しかしJavaのリリースサイクルが半年に1回となり、今までよりも良い言語になりつつあり、将来的な保守性を考えたときにJavaの方がいいのでは?という意見もあり、言語選定の時にどちらを選択すればいいのかと悩むことがあると思います。 そこで、最新のJavaの動向とKotlinを比較して、どちらがよりモダンかを比較したいというのが今回の内容です。 比較する対象はKotlinの最新バージョンとJavaの12以降の機能になります。 Javaについては、バージョン13が2019/9/18にリリースされましたが、今回は開発中のJDK14やそれ以降に入りそうな機能もいくつか比較していければと思います。 JDK11以前の機能については、他
Pythonにもプログラミングお作法があります。それは「Pythonic」と「The Zen of Python」になります。Pythonの学習を始める前にご一読いただけると、学習効率が高まると考えております。 なお、当協会は「Pythonic」と「The Zen of Python」を一人でも多くの方に理解してほしいと考え、以下のサイトで無料の検定試験を実施しています。(合格者には認定証が発行されます)興味がある方は以下より受験いただけると幸いです。 PythonZen & PEP 8 検定試験のWebサイトへ プログラミングフィロソフィー「Pythonic」Pythonを使う人たちの間で共有されている造語に「Pythonic」というものがあります。「Pythonic」はプログラミングフィロソフィーに関して幅広い意味を含むことばです。Pythonの素晴らしさを最大限に引き出せるエンジニア
Linuxカーネルの機能を安全に拡張できるeBPFのコードはC言語で実装する必要があると知り、がっかりしているクラウドネイティブ 世代の皆様に朗報です。実は、Rustで、eBPFのコードを実装することができます。今更、C言語(クラウドネイティブ ではない感じ)を学ぶ必要はありません! eBPFとプログラミング言語eBPFを活用するソフトウェアは、カーネルスペースで動作するeBPFバイトコードと、eBPFバイトコードを制御するユーザスペースのアプリケーションから構成されます。後者は、Go、Python、Rustなど様々なプログラミング言語で実装することができますが、前者は、制限のあるC言語で実装する必要があります。 eBPFの構成Rust用eBPFライブラリRustでeBPFを扱う一般的な方法は、libbpf-rsライブラリです。これは、C言語でユーザスペースのアプリケーションを実装するため
C#標準化のオープンソース化は、作業を容易にすることを目的に.NET Foundationの下で行われており、言語の革新や機能の設計から実装、標準化まで、すべてがオープンソース化された。オープン化によって、言語設計チーム、コンパイラの実装チーム、標準化委員会の3者間でのやり取りが容易になるとともに、すべての会話は公開される。 ECMAのC#標準化委員会であるTC-49-TG2が、C#の標準案作成を担っており、標準化作業の状況はC# 6の標準テキストで確認できる。具体的な作業の内容は、dotnet/csharplangリポジトリでホストされているドラフト仕様と、現在のC# 5標準テキストとのマージで、C# 7の機能も組み込まれる。 C#に関連するリポジトリとしては、C#の言語設計と進化の取り組みが含まれる前述のdotnet/csharplangのほか、コンパイラと関連ツール実装用のdotne
次のセクションのトピックを表示するには、左側のナビゲーションにある目次をご使用ください。 Visual Basic の概念に関するトピック Visual Basic プログラミングを理解するのに役立つ情報が記載されています。 Microsoft Forms の概念に関するトピック UserForms とコントロールについて、および、Visual Basic を使用してそれらをプログラミングする方法について説明します。 Visual Basic の操作手順のトピック 役に立つ一般的な操作手順 (オブジェクト ブラウザーの使用方法や Visual Basic 環境オプションの設定方法など) について説明します。 Visual Basic 言語リファレンス Visual Basic 言語 (すべてのメソッド、プロパティ、ステートメント、関数、演算子、およびオブジェクト) に関するドキュメントが用
What is Lua? Lua is a powerful, efficient, lightweight, embeddable scripting language. It supports several programming styles: procedural, object-oriented, functional, data-driven, and data description. Lua combines simple procedural syntax with powerful data description constructs based on associative arrays and extensible semantics. Lua is dynamically typed, runs by interpreting bytecode with a
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く