<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Big Sky</title>
    <link>http://mattn.kaoriya.net/</link>
    <description>システム開発屋がひっそり語るぼやき</description>
    <language>ja</language>
    <generator>blosxom/2.1.2</generator>
    <atom:link rel="self" href="http://mattn.kaoriya.net/index.rss" type="application/rss+xml" />
    <atom:link rel="hub" href="http://pubsubhubbub.appspot.com/"/>
   <item>
     <title>VimmerなPerl開発環境</title>
     <pubDate>Thu, 02 Sep 2010 00:15:00 +0900</pubDate>
     <link>http://mattn.kaoriya.net/software/lang/perl/20100901231137.htm</link>
     <category>perl</category><category>vim</category>
     <guid isPermaLink="true">http://mattn.kaoriya.net/software/lang/perl/20100901231137.htm</guid>
     <description>
えーっと、IDE使ってません。ごめんなさい。&lt;br /&gt;
PerlをIDEで書いてる人、どれくらいいるんだろう。何使ってるんだろ。&lt;br /&gt;
私はLinuxでもWindowsでもVimを使ってます。Perlってサーバで使われる事が多いし、サーバだとsshで入る事が多いだろうし、まぁXの転送やVNCやそれっぽいのでグラフィカルに操作しても良いけど、正直PerlのドキュメントもテキストベースだしPerlで入力補完出来るグラフィカルエディタもまず無いと思ってる。&lt;br /&gt;
&lt;br /&gt;
で、私がVim上で使ってるPerlの開発を&lt;strong&gt;「200倍便利にするスクリプト」&lt;/strong&gt;を紹介。&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;perldoc.vim&lt;/h3&gt;
perldocはPerlのオンラインマニュアルなんだけど、これを一々ターミナルに戻ったりして引いてると時間のロス。screenで分割して開いてもいいんだけどscreenの画面間移動よりもVim内でのウィンドウ間移動の方が操作感が統一出来てて良い。&lt;br /&gt;
そこで使ってるのが&lt;a href=&quot;http://subtech.g.hatena.ne.jp/secondlife/&quot; class=&quot;external&quot; target=&quot;_blank&quot;&gt;id:secondlife&lt;/a&gt;さんが書いたperldoc.vim&lt;br /&gt;
&lt;br /&gt;

&lt;blockquote class=&quot;quote&quot;&gt;
  &lt;a href=&quot;http://github.com/hotchpotch/perldoc-vim&quot;&gt;hotchpotch&apos;s perldoc-vim at master - GitHub&lt;/a&gt;&lt;br /&gt;
  &lt;p&gt;Perldoc plugin for vim&lt;/p&gt;
  &lt;cite&gt;http://github.com/hotchpotch/perldoc-vim&lt;/cite&gt;
&lt;/blockquote&gt;

ドキュメントを引くにはPerldocコマンドを使います。関数openのドキュメントを引くには
&lt;blockquote class=&quot;code&quot;&gt;
:Perldoc -f open
&lt;/blockquote&gt;
とします。またモジュールAcme::Oppaiのドキュメントを引くには
&lt;blockquote class=&quot;code&quot;&gt;
:Perldoc Acme::Oppai
&lt;/blockquote&gt;
と実行します。

このスクリプトの良いと思う点は、補完が効くことです。「:Perldoc Acm」くらいまでタイプしてtabを押すと、「Acme::Oppai」や「Acme::Hidek」が補完されます。&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;ref.vim&lt;/h3&gt;
もう一つ、同じ様にperldocが引けるプラグインとして&lt;a href=&quot;http://d.hatena.ne.jp/thinca&quot; target=&quot;_blank&quot;&gt;thinca&lt;/a&gt;さんが書いたrefがあります。&lt;br /&gt;

&lt;blockquote class=&quot;quote&quot;&gt;
  &lt;a href=&quot;http://github.com/thinca/vim-ref&quot;&gt;thinca&apos;s vim-ref at master - GitHub&lt;/a&gt;&lt;br /&gt;
  &lt;p&gt;Integrated reference viewer.&lt;/p&gt;
  &lt;cite&gt;http://github.com/thinca/vim-ref&lt;/cite&gt;
&lt;/blockquote&gt;

こちらはperldocに限らず

&lt;ul&gt;
  &lt;li&gt;alc&lt;/li&gt;
  &lt;li&gt;erlang&lt;/li&gt;
  &lt;li&gt;man&lt;/li&gt;
  &lt;li&gt;perldoc&lt;/li&gt;
  &lt;li&gt;phpmanual&lt;/li&gt;
  &lt;li&gt;pydoc&lt;/li&gt;
  &lt;li&gt;refe&lt;/li&gt;
&lt;/ul&gt;

といったドキュメントを開く事が出来ます。ドキュメントを引くには

&lt;blockquote class=&quot;code&quot;&gt;
:Ref perldoc -f open
&lt;/blockquote&gt;
や
&lt;blockquote class=&quot;code&quot;&gt;
:Ref perldoc Acme::Oppai
&lt;/blockquote&gt;

等と実行します。
&lt;blockquote&gt;
&lt;a href=&quot;http://mattn.kaoriya.net/images/perldoc-vim.png&quot; rel=&quot;lightbox&quot; title=&quot;perldoc-vim&quot;&gt;&lt;img src=&quot;http://mattn.kaoriya.net/images/perldoc-vim-thumb.png&quot; alt=&quot;perldoc-vim&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/blockquote&gt;

こちらも補完が効きますが、refはモジュール検索の際、あり得るモジュール全てが補完されてしまう為、ネームスペースにわんさかモジュールがあると少しモタつきます。なので私はperldoc.vimを使ってます。&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;追記&lt;/b&gt;&lt;br /&gt;
thincaさんから某所でコメント貰った。&lt;br /&gt;
&lt;blockquote class=&quot;code&quot;&gt;
let g:ref_perldoc_complete_head = 1
&lt;/blockquote&gt;
でそれっぽい事出来るらしい。&lt;br /&gt;
&lt;br /&gt;

&lt;h3&gt;perlcompletion.vim&lt;/h3&gt;

Perlは結構（かなり？）文法制限の緩い言語だと思ってますが、これが災いしてかIDE等でPerlの入力補完が出来る物は殆どありません。そんな中c9sさんがVimのomni補完でPerlの入力補完をしてくれるスクリプトを書いてくれています。&lt;br /&gt;

