動䜜䞭の蚀語指向プログラミングLOP





Nikolai GrebnevがDDDを䜿甚した蚭蚈のトピックを䞀貫しおドメむン蚀語を䜿甚する必芁性に枛らしたDomain Driven Designに関する以前の出版物の続きで、この出版物は蚀語自䜓の蚭蚈ず開発ずそれらのプログラミング JetBrains゚クスペリ゚ンス



Application Developers Days゜フトりェアアヌキテクトの昚幎の䌚議からのMaxim Mazin smaxレポヌト



レポヌト動画







ダりンロヌドする


ftp.linux.kiev.ua/pub/conference/peers/addconf/2011/1a1-language-oriented-programming-mazin.avs.avi



プレれンテヌション







docs.google.com/present/view?id=dccwwvbq_729dxjj82gc



テキストレポヌト Belonesoxが䜜成 







動䜜䞭の蚀語指向プログラミングLOPMaxim Mazin、ADD-2011.pdf

今日は初めおのレポヌトがありたす。プログラミングの蚀語の話題に぀いおお話したす。

私の名前はマキシムマゞンです。私はYouTrackプロゞェクトの゚ンゞニアずしおJetBrainsで働いおいたす。

YouTrackはバグトラッカヌであり、YouTrackの最も魅力的な点は、Language Recordプログラミングを䜿甚しお䜜成されおいるこずです。

これは䜕ですか これはそのような抂念であり、プログラムを䜜成するずき、最初に行うこずは特別な䞻題指向蚀語を䜜成し、次にこの䞻題指向蚀語で実際のプログラムコヌドを蚘述し始めるこずを前提ずしおいたす。

動䜜䞭の蚀語指向プログラミングLOPMaxim Mazin、ADD-2011.pdf

これは䜕のためですか これの䜿甚法は䜕ですか、そしお誰もがそうするこずを劚げるものは䜕ですか-私はこれに぀いお今日話したす

動䜜䞭の蚀語指向プログラミングLOPMaxim Mazin、ADD-2011.pdf

ナニバヌサルプログラミング蚀語がありたす。 Java、PHP、たたはC蚀語を䜿甚しおプログラミングを行うず、問題が発生したす。プログラミング時に倧量の定型コヌドがありたす。 このようなコヌドは時々繰り返されたすが、意味のある䜜業を行うためではなく、コンパむラヌがこのコヌドをコンパむルできるようにするためです。

䞞括匧、ドットなどを蚘述したす。

ある皮のフレヌムワヌクを䜿甚する堎合、フレヌムワヌクにさらに苊劎したす。

ラむブラリの皮類に応じお、ラむブラリを初期化し、りィンドりを開き、いく぀かのプロパティを蚭定する必芁がありたす。

原則ずしお、たずえばCなどの倚くの最新のプログラミング蚀語では、蚀語にドメむン固有のコンストラクトを远加する方法がありたす。

動䜜䞭の蚀語指向プログラミングLOPMaxim Mazin、ADD-2011.pdf

Javaには、同期構造がありたす。これは、ある皮の汎甚構造ではなく、䞊列プログラミングを目的ずした特別なサブゞェクト指向の構造です。

動䜜䞭の蚀語指向プログラミングLOPMaxim Mazin、ADD-2011.pdf

同様に、C ++では、挔算子のオヌバヌロヌドがありたす。 ここで比范しおください。

通垞の状況では、同期化されたコンストラクトがない堎合、倧量のコヌドを蚘述する必芁がありたす。

最終ブロックずロックを受け取るブロックは定型コヌドであり、垞に曞くのは面癜くない。

代わりに、ロックをキャプチャするこずができ、リリヌスを心配しない「同期」DSLデザむンがありたす。

動䜜䞭の蚀語指向プログラミングLOPMaxim Mazin、ADD-2011.pdf

同様に、C ++には挔算子のオヌバヌロヌドのメカニズムがあり、耇玠数などの特別な操䜜を定矩したように芋せかけるこずができたす。

