「コンパイラ・スクリプトエンジン」相談室16

2014/07/20(日) 11:16:19.37ID:p6eMVAxc
プログラミング言語処理系の開発に興味のある人達のスレッドです。
字句解析・構文解析から,データフロー解析,ループ並列化,データ分散,SSA変換,
CPS変換,レジスタ割付,命令スケジューリング,ソフトウェアパイプライン,
SIMD命令生成,VLIW向けクラスタリング,スクラッチメモリ向け最適化,リンク時最適化,
JIT,動的バイナリ変換等の各種最適化,それにVM,GC,低消費電力化などなど。
意味論に関する話題も歓迎です。

Wikiのまとめページ
http://www6.atwiki.jp/compilerandscriptengine/
2014/12/11(木) 21:40:57.95ID:KrH9mSC/
まともにやる気あるなら、その中のどれでも一つ真剣に取り組めばいいよ。

迷うのはそれからでも遅くない
2014/12/11(木) 21:42:20.07ID:tbxqmm74
>>170
麻宮騎亜がアップを始めたようです。
2014/12/11(木) 21:57:20.15ID:JvQXLAia
CPUの創り方が萌えキャラで出る時代だから
コンパイラ版が出る日も近いな
2014/12/12(金) 03:52:20.71ID:yYnp70gr
疲れた時は白と黒のとびらとか。読み物だけど
2014/12/13(土) 11:59:00.15ID:KEKavmkB
>>168
共著じゃなくてAntlrの作者が書いた本の監訳だよ
2014/12/13(土) 19:31:14.67ID:LmsGKyNP
正直ドラゴンブックって内容はともかく説明はとても優しいよね
洋書はIT系に限らず懇切丁寧な事が多いと思う
2014/12/13(土) 22:13:39.97ID:aWFoLZL3
虎も仲間に入れてやってください
サンプルがアレだが
2015/01/19(月) 11:19:23.48ID:cYd/ZsDZ
kmoriさん亡くなったって。
179デフォルトの名無しさん
垢版 |
2015/01/19(月) 11:34:19.54ID:CzsUjspG
yaccの一実装書いてた人か。南無

https://web.archive.org/web/20080206191946/http://d.hatena.ne.jp/kmori58/20060702/p3
2015/01/19(月) 15:30:26.84ID:cYd/ZsDZ
kmyaccも有名だが、「LSI-Cの作者の一人」だった。
2015/01/20(火) 21:04:04.33ID:wHr1vYS1
熊ヤックと読んでいた
182片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2015/02/18(水) 16:40:51.07ID:9VF3MRJc
C++11の正規表現でCのスキャナーをスマートに書きたい。
しかし、コメントの扱いがややこしく、また、行番号の情報を取得する必要がある。
一行ごとに読み込むべきか、従来どおりトークンに切り分けて読み込むべきか。
全部をいっぺんに読み込んで'\n'でsplitする方法は実行時のメモリーと時間がかかると思う。
どういう戦略にすべきか?
2015/02/18(水) 17:03:37.74ID:9VF3MRJc
改行に特別なトークンを割り当てて、すべてのトークンを読み
込んだ後でトークンに行番号をつけてから改行のトークンを取り除くという
方法についてはどう思いますか?
2015/02/18(水) 21:19:15.31ID:po3oOzQK
Cってマクロとかインクルードとか有るん?
2015/02/19(木) 01:08:43.02ID:XXveEoOV
マクロやインクルードは、プリプロセッサーがやってくれるよ
2015/02/19(木) 12:19:19.08ID:b9Ke1XGw
プリプロセッサーの展開後の行番号って要るのかね?
2015/02/19(木) 19:51:00.22ID:rp3PUwqb
無かったらエラー表示するとき不便だろ
2015/02/19(木) 21:27:05.57ID:wg16DBik
展開後の行番号の方がいらなくね?

プリプロセッサ文てコンパイラ側でも処理するよね?
#line とか
2015/02/19(木) 21:31:56.28ID:uOq48O3O
コメントはプリプロセサで置き換えたらいかんのか
2015/02/21(土) 01:08:42.33ID:XnZFjwve
SmalltalkのVM上にJavaVMを構築してんだけど、
VMの話もここで良いんだよね。
191デフォルトの名無しさん
垢版 |
2015/02/21(土) 12:59:06.48ID:eVOI8zE3
OK
2015/02/21(土) 23:58:08.89ID:bst4VCEg
>>182
Cのスキャナって正規表現だけで表現できるんか?(構文解析しないで良いエディタのhilightingとかは大丈夫だけど)
2015/02/22(日) 01:27:09.68ID:0QFgdJ2i
>>191
了解。

