!kiyoka.blog.2013_09 RSSPLAIN

Related pages: !kiyoka.blog.list
5555555144444444444444444444444444444444444344444444344443444444444444444443444444444404445555555522205555555555555555555505
5

kiyoka日記。NendoSekkaの開発や、最近思うことなど

5

最新10件!kiyoka.blog   過去記事一覧!kiyoka.blog.list

5

kiyoka.blog_header 

5

このブログを書いている人: 西山 清香(kiyoka) - twitter: @kiyokaEXT

5

5

 

5

 

1

kiyoka.2013_09_10[Nendo] 副作用の無いコードの静的解析について(1)

4

 

4

だいぶ前に、Nendoに型検査を入れて副作用の無いコードを静的解析で保証したいという話題を書いた。

4
 ( kiyoka.2011_10_07[Nendo][Ruby] コードブロックに副作用が混在するかを検出できるかどうか )
4

あれから時間が経ったけど、諦めずに考えているのであった。もう2年も経ったのか…

4

 

4

最近TAPL(第8章、第9章)を読んで、理論的なところを知ると、いろいろ気づいたので自分用のメモとして書いておく。

4
 4274069117  型システム入門 -プログラミング言語と型の理論-: Benjamin C. Pierce
4

 

4

欲しい機能

4

Nendoにどんな機能を追加したいかというと、

4
(pure S式)
4

と書くと、コンパイル時に静的解析して「S式の中に副作用が無いことを保証してくれる」機能だ。

4

 

4

例えば、次のコードは静的解析で実行前にエラーとなる。

4
(pure
4
 (define a 0)
4
 (set! a 1))
4

 

4

次。func1からの関数呼び出しがどれだけ深かろうが静的に検査して欲しい。

4
(pure
4
 (func1))
4

 

4

また、次のコードは副作用が無いと判断し、エラー無しで通って欲しい。

4
(pure
4
 (define lst '(1 2 3))
4
 (define result
4
   (map
4
    (lambda (x)
4
      (+ x 1))
4
    lst)))
4

 

4

ただ、そう簡単にはいかないのが世の中というもの。

4

 

4

問題点

4

 

3
アノテーションの記述量が膨大になる
4

 

4

静的解析するためには、事前に型情報のようなものが必要となる。

4

型情報といっても、副作用が無いと考えられる関数全てに「pure」の注釈を付けるだけなので、StringやIntegerなどの型情報は不要だ。

4

最低限、pureな全ての関数には必要。

4

 

4

これはなかなか膨大な作業で、関数を定義するたびに注釈を付ける必要がある。

4

なんとか半自動でやる方法は無いものかなぁ。

4

 

3
構文にも型情報が必要
4

 

4

if や cond 、let let* などの規定の構文(syntax)にも型情報が必要。

4

これは関数とは別に特別扱いで処理する必要がある。

4

 

3
Rubyのメソッドディスパッチの問題
4

 

4

Nendoは、残念なことに次のような記述を許してしまっている。

4
(str.chomp)
4

 

4

strという変数がRubyのString型であると判別できないと、chompというメソッドがString#chompだとはわからない。

4

これは、Nendoが動的型付け言語なのでstrがRubyのどの型なのか簡単にはわからないため。

4

静的解析できるようにするためには、strの型をアノテーションしてやらないいけないが、こいつはプログラマに余分な手間をかけさせてしまう。

4

お手軽にやりたいので、アノテーション無しにしたいところ。

4

 

4

解決策は、(str.chomp)のような 「. (ドット)によるメソッドコンビネーションは使えない」とすることかな。

4

その場合は、pureなchomp関数を定義する必要がある。

4
(chomp str)
4

 

4

自分が過去に書いたコードでも、str.sizeは多様している気がするので、そこは書き直す必要がある。

4

 

4

その他(備忘録)

4

 

3
デバッグ出力は特別扱い
4
#?=S式
4

という形式のデバッグ出力は、標準エラー出力にデバッグ表示するという副作用があるのだが、気軽にデバッグ出力を入れたいので型検査結果として「副作用なし」としたい。

4

 

4

おわりに

4

 

4

NendoはSchemeのサブセットであり、最初から静的型付けの言語とは反対の性質を持っているので、後付けでどこまでできるかという問題になりそうだ。

4

まあ、実際にはやってみないと何が出るかわからんというところですな。

4

ただ、JavaScript界隈では先駆者が多く存在し、JSX、Dartは型はoptionalで、指定が無ければ型推論で補うようになっているなど、参考にできるものはたくさんありそう。

4

TAPLを読むだけでなく、先行技術も調査しないといけないなぁ。

4

 

0

comment (disabled)

4

4

 

4

 

5

kiyoka.2013_09_09[Sekka] Sekka 1.4.0 リリース

5

SKKライクな日本語入力メソッド Sekka 1.4.0をリリースしました。(リリースノート Sekka.ReleaseNote)

5
 iStock_000016378483XSmall
5

 

5

しばらく使ってみて安定しているようなのでリリースしました。

5

1.4.0では、さらにミスタイプに寛容になりました。

5

モードの無いSKKの世界をお試しください。

5

 

2

なお、AZIK対応辞書ですが、あまりにもサイズが大きくなってきたので配布しました。

2

必要あれば再度サポートしますので、フィードバックお願いします。

2

 

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2013_09_03[Sekka] 後方一致辞書の実験

5

Sekkaを2008年に作ってからずっと使っているのだけど、ほぼ毎日使っていると不満が出てくるものだ。

5
 iStock_000016378483XSmall
5

最近、重い腰を上げて挑戦したのが、単語の前方からだけでなく、後方からも曖昧辞書検索するという実験だ。

5

結果は良好で、さらにミスタイプを救ってくれるようになった。

5

 

5

Sekka-1.2.4までは、1文字目のミスタイプは救ってくれなかった。

5

例えば、「日本語変換」と入力する場合、

5
Nihongohenkan
5

と打つのが正解だが、

5
ihongohenkan
5

と打ってしまったとする。

5

Sekka-1.4.0(リリース予定版)では変換候補に「日本語変換」も出てくるようになる。Sekka-1.2.4では出てこない。

5

 

5

ミスタイプは、入力文字の前半だろうが後半だろうが同じ確立で発生するのだから、同じように救済するのが正しい。

5

しばらく評価期間置いて安定したらリリースする予定。

5

 

0

comment (disabled)

5