« July 2008 | Main | September 2008 »

2008.08.29

今日のぱた☆へね

ずっとsparcで止まっていたので、きっちり勉強するのはあきらめて先に進むことにした。次は、末尾再帰の最適化(ex2.16-2.18)ですよ。

昔の書いた記事にhogelogさんの試行錯誤を追加。素晴らしい記事をリンクして、あたかも自分が分かっているかのように振る舞うコバンザメハック。
http://d.hatena.ne.jp/hogelog/20080706/p1
http://d.hatena.ne.jp/natsutan/20080705/1215240672

| | Comments (0) | TrackBack (0)

2008.08.28

本棚をさらす(perl編)

初めてのperl
続初めてのperl
初めてのperl win32システム
プログラミングperl 第3版Vol1、Vol2、第2版
Higher-order Perl
Perl Testing
バイオインフォマティクスのためのPerl入門
Mastering Algorithms With Perl
Perl Best Practices
Perl Hacks
実用 Perlプログラミング
Effective Perl
Perlデータマンジング

Cookbookも買ったはずなんだけど行方不明

| | Comments (2) | TrackBack (0)

2008.08.27

本棚をさらす(Lisp編)

Lisp in Small Pieces
Structure and Interpretation of Computer Programs
計算機プログラムの構造と解釈
Exploring Computer Science with Scheme
Paradigms of Artificial Intelligence Programming
Essentials of Programming Languages
Simply Scheme
Practical Common Lisp
Lisp 3rd edition
やさしいlisp 入門
入門Common lisp
Successfull lisp
プログラミングGauche
The little schemer
The seasoned schemer
The reasoned schemer
ANSI Common Lisp

古い本はなかなか手に入らない。

2008/8/28 追加
本棚の奥から発見した
Object Oriented Programming in Common Lisp: A Programmers Guide to the Common Lisp Object System

| | Comments (0) | TrackBack (0)

2008.08.25

本棚をさらす(C++編)

元ネタは興味拡散系の本棚を晒してみると自己紹介になったから。

Twitterでkinabaさんに振られた事もあり、手持ちのC++の本をさらしてみる。ちょうどデジカメが修理中なので、自分で打ち込んでみた。
http://twitter.com/kinaba/statuses/897072923
有名どころは一通りはそろっていると思うんだが、どうだろう。

Effective C++
More Effective C++
Effective STL
Exceptional C++
More Exceptional C++
Efficient C++
C++ templates
C++ template metaprogramming
Modern C++ Design
ジェネレーティブプログラミング

プログラミング言語C++
ロベールのC++入門講座
Accelerated C++―効率的なプログラミングのための新しい定跡
詳説C++
STL標準講座

The design and evolution of C++
C++言語のカラクリ 誕生の秘密と舞台裏
C++入門書の次に読む本

C++ Cookbook
C++プログラミングの処方箋
Large-Scale C++ Software Design
Inside the C++ Object Model
C++ Coding Standards
省メモリプログラミング
Boost C++ Libraries
The boost graph library
Practical Statecharts in C/C++

C++再考、Extended STL, Volume 1: Collections and Iterators、C++ Common Knowledge 辺りが欲しいところ。あと、C++のUnittest的な本は無いんだろうか。

| | Comments (1) | TrackBack (1)

2008.08.18

Forth続き

・対話環境を終わらせるには BYEを使う。これがわかるまで、毎回HP200LXを再起動していた。
・サブルーチンは再定義可能。再定義されたサブルーチンですらスタックに積む。あるサブルーチンFがあったとき、別のFを定義すると次からそちらが呼ばれる。FORGET Fを使うと、最新の定義がスタックから消えて、元のFが再び使えるようになる。クロージャ、レキシカルスコープが実装できそう。CALL BY NAMEに近いとか近くないとか。
・入出力はマニピュレータ方式。HEXって打つと次から16進の入出力になる。C++以外で見たのは初めて。
・IF 文は例題を見ても何とも思わないけど、自分で打ち込むといろいろきもい。比較するとスタックのトップが消えるので、消えて欲しくないときはDUPする。
・標準の処理の中にコンパイルの概念がある。規格でどこまできまっているのかが気になった。参考:http://cl-www.msi.co.jp/solutions/knowledge/lisp-world/articles/gauche-night-againの最後の所。

