Submit Search
Upload
メタ プログラミングについて
•
Download as PPTX, PDF
•
0 likes
•
361 views
S
Shinichi Ueno
Follow
2018/11/20 マル秘 LT で登壇した資料 概念について、技術者にとって身近な世界から覗いてみます
Read less
Read more
Technology
Report
Share
Report
Share
1 of 21
Download now
Recommended
Type script x azure x pwa
Type script x azure x pwa
Shinichi Ueno
第3回メドレー読書会後半
第3回メドレー読書会後半
Kazuhiro Himoto
IntelliJ IDEAで快適なPython生活
IntelliJ IDEAで快適なPython生活
敦志 金谷
担当は予測できるのか? 担当予測器作成記
担当は予測できるのか? 担当予測器作成記
EinosukeIida
PyAutoGUI等Pythonライブラリによる自動化支援
PyAutoGUI等Pythonライブラリによる自動化支援
H Iseri
Rails環境に最適なVue.js構成を探る
Rails環境に最適なVue.js構成を探る
虎の穴 開発室
Farmnote が技術で牛と人をつなげるまで - Data engineering and data analysis workshop #6
Farmnote が技術で牛と人をつなげるまで - Data engineering and data analysis workshop #6
Nobuteru Kawano
THETA S + Raspberry pi 2でライブストリーミングしてみた(続)
THETA S + Raspberry pi 2でライブストリーミングしてみた(続)
Shuichiro Fukuoka
Recommended
Type script x azure x pwa
Type script x azure x pwa
Shinichi Ueno
第3回メドレー読書会後半
第3回メドレー読書会後半
Kazuhiro Himoto
IntelliJ IDEAで快適なPython生活
IntelliJ IDEAで快適なPython生活
敦志 金谷
担当は予測できるのか? 担当予測器作成記
担当は予測できるのか? 担当予測器作成記
EinosukeIida
PyAutoGUI等Pythonライブラリによる自動化支援
PyAutoGUI等Pythonライブラリによる自動化支援
H Iseri
Rails環境に最適なVue.js構成を探る
Rails環境に最適なVue.js構成を探る
虎の穴 開発室
Farmnote が技術で牛と人をつなげるまで - Data engineering and data analysis workshop #6
Farmnote が技術で牛と人をつなげるまで - Data engineering and data analysis workshop #6
Nobuteru Kawano
THETA S + Raspberry pi 2でライブストリーミングしてみた(続)
THETA S + Raspberry pi 2でライブストリーミングしてみた(続)
Shuichiro Fukuoka
ヤマムギVol.5 BIファーストステップre:dash
ヤマムギVol.5 BIファーストステップre:dash
Mitsuhiro Yamashita
OSS Study#19_LT
OSS Study#19_LT
NaoY-2501
はじめてのAIプログラミング 5章: 知識表現
はじめてのAIプログラミング 5章: 知識表現
nkazuki
ゼロから学ぶPython勉強会
ゼロから学ぶPython勉強会
sekikazu
stapy#23 LT
stapy#23 LT
NaoY-2501
S18 t0 introduction
S18 t0 introduction
Takeshi Akutsu
Japan r2019 upset_analysis
Japan r2019 upset_analysis
Makoto Kubota
Stapy#22 LT
Stapy#22 LT
NaoY-2501
Machine learning and_system_design
Machine learning and_system_design
yusuke shibui
NetworkXによる語彙ネットワークの可視化
NetworkXによる語彙ネットワークの可視化
Shintaro Takemura
IoTLT長野 vol.1 SORACOM Air for Cellarer の plan-D/plan-K を試してみた
IoTLT長野 vol.1 SORACOM Air for Cellarer の plan-D/plan-K を試してみた
Koichiro Oki
ODSC East 2017 Report
ODSC East 2017 Report
Takeshi Akutsu
Beginning comfortable documentation with jenkins and doxygen ( public )
Beginning comfortable documentation with jenkins and doxygen ( public )
Hidenori Matsuki
検索の工夫
検索の工夫
Keiichi Kobayashi
WindowsでPython
WindowsでPython
drillan
Real-time personalized recommendation using embedding
Real-time personalized recommendation using embedding
Recruit Lifestyle Co., Ltd.
React vtecx20170822
React vtecx20170822
Shinichiro Takezaki
React vtecx20171129
React vtecx20171129
Shinichiro Takezaki
ITフォーラム2024 AITCセッション(2)
ITフォーラム2024 AITCセッション(2)
aitc_jp
Web study20171007
Web study20171007
Shinichiro Takezaki
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
Katsuhiro Morishita
リモートデバッグツール Weinerをつかってみた
リモートデバッグツール Weinerをつかってみた
Masakazu Muraoka
More Related Content
What's hot
ヤマムギVol.5 BIファーストステップre:dash
ヤマムギVol.5 BIファーストステップre:dash
Mitsuhiro Yamashita
OSS Study#19_LT
OSS Study#19_LT
NaoY-2501
はじめてのAIプログラミング 5章: 知識表現
はじめてのAIプログラミング 5章: 知識表現
nkazuki
ゼロから学ぶPython勉強会
ゼロから学ぶPython勉強会
sekikazu
stapy#23 LT
stapy#23 LT
NaoY-2501
S18 t0 introduction
S18 t0 introduction
Takeshi Akutsu
Japan r2019 upset_analysis
Japan r2019 upset_analysis
Makoto Kubota
Stapy#22 LT
Stapy#22 LT
NaoY-2501
Machine learning and_system_design
Machine learning and_system_design
yusuke shibui
NetworkXによる語彙ネットワークの可視化
NetworkXによる語彙ネットワークの可視化
Shintaro Takemura
IoTLT長野 vol.1 SORACOM Air for Cellarer の plan-D/plan-K を試してみた
IoTLT長野 vol.1 SORACOM Air for Cellarer の plan-D/plan-K を試してみた
Koichiro Oki
ODSC East 2017 Report
ODSC East 2017 Report
Takeshi Akutsu
Beginning comfortable documentation with jenkins and doxygen ( public )
Beginning comfortable documentation with jenkins and doxygen ( public )
Hidenori Matsuki
検索の工夫
検索の工夫
Keiichi Kobayashi
WindowsでPython
WindowsでPython
drillan
What's hot
(15)
ヤマムギVol.5 BIファーストステップre:dash
ヤマムギVol.5 BIファーストステップre:dash
OSS Study#19_LT
OSS Study#19_LT
はじめてのAIプログラミング 5章: 知識表現
はじめてのAIプログラミング 5章: 知識表現
ゼロから学ぶPython勉強会
ゼロから学ぶPython勉強会
stapy#23 LT
stapy#23 LT
S18 t0 introduction
S18 t0 introduction
Japan r2019 upset_analysis
Japan r2019 upset_analysis
Stapy#22 LT
Stapy#22 LT
Machine learning and_system_design
Machine learning and_system_design
NetworkXによる語彙ネットワークの可視化
NetworkXによる語彙ネットワークの可視化
IoTLT長野 vol.1 SORACOM Air for Cellarer の plan-D/plan-K を試してみた
IoTLT長野 vol.1 SORACOM Air for Cellarer の plan-D/plan-K を試してみた
ODSC East 2017 Report
ODSC East 2017 Report
Beginning comfortable documentation with jenkins and doxygen ( public )
Beginning comfortable documentation with jenkins and doxygen ( public )
検索の工夫
検索の工夫
WindowsでPython
WindowsでPython
Similar to メタ プログラミングについて
Real-time personalized recommendation using embedding
Real-time personalized recommendation using embedding
Recruit Lifestyle Co., Ltd.
React vtecx20170822
React vtecx20170822
Shinichiro Takezaki
React vtecx20171129
React vtecx20171129
Shinichiro Takezaki
ITフォーラム2024 AITCセッション(2)
ITフォーラム2024 AITCセッション(2)
aitc_jp
Web study20171007
Web study20171007
Shinichiro Takezaki
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
Katsuhiro Morishita
リモートデバッグツール Weinerをつかってみた
リモートデバッグツール Weinerをつかってみた
Masakazu Muraoka
React vtecx20171025
React vtecx20171025
Shinichiro Takezaki
リアルタイムにデータ分析してWebサービスの面白さを伝えたい
リアルタイムにデータ分析してWebサービスの面白さを伝えたい
x1 ichi
フィジカルコンピューティング入門 USB-MIDIベースのPepper-Monakaを使う
フィジカルコンピューティング入門 USB-MIDIベースのPepper-Monakaを使う
Yoshitaka Kuwata
Nervesが開拓する「ElixirでIoT」の新世界
Nervesが開拓する「ElixirでIoT」の新世界
Hideki Takase
WebpackとReactで作るGoogle Chrome 拡張
WebpackとReactで作るGoogle Chrome 拡張
K Sasaki
初学者のためのプロンプトエンジニアリング実践.pptx
初学者のためのプロンプトエンジニアリング実践.pptx
Akifumi Niida
ノンコーディングで LINE Bot 開発! Azure Logic Apps × Azure Cognitive Services ×LINE メッセー...
ノンコーディングで LINE Bot 開発! Azure Logic Apps × Azure Cognitive Services ×LINE メッセー...
典子 松本
システム開発を前進させるためのGradle導入法
システム開発を前進させるためのGradle導入法
Takuma Watabiki
Inside CyberAgent's Game Development
Inside CyberAgent's Game Development
Suguru Shirai
たのしいアノテーション
たのしいアノテーション
Kazuhiro Sasao
JavaScript LT会 〜 React.js Node.js歓迎 〜 Deno で やってみるweb開発
JavaScript LT会 〜 React.js Node.js歓迎 〜 Deno で やってみるweb開発
虎の穴 開発室
人工知能とアート
人工知能とアート
Youichiro Miyake
scikit-learnを用いた機械学習チュートリアル
scikit-learnを用いた機械学習チュートリアル
敦志 金谷
Similar to メタ プログラミングについて
(20)
Real-time personalized recommendation using embedding
Real-time personalized recommendation using embedding
React vtecx20170822
React vtecx20170822
React vtecx20171129
React vtecx20171129
ITフォーラム2024 AITCセッション(2)
ITフォーラム2024 AITCセッション(2)
Web study20171007
Web study20171007
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
リモートデバッグツール Weinerをつかってみた
リモートデバッグツール Weinerをつかってみた
React vtecx20171025
React vtecx20171025
リアルタイムにデータ分析してWebサービスの面白さを伝えたい
リアルタイムにデータ分析してWebサービスの面白さを伝えたい
フィジカルコンピューティング入門 USB-MIDIベースのPepper-Monakaを使う
フィジカルコンピューティング入門 USB-MIDIベースのPepper-Monakaを使う
Nervesが開拓する「ElixirでIoT」の新世界
Nervesが開拓する「ElixirでIoT」の新世界
WebpackとReactで作るGoogle Chrome 拡張
WebpackとReactで作るGoogle Chrome 拡張
初学者のためのプロンプトエンジニアリング実践.pptx
初学者のためのプロンプトエンジニアリング実践.pptx
ノンコーディングで LINE Bot 開発! Azure Logic Apps × Azure Cognitive Services ×LINE メッセー...
ノンコーディングで LINE Bot 開発! Azure Logic Apps × Azure Cognitive Services ×LINE メッセー...
システム開発を前進させるためのGradle導入法
システム開発を前進させるためのGradle導入法
Inside CyberAgent's Game Development
Inside CyberAgent's Game Development
たのしいアノテーション
たのしいアノテーション
JavaScript LT会 〜 React.js Node.js歓迎 〜 Deno で やってみるweb開発
JavaScript LT会 〜 React.js Node.js歓迎 〜 Deno で やってみるweb開発
人工知能とアート
人工知能とアート
scikit-learnを用いた機械学習チュートリアル
scikit-learnを用いた機械学習チュートリアル
Recently uploaded
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
furutsuka
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
Ryo Sasaki
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
sugiuralab
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
iPride Co., Ltd.
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
danielhu54
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
Atomu Hidaka
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
iPride Co., Ltd.
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
Shota Ito
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
osamut
Recently uploaded
(9)
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
メタ プログラミングについて
1.
C#erのための メタ プログラミング 西部ガス情報システム(株) 技術企画部 上野 伸一 Ueno
Shinichi
2.
About Me 上野 伸一 Ueno
Shinichi • 西部ガス情報システム(株) 技術企画部 uenoshinichi@sgis.co.jp • https://github.com/s-ueno • https://www.facebook.com/uen.agile 趣味 • 釣り(ヘチ釣り・落とし込み) • 野鳥観察(探鳥) • プログラミング
3.
C#erのための メタ プログラミング メタ
プログラミングのお話 技術詳細はまたの機会に
4.
メタ プログラミング https://ja.wikipedia.org/wiki/Wikipedia:%E3%82%A6%E3%82%A3%E3%82%AD%E3%83%9A%E3%81%9F%E3%82%93#/media/File:Wikipe-tan_full_length.png GNU Free
Documentation License ウィキペたん ロジックを生成する 高位ロジック “メタ” という言葉の定義について考えてみよう
5.
メタ について https://upload.wikimedia.org/wikipedia/commons/3/30/Wikipe-tan_needs_your_help.png GNU Free
Documentation License ウィキペたん メタ (という広義の枠組み) メタファー (比喩、暗喩) メタ フィクション (劇中劇) メタ プログラミング その中の一つ 一緒じゃないよ “メタ” についてWikiぺたんに聞いてみた
6.
別視点 DDDから ドメイン駆動設計 データ中心アプローチ DOA :
Data Oriented Approach モデル駆動 MDA : Model-Driven Architecture GNU Free Documentation License ウィキペたん https://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Neko_Wikipe-tan.svg データモデリング スキル
7.
データモデリングって何? • ビジネスで利用するデータを、ルールに基づいて体系化 • RDBにおける
ルール の例 • リレーショナル モデル • E.F. Coddのデータモデリング。構文論(シンタックス) • ERモデル • Peter Chenのデータモデリング。意味論(セマンティクス) • TH(椿-穂鷹)モデル • ERモデルの pattern of 系。タイプリソースなどの考え方はここから。意味論(セマ ンティクス) • T字系ER(TM)モデル • 数学基礎論に無矛盾の形で事業の管理過程を記述する。構文論(センマンティクス) 構文論(シンタックス) ・・・証明可能な論理や理論 意味論(セマンティクス) ・・・ parrerns, parrern of
8.
データモデリングの一つ • 業務での言葉や資源を用いての、 “もの・こと分析” •
業務の言葉に”する”を付けて日本語として成立すれば、”こと”であり、そうではない ものを”もの”として分ける作業です。 • 請求 については、請求する で言葉として成立するので、 こと に分類されます。 • 患者 については、患者する とは言えないため、 もの に分類されます。 請求番号 請求 請求日 請求先 イベント entity 患者ID 患者 患者名 性別 リソース entity 概念 個体識別子 個体 性質1 性質2 述語論理で記述可能
9.
(一階)述語論理 • “数理論理学” という
論理学(哲学) に 数学的演算を加えた学問 • 理論を文書化して記述する目的で発展 • 数学以外も幾何学、プログラミング、データモデリング と様々な分野に応用されている GNU Free Documentation License ウィキペたん https://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Wikipe-tan_holding_sign.png
10.
(一階)述語論理 • “述語論理学” における
“述語” とは • 集合のなかで、項 t1…tn に応じて 真偽の定まる主張P(t1…tn ) を指す • n項述語 という • “言語学” における “述語” とは • 主語を除くすべて を指す 私は 上野 伸一 である (ある集合の中で)私(の名前)は 上野 伸一 である ∃x ( F(x) ∧ H(x) ) F(x) は “名前が上野伸一である” という述語H(x) は “今日のLT大会に参加したメンバー” 全称量化子∀…∀x P (すべての x に対して P である) 特称量化子∃…∃x P (ある x に対して P である) 結合記号∧ … 連言(AND) 結合記号∨ … 進言(OR) 結合記号¬ … 否定(NOT) 結合記号→ … 仮言(IF) 一階述語論理では 性質(属性)=述語 で表現可能 (一階)述語論理の世界における言語 述語論理の世界に翻訳するとこうなる 会話には隠れた文脈があるのでそれを()で明記
11.
(一階)述語論理 ある集合 述語 Linq は一階述語論理のC#(英語)表現 私Pは C#erにとって、より身近な世界に揺り戻し MSDN C#
Linqにおける Where 句の説明
12.
(一階)述語論理 GNU Free Documentation
License ウィキペたん https://ja.wikipedia.org/wiki/Wikipedia:%E3%82%A6%E3%82%A3%E3%82%AD%E3%83%9A%E3%81%9F%E3%82%93#/media/File:Wikipe-tan_dressed_in_a_Halloween_costume.png 一階述語論理の英語記述 SQL そもそものSQL誕生の基礎理論が SQLに関するウィキペたんの記事
13.
二階述語論理、高階述語論理 GNU Free Documentation
License ウィキペたん 述語 が 新しい述語 を生成する (性質 ≠ 述語) 一階述語論理 では 性質=述語 高階述語 一階 があるなら 二階 もあるの? あるんだな
14.
データモデリングって何? • ビジネスで利用するデータを、なんらかのルールに基づいて体系化する作 業になります • システム開発の歴史の中で現在は
RDB(リレーショナル データベース) と言われ る、表形式のデータベースが一般的に利用されるようになりました • 様々なルール の例 • リレーショナル モデル • E.F. Coddのデータモデリング。構文論(シンタックス) • ERモデル • Peter Chenのデータモデイング。意味論(セマンティクス) • TH(椿-穂鷹)モデル • ERモデルの pattern of 系。タイプリソースなどの考え方はここから。意味論(セマンティクス) • T字系ER(TM)モデル。 • 数学基礎論に無矛盾の形で事業の管理過程を記述する。構文論(センマンティクス) http://www.sdi-net.co.jp/FAQ-index02.htm http://www.drinet.co.jp/technology/tsubaki/dri090/%E3%80%90%E7%AC%AC90%E5%8F%B7%E3%80%91%E3%83%87%E3%83%BC%E3%82%BF%E3%83%A2%E3%83%87%E3%83%AB%E3%81%AE%E9%80%B2%E5%8C%96.html http://www.sdi-net.co.jp/blackbook-index.htm http://www.sdi-net.co.jp/logico-index.htm https://www.sei-info.co.jp/it-keyword/data_modeling.html くぁwせdrftgyふじこ
15.
メタ プログラミング プログラマーが プログラミングする 行為 述語 数理論理の世界から、メタプログラミングの世界に揺り戻し
16.
メタ プログラミング をプログラミングする IL intermediate language メタ
は 述語 ”プログラミングする” 行為の 高階述語だった 高階述語として利用する 高階述語として利用する
17.
メタ プログラミング 軽量・爆速 OR/M DataReaderから任意の値を読み取って、ク ラスにセットする Dapperを例にメタプログラミングを知る
18.
メタ プログラミング 実行時コンパイラ環境 (Just-In-Time Compiler) プログラマーのその行為を ILを利用して動的に生成している Dapperを例にメタプログラミングを知る ILを利用した
メタプログラミング
19.
メタ プログラミング C#erにとって より敷居の低い
メタプログラミング ツール
20.
T4 Text Tempalte
21.
メタメタ プログラミング • メタがあるなら、メタメタプログラミングは? メタプログラマーが利用する ツールを開発するのが メタメタプログラマー T4製作者 あるんだな
Editor's Notes
西部ガス情報システム(株) 技術企画部の上野といいます 今日は オレオレLT大会 ということで、ライブラリ開発者は息をするように使う技術の一つですが みなさんの普段の開発にはあまり関わりのない マニアックな話をしてみたいと思います よろしくお願いします。
趣味は釣りで、ヘチ釣りや落とし込みをメインにしています。 バチ抜け時とかルアーなげたりもします 野鳥観察も好きで、家の周りや、自然公園、山とかで探鳥といって野鳥さんを探して写真とったりしています 寒い冬がシーズンで、まさにいい季節になってきました。
C#erのための IL と メタプログラミング ということで、 マイクロソフト系テクノロジーを軸に、その本質について触れたいと思います ただ、わかっていたことながら資料を執筆しながら、10分ではどう考えても無理だと思ったので 今日は メタプログラミング にフォーカスをあてたいと思います。
言葉の定義とはとても大事で、 メタプログラミングというからには メタ という単語について深堀したいと思います。 ちなみに、この右側のキャラクターは 『ウィキぺたん』という非公式ながらGNUライセンスされた ウィキペディアのキャラクターです ウィキペたんにメタプログラミングについて聞いてみると プログラミング技法の一種で、ロジックを生成する高位ロジック と説明があります。 それ以外の説明は本質を外していたので載せませんでしたが、ここが重要です。
ちなみに メタについても wikiペタン に聞いてみると 高次な と説明があります。 よくわからんですよね? よくある アニメや映画、漫画で表現される メタファー とか メタフィクション とかも メタのサブタイプです。 メタプログラミングも広義のメタ の一種で、メタファーやメタフィクションとはサブセットの関係です。 全体集合の中の一部分 という意味ですね。 ここら辺は混乱するので、同じメタの枠組みだけど異なる概念であると説明しておきます。
さて、ちょっと回り道をして みなさんがよくご存じの DDDから メタまで歩いてみたいと思います。 これもwikiペタンに聞いてみると、端的に1行で 『複雑なドメインの設計は、モデルベースで行うべき』 と記述があります。 そうですね。 DDDの本質は モデル駆動であり データ中心アプローチ(DOA) などの データモデリング の知識が理解を促進させます。
さて、データモデリングとは何かですが、端的にいうと ビジネスで利用するデータを、なんらかのルールに基づいて体系化したもの を指します。 RDBにおける ルールの例 リレーショナル モデル ・・・・ ちなにみ、構文論とは証明可能な理論や論理のことを指します。 意味論とは、パターン本に例えられる統計的なデータから導き出された最適解を指します。 ファウラーのEofPaa もエバンズのDDDもパターンオブですが、皆さんご存知ですか?ちゃんとついてきていますか?
さて、話を続けるとデータモデリングでもっとも有名なものに ものこと分析があります。 知っている人??? ユースケースで分析した業務での言葉や資源をもちいて、 ものこと分析して 概念モデルエンティティを獲得します。 具体的には、業務の言葉に “する” をつけて日本語として成立すれば “こと” であり、そうではない場合は “もの” として分ける作業です。 たとえば、請求 という言葉は 請求する として言葉として成立するため、 こと に分類されます。 出来事であり、イベントエンティティにカテゴライズされます。 患者、組織、従業員などは 患者する として言葉が成立しないので、 もの いわゆる リソースに分類されます。 ここで獲得した概念エンティティに、個体識別子と個体の性質(述語、属性)を整理していくと、述語論理という数理論の式に当てはめることができるようになります
述語論理とは 何か? ですが 数理 論理学 という論理学(哲学)に数学的演算を加えた学問 になります。 もう少し具体的には、数学的な理論を文書化して記述するための目的で発展してきた学問です。 ただ、数学以外にもプログラミング、データモデリングなどの様々な分野で応用されている 基礎数学の一つになります。
さて、述語論理学における 述語 とは 集合の中で 、項 t1…tn に応じて 真偽の定まる主張P(t1…tn ) を指します。 これを n項述語 といいます。 ちなみに、言語学における述語 とは 文章から 主語を除くすべてを指します。 具体的には、 、、 私は上野伸一である とある文章の私は が主語で 上野伸一である が述語です。 この文章には 暗黙の文脈が入っていて、 ある集合の中で私の名前は 上野伸一である が正しい表現になります。 これを一階述語論理ではこのように表現します。 ターンE( F(X) AND H(X) ) 、H(X)は今日のLT大会に参加したメンバーという人の集合で、F(x)とは、名前が上野伸一であるという述語になります。 ちなみに、全称量子化記号、特殊量子化記号、結合記号などを用いて理論の文書化することを一階述語論理といいます。 一階述語論理では、 上野伸一である という性質のことを述語 と同義ととらえます。
もう少し身近な話に戻すと、これはMSDNのC#のLinq、Where句に関する記述です。 ここに 述語フィルターを指定する とありますよね。 先ほどの述語倫理の式をC#で表現すると、LTに参加した人リストというコレクションに対して、私Pは name が上野伸一である という述語で表現します。 この述語 を指しています。
もともとが 元IBMのCodd博士が第一階述語論理を英語で表現するためのツールとして 関係データベース(RDB)とその演算体系であるSQLを構築したので、先ほどのC#でのLinq表現もつまるところ第一階述語論理を透過的に表現していることになります。 最初の方で Coddは意味論ではなく構文論といったのは、こいうことで 数学の専門学者が 第一階述語論理を 英語をベースに完結に表現したものが SQL で皆さんが普段集合に対して用いているツールになります。
第一階述語論理というだけあって、第二階や高階述語論理というものもあります。 第一階では性質と述語は同義であったのですが、階が上がる 高階述語では 述語が新しい述語を生成する 理論体系を指します。 つまり単純な 性質 が 述語 とはなりえない世界になります。
くぁwせdrftgyふじこ と、これ以上やると 頭がおかしくなりそうなので、 少しだけ 話を基に戻しましょう
メタ プログラミングとは、 プログラマーがプログラミングする行為
を プログラミングする という高階述語論理 を表します。 メタ の意味は 高次な といっていましたが、やっとつながりましたね。 プログラミングするという述語 を生成する 述語 が メタプログラミング です。 そのためのツールとして、 IL(中間言語)やT4(text Template)といった道具を用います。
代表的な例の一つとして、 軽量・爆速 OR/MのDapperなどがあります。 通常であれば、SQLを発行した後に、DataReaderからデータを読み取って、クラスのプロパティに値をセットするという行為をプログラマーが実装します。 ちょこっと C# をかじったことがある人なら リフレクション で抽象化できる と思うかもしれません。 ただ、そんなことを 20プロパティある 5万件のレコードに対して いちいちやっているようであれば、Dapperはこんな人気にはならなかったでしょう
最も効率が良い、DataReaderからデータを読み取るプログラミング行為を ILを利用して動的に生成・キャッシュして これを適用することで 軽量爆速なOR/Mとして人気を博しています。
Visual Studio を利用した メタプグロラミング では T4 TextTemplat というものもあります。 これは Demoする時間があればデモしてみましょう
Visual Studio を利用した メタプグロラミング では T4 TextTemplat というものもあります。 これは Demoする時間があればデモしてみましょう
最後に メタプログラミング があるなら さらに階を上げて メタメタプログラミング ってあるの? という話ですが あります。 そうですよね。メタプログラミング開発者が利用するツールを開発する人は メタメタプログラマーですよね。
Download now