2009年1月アーカイブ

Whitespace

| # Comments
Rubyで作る奇妙なプログラミング言語 ~Esoteric Language~にて紹介した本の中から、「Whitespace」言語のJava実装ができました。

本来 "whitespace" とは「空白」や「余白」を意味する英単語である。多くの一般的なプログラミング言語では空白に相当する文字(スペース、タブ、言語によっては改行も)は単語間の区切りとして使われている。しかし、言語 Whitespace においてはプログラムは空白文字だけで構成される(それ以外の文字列はコメント扱いで無視される)。そのため、一見するとプログラムであることすらわからないという珍しい言語である。
Wikipediaより

Brainf*ck

| # Comments | 1 Trackback
昨日に続きまして、 Rubyで作る奇妙なプログラミング言語 ~Esoteric Language~にて紹介した本の中から、「Brainf*ck」言語のJava実装です。

Brainfuckの言語仕様

実行可能な命令は「8つ」のみである。

  1. > ポインタをインクリメントする。ポインタをptrとすると、C言語の「ptr++;」に相当する。
  2. < ポインタをデクリメントする。C言語の「ptr--;」に相当。
  3. + ポインタが指す値をインクリメントする。C言語の「(*ptr)++;」に相当。
  4. - ポインタが指す値をデクリメントする。C言語の「(*ptr)--;」に相当。
  5. . ポインタが指す値を出力する。C言語の「putchar(*ptr);」に相当。
  6. , 1バイトを入力してポインタが指す値に代入する。C言語の「*ptr=getchar();」に相当。
  7. [ ポインタが指す値が0なら、対応する ] の直後までジャンプする。C言語の「while(*ptr){」に相当。
  8. ] ポインタが指す値が0でないなら、対応する [ にジャンプする。C言語の「}」に相当。
Wikipediaより

HQ9+

| # Comments | 1 Trackback
Rubyで作る奇妙なプログラミング言語 ~Esoteric Language~にて紹介した本の中から、「HQ9+」言語をJavaで実装してみます。

HQ9+」言語とは、

  • Hコマンドは文字列"Hello, world!"を出力する。
  • Qコマンドはプログラムのソースコードを出力する。
  • 9コマンドは『99 Bottles of Beer』(アメリカの数え歌で、プログラミングの例題でよく利用される)の歌詞を出力する。
  • +コマンドはアキュムレータをインクリメント(1だけ増やす)する。
Wikipediaより

です。

というわけで早速実装してみます。
Rubyで作る奇妙なプログラミング言語 ~Esoteric Language~

奇妙。

例えば、'H'、'Q'、'9'、'+'の4つの命令しかなく、Hello Worldプログラムを1バイトで記述できる「HQ9+」言語や、8つの記号'>'、'<'、'+'、'-'、'.'、','、'['、']'のみで記述する「Brainf*ck」言語、半角スペース、タブ、改行のみで記述する「Whitespace」言語など、とにかく奇妙な言語たち。

でも、そのそれぞれの処理系の実装にあたり、Rubyの簡単な解説から、様々な実装方式の解説、チューリングマシンの解説など、話題がバラエティに富んでいて全く飽きない。

新しい言語を実装してみたいというつわものがどれだけいるのかわかりませんが、そういう人の入門書としては最良の本かもしれません。
新版暗号技術入門 秘密の国のアリス

普段何気なく使っている暗号システムについて、詳細かつ簡潔に説明されている本です。
ある程度の知識はあると自負していたこの辺の知識も、この本を読むと全くのうわべだけのものだったことを痛感しました。
一番利用する機会が多いであろうSSL/TLSについても、実は全く理解していなかったことに愕然。

正しく理解しないで利用することで、逆にセキュリティレベルを下げてしまう危険性もあるので、きちんと理解していきたい。

Twitter Icon

AdSense

Creative Commons License
このブログはクリエイティブ・コモンズでライセンスされています。
Powered by Movable Type 5.14-ja

Google検索

カスタム検索

2013年10月

    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31