はてぶ、Twitterからも情報をもらう。Forth好き/隠れスタックフェチは多い。

・Factor。FAQの最初を読んだだけで使いたくなってくる。
「Factor is a functional, dynamically-typed, object-oriented, stack-based programming language designed by Slava Pestov. It's sort of like a combination of Forth and Lisp.」
http://factorcode.org/

・joyってのもある。
http://www.latrobe.edu.au/philosophy/phimvt/joy.html

・FreeBSDのブートローダは、FORTHベース
http://ficl.sourceforge.net/

・Staapl
SchemeでFORTHスタイルのPIC18コンパイラって、何なの?naoya_tなの?
http://zwizwa.be/archive/staapl.html

結論:Let Over Lambda 50 Years of Lispが欲しいです。

| | Comments (0) | TrackBack (0)

2008.08.17

Pythonで苦闘中

ちょっと時間が取れたので、PLYの字句解析と戯れる。

 File "../nvpp/nvpp/lex.py", line 451, in _form_master_re
  llist, lre = _form_master_re(relist[:m],reflags,ldict,toknames)
 File "../nvpp/nvpp/lex.py", line 451, in _form_master_re
  llist, lre = _form_master_re(relist[:m],reflags,ldict,toknames)
 File "../nvpp/nvpp/lex.py", line 451, in _form_master_re
  llist, lre = _form_master_re(relist[:m],reflags,ldict,toknames)
RuntimeError: maximum recursion depth exceeded

こんなエラーが出るミニマムな切り出しに成功。

import sys
sys.path.insert(0,"../nvpp/nvpp")

import lex as lex

t_D_NUMBER     = r'((\d|_)+)|(\d+((s|S)?(d|D))((x|X|z|Z|\?|\d|_)+)'

tokens = ('D_NUMBER',)

lexer = lex.lex(optimize=1)
if __name__ == "__main__":
  lex.runmain(lexer)

10進数の正規表現がおかしいらしい。っていうか書いた本人が見てもおかしい。

Text Processing in PYTHON のp262に浮動小数点のサンプルを見つけた。

http://gnosis.cx/TPiP/chap4.txtから

   #---- EBNF-style description of Python floating point ---#
   floatnumber  ::= pointfloat | exponentfloat
   pointfloat  ::= [intpart] fraction | intpart "."
   exponentfloat ::= (intpart | pointfloat) exponent
   intpart    ::= digit+
   fraction   ::= "." digit+
   exponent   ::= ("e" | "E") ["+" | "-"] digit+
   digit     ::= "0"..."9"

に対して、こんな風に書くのか。

   #---- Regular expression to identify a floating point ----#
   pat = r'''(?x)
      (          # exponentfloat
       (         # intpart or pointfloat
        (        # pointfloat
         (\d+)?[.]\d+ # optional intpart with fraction
         |
         \d+[.]    # intpart with period
        )        # end pointfloat
        |
        \d+       # intpart
       )         # end intpart or pointfloat
       [eE][+-]?\d+   # exponent
      )          # end exponentfloat
      |
      (          # pointfloat
       (\d+)?[.]\d+   # optional intpart with fraction
       |
       \d+[.]      # intpart with period
      )          # end pointfloat
      '''

なるほどねー。

| | Comments (0) | TrackBack (0)

2008.08.16

敷居の話

ときどきの雑記帖 i戦士篇から
http://www.kt.rim.or.jp/~kbk/zakkicho/08/zakkicho0808b.html#D20080815

「敷居が怖い」にしてみてはどうだろう。立ち止まるとニンジャが襲ってきそうで一歩も踏み出せない意味で。

例:洋書って言うだけで敷居がずいぶん怖くなる。

| | Comments (0) | TrackBack (0)

2008.08.14

Forthが人気過ぎる件

