2013-01-01から1年間の記事一覧

M+ OUTLINE FONTS グリフの合成について

グリフを正しい位置で合成するためにはアンカーポイントの設定が必要です。 CVSにアンカーポイントに対応するためのスクリプトをコミットしました。 アンカーポイントについては、fontforgeに説明があります。 http://fontforge.sourceforge.net/ja/overview…

プログラミング言語 Shiba (仮称)

こんなプログラミング言語を考えている。Shiba fact: { @ if ( = 0 ) :x { 1 } { * :x fact ( - 1 ) :x } x: } fact 10 even: { @ if ( = 0 ) :x { true } { odd ( - 1 ) :x } x: } odd: { @ if ( = 0 ) :x { false } { even ( - 1 ) :x } x: } even 42 even…

静的型付けスタックベース関数型プログラミング言語 Kitten

マイナー言語 Advent Calendar 2013 のネタにしました。 Kittenでスタックと戯れる - Qiita [キータ]Kittenって子猫って意味なんだけど、それ以前にCatって言語があったみたいだ。concatenateのcatなのかな。

【闇 Advent Calendar 2013 12日目の記事です。】夜の闇は、子供だった私にとって大切な時間だった。現実から逃れ、孤独のなか、重たい頭で空想に耽るのだ。夜を死の時間と仮定してみる。人は夜ごとに死ぬのだ。夜の死んだ私は昼の生きた私から離脱し、宇宙…

Haxeのバグ

https://github.com/mandel59/hxcpp/commit/703b0f7129edc72fdead9ff9f034f42cc2ba1ec9 - return ((c & 0x0F) << 18) | ((c2 & 0x7F) << 12) | ((c3 << 6) & 0x7F) | ((*ioPtr++) & 0x7F); + return ((c & 0x0F) << 18) | ((c2 & 0x7F) << 12) | ((c3 & 0x7F…

RedHatからやってきたAltJava/AltJS言語 Ceylon

Ceylon 1.0.0がリリースされました。 米Red Hat、新言語「Ceylon 1.0」発表、初のプロダクションリリースに | SourceForge.JP MagazineRedHadがCeylonって言語を作っていることはどこかで読んで知っていました。でも、JVMをターゲットにした言語だし、ウェブ…

GoとRustの比較

こういうバージョンの処理系で試した。 $ go version go version go1.1.2 linux/amd64 $ rustc --version rustc 0.9-pre (825b127 2013-11-12 18:56:13 -0800) host: x86_64-unknown-linux-gnu// Go package main import ( "fmt" "sort" "strconv" ) type T …

Luaと協調するマルチステージ言語 Terra (3)

C言語後方互換性 TerraはClangの機能を使って、C言語との後方互換性を実現しているので、C言語から使えるライブラリならTerraからも使うことができる。 試しにTcl/TkをTerraから使ってみる。 libtcl = "libtcl8.5.so.0" libtk = "libtk8.5.so.0" includepath…

バイト、クビになった。

こんなことをブロクに書いたりしたら、自分の信用を落とすのではないかと不安になる。でも書く。もとから、大した信用なんてないのだから。バイト、クビになった。シフトの連絡がメールで入っていたのに、見落としていた。連絡来ないなと思いながらも、こち…

Luaと協調するマルチステージ言語 Terra (2)

実行時コンパイル LuaからTerraの関数を呼べるし、TerraからLuaの関数を呼べる。 -- hello2.t stdio = terralib.includec("stdio.h") function hello_lua() print("Hello from Lua!") end terra hello_terra() stdio.printf("Hello from Terra!\n") end terr…

Luaと協調するマルチステージ言語 Terra (1)

今年5月ごろに公開されて、Twitterではちょっとは流れてきたのだけれども、日本語の情報が全然流れないままのTerraという言語があって、ちょっと気が向いたのでもう一度調べてみることにした。Terra どんな言語なのか 説明によれば、TerraはLuaと同時に使え…

Ubuntu 13.10 IBus 1.5による文字入力の面倒な問題

散々話題になっていたので、Ubuntuを13.10にアップグレードした。結論から言えば、仕様がヤバい。キーボード配列の切り替え、IMの切り替え両方ともSuper + Spaceなんだけど、例えばこれでロシア語表音配列に切り替えてキリル文字を入力する。そしてMozcに戻…

Cとモナド

Go言語でEitherモナドは無理がありすぎる感じがした。では、他の言語ではどうだろうか? C言語では関数の戻り値でエラーかどうかを判定しなければならないことが多いわけですけど、&&演算子の短絡評価を使えば、簡潔にこのように簡潔に書くことさえ可能だ。 #…

Goとモナド

Goとerror monads - moriyoshiの日記ちょっとそれをモナドって呼んだらHaskellerやってきますよ? (太宰メソッド) こういうふうにやらないとモナドを使ったとは認めません。 package main import ( "log" "os" ) type right struct { val interface{} } typ…

OSC2013 Tokyo/Fall 参加しました