&lt;blockquote class=&quot;quote&quot;&gt;
  &lt;a href=&quot;http://github.com/c9s/perl-completion.vim&quot;&gt;c9s&apos;s perl-completion.vim at master - GitHub&lt;/a&gt;&lt;br /&gt;
  &lt;p&gt;perl omnicompletion for vim (including base class function compleltions .. etc)&lt;/p&gt;
  &lt;cite&gt;http://github.com/c9s/perl-completion.vim&lt;/cite&gt;
&lt;/blockquote&gt;

これ、&lt;b&gt;ぜひ&lt;/b&gt;実際に試して欲しいのですが
&lt;blockquote class=&quot;code&quot;&gt;
use Acme::O
&lt;/blockquote&gt;
までタイプして&amp;lt;c-x&amp;gt;&amp;lt;c-o&amp;gt;(CTRL-x CTRL-o)をタイプすると

&lt;blockquote&gt;
&lt;a href=&quot;http://mattn.kaoriya.net/images/perl-completion-vim1.png&quot; rel=&quot;lightbox&quot; title=&quot;perl-completion-vim1&quot;&gt;&lt;img src=&quot;http://mattn.kaoriya.net/images/perl-completion-vim1-thumb.png&quot; alt=&quot;perl-completion-vim1&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/blockquote&gt;
&lt;b&gt;どどーーーん！&lt;/b&gt;&lt;br /&gt;
さらに

&lt;blockquote&gt;
&lt;a href=&quot;http://mattn.kaoriya.net/images/perl-completion-vim2.png&quot; rel=&quot;lightbox&quot; title=&quot;perl-completion-vim2&quot;&gt;&lt;img src=&quot;http://mattn.kaoriya.net/images/perl-completion-vim2-thumb.png&quot; alt=&quot;perl-completion-vim2&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/blockquote&gt;

Moooooooooooooooooooseな補完や

&lt;blockquote&gt;
&lt;a href=&quot;http://mattn.kaoriya.net/images/perl-completion-vim3.png&quot; rel=&quot;lightbox&quot; title=&quot;perl-completion-vim3&quot;&gt;&lt;img src=&quot;http://mattn.kaoriya.net/images/perl-completion-vim3-thumb.png&quot; alt=&quot;perl-completion-vim3&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/blockquote&gt;

変数の補完。そして

&lt;blockquote&gt;
&lt;a href=&quot;http://mattn.kaoriya.net/images/perl-completion-vim4.png&quot; rel=&quot;lightbox&quot; title=&quot;perl-completion-vim4&quot;&gt;&lt;img src=&quot;http://mattn.kaoriya.net/images/perl-completion-vim4-thumb.png&quot; alt=&quot;perl-completion-vim4&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/blockquote&gt;

モジュールのメンバまで補完してくれます。キャーすてきー！&lt;br /&gt;
すばらし過ぎます。ちなみにこのperl-completion.vimのwin32対応と、上で紹介したperldoc.vimの補完部分を担当させて頂きました。&lt;br /&gt;
&lt;br /&gt;
2010年はPerlが熱い！そう思ってます。ぜひインストールして活用して見てください。200倍とは言い過ぎかもしれませんが、間違いなく2倍にはなりますよ。&lt;br /&gt;
&lt;br /&gt;

&lt;div class=&quot;awsxom&quot;&gt;
&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4873114276/ref=nosim/bigsky-22&quot;&gt;
&lt;img src=&quot;http://ecx.images-amazon.com/images/I/51Hgdb6WcQL._SL160_.jpg&quot; align=&quot;left&quot; hspace=&quot;5&quot; border=&quot;0&quot; alt=&quot;初めてのPerl 第5版&quot; class=&quot;image&quot; /&gt;
&lt;strong&gt;初めてのPerl 第5版&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
Randal L. Schwartz&lt;br /&gt;
オライリージャパン / ￥ 3,780 (2009-10-26)&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
発送可能時間：在庫あり。&lt;br /&gt;
&lt;br clear=&quot;all&quot; /&gt;
&lt;/div&gt;


&lt;br /&gt;

&lt;div class=&quot;awsxom&quot;&gt;
&lt;a href=&quot;http://www.amazon.co.jp/exec/obidos/ASIN/4798119172/ref=nosim/bigsky-22&quot;&gt;
&lt;img src=&quot;http://ecx.images-amazon.com/images/I/417K6qXAgvL._SL160_.jpg&quot; align=&quot;left&quot; hspace=&quot;5&quot; border=&quot;0&quot; alt=&quot;モダンPerl入門 (CodeZine BOOKS)&quot; class=&quot;image&quot; /&gt;
&lt;strong&gt;モダンPerl入門 (CodeZine BOOKS)&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
牧 大輔&lt;br /&gt;
翔泳社 / ￥ 2,940 (2009-02-10)&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
発送可能時間：在庫あり。&lt;br /&gt;
&lt;br clear=&quot;all&quot; /&gt;
&lt;/div&gt;

</description>
     <author>mattn.jp@gmail.com (mattn)</author>
   </item>
   <item>
     <title>quickrun.vimをパクってquickdan.vimというのを書いた。</title>
     <pubDate>Mon, 30 Aug 2010 22:51:00 +0900</pubDate>
     <link>http://mattn.kaoriya.net/software/vim/20100830222518.htm</link>
     <category>vim</category>
     <guid isPermaLink="true">http://mattn.kaoriya.net/software/vim/20100830222518.htm</guid>
     <description>
RubyKaigiの一部として開催されてVimKaigi、なかなか面白そうでした。&lt;br /&gt;
Vimmerもだんだん増えてきました。plugin使ってる人も多い様です。実は私はあまりpluginの使用に依存しない様に心がけていたりするんですが、中にどうしても手放せない物があり、その中の一つがquickrun.vimだったりします。&lt;br /&gt;

&lt;blockquote class=&quot;quote&quot;&gt;
  &lt;a href=&quot;http://github.com/thinca/vim-quickrun&quot;&gt;thinca&apos;s vim-quickrun at master - GitHub&lt;/a&gt;&lt;br /&gt;
  &lt;p&gt;Run commands quickly.&lt;/p&gt;
  &lt;cite&gt;http://github.com/thinca/vim-quickrun&lt;/cite&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href=&quot;http://mattn.kaoriya.net/software/vim/20100830222518.htm&quot; class=&quot;seemore&quot;&gt;続きを読む...&lt;/a&gt;&lt;/p&gt;

</description>
     <author>mattn.jp@gmail.com (mattn)</author>
   </item>
   <item>
     <title>ZimbuでFizzBuzz</title>
     <pubDate>Sat, 14 Aug 2010 01:35:00 +0900</pubDate>
     <link>http://mattn.kaoriya.net/software/lang/zimbu/20100814005428.htm</link>
     <category>zimbu</category><category>bram</category>
     <guid isPermaLink="true">http://mattn.kaoriya.net/software/lang/zimbu/20100814005428.htm</guid>
     <description>