[fpga-cpu]でFPGAで動く小さなCPUについて盛り上がっていたので、ぼちぼち読む。
その中で、forthプロセッサが、紹介されていました。
http://www.jwdt.com/~paysan/b16.html

Forthプロセッサなら命令も単純だし、仕事で使う的な意味で良いかもしれないと、妄想全開モードになる。僕のForthのイメージってのは、パースを放棄して、人間が機械に合わせるアセンブラすれすれの言語で、ネタとして出てくるだけで死滅寸前の言語だと思ってました。まあHP200LXでも動くだろうし、VerilogとForthってなんか格好いいじゃん。

さらっと調べたら、現役すぎて驚く。

ISO/IEC 15145:1997(E) - Information technology - Programming languages - Forth (First edition: 1997-04-15)で標準化されてるって、おいおいどこの陰謀なんだ。Forthの実装が乱立して困ってる人達がいるのか?

オブジェクト指向も取り入れているようだし、Win32APIやDLLの呼び出しも可能。ARM向けのクロスコンパイラまであるよ!今年になってから本も出てるし、すごすぎる。

極めつけはこれ
http://www.ultratechnology.com/chips.htm
みんなForthプロセッサ作りすぎ><

| | Comments (4) | TrackBack (0)

2008.08.12

OFF充

ゆやりん迎撃オフ

無茶振りしてみたら、
やおっちさん:http://generation1986.g.hatena.ne.jp/yaotti/
fd0さん: http://d.hatena.ne.jp/fd0/
yun__yunさん:/http://d.hatena.ne.jp/yun__yun/
を補足に成功した。fd0さんとは、以前にメールでやりとりをしたことがあるらしい。帰ってからNifのメール見たら、確かにやりとりしていた。

@_a_uと@T_Hashには断られた。なんてこったい。

西尾さんを囲む会
こっちはyukkyさんに無茶振りされた。会場はゆやりん迎撃オフとおぼ同じ場所。ほとんど同じだねーと話していたら、やおっちさんと二人ではぐれてしまった。

そして、知らない人ばっかりのオフ会。ついにyukkyさんにFPGAを見せることができた。Verilog、VHDLをやったことがある人が2人くらいいて、ランダムに技術者集めたら1割くらいはハード系の人がいるんだろうなと思った。面白い事できそうだよね。

幼女がいっぱいの飲み会で、ゆやりんさんも来れば良かったのに、と思った。西尾さん幼女に大人気でした。

帰りの電車がまっちゃだいふくの人と一緒だったのでいろいろお話を聞けた。このひとは、やおっちさんを呼ぶとかならず絡んでくる。

・勉強会は趣味
・季節に一回程度でよい。
・キャンセルボタンするのは簡単だけどOKボタンを押すのは難しい。(勉強会を直前で理由付けて休むのは簡単で、ちゃんと当日参加してくれた人はすごい勇気を出している)
→耳が痛い><
・勉強会は主催者の色を出して良い
・技術者とは違うセキュリティの考え方もある。

勉強会もやってみたいなと思う反面、今は無茶忙しい。40代になったらぼちぼち勉強会をしようと心に誓った。あと5年!

どちらもすごく楽しかったです。
また次の機会があれば是非お願いします。

| | Comments (5) | TrackBack (0)

2008.08.10

Lispとゴキブリの共通点

・現代でも生き残っている数少ない古代種である
・ゴキブリは1匹見つけると20匹いる。Lispは1つのマクロが20倍のコードになる。[要出典]
・どちらも再帰的に増え続ける
・卵-幼虫-成虫、もしくは、Read-eval-printの成長段階を踏む
・全世界に約 4,000 種、うち日本には50種余りが知られる。
・その体構造が原始的・平均的であるため実験の対象として利用される事がある。アメリカ合衆国にはその手の業者/学者がいる。
・見た目によって忌み嫌われることが多いが、一方で愛好家も多い。
・特に主婦には人気がない。[要出典]

参考:http://ja.wikipedia.org/wiki/ゴキブリ

| | Comments (0) | TrackBack (0)

今年もバルサン

今年も恒例のバルサンの季節がやってきました。
8月に入って二度目の休日は、バルサンで消滅。