SmalltalkのVM上でDalvik VM用のclassも動かしたいんですが、
いちいちDalvik用のVMまで作るのがメンドイです。
Dalvik用のclass形式からJavaVM用のclass形式に変換するオススメのLibraryを教えて下さい。
Libraryの言語はSmalltalkに書き直しますので何でもいいです。
194デフォルトの名無しさん
垢版 |
2015/02/23(月) 17:30:23.57ID:FikKUZMK
>>192
scannerってlexerの一部。
lexer=scanner+tokenizer
195デフォルトの名無しさん
垢版 |
2015/02/23(月) 17:38:19.44ID:FikKUZMK
>>193
JEBはDalvikのdecompilerだから、コンパイルすればJVMのbytecodeに出来る。
https://www.pnfsoftware.com/
196デフォルトの名無しさん
垢版 |
2015/02/23(月) 17:41:10.47ID:FikKUZMK
javaで書いたDalvikのVM
http://www.eflow.jp/topics/090317.html
2015/02/23(月) 22:14:05.07ID:Fe2dvIpV
C++で完結するって所に惹かれてboost::spiritを試してみたが…、これは死ねる。
2015/02/24(火) 01:43:04.58ID:f8A7qwV2
共通部分式の除去のやり方がわかんねえ
定数伝播、四則演算も含む組み込み関数の畳み込み、使わない変数の除去、
ループ展開等を同じパスでやってるんだけど
共通部分式の除去とそれをやるのに必要な不変式の判定はまた別でやった方がいいのかな
不変式かどうかはループ最適化でも使えそうなんだけど混乱してきた
2015/02/24(火) 08:04:58.95ID:UGr8Bbp/
>>198
ある計算式eについて、eの部分式を互いに参照するエントリーとして再帰的にテーブルに登録する。
登録するときにソートと重複チェックを行えば、テーブルは一意化できる。
テーブルの各エントリーの参照構造は、木構造のノードを成す。
200デフォルトの名無しさん
垢版 |
2015/02/24(火) 11:33:08.23ID:wemgVVUb
>>198
式の属性に関する再帰方程式の近似解をニュートン法のように求めること、
これがデータフロー計算解法の本質と理解できてないんじゃない?
ドラゴンブックのavailable, killedの説明の所読んでみれば?
同じパス内でループしながら収束するまで計算するのよ。
201デフォルトの名無しさん
垢版 |
2015/02/24(火) 11:35:18.85ID:wemgVVUb
ドラゴンブックのどの節か書こうとしたけど本が見つからない...
とりあえず、ここのp.10から。
http://dragonbook.stanford.edu/lecture-notes/Stanford-CS143/20-Optimization.pdf
2015/02/24(火) 17:44:49.00ID:H95vOz7j
>>199
そのテーブルに式を入れるときその式が不変かどうかを判断する部分でわからなくなってくる

>>200
ほとんど読んでないドラゴンブック見たら最適化部分についても書いてるな
これ読むの辛いな
頑張って読んで出直すか
203デフォルトの名無しさん
垢版 |
2015/02/24(火) 17:53:23.22ID:avE+zAm1
多分ちゃんと読んだ方がかえって早い。

