
「アセンブラ短歌」が書籍化される 84
ストーリー by headless
趣味 部門より
趣味 部門より
ymitsu のタレこみによれば、31バイトでプログラムを書く「アセンブラ短歌」の解説書が発売されるそうだ(Mynavi Advanced Library特集ページ、
アセンブラ短歌)。
アセンブラ短歌とは、「五・七・五・七・七の三十一バイト(みそひとバイト)から成る 機械語コードでプログラムを書いてみるという近未来の文化的趣味」とのこと。近年、アセンブラ学習が見直されているが、遊び感覚でアセンブラを学習する方法として考え出されたものだという。31バイトの機械語コードが決められた位置で区切られるようにプログラミングし、韻を踏むために同じバイトパターンを決まった位置に埋め込むなどの技術を身に着けることで、バッファーオーバーランの脆弱性を攻撃するために送り込まれるシェルコードの解析や対策を考えるためにも役立つとのことだ。
書籍「31バイトでつくるアセンブラプログラミング ~アセンブラ短歌の世界~」は1月7日発売。1月6日までの先行予約期間は限定価格で購入可能だ。紙の書籍と電子書籍(PDF)が選択できるが、紙の書籍は受注生産のため書店の店頭に並ぶことはない。普通の解説書では飽き足らない読者のための「Mynavi Advanced Library」の第1弾とのことで、以前/.Jでも話題となった「Rubyで作る奇妙なプログラミング言語」が復刻再版され、同時に発売される。
アセンブラ短歌とは、「五・七・五・七・七の三十一バイト(みそひとバイト)から成る 機械語コードでプログラムを書いてみるという近未来の文化的趣味」とのこと。近年、アセンブラ学習が見直されているが、遊び感覚でアセンブラを学習する方法として考え出されたものだという。31バイトの機械語コードが決められた位置で区切られるようにプログラミングし、韻を踏むために同じバイトパターンを決まった位置に埋め込むなどの技術を身に着けることで、バッファーオーバーランの脆弱性を攻撃するために送り込まれるシェルコードの解析や対策を考えるためにも役立つとのことだ。
書籍「31バイトでつくるアセンブラプログラミング ~アセンブラ短歌の世界~」は1月7日発売。1月6日までの先行予約期間は限定価格で購入可能だ。紙の書籍と電子書籍(PDF)が選択できるが、紙の書籍は受注生産のため書店の店頭に並ぶことはない。普通の解説書では飽き足らない読者のための「Mynavi Advanced Library」の第1弾とのことで、以前/.Jでも話題となった「Rubyで作る奇妙なプログラミング言語」が復刻再版され、同時に発売される。
BASICの1行プログラム (スコア:3)
1行(255文字)でも結構まともなゲームができるので感心しました。
Re:BASICの1行プログラム (スコア:1)
パイプ無し、制御構文無しなら、ワンライナーとは言わずに、単なるコマンド行と言います。
Re:BASICの1行プログラム (スコア:1)
昔のBASICには行番号というものがあって、1行プログラムというのは行番号が一つだけということなのです。
#でもPC-6001は1行72文字までだったり
非対象読者 (スコア:2)
出版社のページで 1 章を試し読みできるので読んでみた。まあ読む前からわかっていた気もするけれど、本書は、「5・7・5・7・7 バイトの機械語でプログラムを書く」と言われて、面白そうと思う人向けに書かれている。「5・7・5・7・7 バイトの機械語でプログラムを書く」という本書の目的自体に共感できない人は、それ以上読んでも無駄っぽい。
以下自分語り。残念ながら僕はこのコンセプトに共感できず、本の内容は独りよがりだとしか思えなかった。変なプログラミング自体は嫌いではないつもりだけど、プログラミングに関して、理由もなく規則を設けておいて、「規則を守っているからすごい」という方向性は、僕はどうも好きじゃない。そんな風にすごさの基準を人工的に作らなくても、世の中にすごいプログラムはたくさんあるのに、と思ってしまう。
Re:非対象読者 (スコア:2)
短歌の 5・7・5・7・7 にも必然性はありませんが、数字に理由というか意味はあるのです。日本語には何となく 4 拍子のリズムがあるので、 5・7・5・7・7 は音読したときに語呂が良いです。例えば 6・10・6・10・10 では同じような語呂の良さは生じません。 (短歌の存在も日本語のリズムに影響を与えているでしょうから、鶏が先か卵が先かの問題はあるかもしれませんが。)
一方、この「アセンブラ短歌」は、そもそも機械語を音読するわけではないので日本語が持つ 4 拍子のリズムは関係ありません。仮に音読するとしても、 1 バイトを音読したら 1 拍にはなりませんし。なので、短歌の表面だけ真似しているけれど、なぜ 5・7・5・7・7 が良いのかという理由の部分はなくなっていて、規則のための規則に矮小化されてしまっているという印象を受けました。
まあ、そんな風に共感できない理由を考えても仕方なくて、趣味が合わないものは趣味が合わないというだけかもしれませんが。 IOCCC とか polyglot とかは必然性がなくても好きですし…。
Re:非対象読者 (スコア:2)
僕は自分がアセンブラ短歌が面白いと思わない理由を説明しただけで、他の人が面白いと思う分には構いません。それを「自分の価値観で否定」していると言われると、ちょっとね。
Re:非対象読者 (スコア:2)
「ちょっとね」とか「思うのですが」じゃなくて、問題だと思うなら何が問題かはっきり書いてくださいよ。
僕は前述の通り、「アセンブラ短歌」は僕にとってつまらないと感じています。すなわち、僕は「アセンブラ短歌」の僕にとっての「面白さ」「良さ」を否定しています。当然、自分の価値観でです。そのことに何か問題があるとは思いません。
僕は他の人が僕と同じように考えるべきだなんて言っていないし、少しも思っていません。すなわち、「アセンブラ短歌」の他の人にとっての「面白さ」「良さ」を否定する気はありません。
Re:非対象読者 (スコア:1)
五・七・五・七・七というのが機械語の都合で美しい数字になっていれば、fcp氏の共感を得られたかも?
ROM内蔵マイコンのパッチ用メモリ容量かなにかを参考に、8・16・8・8 とか、データ部8・8、プログラム部16とか。
Re:非対象読者 (スコア:2)
例えば、命令キャッシュに載る範囲でコードを書くことで高速化したい等、機械語を一定のバイト数以内に収める理由があれば、すごく納得できるのです (実際の CPU の命令キャッシュはそんな風には動作しないかもしれませんが、これはたとえなので事実と違う点があればご容赦)。でもそうでなく単に 2 の累乗になっていても、どうかなあ…。やっぱり僕は「なんでそんなことしたいの?」と思ってしまうような気がします。
Re:非対象読者 (スコア:2)
わざわざ直前にある「プログラミングに関して」を削って引用しておいて、そんな反応をされてもなあ…。
Ah!Ski (スコア:1)
アセンブラ少年のキム君が、今はそんなことをしているのか。...と思った。
せめて256バイトにしたら? (スコア:0)
そうすればもう少し実用的なものも生まれてきそうなのに
Re: (スコア:0)
いや短歌じゃなくなるでしょ
文芸部 (スコア:0)
文芸部にプレゼントしてハッカーメガネっ娘を量産したい
Re:文芸部 (スコア:2)
私が入っている文芸部にはなりかねない人が二人ほどいる……。
#でもメガネじゃないなぁ。
640GBはすべての人にとって未来永劫充分なメモリだ。
6809はNG CPUですね (スコア:0)
どうせあの命令を使うに決まってるから。
Re:6809はNG CPUですね (スコア:2)
ほえほえ
毎度毎度 (スコア:0)
思うこと…。
機械語(machine language)→CPUが直接理解できる言語
アセンブリ言語(assembly language)→(より)人間に理解しやすい、機械語と1対1に対応する言語
アセンブラ(assembler)→アセンブリ言語を機械語へ変換するもの
だと思うのですけどねぇ…。
# 書籍には、さらに『アセンブラ言語』なるものも出ちゃってますし…。
Re:毎度毎度 (スコア:2)
何言ってんだおめ。
だからこの本を読めば 31 バイトの超コンパクトなアセンブラができるに決まってんだろ (違)。
Re: (スコア:0)
私もまったく同じ認識でしたが、改めて考えてみると、assemblyは英語としてはおかしい気がしなくもないですね。アセンブリ言語の文字列から機械語へ変換することを「ハンドアセンブル」と言ったりすることからもわかるように、assembleするのがassemblerです。我々が「アセンブリ言語」と呼ぶものは、「アセンブラに渡す言語」以外の意味を持っていないので。IBM派の主張もわからんではないです。
そもそもの目的は「assemble(集める、集合させる)」なんですから、言語をassemblyと言ってしまうのは若干の違和感を残します。assemblerを基準に考えると、機械語
Re:毎度毎度 (スコア:2)
例の言語を指す言葉として assembly language と assembler language のどちらが正しいかなんて議論するのは不毛だけれど、少なくとも assembly language が英語としておかしいなんてことはないよ。「理屈を考えると変だけど使われる」という言葉もあるけれど、 assembly language についてはべつに理屈を考えても変ではない (少なくとも、あなたの書いたような理由で変だということはない)。
assembly という英単語は動詞 assemble の名詞形で、意味がいくつかある。あなたは「集まり」すなわち「assemble した結果できるもの」という意味にこだわっているみたいだけど、 assembly にはそのほかに「assemble するという行為」という意味がある (Wiktionary [wiktionary.org] に載っている意味の 2 番目: 「The act of putting together such set of pieces. instructions for assembly ; assembly line」)。 assemble するのに使う言語、すなわち assembly に使う言語だから、 assembly language と呼ぶのは自然なことだよ。
ただし、上では説明上「assembly に使う言語」と書いたけれど、実際に assembly という言葉を「例の言語から機械語に翻訳すること」の意味で使うことは、 assembly language や hand assembly 等の特定の複合語以外ではあまりなく、普通は assembling と呼ぶみたい。「例の言語から機械語に翻訳すること」を単体で assembly と呼ぶことはほとんどないのに assembly language という言葉を使うのは変だというのなら、まあその意味では変かもしれない (この点も理屈を付けようと思えば付けられそうではあるけれど、あまり考えていない)。
Re: (スコア:0)
#2503448 のACです。
assemblyを『集まり、集合』と翻訳するとそうかも知れませんが、それ以外に『(組み立て前の)部品』と言う意味もあります。
ですので部品(ニーモニック)を組み合わせるので、私としては元の言語は assembly language の方がしっくりくるなぁ…と思う次第。
Re: (スコア:0)
assembly を部品と訳すと、それは既に組みあがっている部品ですよ。とめてあるネジとか。だから、組み立て作業をassemblyと呼ぶ以外の解釈は無理筋だと思います。
Re: (スコア:0)
米IBMはネイティブじゃなかったか。
Re:毎度毎度 (スコア:2)
流れから 31 字と思いきや、 31 語となぜそこで言う。
Re:毎度毎度 (スコア:1)
アセンブリ、1命令が1ワード。31語で合ってるのでは?
Re:毎度毎度 (スコア:2)
意図を汲んでもらえて嬉しいです。
この「アセンブラ短歌」では、 31 命令ではなく、 31 バイトの機械語でプログラムを書くことになっているので、それでは話が合わないのです、という内容をうまく 5・7・5・7・7 で表現する方法がまったく思い浮かびませんでした。精進します…。
Re: (スコア:0)
Anonymousは形容詞です
Re: (スコア:0)
誤用の類を指摘する人って、大概本題の中身には触れないよね。
Re:毎度毎度 (スコア:2)
assembly は副詞じゃなくて名詞だよ。考えるのもいいけど、辞書も引こうよ。
動詞から行為を表す名詞を作る接尾辞 -y [yahoo.co.jp] というのがある。 assembly は、動詞 assemble にこの -y が付いてできた名詞だよ。
assembly language は computer system 等と同じで、名詞と名詞の複合語。
アセンブラ? (スコア:0)
機械語で公開するんならアセンブラー必要ないよね?
Cコンパイラーでもいいんじゃ?
Re:アセンブラ? (スコア:2)
C 言語でプログラムを書いてコンパイル後の機械語が 31 バイトになるようにする方法さえあればそれでもいいけど…そんな方法があったところで、どうせ処理系依存になるし、素直にアセンブリ言語を使う方が楽じゃないの。
Re: (スコア:0)
AT&T記法は、普通のプログラミング言語と代入方向が違うから、地味に面倒臭いよ、
intel記法で書けばいいけど、上の理由で、二つの記法が混在するわけが分からんことになるから、元ネタが AT&T記法である以上使いにくい。
Re:アセンブラ? (スコア:2)
何を言っているかわからないレベルで話がずれているけれど、僕はアセンブリー言語が簡単だなんて言っていないからね? 機械語で 31 バイトになるプログラムを書きたい場合に (←これはしょうもない目標だと思うけれど、何をしたいかは人それぞれなので受け入れる)、「C 言語でプログラムを書いてコンパイル結果の機械語が 31 バイトになるようにする」なんて無理ゲーに比べれば、アセンブリー言語で書く方が簡単だと言っているだけで。
技法(OR修辞法?) (スコア:0)
万能枕詞 NOP
無題 (スコア:0)
NOP NOP NOP NOP NOP
NOP NOP NOP NOP NOP NOP NOP
NOP NOP NOP NOP NOP
by Anonymous Coward
Re:無題 (スコア:1)
しずけさや
いわにしみいる
むしのこえ
ほほぅ、芭蕉の句を機械語訳したものですね。
(コメ#2503585 [srad.jp]で指摘されている結末に、虫の声が聞こえるのさ…)
Re:無題 (スコア:1)
Re: (スコア:0)
NOP sled?
Re: (スコア:0)
最後はHLT辺りで終わらないと暴走してしまいます。
1命令16bitや32bit単位のプロセッサは無視ですか (スコア:0)
「五・七・五・七・七の三十一バイト」ってことは。
Re: (スコア:0)
そういうプロセッサでは31ワードにすればいいんじゃないの。実際英語の俳句は語数でカウントするらしいし。
Re: (スコア:0)
音節数でしょ。
Re:Rubyで作る奇妙なプログラミング言語 (スコア:1)
リンク先で紙版と電子版が両方発売予定になってるわけだが何が不満?
Re:Rubyで作る奇妙なプログラミング言語 (スコア:1)
再販されない、ほかの本についての不満ですね。
LIVE-GON(リベゴン)
Re: (スコア:0)
プログラミング言語の場合、改訂が必要になるから、その費用がペイしないなら、絶版は仕方ないんじゃないの、
Re: (スコア:0)
そんなん必要ないからそのままで売れって元スレの人は思ってるんだろう。
俺もそう思う。
Re:Rubyで作る奇妙なプログラミング言語 (スコア:4, すばらしい洞察)
でも電子書籍にして売ったら売ったで、今度は「対価を取って売っている以上責任を持って、時代に合わなくなった部分は改訂しろ、そうでないならただにしろ」とか言い出すんじゃないの?
Re:Rubyで作る奇妙なプログラミング言語 (スコア:1)
言い出す人は必ずいるだろうけど、そんな意見は無視していいから電子書籍にして欲しいですな。
LIVE-GON(リベゴン)
Re:何となくフラクタル (スコア:1)
これですね。
8086アセンブラ短歌ジェネレータ [utf-8.jp]