&lt;img src=&quot;http://www.zimbu.org/_/rsrc/1237647557783/config/app/images/customLogo/customLogo.gif?revision=6&quot; title=&quot;Zimbu&quot; alt=&quot;Zimbu&quot; align=&quot;right&quot;/&gt;Vimの作者であるBram Moolenaar氏が開発しているプログラミング言語「Zimbu」を触ってみた。&lt;br clear=&quot;all&quot;/&gt;

&lt;blockquote class=&quot;quote&quot;&gt;
  &lt;a href=&quot;http://www.zimbu.org/&quot;&gt;the Zimbu programming language&lt;/a&gt;&lt;br /&gt;
  &lt;p&gt; Suppose you want to write a new program, something like a text editor. What language would you write it in?&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;It has to be as fast as possible, so interpreted languages are out.&lt;/li&gt;
    &lt;li&gt;You don&apos;t want to micro manage memory, so C is out.&lt;/li&gt;
    &lt;li&gt;You don&apos;t want to require programmers to have a degree, so C++ is out.&lt;/li&gt;
    &lt;li&gt;You want fast startup and not depend on a big runtime, so Java is out.&lt;/li&gt;
    &lt;li&gt;It has to run on most systems, anything with a C compiler, so D is out.&lt;/li&gt;
    &lt;li&gt;You want to have fun making something new.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;No existing language really meets these demands, so let&apos;s create a new one that does!&lt;/p&gt;
  &lt;p&gt;Zimbu is an experimental programming language.  It is a very practical, no-nonsense kind of language.  It mixes the good things of many existing languages and avoids their deficiencies.  And then throws in a few brand new ideas.&lt;/p&gt;
  &lt;cite&gt;http://www.zimbu.org/&lt;/cite&gt;
&lt;/blockquote&gt;

実は、存在は出た当初から知ってはいたんだけど&lt;br /&gt;
&lt;blockquote class=&quot;quote&quot;&gt;
制御命令が全部大文字とか、流行らないよね
&lt;/blockquote&gt;
とか
&lt;blockquote class=&quot;quote&quot;&gt;
ソースコード中にタブがあるとビルド出来ないとか、どんだけ？
&lt;/blockquote&gt;
とか
&lt;blockquote class=&quot;quote&quot;&gt;
ブロックが「{」無しに始まるのに終わりに「}」が要るの気持ち悪いよね
&lt;/blockquote&gt;
とか、おもいっきりkazuh●さんあたりにDISられそうだったので、触って無かった。&lt;br /&gt;
これではいかんな！と思ってFizzBuzz書いてみた。&lt;br /&gt;

&lt;blockquote class=&quot;code&quot;&gt;
FUNC int MAIN()&lt;br /&gt;
&amp;nbsp;&amp;nbsp;FOR i IN 1 TO 100&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IF i % 15 == 0&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IO.write(&lt;span class=&quot;Constant&quot;&gt;&amp;quot;FizzBuzz\n&amp;quot;&lt;/span&gt;)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ELSEIF i % 3 == 0&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IO.write(&lt;span class=&quot;Constant&quot;&gt;&amp;quot;Fizz\n&amp;quot;&lt;/span&gt;)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ELSEIF i % 5 == 0&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IO.write(&lt;span class=&quot;Constant&quot;&gt;&amp;quot;Buzz\n&amp;quot;&lt;/span&gt;)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ELSE&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IO.write(i)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IO.write(&lt;span class=&quot;Constant&quot;&gt;&amp;quot;\n&amp;quot;&lt;/span&gt;)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
&amp;nbsp;&amp;nbsp;RETURN 0&lt;br /&gt;
}
&lt;/blockquote&gt;
「}」だけとか、きもちわる！&lt;br /&gt;
&lt;br /&gt;
zimbuではzuファイルを一度Cのコードに変換し、コンパイラでビルドします。なので実行速度は結構速い(かもしれない)。ちなみにC言語に出力されたコードは、804行もあってブログに載せられないので、&lt;a href=&quot;http://gist.github.com/523155&quot; class=&quot;external&quot; target=&quot;_blank&quot;&gt;Gist&lt;/a&gt;に貼り付けておいた。&lt;br /&gt;
たかだか15行のソースなのに804行も出力するなんて凄い！&lt;br /&gt;
&lt;br /&gt;
ただ思いとは裏腹に、実は結構色んな事が出来る&lt;b&gt;予定&lt;/b&gt;の様で、GUIの設計なんかもやってるみたいです。ちなみにGTK/Qtのバインディングは構想中ですが、ブラウザを使ったGUIコードの生成はある程度動く様です。&lt;br /&gt;
&lt;blockquote&gt;
&lt;a href=&quot;http://mattn.kaoriya.net/images/zwt-demo1.png&quot; rel=&quot;lightbox&quot; title=&quot;zwt-demo1&quot;&gt;&lt;img src=&quot;http://mattn.kaoriya.net/images/zwt-demo1-thumb.png&quot; alt=&quot;zwt-demo1&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/blockquote&gt;


&lt;blockquote&gt;
&lt;a href=&quot;http://mattn.kaoriya.net/images/zwt-demo2.png&quot; rel=&quot;lightbox&quot; title=&quot;zwt-demo2&quot;&gt;&lt;img src=&quot;http://mattn.kaoriya.net/images/zwt-demo2-thumb.png&quot; alt=&quot;zwt-demo2&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/blockquote&gt;

なお、このサンプルで使われている部品の一つとしてGoogle Protocol Bufferを使っており、javaのソースを吐いてエンティティオブジェクトとして扱っている様です。&lt;br /&gt;
&lt;br /&gt;
なんか凄いような、凄くないような...&lt;br /&gt;
&lt;br /&gt;
明日にはきっと言語仕様忘れてると思います。&lt;br /&gt;
</description>
     <author>mattn.jp@gmail.com (mattn)</author>
   </item>
   <item>
     <title>Devel::CheckLibのコメンテナになりました。</title>
     <pubDate>Fri, 13 Aug 2010 23:32:00 +0900</pubDate>
     <link>http://mattn.kaoriya.net/software/lang/perl/20100813232105.htm</link>
     <category>perl</category>
     <guid isPermaLink="true">http://mattn.kaoriya.net/software/lang/perl/20100813232105.htm</guid>
     <description>