共通部分式A,Bがあって、例えばBの方の除去をやると、
Bの到達性がAの到達性にも付与される。
このことは他の属性に影響を及ぼしうる。
よってもう一度計算をしないとより正確な属性を求められない。
以下ループ。
よって収束するまで繰り返すことになる。
2015/02/24(火) 18:04:39.54ID:H95vOz7j
変化がなくなるまで最適化処理を繰り返すのはわかった
2015/02/24(火) 19:26:42.04ID:wUDy2moe
>>197
コンパイル時間がか?
2015/02/24(火) 20:45:40.84ID:UGr8Bbp/
__declspecとか__attribute__などをパースできないと正確な構造体型のサイズ
を求めることができない。しかしattribute周りの文法がメチャクチャやなあ。
2015/03/03(火) 01:05:04.60ID:t6l1EelO
次は"typed value"の扱いだな。定数にも型がある。型付きの値を
扱えなければ、正確な定数値を求めることはできない。
2015/03/03(火) 04:49:45.03ID:ZU1MaIS8
最適化なんてイラナイよね、何処まで処理系に依存する気なんだよw
2015/03/08(日) 14:52:45.39ID:u8r5MR2m
初心者だがHSPって凄いね
自分でHSPみたいなの作ろうとすると途端につまづくw
内部でメッセージハンドルに登録していく言語だと思うんだけど
こんなにwinを感じさせない文法でwinと親和性高く作れるとは
2015/03/08(日) 17:15:18.44ID:8c6PRT7L
ランタイムの機能の量で躓くならともかくあの文法でつまづくなら>>1で概要把握して本読めば
211デフォルトの名無しさん
垢版 |
2015/03/09(月) 14:52:03.75ID:MIZIuI1f
文法とOSに何の関係が?
2015/03/09(月) 16:12:25.65ID:J8WIpDef
いただきジャンガリアンに辛酸をなめさせられたのだろうよ
2015/03/09(月) 17:25:40.74ID:VM1FVYaf
うーん初心者だから言い方わかんないんだけど
コマンドプロンプトのスクリプトってコマンドに従って単に実行していくだけだよね
でもwinだと実行されるのは素直に考えるとメッセージが来たとき
cでウインアプリつくるときはメッセージ毎に処理を書くけど上から順に読むスクリプトは
それはできないわけだからどう整合性取るのかなってことで悩んでた

結局メッセージ毎にリストがあってコマンドを読んだらそのリストに関数ポインタ名で追加、
メッセージ毎に呼ばれる関数はその種別のリストを上から順に実行していく
こんな感じで作ったけどこれでいいのかな
214デフォルトの名無しさん
垢版 |
2015/03/12(木) 21:28:48.21ID:BlO2EFmA
そりゃ文法じゃなくて実行モデルだな。
イベント駆動ってことでしょ。
215デフォルトの名無しさん
垢版 |
2015/04/13(月) 21:09:38.60ID:qtTodoaL
「Cのコンパイラなら何日かかけて作っても良いが、C++は、一人で
作るのは嫌だ。文法をきちんとカバーするのに日数がかかりすぎるから」
と言われたよ。
2015/04/22(水) 02:22:50.19ID:eOWj6Ffd
javaに近い構文の言語をつくろうとしてるんだけど、
ようやくchar配列に変換したソースから関数の外側を構文解析できた。

山括弧<>、文字列リテラル、コメントに気をつけつつ、
なんとか関数の中を無視してクラス・変数・関数の名前や型名を取得して
関数の中身にとりかかるところ。

関数の中身は丸括弧()が難関になりそう。
AAAA bbbb = ((HHHH)cccc.dddd.eeee(ffff.gggg(), jjjj)).iiii();
bbbb.kkkk = -10/(8-3)-9/-3
217デフォルトの名無しさん
垢版 |
2015/04/22(水) 20:33:48.48ID:rBARkljm
>>216
まるで違う言語に見えてしまうのだが。
2015/04/22(水) 21:30:55.14ID:eOWj6Ffd
>>217
最初はクラス名、メンバ変数、メンバ関数を全部調べてからじゃないと
関数の中身に取り掛かれないと思ってた。

でもクラス名・変数名・関数名に区別は不要で、記号をヒントに階層を分解して、
それから型名の存在の有無・整合性を調べるという風にフェーズを分けれそう。

でも()が演算の優先順位、型キャスト、メソッド...どれに使われているのか
区別できるかは不安。for文とかは最初に予約語が入るからやりやすそうだけど。

Person person = ((Factory)group.cache.getFactory(provider.getResource(), url)).create();
person.id = -10/(8-3)-9/-3;
2015/04/22(水) 22:59:19.66ID:LKLiXgla
いまいち分からないけど、識別子の次にあったら関数呼び出しで
それ以外は式とかでいけないの
2015/04/22(水) 23:28:51.38ID:eOWj6Ffd
いけるか分からない。とりあえずやってみるってところ
2015/04/23(木) 08:14:58.39ID:+O6VWDUu
>>219
構文次第
てか、普通識別子に続くカッコを見て初めて関数/メソッドってわかるわけだし
2015/04/27(月) 01:02:40.49ID:RiYFohCl
メソッドの中が上手くいかんというか何から始めたら良いのか分からん
コンパイル速度が遅くなるけど、分解フェーズを何層にも分けて
何度もループで調べていけば良いのかな
2015/04/27(月) 06:59:39.15ID:EFAP6joI
コンパイラの教科書の一冊でも読んで構文解析を勉強してみ
2015/04/27(月) 09:38:16.26ID:ZDDsb7dY
C系のクソみたいな構文ルールをそのまま真似てどうすんの
自作なら作りやすいようにキーワード追加すればいいのよ

キャスト式にキーワード付けなかったのは最大の誤りの一つ
225デフォルトの名無しさん
垢版 |
2015/04/27(月) 09:56:10.90ID:qDIHhHi0
SSA形式からスタックマシンのコード生成の最適化みたいなのに参考になる文献ってないかな?
2015/04/27(月) 14:22:00.53ID:RiYFohCl
>>224
そうだね。HaxeとかFlashからぱくって、C形式のキャストは無くしてみるわ
int i = cast Integer ( 0.005f );
int i = 0.005f as Integer;
227デフォルトの名無しさん
垢版 |
2015/04/28(火) 18:20:14.24ID:PlNb5vya
最終的に何を目指そうかしら

1)LLVMで動かす 
→ 超難しそう

2)Luaのように組み込みスクリプトとして動かす 
→ 重そう。メモリ管理は全部ウィークポインタで良いのかな
(C/C++組み込みならnew&deleteするようなスクリプトでも良さそう)

3)JavaScriptなどに変換 
→ たぶん例外のバックトレースとかを変換するデバッグ環境が必須
228片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2015/05/05(火) 23:02:55.34ID:p1RbtT4Y
コンパイラーの品質保証は、数学で証明する時代だ!!!
Coqと数学でコンパイラーが作れる!!!
http://compcert.inria.fr/compcert-C.html
2015/05/09(土) 18:57:31.49ID:SYpntI8c
バイトコードインタプリタつくっているんだけど
スタックマシンのコンパイラについて
パラメータスタック(データスタック)はヒープ上におくべき?
それともネイティブの領域におくべき?
2015/05/09(土) 19:41:52.28ID:SYpntI8c
>>229
訂正
コンパイラー>仮想機械
2015/05/09(土) 20:41:51.08ID:DhZyBtDK
>>230
ネイティブスタックにデータも置くって事だよね?
データスタックは分けておいた方がイロイロ楽だったので列挙
たしかこんなの

GC使う様な実装の時の仕分け
実行パスがJITでコンパイルコードと非コンパイルVMコードの行ったり来たりするとき
例外のスタックトレース(これもJIT時のアレコレあり)
チープマシンにVM仕込むときアセンブラで書くのが楽しい

最後はちげぇけど
2015/05/09(土) 21:02:43.06ID:SYpntI8c
>>231
自分のVMは典型的なスタックマシンで
パラメータスタック(データスタック)とコールスタックは別です。
そのうちデータスタックをヒープ内におくか
アセンブリでかかれたほうのネイティブの領域におくかってことです。
ネイティブ領域においたほうが実際のアドレスとVM上でのアドレスの変換がないので
速度としては速いのですが
欠点としてバイトコードからスタックを参照することができません
焦点とてしてはそもそもバイトコードからスタックを参照することがあるのかということで、
基本的になければネイティブ領域におこうかとおもっています
これまでつくった経験がないので設計としてどちらがよいかわからずお聞きしました
2015/05/10(日) 09:31:50.02ID:ZQGgJB6p
>>232
> 焦点とてしてはそもそもバイトコードからスタックを参照することがあるのかということで、
バイトコードの設計は終わってるんじゃないのか?
バイトコードの設計終わってりゃ参照の必要があるかどうかはわかってるだろうし、バイトコードの設計終わってないのに VM の構成考えてるならお前が終わってる
2015/05/10(日) 09:50:11.77ID:YKkUWNQO
>>233
その通りわ
出直して来ます
235デフォルトの名無しさん
垢版 |
2015/05/19(火) 18:50:21.34ID:a+aajTcz
番兵の文字は
utf-8でも16でも32でも-1でいいんですか?
2015/06/24(水) 17:14:03.39ID:ZsIPeucp
動的型付けってLLVMだとどうやって実装するんだろ
2015/07/10(金) 19:59:28.32ID:h+kJ9m+3
構文解析+Cに変換して内部でgcc呼んでコンパイルするプログラムはコンパイラって呼んでいいの?
2015/07/10(金) 20:11:15.28ID:tLjH7MQJ
トランスレータじゃねえの
2015/07/11(土) 08:23:11.34ID:SvdcMd32
>>238
変換したCコードを出すならトランスレーターだけどバイナリまで出すならコンパイラーでいいだろ
2015/07/28(火) 03:30:13.81ID:92wk7rzR
果たして文法を仮想化できるか
2015/08/19(水) 08:24:37.58ID:zh/OeKTd
凄いこと発見したんだけれどもΛの記号は上の尖がったところがルートで
下の二つの棒が辺を表しているんだな
242デフォルトの名無しさん
垢版 |
2015/08/19(水) 22:05:03.04ID:caRlC37E
言語非依存の仮想マシンっていうアイデアがいまいち大成功していないように見えるのって
なんか理由があるのかな。
2015/08/19(水) 22:59:51.18ID:7Z0FzJPx
落ちてたllvmスレを立て直した

【最速へ】LowLevelVirtualMachine 2【LLVM】
http://peace.2ch.net/test/read.cgi/tech/1439992758/
2015/08/19(水) 23:17:16.98ID:ynuNSl9L
>>242
めちゃくちゃ成功してまんがな。LLVM,clang知らないの?
2015/08/20(木) 00:06:05.42ID:BI1Ot8hx
>>244
実際に成功していても成功していないよ・う・に・見・え・るって話じゃないの?
XCodeのコンパイラがllvm,clangだってのは開発者にしか見えないしclangの話だけ聞いているとgccが組み込み機のCPUに対応してたころみたいに派手に活躍してるとは感じられないって事じゃ無いの?
2015/08/20(木) 04:55:31.33ID:uOqBPetd
たぶん外国には、CASL2のような仮想アセンブラを使う、
情報処理試験が無いのだろう

2人の大学生が作ったLLVMに、Appleが飛びついた。
それで、Lattner はAppleに就職した
2015/08/20(木) 11:06:47.70ID:XXXu8/KU
良く言えば新世代の輝き
悪く言えば発展途上の不安定さ
さらに組み込みで言えばカバー範囲の幅広さは犠牲にされがち

将来性でメシが食えるのはごく一部
2015/08/20(木) 11:31:12.43ID:WmW0wMbd
痛い文章だ
2015/08/24(月) 00:47:20.35ID:OjRQ25eS
マルチメソッドを効率よく実装するにはどのようにすればよいですか?
2015/08/24(月) 01:10:40.39ID:YG1kZeuQ
マルチメソッドって何?
2015/08/24(月) 01:36:14.61ID:OjRQ25eS
OOPの最も基本的な機能です
引数によって、メソッドが切り替わります
多態といいます
2015/08/24(月) 02:01:55.26ID:YG1kZeuQ
オーバーロードのことですか?
ではマングリング
2015/08/24(月) 02:21:03.16ID:OjRQ25eS
マルチメソッドはオーバーロードでは無いです
一般にオーバーロードは静的ですが、
マルチメソッドは動的です
2015/08/24(月) 08:00:36.10ID:WVPITNbu
>>251
> 引数によって、メソッドが切り替わります
はい?
2015/08/24(月) 08:19:25.57ID:jJXNOMmM
clojureのdefmultiみたいな奴じゃないの?
2015/08/24(月) 11:49:46.23ID:BYoao/vR
多重ディスパッチのニッチな要求に応えるものか
それとも単純な動的バインディングだけの問題なのか
2015/08/26(水) 18:36:02.43ID:XR0u/yGZ
マルチメソッドはC++相談室を検索すればなんなのかがわかる
2015/08/30(日) 17:45:45.69ID:bYlp1Mb/
>>249
パターンマッチを効率よく行う
259デフォルトの名無しさん
垢版 |
2015/08/30(日) 19:15:42.50ID:nhXJHOe7
型を連想配列やトライ木で管理すればO(1)
2015/08/30(日) 20:08:17.93ID:brcjELIg
>>259
clojureはソレだね
261デフォルトの名無しさん
垢版 |
2015/09/17(木) 12:38:19.48ID:mHCGeegj
中間言語の設計に関するノウハウとかアンチパターンとかが書かれた本誰か知ってる?
LLVMとかP-codeとかJava VMとか、あるいはKnuthのMIX/MMIXみたいな機械語に近いレベルの言語を
ソフトウェア実装すること前提に設計する場合について知りたい。

