SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

C#プログラマのためのF#入門

F#の言語指向プログラミング(LOP)概論と抽象的表現

C#プログラマのためのF#入門(7)

  • このエントリーをはてなブックマークに追加

 本連載では、C#で「最低限」なんらかのコードを書いたことのあるプログラマーを対象に、関数型プログラミング言語「F#」について数回にわたり解説していきます。第7回目は、F#のLOP(言語指向プログラミング)におけるAbstract Representation(抽象的表現)について紹介します。

  • このエントリーをはてなブックマークに追加

はじめに

 4月13日、Visual Studio 2010製品版がとうとうリリースされました。

 F#に関しては、RCからの変更箇所詳細はMSから発表されていないことと、F#のバージョンはRC同様の2.0であることから、今回はバグの修正を中心としており、機能に関しては大きな変更はありません。

  • Visual Studio 2010(評価用英語版)ダウンロードはこちらから
  • Visual Studio 2010(評価用日本語版)ダウンロードはこちらから

 今回の連載の動作確認はVS2010RTM英語版で行っています。

LOP(言語指向プログラミング)とは

 LOP(Language Oriented Programming)とは何か、を一言で定義するのは容易ではありません。LOPの概念は抽象的で、またその技巧も大変幅が広く複雑だからです。

 F#のLOPを説明するにはまず、DSL(Domain Specific Language)とは何かと言うことから理解する必要があります。DSLはある特定の目的(ドメイン)の解決に特化させたプログラミング言語のことです。これに対して、C言語やC#は汎用的なプログラミング言語に分類されます。例えば、Excelのセル内の数値は「A1」や「B3」などのように、Excel固有の表し方でシンプルに表すことができ、汎用的なプログラミング言語のようにデータ型などを心配することなく、そのまま「A1+B3」などのように式において使用できます。これは一種のDSLであると言えます。

 DSLには外部DSLと内部DSLの2種類があります。ホスト言語(汎用言語)とは異なる言語、例えばXMLファイルなどを使用する手法を外部DSLといい、一方、ホスト言語のサブセットで書かれるものを内部DSL(組み込み型DSLと呼ばれることもあります)と呼びます。

内部DSLと外部DSLの特徴
  内部DSL 外部DSL
言語 ホスト言語の構文のみで実現 ホスト言語とは異なる専用の言語
特徴 APIとの区別が曖昧だが、特定のドメインに特化されているかどうか、読みやすさ書きやすさに長けているかなどがポイント 汎用言語との区別が曖昧だが、特定のドメインに特化されているかどうか、DSLとしての目的を達成するように作成されているかどうかがポイント
メリット ホスト言語を用いるので学習が容易 制限のない自由な言語設計が可能
デメリット ホスト言語の文法的制限を受けるため、比較的言語設計の自由度が低い その都度パーサなどを作成・用意しなくてはならない
比較的学習に時間を要する

 ある種の問題に対応するためにDSLなどを作成し、それを用いて特定のドメインの問題を解決しようとするのがLOPのプログラミング手法です。DSLは状況(特定の問題)に応じて都合よく作成される言語のため、当然その表現は、シンプルかつ分かりやすいものになります。しかし、一般的にはその都合の良さの代償として、関係者がその特定の言語をわざわざ学ばなくてはならない、また、誰かが言語を確立してコンパイラーを作成しなくてはならない、という欠点があります。F#のLOPの特徴は、このDSLを汎用言語のサブセットとしながらもベーシックな汎用言語にない特別な機能を与えることで、DSLの短所をカバーしながらドメイン固有の問題を表現・解決できるところです。

 繰り返しますが、F#のLOPは大変概念化しにくいものなので、詳細は後に例をあげながら紹介したいと思います。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
3種類のLOP

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
C#プログラマのためのF#入門連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 星山 仁美(ホシヤマ ヒトミ)

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5209 2010/06/24 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング