Upgrade to Pro — share decks privately, control downloads, hide ads and more …

組込みに使うプログラミング言語について語ろう! Elixir (エリクサー) 編

組込みに使うプログラミング言語について語ろう! Elixir (エリクサー) 編

* 情報量爆発を迎えたのに計算能力が追いつかない問題をElixirは解決する
* イミュータブル性により並列プログラミングの実行効率が良くなる
* Elixirは「データ変換」パラダイムで記述することでイミュータブル性を生かして大きな並列性を得られる
* イミュータブル性によりGCレスの単純で安全なメモリ管理を実現できる
* イミュータブル性があっても,map構造でグラフ構造のような循環参照を実現できる
* バイナリをパターンマッチで気持ちよくデコードできる
* デバイスに対するI/O操作は,それを1つのプロセスに集約することで排他制御を大幅に減らせる
* I/O操作は現状ではNIFで実現し,現在,インラインアセンブリコードを記述できる仕組みを研究中である
* メモリ保護を徹底する仕組みを研究中である
* 現状ではミリ秒オーダーのソフトリアルタイムが実現できるかどうか,現在,マイクロ秒オーダーのハードリアルタイム/ソフトリアルタイムの実現を研究中
* コード最適化は現状はまだまだ,Hastega 改め Pelemay で SIMD 並列実現,今後も研究を継続
* Elixirから現状でもKerasやOpenCVを並列駆動でき,さらにElixirネイティブなAI/ML,画像処理,3D処理ライブラリを研究開発中

Susumu Yamazaki (ZACKY)

September 05, 2019
Tweet

More Decks by Susumu Yamazaki (ZACKY)

Other Decks in Programming

Transcript

  1. ࣗݾ঺հ w ๺۝भࢢཱେֶࠃࡍ؀ڥ޻ֶ෦
 ।ڭत w New!φοδࣾձ࣮૷ݚڀηϯλʔ
 ηϯλʔ௕ w New!ֶੜɾब৬ࢧԉ୲౰ w

    1FSTPOBM7JTJPO$P$SFBUPS w ,,4)J'5 w &MJYJSਪ͠GVLVPLBFY)BTUFHB ;&". w ٕज़૬ஊɼڞಉݚڀґཔɼਐ࿏૬ஊɼ
 ద৬਍அͳͲɼਵ࣌ड෇·͢   ˜4VTVNV:BNB[BLJ
  2. ͔ΘΓʹίΞ਺͕૿Ճ w ೥Ҏ߱ͷϓϩηοαͷਐԽ w ºΫϩοΫप೾਺ w ˓ίΞ਺   ˜4VTVNV:BNB[BLJ

    *OUFM$PSF
 &YUSFNF9  $MPDL ()[ PG$PSFT  *OUFM$PSFJ
 9&  $MPDL ()[ PG$PSFT 
  3. ࠓޙͷ൒ಋମτϨϯυ w ϝϞϦͷߴ଎Խ͕ϓϩηοαͷߴ଎Խʹ௥͍͍͍ͭͯͳ͍
 1SPDFTTPSTQFFE.FNPSZ4QFFE w ίΞ਺͸ࠓޙ΋૿େ͠ଓ͚ͯɼ.*.%Ͱ਺ઍίΞ΋ݱ࣮ʹ
 /VNCFSPGDPSFTXJMMHSPXBOESFBDITPNFUIPVTBOET w ൒ಋମϓϩηεඍࡉԽ͸ݶքΛܴ͑ͭͭ͋Δ w

    ଞͷ֤छूੵٕज़ʹΑΓճ࿏ن໛͸౰෼૿େͷ༨஍͕͋Δ w ճ࿏௕͕ࠓ·ͰҎ্ʹ௕͘ͳΔ w ࠓ·ͰҎ্ʹϝϞϦΞΫηεͱޫ଎͕཯଎ʹͳΔ
 *HVFTTBMJNJUPGTQFFEXJMMCFNFNPSZBDDFTTBOEUIFTQFFEPGPGMJHIU w ڞ༗ϝϞϦিಥɼϑΥϯɾϊΠϚϯɾϘτϧωοΫ w ճ࿏શମͰΫϩοΫΛಉظͤ͞Δ͜ͱ͕ෆՄೳʹ w ڞ༗ܕΞʔΩςΫνϟΑΓ΋෼ࢄܕΞʔΩςΫνϟ༏Ґ
 $PNQVUFSBSDIJUFDUVSFXJMMCFSBUIFSEJTUSJCVUFEUIBOTIBSFE 11 ˜4VTVNV:BNB[BLJ
  4. ,JMPDPSF w .*.%ํࣜίΞ DPSFT  w ϝϞϦϞδϡʔϧ NFNPSZ NPEVMFT 

    w ONϓϩηεϧʔϧ QSPDFTTSVMF  w ࠷େ()[ 7  NBYJNVN  w 7࣌()[N8
 Q+໋ྩ MPXFOFSHZ  w *OUFMJ΍/7*%*"(16ͱൺ΂ɼ 7࣌εϧʔϓοτഒҎ্ɼ
 ΤωϧΪʔޮ཰ഒҎ্   ˜4VTVNV:BNB[BLJ B. Bohnenstiehl et al., "KiloCore: A 32-nm 1000-Processor Computational Array," in IEEE Journal of Solid-State Circuits, vol. 52, no. 4, pp. 891-902, April 2017.
  5. 5IF$FSFCSBT8BGFS4DBMF&OHJOF 84& w ΢ΣϋʔαΠζͷνοϓ w ஹݸͷτϥϯδελ਺ w ล͕NN w (#ͷΦϯνοϓϝϞϦ

    POUJQNFNPSJFT  w ສίΞ DPSFT  w ফඅిྗL8   ˜4VTVNV:BNB[BLJ © 2019 Cerebras systems.
  6. 4IBSFE%BUB $PSF #1 $PSF2 3.14 →1.5 ഁյతߋ৽͕ϘτϧωοΫ w ͋ΔίΞ͕ڞ༗σʔλΛ
 ഁյతߋ৽ͨ͠৔߹

    w ଞͷίΞʹ௨஌ͯ͠
 ॲཧΛࢭΊΔඞཁ͕͋Δ w ଎౓௿Լʹͭͳ͕Δ w ίΞ਺͕૿͑Ε͹૿͑Δ΄Ͳ
 ਂࠁͳӨڹΛ΋ͨΒ͢   ˜4VTVNV:BNB[BLJ 6QEBUF /PUJGZ 4UPQ1SPDFTTJOH
  7. 4IBSFE%BUB $PSF #1 $PSF2 3.14 &MJYJS͸શ͕ͯΠϛϡʔλϒϧͰ͋Δ w &MJYJSͰ͸σʔλͷഁյతߋ৽ ͕ൃੜ͢Δ͜ͱ͸ͳ͍ w

    ଞͷίΞͷॲཧΛࢭΊͳͯ͘ ྑ͍ w ίΞ਺͕૿͑ͯ΋ॲཧೳྗΛ ҡ࣋Ͱ͖Δ ‎ฒྻੑʹ༏ΕΔ   ˜4VTVNV:BNB[BLJ %PO`U
 6QEBUF %PO`UOFFEUP
 TUPQQSPDFTTJOH
  8. The Elixir Zen Style • Zen is the essential beauty.


    ષ͸ຊ࣭ඒͰ͋Δ • The essential of programming is data transformation
 ϓϩάϥϛϯάͷຊ࣭͸σʔλม׵Ͱ͋Δ • The Elixir Zen style is a programming style that pursues data-transformation-based programming.
 Elixir Zen ελΠϧ͸σʔλม׵ϓϩάϥϛϯάΛ௥ٻ͢ΔελΠϧͰ͋Δ list = 1..1_000_000 |> Enum.to_list list 
 |> Enum.map(&foo(&1))
 |> Enum.map(&bar(&1))
  9. &MJYJS;FOελΠϧ&OVNNBQʴύΠϓϥΠϯ   ˜4VTVNV:BNB[BLJ @@ c&OVNNBQ .GPP  
 c&OVNNBQ

    .CBS  
 
 EFGNPEVMF.EP EFGGPP O EPO  EFGCBS O EPO  FOE w ӈͷίʔυྫ w ͔Β  ·ͰͷϦετʹ w ֤ཁૉʹGPPΛద༻ Y  w ֤ཁૉʹCBSΛద༻   w ͨ݁͠ՌΛಘΔ w ഁյతߋ৽ͳ͠Ͱ
 σʔλΛ্͔Βॱʹม׵͍ͯ͘͠
 ʮσʔλม׵ʯύϥμΠϜ
 %BUBUSBOTGPSNBUJPOQBSBEJHN w ֤ΠςϨʔγϣϯ͸ґଘؔ܎͕ͳ͍
 ˠ࠷େ  ฒྻͰ࣮ߦͰ͖Δ
 *UDBOCFFYFDVUFEJO   QBSBMMFMJTNT
  10. Πϛϡʔλϒϧͷར఺ w ಺෦తʹίϐʔΛ࡞ͬͯ΋໰୊ͳ͍ɹɹ/PQSPCMFNUPEVQMJDBUFPCKFDUT ‎ίΞؒͰഉଞ੍ޚΛऔΒͳ͍͍ͯ͘ɹ/POFFEUPTZODISPOJ[FUIFN w ॥؀ࢀরΛ໌ࣔతʹ࡞Εͳ͍ɹ/PDJSDVMBUFESFGFSFODFT ‎ΨʔϕδίϨΫγϣϯ ($ Λແ͘͠ɼϝϞϦ؅ཧΛ୯७Խߴ଎ԽͰ͖Δ
 ʮ͜Ε͔Β࣮ݱͤ͞Δ͜ͱʯ

    
 8FXJMMCFBCMFUPSFBMJ[FTJNQMFF⒏DJFOUNFNPSZNBOBHFNFOUXP($ w 3VTUͰ͸ϛϡʔλϒϧͱࠞࡏ͍ͯ͠Δ
 ˠॴ༗ݖҠৡͷΑ͏ͳෳࡶͳϓϩάϥϛϯά͕ඞཁ w &MJYJSͰ͸͖ͬͱ΋ͬͱ୯७ԽͰ͖Δʂ
 ʮ͜Ε͔Β࣮ݱͤ͞Δ͜ͱʯ 
 .BZCFTJNQMFSUIBO3VTU 27 ˜4VTVNV:BNB[BLJ
  11. A B D E F C G H &MJYJSͰάϥϑߏ଄Λද͢ํ๏ w

    &MJYJSͰάϥϑߏ଄͸NBQσʔλ ߏ଄Ͱද͢
 ϋογϡදɼ࿈૝഑ྻͷΑ͏ͳ جຊσʔλߏ଄ 
 *O&MJYJS HSBQIEBUB TUSVDUVSFTDBOCFEFTDSJCFE VTJOHNBQ w -*41ͷΑ͏ͳશͯDPOTηϧͰ ද͢Α͏ͳ୯७͞Λࣺͯͯɼ࣮ རΛͱΔํ਑
 *U`TCBTFEPONPSFQSBDUJDBM QPMJDZUIBO-*41   ˜4VTVNV:BNB[BLJ %{ a: #MapSet<[:b, :d]>, b: #MapSet<[:a, :c, :d]>, c: #MapSet<[:b, :e]>, d: #MapSet<[:a, :b, :e, :f, :g]>, e: #MapSet<[:c, :d, :f, :h]>, f: #MapSet<[:d, :e, :g]>, g: #MapSet<[:d, :f, :h]>, h: #MapSet<[:e, :g]> }
  12. &MJYJS;FOελΠϧόΠφϦʴύλʔϯϚον w όΠφϦσίʔμΛ࡞Δ৔߹ w $16ΤϛϡϨʔλ w όΠτίʔυΠϯλϓϦλ w &-'όΠφϦͷμϯϓ w

    .*%*γʔέϯαͳͲ w ͋ΔϏοτྻʹ߹க͢Δ͔Ͳ͏͔Ͱ ৚݅෼ذ͢Δϓϩάϥϛϯά w &MJYJSͰ͸όΠφϦʴύλʔϯϚο νͰඒ͘͠ॻ͚Δʂ   ˜4VTVNV:BNB[BLJ defmodule Midi do def decode(<<>>), do: [] def decode(<< 8::size(4), channel::bitstring-size(4), velocity::bitstring-size(8), rest::bitstring() >>) do [{:note_off, channel, velocity}] ++ decode(rest) end def decode(<< 9::size(4), channel::bitstring-size(4), velocity::bitstring-size(8), rest::bitstring() >>) do [{:note_on, channel, velocity}] ++ decode(rest) end … end
  13. &MJYJS;FOελΠϧσόΠευϥΠόϓϩηε w ैདྷͩͱ*0ૢ࡞ʹ͸ಉظɾഉଞ੍ޚ͕ඞཁ͕ͩ൥ࡶ w &MJYJSͰ͸͋ΔσόΠεͷ*0Λૢ࡞͢ΔϓϩηεΛͭʹू໿
 ݴΘ͹σόΠευϥΠό  w ଞͷϓϩηε͔Β*0Λૢ࡞͍ͨ࣌͠ʹ͸ϓϩηεؒ௨৴ͰϝοηʔδΛૹΔ w

    ϝοηʔδ͸σόΠευϥΠόʹೖΔલʹ௚ྻԽ͞ΕΔͷͰɼσόΠευϥ ΠόͷதͰಉظɾഉଞ੍ޚΛ͠ͳ͍͍ͯ͘ʂ w ͜ͷ࢓૊ΈΛந৅Խͨ͠Ϟσϧ͕ΞΫλʔϞσϧ "DUPSNPEFM  w ΞΫλʔϞσϧʹΑΓ*0ʹର͢Δഉଞ੍ޚΛେ෯ʹ؆ུԽͰ͖Δ
 5IFBDUPSNPEFMDBOTJNQMJGZTZODISPOJ[BUJPOPG*0 33 ˜4VTVNV:BNB[BLJ
  14. &MJYJSͰͷ*0ͷѻ͍ w ݱঢ়Ͱ͸*0Λ௚઀ૢ࡞͢ΔϓϩάϥϜ͸ɼ/*' /BUJWF* 'VODUJPO Ͱ֎෦$ݴޠϓϩάϥϜΛݺͼग़͢͜ͱͰ࣮ݱ
 $VSSFOUMZ QSPHSBNUPPQFSBUF*0TIPVMEEFTDSJCFEJO /*'T w

    &MJYJSʹΠϯϥΠϯΞηϯϒϦίʔυΛهड़Ͱ͖Δ࢓૊ΈΛݚڀத
 8F`SFSFTFBSDIJOHBOEEFWFMPQJOHOPXBNFDIBOJTNUPEFTDSJCF JOMJOFBTTFNCMZDPEFJO&MJYJS
 ʮ͜Ε͔Β࣮ݱͤ͞Δ͜ͱʯ  w ͜ΕʹΑΓɼίϯύΠϥ͕কདྷඋ͑Δߴ౓ͳ࠷దԽͷԸܙΛड͚ΒΕΔ
 5IVT JUXJMMCFBCMFUPCFPQUJNJ[FEXFMM
 ʮ͜Ε͔Β࣮ݱͤ͞Δ͜ͱʯ 34 ˜4VTVNV:BNB[BLJ
  15. &MJYJSͷϝϞϦอޢ w &MJYJS͸ϓϩάϥϛϯάݴޠͷϨϕϧͰ࣮ݱ͞ΕͨΠϛϡʔλϒϧੑʹΑΓɼϝϞϦഁյΛى͜͞ͳ ͍Α͏ʹ͍ͯ͠Δ
 *NNVUBCMFJOUIFQSPHSBNNJOHMBOHVBHFMFWFM w ͨͩ͠ݱঢ়Ͱ͸ɼ͋͘·ͰϓϩάϥϛϯάݴޠϨϕϧͳͷͰɼ/*'Λ༻͍ΔͱϝϞϦഁյ͠Α͏ͱࢥ ͑͹Ͱ͖ͯ͠·͏
 )PXFWFS /*'TDBOWJPMBUFNFNPSZDPOTJTUFODZ

    OPX w ͦ͜ͰɼݚڀதͷΠϯϥΠϯΞηϯϒϦίʔυهड़ػߏͰ͸ɼܕݕࠪʹΑΓϝϞϦഁյ͠ͳ͍͜ͱ Λอূ͢Δ࢓૊ΈΛಋೖ͢Δ
 5IVT XF`SFSFTFBSDIJOHBOEEFWFMPQJOHUZQFDIFDLJOHJOUIFJOMJOFBTTFNCMZNFDIBOJTNUP QSPIJCJUTVDIBWJPMBUJPO
 ʮ͜Ε͔Β࣮ݱͤ͞Δ͜ͱʯ  w ͞Βʹɼϓϩηοαͷ..6 ϝϞϦ؅ཧϢχοτ ΍.16 ϝϞϦอޢϢχοτ Λ༻͍ͯɼΠϛϡʔ λϒϧੑΛอূ͢Δ࢓૊ΈΛಋೖ͢Δ
 'VSUIFSNPSF XF`SFBMTPEPJOHTPUPFOTVSFJNNVUBCMFOFTTVTJOH..6PS.16JO$16
 ʮ͜Ε͔Β࣮ݱͤ͞Δ͜ͱʯ 36 ˜4VTVNV:BNB[BLJ
  16. &MJYJSͷϦΞϧλΠϜੑ w ݱঢ়Ͱ͸ϛϦඵ୯ҐҎ্ͷιϑτϦΞϧλΠϜΛ࣮ݱͰ͖Δ͔Ͳ͏͔
 $VSSFOUMZ TPGUSFBMUJNFJONJMMJTFDPSEFSNBZCFBCMFUPSFBMJ[FE w ϓϩηεʹஈ֊ NBY IJHI OPSNBM

    MPX ͷ༏ઌॱҐΛఆٛͰ͖Δ
 ઈର༏ઌॱҐ NBY IJHI ͱ૬ର༏ઌॱҐ OPSNBM MPX ͷࠞࡏ
 Χʔωϧϓϩηεͷ༏ઌॱҐͱ͸ผ
 1SPDFTTFTDBOCFQSJPSJUJ[FE w ͔͠͠ɼϝοηʔδʹ͍ͭͯ͸༏ઌॱҐ͕͍͍ͭͯͳ͍ ͓ͦΒ͘༏ઌ౓ٯస໰୊͕ى͜Δ 
 )PXFWFS NFTTBHFTJTO`UQSJPSJUJ[FE w ϝοηʔδΛؚΊɼϚΠΫϩඵ୯ҐͰɼҰ෦ϋʔυϦΞϧλΠϜɼશମͱͯ͠ιϑτϦΞϧλΠϜΛ࣮ݱ͍ͨ͠
 8F`SFSFTFBSDIJOHBOEEFWFMPQJOHIBSEBOEPSTPGUSFBMUJNFJONJDSPTFDPSEFSJODMVEJOHNFTTBHFT
 ʮ͜Ε͔Β࣮ݱͤ͞Δ͜ͱʯ  w ͦͷݚڀͰ&MJYJSϕʔεͷϦΞϧλΠϜΧʔωϧ΋ߏங͢Δ༧ఆ
 'VSUIFSNPSF XF`SFBMTPEPJOHTPUPCVJMESFBMUJNFLFSOFMJO&MJYJS
 ʮ͜Ε͔Β࣮ݱͤ͞Δ͜ͱʯ 38 ˜4VTVNV:BNB[BLJ
  17. &MJYJSͷίʔυ࠷దԽ w ݱঢ়ɼ͋·Γίʔυ࠷దԽ͞Ε͍ͯͳ͍
 $VSSFOUMZ OPUFOPVHIUPPQUJNJ[FCVUTBGF w &MJYJS051ʹͳ͍ͬͯͩͿվળ͞Εͨ w ͦΕͰ΋4*.%໋ྩͳͲ͸ར༻͍ͯ͠ͳ͍ w

    )BTUFHB ϔΠεΨ վΊ1FMFNBZ ϖϨϝΠ Ͱ͸4*.%໋ྩΛੜ੒͢Δߴ଎Խɾ ฒྻԽΛ࣮ࢪ͢Δ
 1FMFNBZXJMMHFOFSBUFOBUJWFDPEFJODMVEJOH4*.%JOTUSVDUJPOT w ࠓޙ΋ݱঢ়ͷίʔυͷڍಈΛۃྗߟ্ྀͨ͠ͰɼΨϯΨϯίʔυ࠷దԽΛਤΔݚڀ Λଓ͚Δ
 8FDPOUJOVFUPSFTFBSDIBOEEFWFMPQDPEFPQUJNJ[BUJPO NPSFBOENPSF
 ʮ͜Ε͔Β࣮ݱͤ͞Δ͜ͱʯ 40 ˜4VTVNV:BNB[BLJ
  18. &MJYJSͰ"*.-ɾը૾ॲཧɾ%ॲཧ w 1PSU ֎෦Χʔωϧϓϩηεىಈ Λ༻͍Δ͜ͱͰ,FSBT΍0QFO$7ͳͲΛฒྻʹ࣮ߦ͢Δ ͜ͱ͕Մೳ
 4VDIFYUFSOBMQSPHSBNTBT,FSBTBOE0QFO$7DBOCFFYFDVUFEVTJOH1PSU JOQBSBMMFM w "OOFY

    %FFQ1JQFͷΑ͏ͳ&MJYJSσΟʔϓϥʔχϯάϥΠϒϥϦ͕ଘࡏ͢Δ
 5IFSFBSFTVDIEFFQMFBSOJOHMJCSBSJFTJO&MJYJSBT"OOFYBOE%FFQ1JQF w &MJYJS֤छ"*.-ɾը૾ॲཧɾ%ॲཧͳͲͷϥΠϒϥϦΛݚڀ։ൃத
 ʮ͜Ε͔Β࣮ݱͤ͞Δ͜ͱʯ 
 8F`SFSFTFBSDIJOHBOEEFWFMPQJOHTPNF"*.- JNBHFQSPDFTTJOHBOE%QSPDFTTJOH MJCSBSJFTJO&MJYJS w )BTUFHBվΊ1FMFNBZΛ"OOFY %FFQ1JQF΍ݚڀ։ൃதͷϥΠϒϥϦͳͲ͔Βར༻Ͱ͖Δ Α͏ʹ͢Δ
 8FNBLF1FMFNBZBWBJMBCMFUPVTFGSPN"OOFY %FFQ1JQFPSUIFMJCSBSJFT
 ʮ͜Ε͔Β࣮ݱͤ͞Δ͜ͱʯ 42 ˜4VTVNV:BNB[BLJ
  19. ·ͱΊ  w ৘ใྔരൃΛܴ͑ͨͷʹܭࢉೳྗ͕௥͍͔ͭͳ͍໰୊Λ&MJYJS͸ղܾ͢Δ w ΠϛϡʔλϒϧੑʹΑΓฒྻϓϩάϥϛϯάͷ࣮ߦޮ཰͕ྑ͘ͳΔ w &MJYJS͸ʮσʔλม׵ʯύϥμΠϜͰهड़͢Δ͜ͱͰΠϛϡʔλϒϧੑΛੜ ͔ͯ͠େ͖ͳฒྻੑΛಘΒΕΔ w

    ΠϛϡʔλϒϧੑʹΑΓ($Ϩεͷ୯७Ͱ҆શͳϝϞϦ؅ཧΛ࣮ݱͰ͖Δ w Πϛϡʔλϒϧੑ͕͋ͬͯ΋ɼNBQߏ଄Ͱάϥϑߏ଄ͷΑ͏ͳ॥؀ࢀরΛ ࣮ݱͰ͖Δ w όΠφϦΛύλʔϯϚονͰؾ࣋ͪΑ͘σίʔυͰ͖Δ 44 ˜4VTVNV:BNB[BLJ
  20. ·ͱΊ  w σόΠεʹର͢Δ*0ૢ࡞͸ɼͦΕΛͭͷϓϩηεʹू໿͢Δ͜ͱͰഉଞ੍ޚΛେ෯ʹݮ ΒͤΔ w *0ૢ࡞͸ݱঢ়Ͱ͸/*'Ͱ࣮ݱ͠ɼݱࡏɼΠϯϥΠϯΞηϯϒϦίʔυΛهड़Ͱ͖Δ࢓૊Έ ΛݚڀதͰ͋Δ w ϝϞϦอޢΛపఈ͢Δ࢓૊ΈΛݚڀதͰ͋Δ

    w ݱঢ়Ͱ͸ϛϦඵΦʔμʔͷιϑτϦΞϧλΠϜ͕࣮ݱͰ͖Δ͔Ͳ͏͔ɼݱࡏɼϚΠΫϩඵ ΦʔμʔͷϋʔυϦΞϧλΠϜʗιϑτϦΞϧλΠϜͷ࣮ݱΛݚڀத w ίʔυ࠷దԽ͸ݱঢ়͸·ͩ·ͩɼ)BTUFHBվΊ1FMFNBZͰ4*.%ฒྻ࣮ݱɼࠓޙ΋ݚڀ Λܧଓ w &MJYJS͔Βݱঢ়Ͱ΋,FSBT΍0QFO$7ΛฒྻۦಈͰ͖ɼ͞Βʹ&MJYJSωΠςΟϒͳ"*.-ɼը ૾ॲཧɼ%ॲཧϥΠϒϥϦΛݚڀ։ൃத 45 ˜4VTVNV:BNB[BLJ