だんだんバルサンのコツも分かってきたので、ずいぶん楽になった。

今年の工夫として、
・バルサン終了後にすぐ洗うであろう食器、衣類は、バルサン前に食器洗い機、洗濯機に入れておく
・バルサン終了後に、嫁と娘で実家に帰るスケジュールにし、着替え関連は車に入れておく
・電化製品は壊れないからそのままにしておく。
を行ったらずいぶん楽になった。

年々バルサンのパワーが落ちているというか、臭いや粘つきが無くなった分、仕留めたゴキブリも数も減った気がします。

| | Comments (3) | TrackBack (0)

2008.08.07

今日の勉強

The SPARC-V9 Architecture 1.2.1 Featuresを適当に訳してみた。

・A linear address space with 64-bit addressing.
 64bitのリニアなアドレス空間

・Few and simple instruction formats: All instructions are 32 bits wide, and are aligned on 32-bit boundaries in memory. Only load and store instructions access memory and perform I/O.
 少なくて単純な命令フォーマット:全ての命令は32bit幅であり、メモリの32bit境界にアラインメントされる。ロードとストア命令のみが、メモリのアクセスとI/Oの実行を行う。

・Few addressing modes: A memory address is given as either “register + register” or “register + immediate.”
 少ないアドレスモードアドレッシングモード:メモリアドレスは、register + register”か“register + immediate"のどちらかで与えられる。

・Triadic register addresses: Most computational instructions operate on two register operands or one register and a constant, and place the result in a third register.
 Triadic register addresses:多くの計算命令は、2つのレジスタオペランド、もしくは1つのレジスタと1つの定数で実行され、3番目のレジスタに結果が格納される。

・A large windowed register file: At any one instant, a program sees 8 global integer registers plus a 24-register window of a larger register file. The windowed registers can be used as a cache of procedure arguments, local values, and return addresses.
 大きな windowed register file:どの瞬間でも、プログラムからは8つのglobal integer registersと、大きなレジスタファイルの中の24個のレジスタウィンドウが見えるwindowed registersは、手続きの引数、ローカル変数、戻り値戻り番地の、キャッシュとして使用することができる。

# 上手く日本語にできないな。
# 8つのグローバルレジスタは常に見えていて、レジスタファイルの中から24個のレジスタがwindowed registersとして見れる。

・Floating-point: The architecture provides an IEEE 754-compatible floating-point instruction set, operating on a separate register file that provides 32 single-precision (32-bit), 32 double-precision (64-bit), 16 quad-precision (128-bit) registers, or a mixture thereof.

 浮動小数点:Sparcアーキテクチャは、IEEE754互換の浮動小数点命令セットを提供する。32個の単精度(32bit)、32個の倍精度(64bit)、16個の4倍精度(128)か、これらの組み合わせによる個別のレジスタファイルで実行される。

・Fast trap handlers: Traps are vectored through a table.
Fast trap handlers:Trapは、テーブルに並べられる。

・Multiprocessor synchronization instructions: One instruction performs an atomic read-then-set-memory operation; another performs an atomic exchange-register-with-memory operation; another compares the contents of a register with a value in memory and exchanges memory with the contents of another register if the comparison was equal; two others are used to synchronize the order of shared memory operations as observed by processors.

 Multiprocessor synchronization instructions:一つの命令が、アトミックなread-then-set-memoryオペレーションを実行する。別の命令は、アトミックなexchange-register-with-memoryオペレーションを実行する。もう一つの命令はレジスタとメモリの値を比較し、比較結果が一致すれば、メモリの値を別のレジスタの内容と交換する。残りの2つは、プロセッサから観測された共有メモリ操作の順番の同期に使われる。

# とりあえず、マルチプロセッサの同期用の命令が5つあるって事らしい。

・Predicted branches: The branch with prediction instructions allow the compiler or assembly language programmer to give the hardware a hint about whether a branch will be taken.
 Predicted branches:prediction instructions付きのブランチは、コンパイラかアセンブリ言語のプログラマが、ハードウェアに、ブランチされるかどうかのヒントを与える。