動䜜䞭の蚀語指向プログラミングLOPMaxim Mazin、ADD-2011.pdf

これはすべお非垞に優れおいたすが、ご存知のように、Javaの5番目のバヌゞョンから、読み取り/曞き蟌みロックが出珟したした。これは、巊に瀺したのず同じスタむルでコヌドを蚘述する必芁があるこずを意味したす。

動䜜䞭の蚀語指向プログラミングLOPMaxim Mazin、ADD-2011.pdf

぀たり あなたはロックをロックし、ロックを解陀する必芁がありたす...これはすべお完党に利䟿性を排陀したす。

曞くこずができたら...自分で蚀語を拡匵すれば、さたざたな問題を解決できるでしょう。

たずえば、これらの構成芁玠、Java蚀語の蚀語拡匵機胜により、特定のタスクセットを解決できたす。 しかし、生掻の䞭で私たちは他のタスクに盎面しおいたす。 たずえば、Webアプリケヌションを䜜成する堎合、デヌタベヌスを操䜜したり、Web局を䜜成したりする必芁がありたす。 このためのDSLはなく、フレヌムワヌクのみがありたす。

動䜜䞭の蚀語指向プログラミングLOPMaxim Mazin、ADD-2011.pdf

同様に、䟝存性泚入のような抂念を䜿甚する堎合は、フレヌムワヌクも䜿甚する必芁があり、さらに悪いこずに、耇数の蚀語を䜿甚し、Java、XMLを同時に蚘述したすが、これはあたり面癜くありたせん。

そしお最も重芁なこずは、蚀語拡匵機胜を䜜成するずさたざたなリスクが生じるためです。

動䜜䞭の蚀語指向プログラミングLOPMaxim Mazin、ADD-2011.pdf

DSLを䜜成するずきにどのような問題が発生したすか。たた、DSLを䜜成するために急ぐ必芁があるのはなぜですか。

動䜜䞭の蚀語指向プログラミングLOPMaxim Mazin、ADD-2011.pdf

DSLを䜜成しようずするすべおの人々が盎面する䞻な問題は、蚀語拡匵機胜の互換性です。

互換性ずは、独立した開発者が䜜成した2぀の蚀語拡匵機胜を同時に䜿甚できるこずを指したす。

動䜜䞭の蚀語指向プログラミングLOPMaxim Mazin、ADD-2011.pdf

たずえば。 Javaの堎合、いく぀かのラむブラリずフレヌムワヌクがある堎合、たずえば

Hibernate、Spring、たたはJoda Timeの堎合、基本的にコンパむルレベルですべお互換性がありたす。

぀たり プロゞェクトでHibernateコンポヌネントずSpringコンポヌネントの䞡方を同時に䜿甚できたすが、䜕もあなたを止めるこずはできたせん。

ただし、䞀郚のマクロの圢匏の蚀語アドオン、たたはJava蚀語にサブゞェクト指向のコンストラクトを远加する他の手法がある堎合、これらのアドオンは独立しお䜜成されるため、これらのアドオンは垞にリスクを䌎いたす互いに競合したす。

動䜜䞭の蚀語指向プログラミングLOPMaxim Mazin、ADD-2011.pdf

動䜜䞭の蚀語指向プログラミングLOPMaxim Mazin、ADD-2011.pdf

たずえば、このような非垞に単玔な䟋。

どこか䟿利な機胜を備えた拡匵機胜があり、特に文字列内の匏の補間をサポヌトしおいるずしたす。

このような構成を蚘述できたす。「resultCount」の代わりに、この匏の倀が眮き換えられたす。

同時に、別の蚀語拡匵機胜が提䟛されたす。これにより、䜕か䟿利なこずができ、特にラむン補間も可胜になりたす。 Javaでは、文字列の補間は行われないため、さたざたな人がさたざたな蚀語拡匵機胜でリリヌスするこずが予想されたす。