MSVCやMinGW32、Cygwin、BorlandC++などWindowsのCコンパイラについて一般的に嗜む程度の知識は持っていて、UNIXもある程度さわれて、Perlも少し触れるかなぁという(我ながら浅はかな)「つもり」でいたので、「CPANモジュールDevel::CheckLibのメンテナンスを誰か引き受けて欲しい」と仰るDavid Cantrellさんの意思を受け、Devel::CheckLibのコメンテナを引き受けました。&lt;br /&gt;
&lt;br /&gt;
至らないかと思いますが、どうぞよろしく。&lt;br /&gt;
&lt;br /&gt;
</description>
     <author>mattn.jp@gmail.com (mattn)</author>
   </item>
   <item>
     <title>bashのaliasってマルチバイト使えたんだ。</title>
     <pubDate>Tue, 10 Aug 2010 01:38:00 +0900</pubDate>
     <link>http://mattn.kaoriya.net/software/20100810013626.htm</link>
     <category>bash</category>
     <guid isPermaLink="true">http://mattn.kaoriya.net/software/20100810013626.htm</guid>
     <description>
しらんかった。&lt;br /&gt;

&lt;blockquote class=&quot;code&quot;&gt;
$ alias ゔむ。=vim&lt;br /&gt;
$ ゔむ。 ~/.vimrc&lt;br /&gt;
&lt;/blockquote&gt;
</description>
     <author>mattn.jp@gmail.com (mattn)</author>
   </item>
   <item>
     <title>勝手にコミットメッセージを作ってくれるvimscript書いた。</title>
     <pubDate>Tue, 10 Aug 2010 01:09:00 +0900</pubDate>
     <link>http://mattn.kaoriya.net/software/vim/20100810010515.htm</link>
     <category>commit</category><category>vim</category>
     <guid isPermaLink="true">http://mattn.kaoriya.net/software/vim/20100810010515.htm</guid>
     <description>
便利&lt;br /&gt;
&lt;blockquote class=&quot;code&quot;&gt;
&lt;span class=&quot;Comment&quot;&gt;&amp;quot; copy this &apos;git.vim&apos; to ~/.vim/after/ftplugin/git.vim&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Constant&quot;&gt;0&lt;/span&gt;r!curl&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;-&lt;/span&gt;s&amp;nbsp;&lt;a href=&quot;http://whatthecommit&quot;&gt;http://whatthecommit&lt;/a&gt;&lt;span class=&quot;Statement&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;Statement&quot;&gt;com&lt;/span&gt;/&lt;span class=&quot;Identifier&quot;&gt;index&lt;/span&gt;&lt;span class=&quot;Statement&quot;&gt;.&lt;/span&gt;txt&lt;br /&gt;
&lt;/blockquote&gt;
な訳ない。&lt;br /&gt;
&lt;br /&gt;
ちなみに、この「&lt;a href=&quot;http://whatthecommit.com/&quot; class=&quot;external&quot; target=&quot;_blank&quot;&gt;What The Commit&lt;/a&gt;」ってサイト、「Useful Text」とか「clarify further the brokenness of C++. why the fuck are we using C++?」とか「Spinning up the hamster...」とかオモロいメッセージいっぱい入ってる。&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;追記 2010/08/27&lt;/b&gt;&lt;br /&gt;
コメント欄で &lt;a href=&quot;http://whatthecommit.com/index.txt&quot; class=&quot;external&quot; target=&quot;_blank&quot;&gt;http://whatthecommit.com/index.txt&lt;/a&gt; でプレインテキストなメッセージが得られる事を教えて頂きました。感謝。
</description>
     <author>mattn.jp@gmail.com (mattn)</author>
   </item>
   <item>
     <title>「「new 式」 で、変数を 式 として指定することはできますか？」</title>
     <pubDate>Tue, 10 Aug 2010 01:04:00 +0900</pubDate>
     <link>http://mattn.kaoriya.net/software/lang/c/20100810005701.htm</link>
     <category>c</category><category>c++</category>
     <guid isPermaLink="true">http://mattn.kaoriya.net/software/lang/c/20100810005701.htm</guid>
     <description>
&lt;a href=&quot;http://okwave.jp/qa/q6092951.html&quot; class=&quot;external&quot; target=&quot;_blank&quot;&gt;「new 式」 で、変数を 式 として指定することはできますか？ | OKWave&lt;/a&gt;&lt;br /&gt;
via: &lt;a href=&quot; http://www.kt.rim.or.jp/~kbk/zakkicho/10/zakkicho1008a.html#D20100808-4&quot; class=&quot;external&quot; target=&quot;_blank&quot;&gt;ときどきの雑記帳&lt;/a&gt;&lt;br /&gt;
&lt;em&gt;ところでpermalinkがおかしい気がする。あと最近のときどきの雑記帳はときどきどころでない気がするw&lt;/em&gt;&lt;br /&gt;
&lt;blockquote class=&quot;quote&quot;&gt;
「new 式」 で、変数を 式 として指定することはできますか？&lt;br /&gt;
&lt;br /&gt;
例えば次のような感じで、変数clの内容によりclassAあるいはclassBをnew&lt;br /&gt;
するようなことがしたいです。&lt;br /&gt;
class base [ ... };&lt;br /&gt;
class classA : public base { .... };&lt;br /&gt;
class classB : public base { .... };&lt;br /&gt;
classA* ca;&lt;br /&gt;
classB* cb;&lt;br /&gt;
base* cl;&lt;br /&gt;
cl = classA;&lt;br /&gt;
ca = new cl;&lt;br /&gt;
cl = classB;&lt;br /&gt;
ca = new cl;&lt;br /&gt;
&lt;br /&gt;
これにより、多種のclassをnewする際にいちいち&lt;br /&gt;
pa = new classA;&lt;br /&gt;
pb = new classB;&lt;br /&gt;
pc = new classC;&lt;br /&gt;
pd = new classD;&lt;br /&gt;
............&lt;br /&gt;
としないで、&lt;br /&gt;
for (n=0; n&amp;lt;xxx; n++)&lt;br /&gt;
p[n] = new cl[n];&lt;br /&gt;
…みたいに簡潔に書けないかなと考えてます。&lt;br /&gt;
よろしくお願いします。&lt;br /&gt;
&lt;/blockquote&gt;