今言語設計してて、そろそろ構文解析できそうだから学んでおきたいんだけど。
2015/09/17(木) 19:56:34.99ID:7ftMaB4B
最初はネイティブに落とした方がいいぞ
中間言語とか遠回りしてたらアホみたいだぞ
2015/09/18(金) 15:07:01.58ID:QAQ6VXx0
そんな物他人に教わるくらいならおとなしく既存のを使っとけ
2015/09/18(金) 20:35:24.73ID:F4ynHS7Z
本として出して需要あるか?もしかしたらサーベイ論文なら探せばあるかも
265261
垢版 |
2015/09/18(金) 21:16:12.07ID:ArWsl8Ey
>>262
素直にコンパイル出来ない言語を設計してるので(clispのような)、snippetの表現をx86/amd64表記にする意義が薄いんですよね。

>>263
凝り性なもので。

>>264
一応ciniiは一通り眺めたけど、中間言語の設計に関する論文って無いんですよね。
素直に「中間言語」で調べると自然言語の翻訳に使う方が大量に引っかかってつらい……
2015/09/18(金) 22:17:11.93ID:i7DEL3du
>>265
動的型付け必須系?
ならErlangの論文とか資料あさるといいかも
267261
垢版 |
2015/09/19(土) 09:19:04.79ID:YlOPp2hb
>>266
swiftのように演算子をユーザー定義出来て、
c++のように同名異引数の関数を定義出来て、
Lispのように引数間のカンマが要らず、
Rubyのようにカッコを省ける
そんな言語を設計中です。

それらの両立のために実行中に文法を書き換えて構文解析器を再構成するという手法を採ってるので、コンパイル出来ないんですよね……
clispのリードマクロを文脈依存に拡張したものだと言えば大体あってるかと。

ちょっとErlang関連の資料を見てみます。
2015/09/19(土) 10:26:16.30ID:7hgo9IJ4
>>267
列挙してあることはシンタックス上のことで全部コンパイル時に静的に解決出来そうに見えるけど無理なの?
2015/09/19(土) 11:29:33.20ID:I9CWDfzW
>>267
コンパイル時の都合だよね?
VMの設計とはなんの関係もなさげなんだけど
270261
垢版 |
2015/09/19(土) 12:48:32.00ID:YlOPp2hb
>>268
今考えてる言語では、演算子の扱いが関数を引数の場所に関して一般化した第一級オブジェクトなので
前置引数の個数や後置引数の個数は実行してみるまで分からないので
コンパイル時の識別子を用いた構文解析は無理です。
前置演算子と一引数関数が別物って変だと思ったのでそうしました。

c++風に書くと、こんな感じのが通るイメージです。
g = [](a,b){return a - b;};
if (複雑な式) {
 f = [](a|b,c){return a + b + c;}; // (a|b)で前置引数としてa、後置引数としてbと示すものとする。
} else {
 f = [](a,b|c){return a + b + c;};
}
// gは2引数演算子、fは3引数演算子。
// ここではgの優先順位はfより低いものとする(c++での表現方法が無いので)。
// カッコやカンマを省いてある場合、上の条件のどちらが走っても構文上は受理される。
// 複雑な式の結果によって、これはg(1, f(2, 3, 4))及びg(f(1, 2, 3), 4)のどちらにもなりうる。
cout << (g 1 2 f 3 4) << endl;

>>269
そういうわけで一度に全部読み込んでコンパイルしてから実行するという事が出来ないので、
折角だからVMも設計しようと思った次第です。
ASTから中間言語に落とすとcontinuationの実装が楽になるので。
レスを投稿する

5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況