・Branch elimination instructions: Several instructions can be used to eliminate branches altogether (e.g., move on condition). Eliminating branches increases performance in superscalar and superpipelined implementations.
 Branch elimination instructions:いくつかの命令は、ブランチ命令を除去する。ブランチ命令の除去は、スーパースカラーとスーパーパイプライン化された実装のパフォーマンスを上げる。

・Hardware trap stack: A hardware trap stack is provided to allow nested traps. It contains all of the machine state necessary to return to the previous trap level. The trap stack makes the handling of faults and error conditions simpler, faster, and safer.
 Hardware trap stack:Hardware trap stackは、trapをネストするために提供される。trap stackは、前のtrapレベルに戻るために必要なマシーンの状態全てを含む。trap stackは、faults と error状態のハンドリングを、簡単に、速く、安全にする。

・Relaxed memory order (RMO) model: This weak memory model allows the hardware to schedule memory accesses in almost any order, as long as the program computes the correct result.

 Relaxed memory order (RMO) model:ウィークメモリモデルは、プログラムが正しい結果を計算する限り、ハードウェアがメモリアクセスをほとんどどんな順番にでもスケジュールすることを可能にする。

マルチプロセッサの同期用命令と、Relaxed memory orderが想像もつかない。STMとかHTMとか関係あるのかな。資料読もう。

| | Comments (9) | TrackBack (0)

2008.08.01

今日のメモ

・テグザーには隠れキャラとしてミンメイ人形がでてきますよ!

・Nico-TECH : Takatsuki Meeting
http://syunei.dip.jp/nico_tech/index.php?nico-Tech%EF%BC%9A%20Takatsuki%20Meeting%E3%80%80%E3%83%8B%E3%82%B3%E3%83%8B%E3%82%B3%E6%8A%80%E8%A1%93%E9%83%A8%E9%96%A2%E8%A5%BF%E5%8B%89%E5%BC%B7%E4%BC%9A
関西+FPGAなのにLLのイベントよりもアウェー感を感じる。
行きたいが用事が入っているのでいけない。残念。

・OS作り
http://okwave.jp/qa4218107.html
確かに、できませんって断言するのあんまりだな。

SHのμIronくらいが丁度良い難易度な気がするんだ。
 ・プロセスモデルよりはスレッドモデル、一個の実行ファイルのみ
 ・MMU、ファイルシステム、標準入出力が不要
 ・システムコールに関する書籍あり
パソコンでになると、x86のモードの知識やら、とりあえずHDDなり、FDDを読みに行かないといけなかったり結構大変。H8レベルでもあったかな。

こういうのでOS作成に必要な知識(用語、データ構造、アルゴリズム、周辺ハードウェア)を学んでから次に進んだ方が良いと思う。情報系の大学の講義とかどうなっているだろう。ROMモニターを自力で作らせれば良いと思う。あれも一つのOSだから。

でも質問者はUNIX系OSを希望なのか。むう。

・ぱた☆へね
http://d.hatena.ne.jp/natsutan/20080801/1217581710
>おそらくダウンロードしただけではさっぱり動かないと思いますが、続きを書くかどうかは反響次第です。
はてぶが200個くらいつくか、中の人が釣られるくらいないと続きを書くのは無理。

・ぱた☆へね
Sparcの関数呼び出しについて、さくっとまとめようとしたけど難しい。
ちゃんと資料を読んで整理しようと思って読み始めたら、無茶面白い。
Dekker’s Algorithmとか初耳すぎて恥ずかしい。

・OpenSparc
レジスタウィンドウを操作する部分のVerilogを見つけて、にやにやしているところ。exu_rml_ctl.vの1200行目くらい。

// calculate possible CWP values
//---------------------------------------------
assign cwp_dec1_m[2:0] = cwp_m[2:0] - 3'b001;
assign cwp_inc1_m[2:0] = cwp_m[2:0] + 3'b001;
assign cwp_inc2_m[2:1] = cwp_m[2:1] + 2'b01 ;

| | Comments (3) | TrackBack (0)

« July 2008 | Main | September 2008 »