オープンソースカンファレンスに参加してきました。 日野遠い。筑波より遠い。 ウイーン (☝ ՞ਊ ՞)☝ 帰ってきたOSASK計画のブース見れてよかった 色々もらいました ちょっと大きすぎてリュックにも入らんね URL2013-10-19 13:11:33 via ShootingStar FlashAir…

依存型の表現力と逆問題

Idrisみたいに、函数プログラミングを前提にしている言語には函数を合成する演算が標準で用意されているよね。 (.) : (b -> c) -> (a -> b) -> a -> cこの演算子を使うと、函数を合成してくれる。函数の合成を使えば、プログラムを変数を使わないで書くこと…

こわくない Idris (7)

帰納と余帰納 制限された再帰 Idrisには函数が全域函数であるかチェックする機能があるのだけれども、プログラムに制限なく再帰が使われていると、その函数が値を返すのか、それとも停止しないで値が返らないままなのか判定する方法が存在し得ない。そこで、…

こわくない Idris (6)

表明から証明へ (3) headを証明する HaskellのPrelude.headとは異なり、IdrisのPrelude.List.headは、引数にコンスセルである証明をとるので、全域函数になっている。Idrisのシステムでは次のように、%assert_total宣言によって、全域函数であることが「表明…

こわくない Idris (5)

表明から証明へ (2) 型と命題 カリー゠ハワード同型対応により、プログラムと証明が対応すると述べた。実際にはどのように対応しているのだろうか? 実は、恒真である命題は、空でない(その型である値を持つ)型に対応しているのだ。 型と命題の対応関係を見…

こわくない Idris (4)

表明から証明へ 表明とテスト バグの原因のひとつとして、プログラム実行時に守るべき条件が守られていないことが挙げられるだろう。プログラムが一体どのような場合に正常に動作し、どのような場合に望まない結果をもたらすのかが分かっていなければ、バグ…

こわくない Idris (3)

ハロー、依存型プログラミングの世界 (3) 依存ペア 依存ペア dependent pair とは、ある値と、その値に依存した型を持つ値のペアのことだ。 data Exists : (a : Type) -> (P : a -> Type) -> Type where Ex_intro : {P : a -> Type} -> (x : a) -> P x -> Ex…

こわくない Idris (2)

ハロー、依存型プログラミングの世界 (2) データ型の宣言 代数データ型を宣言する場合には、Haskellと同様の記法を使うことができる。HaskellでもおなじみのEitherやListの宣言はidrisではこうなっている。 data Either a b = Left a | Right b data List a …

こわくない Idris (1)

はじめに Idrisという、Haskellに似ていて、依存型 dependent type を持っている言語がある。依存型を持った言語なんて他にもあるのだけれども、Idrisは general purpose を謳っている。わざわざ汎用って謳っているあたり、依存型ってのはもっと色々に使える…

haxe.Utf8の非互換性

次のコードの出力を各プラットフォームで比較する。(現時点のGitHub上にある開発版を使う。) import haxe.Utf8; class Hello { public static function main() { trace("あ𠀀い"); trace("あ𠀀い".length); trace("あ𠀀い".charCodeAt(1)); trace("あ𠀀い".c…

Rust 0.7

前回: Rust 0.4 - M59のブログRust 0.7 向けに書きなおし。 // for Rust 0.7 extern mod extra; use sort = extra::sort::quick_sort; fn main() { let (port, chan) = stream(); let chan = std::comm::SharedChan::new(chan); for std::uint::iterate(0, 1…

ピクセル指向プログラミング言語 Pixilang (5)

関数を作る 前回のプログラムに書き足して、次のようなプログラムを作った。 t = 0 s = "" while 1 { t = (t + 1) % 360 sprintf( s, "%03d", t ) t_reset() transp( 16 ) clear() transp( 255 ) fbox( -12, -12, 24, 24, BLACK ) print( s ) t_rotate( t, 0…

ピクセル指向プログラミング言語 Pixilang (4)

変数を使う 変数 variable を使ってみよう。変数とは、データを置いておく場所に名前を付けたものだ。たとえば、 t = 0 s = ""と書くと、tという変数には0が格納され、sという変数には""(空の文字列)が格納される。 格納しておいた値は、関数に渡したり、…

Pixilang マニュアル (英語) PixilangV3Manual - pixilang - Simple programming language for small graphics/sound applications and experiments - Google Project Hosting

ピクセル指向プログラミング言語 Pixilang (3)

アニメーション グラフィックスを動かしてみる。 while 1 { t_rotate( 1, 0, 0, 1 ) clear() dot( 0, 0, WHITE ) line( 0, 100, 100, 0, ORANGE ) box( -100, -100, 50, 100, RED ) fbox( 100, -100, 100, 50, #ffeecc ) frame() while get_event() { if EVT…

ピクセル指向プログラミング言語 Pixilang (2)

Pixilang入門の下書きみたいなものだと思ってください。 エラー プログラムに間違いがあると、エラーになることがある。 たとえば、次のプログラム while 1 { print( "Hello, world! ) frame() while get_event() { if EVT[ EVT_TYPE ] == EVT_QUIT { halt }…