<?xml version="1.0" encoding="utf-8" ?><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" 
			xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" 
			xmlns:cc="http://web.resource.org/cc/" xml:lang="ja">
<channel rdf:about="http://hooki.blog23.fc2.com/?xml">
<title>雑草ブログ</title>
<link>http://hooki.blog23.fc2.com/</link>
<description>プログラミングについて書く予定。</description>
<dc:language>ja</dc:language>
<items>
<rdf:Seq>
<rdf:li rdf:resource="http://hooki.blog23.fc2.com/blog-entry-64.html" />
<rdf:li rdf:resource="http://hooki.blog23.fc2.com/blog-entry-63.html" />
<rdf:li rdf:resource="http://hooki.blog23.fc2.com/blog-entry-62.html" />
<rdf:li rdf:resource="http://hooki.blog23.fc2.com/blog-entry-61.html" />
<rdf:li rdf:resource="http://hooki.blog23.fc2.com/blog-entry-60.html" />
</rdf:Seq>
</items>
</channel>
<item rdf:about="http://hooki.blog23.fc2.com/blog-entry-64.html">
<link>http://hooki.blog23.fc2.com/blog-entry-64.html</link>
<title>C++0xで、関数の戻り値の型を2回書かずに済む方法 その2</title>
<description> こんなのを書いてみた。
namespace detail {
template&amp;lt;typename... A&amp;gt;
struct unnamed_ctor_impl;
template&amp;lt;&amp;gt;
struct unnamed_ctor_impl&amp;lt;&amp;gt; {
  template&amp;lt;typename T&amp;gt;
  operator T() const {
    return T();
  }
  template&amp;lt;typename T, typename... B&amp;gt;
  static T apply(B&amp;&amp;... b) {
    return T(std::forward&amp;lt;B&amp;gt;(b)...);
  }
};
template&amp;lt;typename A0, typenam
 </description>
<content:encoded>
<![CDATA[ <p>こんなのを書いてみた。</p>
<pre><code class="prettyprint lang-c++">namespace detail {
template&lt;typename... A&gt;
struct unnamed_ctor_impl;
template&lt;&gt;
struct unnamed_ctor_impl&lt;&gt; {
  template&lt;typename T&gt;
  operator T() const {
    return T();
  }
  template&lt;typename T, typename... B&gt;
  static T apply(B&amp;&amp;... b) {
    return T(std::forward&lt;B&gt;(b)...);
  }
};
template&lt;typename A0, typename... A&gt;
struct unnamed_ctor_impl&lt;A0, A...&gt; {
private:
  A0&amp;&amp; a0;
  unnamed_ctor_impl&lt;A...&gt; rest;
public:
  unnamed_ctor_impl(A0&amp;&amp; a0, A&amp;&amp;... a) : a0(a0), rest(a...) {}
  template&lt;typename T&gt;
  operator T() const {
    return apply&lt;T&gt;();
  }
  template&lt;typename T, typename... B&gt;
  T apply(B&amp;&amp;... b) const {
    return rest.template apply&lt;T&gt;(std::forward&lt;B&gt;(b)..., std::forward&lt;A0&gt;(a0));
  }
};
} // namespace detail

template&lt;typename... A&gt; inline detail::unnamed_ctor_impl&lt;A...&gt;
unnamed_ctor(A&amp;&amp;... a) {
  return detail::unnamed_ctor_impl&lt;A...&gt;(a...);
}
</code></pre>
<p>使用例</p>
<pre><code class="prettyprint lang-c++">template&lt;typename T&gt;
typename hogehoge&lt;typename piyopiyo&lt;T&gt;::result_type&gt;::type
some_function(T const&amp; x) {
&#160; return unnamed_ctor(x);
}
</code></pre>
 ]]>
</content:encoded>
<dc:subject>C++</dc:subject>
<dc:date>2010-01-31T16:03:15+09:00</dc:date>
<dc:creator>みき</dc:creator>
<dc:publisher>FC2-BLOG</dc:publisher>
</item>
<item rdf:about="http://hooki.blog23.fc2.com/blog-entry-63.html">
<link>http://hooki.blog23.fc2.com/blog-entry-63.html</link>
<title>C++0xで、関数の戻り値の型を2回書かずに済む方法</title>
<description> 戻り値の型がメタ関数とかの結果で、そのまま書くとすごく長いことがある。
template&amp;lt;typename T&amp;gt;
typename hogehoge&amp;lt;typename piyopiyo&amp;lt;T&amp;gt;::result_type&amp;gt;::type
some_function(T const&amp; x) {
  return typename hogehoge&amp;lt;typename piyopiyo&amp;lt;T&amp;gt;::result_type&amp;gt;::type(x); // 同じ型名を書いている
}

decltypeを使えば1回で済む。
template&amp;lt;typename T&amp;gt;
typename hogehoge&amp;lt;typ
 </description>
<content:encoded>
<![CDATA[ <p>戻り値の型がメタ関数とかの結果で、そのまま書くとすごく長いことがある。</p>
<pre><code class="prettyprint lang-c++">template&lt;typename T&gt;
typename hogehoge&lt;typename piyopiyo&lt;T&gt;::result_type&gt;::type
some_function(T const&amp; x) {
  return typename hogehoge&lt;typename piyopiyo&lt;T&gt;::result_type&gt;::type(x); // 同じ型名を書いている
}
</code></pre>
<p>decltypeを使えば1回で済む。</p>
<pre><code class="prettyprint lang-c++">template&lt;typename T&gt;
typename hogehoge&lt;typename piyopiyo&lt;T&gt;::result_type&gt;::type
some_function(T const&amp; x) {
  return decltype(some_function(x))(x);
}
</code></pre>
 ]]>
</content:encoded>
<dc:subject>C++</dc:subject>
<dc:date>2010-01-31T14:02:32+09:00</dc:date>
<dc:creator>みき</dc:creator>
<dc:publisher>FC2-BLOG</dc:publisher>
</item>
<item rdf:about="http://hooki.blog23.fc2.com/blog-entry-62.html">
<link>http://hooki.blog23.fc2.com/blog-entry-62.html</link>
<title>Lua 5.2.0 (work1)の雑感</title>
<description> 思ったこと。


C関数から呼び出したLua関数からyieldできるようにする関係で、多少複雑になってしまった感じがする。出来なかったことが出来るようになった代償か。
バージョン(luaL_checkversion)は、本当に必要だろうか。バージョンが違ってたらそもそも実行できるのかという疑問が。
lua_cpcallの代用が面倒。1行のコードが4行に。ただしポインタ以外のものも渡せるのはいいかもしれない。
非互換が多過ぎる。しかも互換
 </description>
<content:encoded>
<![CDATA[ <p>
思ったこと。
</p>
<ul>
<li>C関数から呼び出したLua関数からyieldできるようにする関係で、多少複雑になってしまった感じがする。出来なかったことが出来るようになった代償か。</li>
<li>バージョン(luaL_checkversion)は、本当に必要だろうか。バージョンが違ってたらそもそも実行できるのかという疑問が。</li>
<li>lua_cpcallの代用が面倒。1行のコードが4行に。ただしポインタ以外のものも渡せるのはいいかもしれない。</li>
<li>非互換が多過ぎる。しかも互換オプションはデフォルトで無効な上に、LUA_GLOBALSINDEXのように跡形もなく消えたものもある。</li>
</ul>
<p>
もちろん、これは最初の作業バージョンだから、正式リリースまでには全く違うものになっているだろう。非互換が多過ぎると書いたけど、互換オプションがデフォルトになる見込みは十分にある。
</p>
<p>
しかしLua 5.1 (work0)が2004年3月で5.1の正式リリースが2006年2月。
Lua 4.1のスナップショットが2001年5月、Lua 5.0 (work0)が2002年6月で5.0の正式リリースが2003年4月。
ということは正式リリースはまだまだ先だな。
</p>
<p>
<big>まとめ：今から心配したってしょうがない。</big>でもできるだけ追い続けていよう。
</p>
 ]]>
</content:encoded>
<dc:subject>Lua</dc:subject>
<dc:date>2010-01-10T00:02:16+09:00</dc:date>
<dc:creator>みき</dc:creator>
<dc:publisher>FC2-BLOG</dc:publisher>
</item>
<item rdf:about="http://hooki.blog23.fc2.com/blog-entry-61.html">
<link>http://hooki.blog23.fc2.com/blog-entry-61.html</link>
<title>Lua 5.2.0 (work 1) が公開された</title>
<description> Lua 5.2.0の作業バージョンが公開された。
MLの投稿:[ANN] Lua 5.2.0 (work1) now available


変更点などは自分で確認しよう。以下は(ほんの)一部。


言語

in-do-end (Lexical Environments)
みんなで使いどころを考えてやりましょう。
in {myprint=print} do
myprint(&quot;Hello world&quot;)
end

要はsetfenvでやっていたことの代替。そしてさようならget/setfenv。

\xHH


ライブラリ

setfenv/getfenvの廃止
 </description>
<content:encoded>
<![CDATA[ <p>
Lua 5.2.0の作業バージョンが公開された。<br />
MLの投稿:<a href="http://lua-users.org/lists/lua-l/2010-01/msg00260.html" target="_blank">[ANN] Lua 5.2.0 (work1) now available</a><br />
</p>
<p>
変更点などは自分で確認しよう。以下は(ほんの)一部。
</p>
<ul>
<li>言語
<ul>
<li>in-do-end (Lexical Environments)<br />
みんなで使いどころを考えてやりましょう。
<pre><code class="prettyprint lang-lua">in {myprint=print} do
myprint("Hello world")
end
</code></pre>
要はsetfenvでやっていたことの代替。そしてさようならget/setfenv。
</li>
<li>\xHH</li>
</ul>
</li>
<li>ライブラリ
<ul>
<li>setfenv/getfenvの廃止</li>
<li>ビット演算</li>
<li>table.packの追加</li>
<li>unpackはtable.unpackに移動</li>
<li>debugライブラリはrequire()でロードしてね</li>
</ul>
</li>
<li>CのAPI<br />
多過ぎな気がするので書きません。
</li>
</ul> ]]>
</content:encoded>
<dc:subject>Lua</dc:subject>
<dc:date>2010-01-09T20:21:21+09:00</dc:date>
<dc:creator>みき</dc:creator>
<dc:publisher>FC2-BLOG</dc:publisher>
</item>
<item rdf:about="http://hooki.blog23.fc2.com/blog-entry-60.html">
<link>http://hooki.blog23.fc2.com/blog-entry-60.html</link>
<title>JavaScriptのパーサを製作中</title>
<description> 前に書いたように、JavaScriptにはブロックスコープがない。
JavaScript 1.7にはlet文というのがあるのだが、今の時点ではただの独自拡張だ。Mozilla系以外のブラウザでは動かない。
それなら、let文を使ったコードを、前に書いたような方法(function(){}()で包む)で、どのブラウザでも動くようなコードに変換すればいい。


というわけで今はJavaScriptのコードのパーサを書いている。しかしAutomatic Semicolon Insertionが
 </description>
<content:encoded>
<![CDATA[ <p>
前に書いたように、JavaScriptにはブロックスコープがない。
JavaScript 1.7にはlet文というのがあるのだが、今の時点ではただの独自拡張だ。Mozilla系以外のブラウザでは動かない。
それなら、let文を使ったコードを、前に書いたような方法(function(){}()で包む)で、どのブラウザでも動くようなコードに変換すればいい。
</p>
<p>
というわけで今はJavaScriptのコードのパーサを書いている。しかしAutomatic Semicolon Insertionがめんどくさい。
</p>
<p>
これが完成すればlet以外の機能(Expression closuresのような、純粋なシンタックスシュガーの類)も実装したい。
</p> ]]>
</content:encoded>
<dc:subject>JavaScript</dc:subject>
<dc:date>2010-01-02T10:33:43+09:00</dc:date>
<dc:creator>みき</dc:creator>
<dc:publisher>FC2-BLOG</dc:publisher>
</item>
</rdf:RDF>