こんな？&lt;br /&gt;
&lt;blockquote class=&quot;code&quot;&gt;
&lt;span class=&quot;PreProc&quot;&gt;#include &lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Statement&quot;&gt;using&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;namespace&lt;/span&gt;&amp;nbsp;std;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Type&quot;&gt;class&lt;/span&gt;&amp;nbsp;base {&lt;br /&gt;
&lt;span class=&quot;Statement&quot;&gt;public&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;virtual&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;void&lt;/span&gt;&amp;nbsp;hello() &lt;span class=&quot;Type&quot;&gt;const&lt;/span&gt;&amp;nbsp;=&lt;span class=&quot;Constant&quot;&gt;0&lt;/span&gt;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Type&quot;&gt;class&lt;/span&gt;&amp;nbsp;classA : &lt;span class=&quot;Statement&quot;&gt;public&lt;/span&gt;&amp;nbsp;base { &lt;span class=&quot;Type&quot;&gt;void&lt;/span&gt;&amp;nbsp;hello() &lt;span class=&quot;Type&quot;&gt;const&lt;/span&gt;&amp;nbsp;{ cout &amp;lt;&amp;lt; &lt;span class=&quot;Constant&quot;&gt;&amp;quot;classA&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&lt;/span&gt;; }};&lt;br /&gt;
&lt;span class=&quot;Type&quot;&gt;class&lt;/span&gt;&amp;nbsp;classB : &lt;span class=&quot;Statement&quot;&gt;public&lt;/span&gt;&amp;nbsp;base { &lt;span class=&quot;Type&quot;&gt;void&lt;/span&gt;&amp;nbsp;hello() &lt;span class=&quot;Type&quot;&gt;const&lt;/span&gt;&amp;nbsp;{ cout &amp;lt;&amp;lt; &lt;span class=&quot;Constant&quot;&gt;&amp;quot;classB&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&lt;/span&gt;; }};&lt;br /&gt;
&lt;span class=&quot;Type&quot;&gt;class&lt;/span&gt;&amp;nbsp;classC : &lt;span class=&quot;Statement&quot;&gt;public&lt;/span&gt;&amp;nbsp;base { &lt;span class=&quot;Type&quot;&gt;void&lt;/span&gt;&amp;nbsp;hello() &lt;span class=&quot;Type&quot;&gt;const&lt;/span&gt;&amp;nbsp;{ cout &amp;lt;&amp;lt; &lt;span class=&quot;Constant&quot;&gt;&amp;quot;classC&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&lt;/span&gt;; }};&lt;br /&gt;
&lt;span class=&quot;Type&quot;&gt;class&lt;/span&gt;&amp;nbsp;classD : &lt;span class=&quot;Statement&quot;&gt;public&lt;/span&gt;&amp;nbsp;base { &lt;span class=&quot;Type&quot;&gt;void&lt;/span&gt;&amp;nbsp;hello() &lt;span class=&quot;Type&quot;&gt;const&lt;/span&gt;&amp;nbsp;{ cout &amp;lt;&amp;lt; &lt;span class=&quot;Constant&quot;&gt;&amp;quot;classD&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&lt;/span&gt;; }};&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Type&quot;&gt;template&lt;/span&gt;&amp;lt;&lt;span class=&quot;Type&quot;&gt;typename&lt;/span&gt;&amp;nbsp;T&amp;gt; base* create() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;new&lt;/span&gt;&amp;nbsp;T;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Type&quot;&gt;int&lt;/span&gt;&amp;nbsp;main(){ &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;typedef&lt;/span&gt;&amp;nbsp;base* (*factory)();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;factory p[] = {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;create&amp;lt;classA&amp;gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;create&amp;lt;classB&amp;gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;create&amp;lt;classC&amp;gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;create&amp;lt;classD&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;for&lt;/span&gt;&amp;nbsp;(&lt;span class=&quot;Type&quot;&gt;int&lt;/span&gt;&amp;nbsp;n = &lt;span class=&quot;Constant&quot;&gt;0&lt;/span&gt;; n &amp;lt; &lt;span class=&quot;Constant&quot;&gt;4&lt;/span&gt;; n++)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;p[n]()-&amp;gt;hello();&lt;br /&gt;
}&lt;br /&gt;
&lt;/blockquote&gt;
</description>
     <author>mattn.jp@gmail.com (mattn)</author>
   </item>
   <item>
     <title>GoでGoogle翻訳出来るライブラリ書いた。</title>
     <pubDate>Sat, 31 Jul 2010 22:48:00 +0900</pubDate>
     <link>http://mattn.kaoriya.net/software/lang/go/20100731224343.htm</link>
     <category>golang</category>
     <guid isPermaLink="true">http://mattn.kaoriya.net/software/lang/go/20100731224343.htm</guid>
     <description>
まぁネタですが...
&lt;blockquote class=&quot;quote&quot;&gt;
&lt;a href=&quot;http://github.com/mattn/go-translate&quot; class=&quot;external&quot; target=&quot;_blank&quot;&gt;mattn&apos;s go-translate at master - GitHub&lt;/a&gt;&lt;br /&gt;
&lt;p&gt;google language translate library&lt;/p&gt;
&lt;cite&gt;http://github.com/mattn/go-translate&lt;/cite&gt;
&lt;/blockquote&gt;
これ使うと
&lt;blockquote class=&quot;code&quot;&gt;
println(translate.Translate(&quot;en&quot;, &quot;ja&quot;, &quot;i&apos;m zakarite what is emperor in cosmic&quot;))
&lt;/blockquote&gt;
こんなコードで
&lt;blockquote class=&quot;code&quot;&gt;
私は宇宙の皇帝zakariteよ
&lt;/blockquote&gt;
こんな結果が得られます。&lt;br /&gt;
便利ですね！&lt;br /&gt;
&lt;br /&gt;
あっ歳ばれる。&lt;br /&gt;
ちなみにどうやっても帝王って出せないんですけど...&lt;br /&gt;
</description>
     <author>mattn.jp@gmail.com (mattn)</author>
   </item>
   <item>
     <title>VimでGoがautocomplete出来るgocodeがいい感じ</title>
     <pubDate>Thu, 29 Jul 2010 01:13:00 +0900</pubDate>
     <link>http://mattn.kaoriya.net/software/lang/go/20100729002939.htm</link>
     <category>golang</category>
     <guid isPermaLink="true">http://mattn.kaoriya.net/software/lang/go/20100729002939.htm</guid>
     <description>
Goは型宣言無しに値が代入出来てしまうので、カーソル上の変数から型推測する必要がある補完は難しいんじゃないかなーと思ってたら、なんと作った人がいました。&lt;br /&gt;
すげー。&lt;br /&gt;
&lt;br /&gt;

&lt;blockquote class=&quot;quote&quot;&gt;
  &lt;a href=&quot;http://github.com/nsf/gocode&quot;&gt;nsf&apos;s gocode at master - GitHub&lt;/a&gt;&lt;br /&gt;
  &lt;p&gt;Autocompletion/refactoring daemon for Go language.Work in progress..Currently available things: - .a...&lt;/p&gt;
  &lt;cite&gt;http://github.com/nsf/gocode&lt;/cite&gt;
&lt;/blockquote&gt;

仕組みはvimスクリプト内でデーモン起こしてコードとキーワードと共にサーバ側でコンパイルし、解析して返すというもの。通信にはRPCが使われている。&lt;br /&gt;
補完はomniなので&amp;lt;c-x&amp;gt;&amp;lt;c-o&amp;gt;で開始。ちゃんと
&lt;ul&gt;
&lt;li&gt;インスタンスメソッド一覧&lt;/li&gt;
&lt;li&gt;構造体のメンバ&lt;/li&gt;
&lt;li&gt;パッケージ内の定数や型、関数&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;a href=&quot;http://mattn.kaoriya.net/images/gocode1.png&quot; rel=&quot;lightbox&quot; title=&quot;gocode1&quot;&gt;&lt;img src=&quot;http://mattn.kaoriya.net/images/gocode1-thumb.png&quot; alt=&quot;gocode1&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/blockquote&gt;
&lt;br /&gt;

もろもろ補完してくれる。私が無理かもねと思ってた以下の様なコードでもしっかり補完してくれている。すばらしい。&lt;br /&gt;
&lt;br /&gt;


&lt;blockquote&gt;
&lt;a href=&quot;http://mattn.kaoriya.net/images/gocode2.png&quot; rel=&quot;lightbox&quot; title=&quot;gocode2&quot;&gt;&lt;img src=&quot;http://mattn.kaoriya.net/images/gocode2-thumb.png&quot; alt=&quot;gocode2&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/blockquote&gt;
&lt;br /&gt;

Go書く人はいれるべし。ちなみにこのgocode、出力形式としてemacsもサポートしている(未確認)ので、ぜひ試して欲しい。&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;追記&lt;/b&gt;&lt;br /&gt;
さすがにこういうコードは難しいみたい。なんかPANICって補完されてます。&lt;br /&gt;
&lt;blockquote class=&quot;code&quot;&gt;
&lt;br /&gt;
&lt;span class=&quot;PreProc&quot;&gt;package&lt;/span&gt;&amp;nbsp;main&lt;br /&gt;
&lt;br /&gt;
type Foo struct {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Boo &lt;span class=&quot;Type&quot;&gt;func&lt;/span&gt;();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Baz string;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Type&quot;&gt;func&lt;/span&gt;&amp;nbsp;foo()&amp;nbsp;*Foo {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;return&lt;/span&gt;&amp;nbsp;&amp;amp;Foo {}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Type&quot;&gt;func&lt;/span&gt;&amp;nbsp;main()&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foo().PANIC&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;/blockquote&gt;
</description>
     <author>mattn.jp@gmail.com (mattn)</author>
   </item>
   <item>
     <title>JScript.NETでスレッド</title>
     <pubDate>Wed, 14 Jul 2010 00:38:00 +0900</pubDate>
     <link>http://mattn.kaoriya.net/software/lang/javascript/20100714002551.htm</link>
     <category>jscript.net</category><category>javascript</category>
     <guid isPermaLink="true">http://mattn.kaoriya.net/software/lang/javascript/20100714002551.htm</guid>
     <description>
JScript.NETはMicrosoftが.NET Framework向けに拡張したJavasSriptで、Common Language Runtime(CLR)上で動作するJavaScript実装です。&lt;br /&gt;
CLR上ではC#、VB.NET等が動作しますが、JScript.NETは言語がJavaScriptという事もあって実はC#やVB.NET等と同等に使えない機能がいくらかあります。&lt;br /&gt;
JavaScriptは動的言語です。オブジェクトにプロパティを生やしてメソッドにしたり、prototypeを弄ったり、eval()で関数を生成したりも出来ます。つまりコンパイルするとは言えど、型が動的に変えられる言語です。&lt;br /&gt;
その為、.NET Frameworkの機能の一つであるDelegateが使えません。.NET FrameworkのThreadはDelegateという関数型拘束によりスレッドを安全に呼び出せる様になっています。この関数型拘束に緩い拘束なJavaScript(JScript)の関数を渡す事は出来ないのです。&lt;br /&gt;
MSDNでもJScriptのDelegate利用制限が書かれています。&lt;br /&gt;
&lt;blockquote class=&quot;quote&quot;&gt;
&lt;a href=&quot;http://msdn.microsoft.com/ja-jp/library/system.threading.threadstart(VS.71).aspx&quot;&gt;ThreadStart デリゲート&lt;/a&gt;
&lt;p&gt;[JScript] JScript では、.NET Framework のデリゲートを利用することができます。ただし、独自に定義することはできません。&lt;/p&gt;
&lt;cite&gt;http://msdn.microsoft.com/ja-jp/library/system.threading.threadstart(VS.71).aspx&lt;/cite&gt;
&lt;/blockquote&gt;
Delegate.CreateDelegate()というメソッドも存在しますが、こちらもJScriptからは利用出来ません。&lt;br /&gt;
じゃぁDelegateを引数に取るThreadはJScriptから作れないじゃないか！そう思っておられる方が殆どだと思います。&lt;br /&gt;
&lt;br /&gt;
いえ、出来ます。&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;code&quot;&gt;
import&amp;nbsp;System&lt;br /&gt;
import&amp;nbsp;System.Reflection&lt;br /&gt;
import&amp;nbsp;System.CodeDom.Compiler&lt;br /&gt;
import&amp;nbsp;System.Threading&lt;br /&gt;
import&amp;nbsp;Microsoft.CSharp&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Comment&quot;&gt;/**&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Comment&quot;&gt;&amp;nbsp;* createThread()&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Comment&quot;&gt;&amp;nbsp;* &lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;@param&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt;&amp;nbsp;&amp;nbsp; thread function&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Comment&quot;&gt;&amp;nbsp;* &lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;@param&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt;&amp;nbsp;&amp;nbsp; argument passing to function&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Comment&quot;&gt;&amp;nbsp;* &lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;@return&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt;&amp;nbsp;&amp;nbsp;thread object&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Comment&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt;*/&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Type&quot;&gt;var&lt;/span&gt;&amp;nbsp;createThread =&amp;nbsp;(&lt;span class=&quot;Identifier&quot;&gt;function&lt;/span&gt;()&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;var&lt;/span&gt;&amp;nbsp;source = [&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;using System.Threading;&amp;quot;&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;public class ThreadInvoker {&amp;quot;&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&amp;nbsp;&amp;nbsp;private Microsoft.JScript.Closure func;&amp;quot;&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&amp;nbsp;&amp;nbsp;private object arg = null;&amp;quot;&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&amp;nbsp;&amp;nbsp;public ThreadInvoker(Microsoft.JScript.Closure func, object arg) { this.func = func; this.arg = arg; }&amp;quot;&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&amp;nbsp;&amp;nbsp;private void invokerThread() { func.Invoke(null, new object[]{this.arg}); }&amp;quot;&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&amp;nbsp;&amp;nbsp;public Thread createInvoker() { return new Thread(invokerThread); }&amp;quot;&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;}&amp;quot;&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;].join(&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&lt;/span&gt;);&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;var&lt;/span&gt;&amp;nbsp;cp = CodeDomProvider.CreateProvider(&lt;span class=&quot;Constant&quot;&gt;&amp;quot;CSharp&amp;quot;&lt;/span&gt;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;var&lt;/span&gt;&amp;nbsp;cps = &lt;span class=&quot;Statement&quot;&gt;new&lt;/span&gt;&amp;nbsp;CompilerParameters();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cps.ReferencedAssemblies.Add(&lt;span class=&quot;Constant&quot;&gt;&amp;quot;Microsoft.JScript.dll&amp;quot;&lt;/span&gt;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cps.GenerateInMemory = &lt;span class=&quot;Constant&quot;&gt;true&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;var&lt;/span&gt;&amp;nbsp;cr = cp.CompileAssemblyFromSource(cps, source);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;var&lt;/span&gt;&amp;nbsp;asm = cr.CompiledAssembly;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;function&lt;/span&gt;(f, a)&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;var&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;tt&lt;/span&gt;&amp;nbsp;: Type = asm.GetType(&lt;span class=&quot;Constant&quot;&gt;&amp;quot;ThreadInvoker&amp;quot;&lt;/span&gt;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;var&lt;/span&gt;&amp;nbsp;args = &lt;span class=&quot;Statement&quot;&gt;new&lt;/span&gt;&amp;nbsp;System.&lt;span class=&quot;Special&quot;&gt;Object&lt;/span&gt;[&lt;span class=&quot;Constant&quot;&gt;2&lt;/span&gt;];&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;args[&lt;span class=&quot;Constant&quot;&gt;0&lt;/span&gt;] = f;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;args[&lt;span class=&quot;Constant&quot;&gt;1&lt;/span&gt;] = a;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;return&lt;/span&gt;&amp;nbsp;tt.InvokeMember(&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;createInvoker&amp;quot;&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BindingFlags.InvokeMethod,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;null&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Activator.CreateInstance(tt, args),&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;null&lt;/span&gt;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br /&gt;
})();&lt;br /&gt;
&lt;/blockquote&gt;
C#上で書かれたスレッドインボーカをメモリ内でコンパイルして、それにJScriptの関数、正しくはクロージャを渡します。&lt;br /&gt;
ここから先はCLRなので、どうとでも出来るはずでC#からMicrosoft.JScript.Closureのメソッドを叩く事も出来ます。&lt;br /&gt;
これを使えば&lt;br /&gt;
&lt;blockquote class=&quot;code&quot;&gt;
&lt;span class=&quot;Type&quot;&gt;var&lt;/span&gt;&amp;nbsp;th =&amp;nbsp;createThread(&lt;span class=&quot;Identifier&quot;&gt;function&lt;/span&gt;(v)&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;for&lt;/span&gt;&amp;nbsp;(&lt;span class=&quot;Type&quot;&gt;var&lt;/span&gt;&amp;nbsp;n = &lt;span class=&quot;Constant&quot;&gt;1&lt;/span&gt;; n &amp;lt;= &lt;span class=&quot;Constant&quot;&gt;6&lt;/span&gt;; n++) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Thread.Sleep(&lt;span class=&quot;Constant&quot;&gt;200&lt;/span&gt;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print(&lt;span class=&quot;Constant&quot;&gt;&amp;quot;thread&amp;quot;&lt;/span&gt;&amp;nbsp;+ n + &lt;span class=&quot;Constant&quot;&gt;&amp;quot; &amp;quot;&lt;/span&gt;&amp;nbsp;+ v);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;
}, &lt;span class=&quot;Constant&quot;&gt;&amp;quot;foo&amp;quot;&lt;/span&gt;);&lt;br /&gt;
&lt;br /&gt;
th.Start();&lt;br /&gt;
&lt;br /&gt;
Thread.Sleep(&lt;span class=&quot;Constant&quot;&gt;200&lt;/span&gt;);&lt;br /&gt;
print(&lt;span class=&quot;Constant&quot;&gt;&amp;quot;main1&amp;quot;&lt;/span&gt;);&lt;br /&gt;
th.Suspend();&lt;br /&gt;
Thread.Sleep(&lt;span class=&quot;Constant&quot;&gt;200&lt;/span&gt;);&lt;br /&gt;
print(&lt;span class=&quot;Constant&quot;&gt;&amp;quot;main2&amp;quot;&lt;/span&gt;);&lt;br /&gt;
Thread.Sleep(&lt;span class=&quot;Constant&quot;&gt;200&lt;/span&gt;);&lt;br /&gt;
print(&lt;span class=&quot;Constant&quot;&gt;&amp;quot;main3&amp;quot;&lt;/span&gt;);&lt;br /&gt;
th.Resume();&lt;br /&gt;
&lt;/blockquote&gt;
こんなコードで
&lt;blockquote class=&quot;code&quot;&gt;
thread1 foo&lt;br /&gt;
main1&lt;br /&gt;
main2&lt;br /&gt;
main3&lt;br /&gt;
thread2 foo&lt;br /&gt;
thread3 foo&lt;br /&gt;
thread4 foo&lt;br /&gt;
thread5 foo&lt;br /&gt;
thread6 foo&lt;br /&gt;
&lt;/blockquote&gt;
こんな動作をさせる事も出来ます。JavaScript(JScript)でスレッドが使えると色々とやりたくなってきます。JScriptでサーバアプリなんて事も簡単に出来そうですね。&lt;br /&gt;
ちなみに、このcreateThread()を使うと、ウェブサーバなんかも書けたりします。試しに書いてみたらコードの少なさ(createThreadは除いて)に少し驚きました。JScript.NET &amp;amp; C# ばんざい！&lt;br /&gt;
&lt;blockquote class=&quot;code&quot;&gt;
import&amp;nbsp;System&lt;br /&gt;
import&amp;nbsp;System.Reflection&lt;br /&gt;
import&amp;nbsp;System.CodeDom.Compiler&lt;br /&gt;
import&amp;nbsp;System.Threading&lt;br /&gt;
import&amp;nbsp;Microsoft.CSharp&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Comment&quot;&gt;/**&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Comment&quot;&gt;&amp;nbsp;* createThread()&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Comment&quot;&gt;&amp;nbsp;* &lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;@param&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt;&amp;nbsp;&amp;nbsp; thread function&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Comment&quot;&gt;&amp;nbsp;* &lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;@param&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span class=&quot;Identifier&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt;&amp;nbsp;&amp;nbsp; argument passing to function&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Comment&quot;&gt;&amp;nbsp;* &lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;@return&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt;&amp;nbsp;&amp;nbsp;thread object&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Comment&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Comment&quot;&gt;*/&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Type&quot;&gt;var&lt;/span&gt;&amp;nbsp;createThread =&amp;nbsp;(&lt;span class=&quot;Identifier&quot;&gt;function&lt;/span&gt;()&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;var&lt;/span&gt;&amp;nbsp;source = [&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;using System.Threading;&amp;quot;&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;public class ThreadInvoker {&amp;quot;&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&amp;nbsp;&amp;nbsp;private Microsoft.JScript.Closure func;&amp;quot;&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&amp;nbsp;&amp;nbsp;private object arg = null;&amp;quot;&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&amp;nbsp;&amp;nbsp;public ThreadInvoker(Microsoft.JScript.Closure func, object arg) { this.func = func; this.arg = arg; }&amp;quot;&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&amp;nbsp;&amp;nbsp;private void invokerThread() { func.Invoke(null, new object[]{this.arg}); }&amp;quot;&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&amp;nbsp;&amp;nbsp;public Thread createInvoker() { return new Thread(invokerThread); }&amp;quot;&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;}&amp;quot;&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;].join(&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&lt;/span&gt;);&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;var&lt;/span&gt;&amp;nbsp;cp = CodeDomProvider.CreateProvider(&lt;span class=&quot;Constant&quot;&gt;&amp;quot;CSharp&amp;quot;&lt;/span&gt;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;var&lt;/span&gt;&amp;nbsp;cps = &lt;span class=&quot;Statement&quot;&gt;new&lt;/span&gt;&amp;nbsp;CompilerParameters();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cps.ReferencedAssemblies.Add(&lt;span class=&quot;Constant&quot;&gt;&amp;quot;Microsoft.JScript.dll&amp;quot;&lt;/span&gt;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cps.GenerateInMemory = &lt;span class=&quot;Constant&quot;&gt;true&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;var&lt;/span&gt;&amp;nbsp;cr = cp.CompileAssemblyFromSource(cps, source);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;var&lt;/span&gt;&amp;nbsp;asm = cr.CompiledAssembly;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Identifier&quot;&gt;function&lt;/span&gt;(f, a)&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;var&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;tt&lt;/span&gt;&amp;nbsp;: Type = asm.GetType(&lt;span class=&quot;Constant&quot;&gt;&amp;quot;ThreadInvoker&amp;quot;&lt;/span&gt;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;var&lt;/span&gt;&amp;nbsp;args = &lt;span class=&quot;Statement&quot;&gt;new&lt;/span&gt;&amp;nbsp;System.&lt;span class=&quot;Special&quot;&gt;Object&lt;/span&gt;[&lt;span class=&quot;Constant&quot;&gt;2&lt;/span&gt;];&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;args[&lt;span class=&quot;Constant&quot;&gt;0&lt;/span&gt;] = f;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;args[&lt;span class=&quot;Constant&quot;&gt;1&lt;/span&gt;] = a;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;return&lt;/span&gt;&amp;nbsp;tt.InvokeMember(&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;createInvoker&amp;quot;&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BindingFlags.InvokeMethod,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;null&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Activator.CreateInstance(tt, args),&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;null&lt;/span&gt;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
import&amp;nbsp;System.Net&lt;br /&gt;
import&amp;nbsp;System.Net.Sockets&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Type&quot;&gt;var&lt;/span&gt;&amp;nbsp;listener =&amp;nbsp;&lt;span class=&quot;Statement&quot;&gt;new&lt;/span&gt;&amp;nbsp;System.Net.Sockets.TcpListener(IPAddress.Parse(&lt;span class=&quot;Constant&quot;&gt;&amp;quot;127.0.0.1&amp;quot;&lt;/span&gt;), &lt;span class=&quot;Constant&quot;&gt;8080&lt;/span&gt;);&lt;br /&gt;
listener.Start();&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Statement&quot;&gt;while&lt;/span&gt;&amp;nbsp;(&lt;span class=&quot;Constant&quot;&gt;true&lt;/span&gt;) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;createThread(&lt;span class=&quot;Identifier&quot;&gt;function&lt;/span&gt;(client)&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;var&lt;/span&gt;&amp;nbsp;stream = client.GetStream();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;var&lt;/span&gt;&amp;nbsp;buf = &lt;span class=&quot;Statement&quot;&gt;new&lt;/span&gt;&amp;nbsp;System.Byte[client.ReceiveBufferSize];&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;var&lt;/span&gt;&amp;nbsp;bytesRead = stream.Read(buf, &lt;span class=&quot;Constant&quot;&gt;0&lt;/span&gt;, buf.length);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;var&lt;/span&gt;&amp;nbsp;str = [&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;HTTP/1.0 200 OK&amp;quot;&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;Content-Type: text/html&amp;quot;&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&amp;quot;&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&amp;lt;b&amp;gt;hello world&amp;lt;/b&amp;gt;: &amp;quot;&lt;/span&gt;&amp;nbsp;+ (&lt;span class=&quot;Statement&quot;&gt;new&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;Special&quot;&gt;Date&lt;/span&gt;).toString(),&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&amp;quot;&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;].join(&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;Special&quot;&gt;\r\n&lt;/span&gt;&lt;span class=&quot;Constant&quot;&gt;&amp;quot;&lt;/span&gt;);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;Type&quot;&gt;var&lt;/span&gt;&amp;nbsp;bytes = System.&lt;span class=&quot;Special&quot;&gt;Text&lt;/span&gt;.Encoding.Default.GetBytes(str);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;stream.Write(bytes, &lt;span class=&quot;Constant&quot;&gt;0&lt;/span&gt;, bytes.length);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;stream.Close();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;client.Close();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}, listener.AcceptTcpClient()).Start();&lt;br /&gt;
}&lt;br /&gt;
&lt;/blockquote&gt;
マルチスレッドウェブサーバです。カッコイー！&lt;br /&gt;
</description>
     <author>mattn.jp@gmail.com (mattn)</author>
   </item>
  </channel>
</rss>