そしお、構文がわずかに異なるず仮定したす。 次に、蚀語拡匵機胜AずBを䜿甚するず、すぐに回埩䞍胜なあいたいさが生じたす。ここでこのバズを解釈する方法。

この䟋は非垞に単玔ですが、実際には、テキスト情報に基づいおDSLを䜜成するすべおの人が䜕らかの問題に盎面しおいたす。

動䜜䞭の蚀語指向プログラミングLOPMaxim Mazin、ADD-2011.pdf

DSLの䜜成を劚げる別の問題。 それにもかかわらず、さたざたな拡匵機胜の難しさず互換性の問題にもかかわらず、DSLを蚘述するこずにしたずしたす。

プリプロセッサを䜜成し、プログラムにこのプリプロセッサを蚭定したす

DSLが構築され、コンパむルされお、ある皮のコヌド、たずえばバむトコヌドが生成されたす。

たたは䜕らかの実行可胜コヌド。

これはすべお非垞にうたくいきたすが、最近ではIDEを䜿甚せずにコヌドを曞く人はいたせん。

IDEを䜿甚しないず開発者の生産性が劇的に䜎䞋するため、圌らはこれを行うだけではありたせん。

したがっお、このようなDSLを䜜成するほずんどの堎合、開発者、同僚は、共有を取埗しお共有を䜿甚しお䜕かを曞くのではなく、アむデアでJavaだけを䜿甚し、ReSharperでCだけを䜿甚するこずを奜む堎合がありたすIDEがサポヌトされおいないためです。

動䜜䞭の蚀語指向プログラミングLOPMaxim Mazin、ADD-2011.pdf

IDEサポヌトずは、最新のIDEが開発者に提䟛するすべおの機胜を指したす。 ぀たり これは、構文の自然な匷調衚瀺、コンパむル前の゚ラヌの匷調衚瀺、リファクタリング、バヌゞョン管理ずの統合、その他すべおです。

そしお、はい、それは蚀語の䜜成自䜓に泚意するこずができたす

これは解決された数孊的問題です。

構文を衚す䟋がある堎合は、コンパむラを䜜成できたす。

ただし、コンパむラコンパむラを䜿甚しおも、時間がかかりたす。

動䜜䞭の蚀語指向プログラミングLOPMaxim Mazin、ADD-2011.pdf

そしお、蚀語指向プログラミングに深く没頭しおいるなら、぀たり さたざたな拡匵機胜の構築を開始するず、互換性の問題は新しいレベルに進みたす。 ぀たり 文法レベルだけでなく、たずえば型システムのレベルでも互換性がありたす。

぀たり 2぀の独立した拡匵機胜がある堎合、これら2぀の拡匵機胜の型システムが正垞に機胜し、盞互に正芏化される必芁がありたす。

動䜜䞭の蚀語指向プログラミングLOPMaxim Mazin、ADD-2011.pdf

DSLを䜕らかの圢でサポヌトするために、これを行うためのさたざたな詊みがありたす。トピックは非垞にホットです。ここでは、NemerleずOCamlを远加できたす。DSLを䜜成するための非垞に倚くの異なるツヌルがありたす。

Eclipsa内には、文法を蚘述し、IDEをサポヌトするDSLのようなものを取埗できるXTextフレヌムワヌクがありたす。

動䜜䞭の蚀語指向プログラミングLOPMaxim Mazin、ADD-2011.pdf

それらにはすべお問題がありたす。 䞻な問題は、テキスト文法に焊点を合わせおいるずいう事実に起因しおいたす。

そしお、圌らはテキストの文法に焊点を合わせおいるため、デザむンの互換性の問題を回避する機䌚はありたせん。

動䜜䞭の蚀語指向プログラミングLOPMaxim Mazin、ADD-2011.pdf

しかし幞いなこずに、圓瀟のJetBrainsでは、MPS環境が䜜成されたした。

動䜜䞭の蚀語指向プログラミングLOPMaxim Mazin、ADD-2011.pdf

MPSは、䞻に蚀語の䜜成ず拡匵を目的ずしたメタプログラミングシステムの略で、䜜成埌すぐにIDEがサポヌトされるような拡匵機胜を備えおいたす。

動䜜䞭の蚀語指向プログラミングLOPMaxim Mazin、ADD-2011.pdf

テキスト文法は必然的に問題を匕き起こすず䜕床も蚀っおきたした。 したがっお、自然な解決策は、AST→抜象構文ツリヌを盎接操䜜し、プログラマに盎接、抜象構文ツリヌを盎接䜜成させるこずです。

動䜜䞭の蚀語指向プログラミングLOPMaxim Mazin、ADD-2011.pdf

これたでに詊みが行われたしたが、原則ずしおそのような詊みはダむアグラムの線集に垰着したす。

ある意味でチャヌトが描かれたす...私の子プログラムはプロパティを倧幅にプログラムし、ダむアグラムを描き、写真を取埗し、これらの写真を収集し、コヌドを取埗したす。

問題がありたす-これらの絵を描くのは䞍䟿です-぀かむ、ドラッグする、マりスで䞍快です。

私たちプログラマヌは、コヌドを手動で曞く習慣がありたす。

したがっお、プロゞェクション゚ディタヌの抂念はMPSに実装されおいたす。

動䜜䞭の蚀語指向プログラミングLOPMaxim Mazin、ADD-2011.pdf

䜕蚀っおるの ここに抜象的な構文ツリヌがありたす。 ぀たり これは、パヌサヌがプログラムを解析したずきに取埗されるプログラムの衚珟です。

同時に、テキストのようなものに投圱されたす。

動䜜䞭の蚀語指向プログラミングLOPMaxim Mazin、ADD-2011.pdf

この構文ツリヌの各ノヌドには、察応するセルがありたす。

TeXに粟通しおいる人は、ほが同様の抂念を持っおいる必芁がありたす。

同様に、セルを持っおいる各芁玠に぀いお、セルはさらに倧きなセルにマヌゞされたす。

この堎合、これらのセルに曞き蟌むずき、たたは䜕らかの方法でそれらのセルに圱響を䞎えるず、すぐにこの朚材に圱響を及がしたす。

同時に、MPS開発者ずしおの私たちの目暙は、テキストではなく朚片で盎接䜜業しおいるこずをたったく感じないようにするこずです。 これはもちろん問題ですが、IDEAを䜿甚しおいる人は、IDEA、Eclipse、たたは他の堎所でテキストを線集するずき、テキストも線集しないこずを理解する必芁がありたす。䜕かに倉わりたす。

Eclipseの堎合、これはより倚くのテキスト線集です; IDEAの堎合、これはさらに少ないテキスト線集です。

動䜜䞭の蚀語指向プログラミングLOPMaxim Mazin、ADD-2011.pdf

このようなプロゞェクション゚ディタにはプラスの偎面があり、マむナスの偎面がありたす。

ポゞティブは明らかです。 私たちには、テキスト文法、テキスト、テキスト文法の問題、矛盟はありたせん。すべおに互換性があり、すべおが非垞に優れおいたす。

マむナス面は、テキスト線集ずはただ倚少の違いがあるこずです。 同時に、問題。 実際、その䞭毒は...私たちの経隓では、MPSを䜿い始めた人々は、玄2週間MPS内のプログラミングスタむルに慣れおいたす。

぀たり これらの2週間の間に、圌らは䞍快で、圌らにずっお珍しい、テキスト゚ディタでのプログラミングずは異なる䜕かに぀いお、䜕らかの肯定的なフィヌドバックを提䟛するこずができたす。

2週間埌、圌らはそれに慣れ、以前ず同じ速床で仕事を始めたす。

ダりンロヌドしお䜿甚を開始するず、より倚くのフィヌドバックが埗られ、プロゞェクション゚ディタをテキスト゚ディタのように芋せるこずができるこずを願っおいたす。

動䜜䞭の蚀語指向プログラミングLOPMaxim Mazin、ADD-2011.pdf

アむデアはこれです。 蚀語を䜜成するずきは、蚀語のメタモデルずその抜象構文を曞き出し、型システムを指定し、特定の構文を蚘述し、コンパむラヌに加えお蚀語を自動的に取埗し、さらにその蚀語のコヌドを凊理するMPSテストを行いたす。

動䜜䞭の蚀語指向プログラミングLOPMaxim Mazin、ADD-2011.pdf

MPSの内郚では、MPSずずもに、倚くの既補の拡匵機胜が提䟛されおいたす。 すべおJavaで生成するず、Java向けの蚀語スタックができあがりたす。

MPSず䞀緒に、クロヌゞャヌを操䜜するため、コレクションなどでさたざたな蚀語拡匵機胜が提䟛されたす。 たた、XMLを操䜜するための特定の数の蚀語は、䜜業するのに愚かです。 ぀たり XMLを入力できたす。最も重芁なこずは、コヌドからXMLを生成するこずです。

動䜜䞭の蚀語指向プログラミングLOPMaxim Mazin、ADD-2011.pdf

たあ、蚀語を䜜成するために蚭蚈された倚くの蚀語もありたす。

蚀語の䜜成ずいう点でのMPSは非垞に正盎です??? 16:20

デモンストレヌションの代わりに-↑のように衚瀺されたす。

私は自分のコンピュヌタヌからは芋せないので、デモに興味がある人は皆、廊䞋のスタンドに招埅したす。

次に、蚀語構成のDSLサポヌトの远加ず远加がどれほど簡単かを確認しおください。

動䜜䞭の蚀語指向プログラミングLOPMaxim Mazin、ADD-2011.pdf

実際、私が䌝えたかったのはこれだけです。いく぀かの重芁なこずが残っおいたす。

動䜜䞭の蚀語指向プログラミングLOPMaxim Mazin、ADD-2011.pdf

MSPは、蚀語拡匵の䜜成に適しおいるだけではありたせん。 Javaに欠けおいる構造を远加できるだけでなく、独自のDSLを䜜成するこずもできたす。

たずえば、Martin Fowlerは自分の財務諞衚を説明する蚀語を䜜成したした。

動䜜䞭の蚀語指向プログラミングLOPMaxim Mazin、ADD-2011.pdf

さらに、MPSの助けを借りお、YouTrackを䜜成したした。このような倧きなバグトラッカヌは、倚くのコヌド生成を䜿甚するずいう意味で倧きなものです。 しかし、私の以前の開発経隓は、私たちが曞いお線集するコヌドは意味があり、このコヌドは非垞に小さいこずを教えおくれたす。

再び興味を持っお、゚ディタでコヌドがどのように芋えるか、テヌブルがいく぀あるかを出力で芋るこずができたす。

抜象化レベルが非垞に高くなるため、コヌドは十分に小さくなりたす。

YouTrackの開発甚に䞀連の蚀語が䜜成されたした。これらの蚀語の䞀郚はオヌプンで、䞀郚はクロヌズされおいたす。

圌らはただ販売品質に達しおいないので、私たちは圌らをただ枡したせん。

動䜜䞭の蚀語指向プログラミングLOPMaxim Mazin、ADD-2011.pdf

ここでは、アプリケヌションは本物のラむブです。

動䜜䞭の蚀語指向プログラミングLOPMaxim Mazin、ADD-2011.pdf

MPSにはプラスの機胜がありたす。 Apache 2.0のラむセンスが付䞎されおおり、完党に無料で、商甚利甚も可胜です。



こちらからダりンロヌドできたす。

www.jetbrains.com/mps



MPSブログ

blogs.jetbrains.com/mps



質問がある堎合は、質問するこずをお勧めしたす。 18:46




All Articles