タグ

ブックマーク / alohakun.blog7.fc2.com (38)

  • ホワット・ア・ワンダフル・ワールド gcc のフロントエンド作る日記 (11) ネストした関数を作る

    私は知識に何ものかを付け加え,また他の人々がより多くのものを付け加える手助けをした --- G.H.ハーディ gcc の独自拡張として,外側のスコープの変数を参照可能なローカル関数を定義できる (nested functions extension) というのがあります.例えば,こんなコードも valid です. #include <stdio.h> int main() { int foo(int x) { int bar(int y) { int baz() { return x + y; } return baz(); } return bar(20); } printf("%d\n", foo(10)); return 0; } $ gcc test.c $ ./a.out 30 今回は,こういう簡単なローカル関数の構文木を作ります. int main() { int x = 10

    advblog
    advblog 2009/11/04
  • ホワット・ア・ワンダフル・ワールド 奇跡のリンゴ

    奇跡のリンゴ―「絶対不可能」を覆した農家・木村秋則の記録 もう手放しで大絶賛.非常に素晴らしいなので,みなさん読みましょう. 読みやすくて,ぐんぐん引き込まれて,あっという間に読み終わってしまいました. リンゴの木,大自然のデバッグに比べたら,コンピュータプログラムのデバッグなんて大したこと無いよなぁと,ここ数週間 CPU のマニュアルと格闘しながらシミュレータのデバッグに悩まされているサラリーマンはたいそう勇気付けられました.所詮は人が作ったものですからね.理解できないはずがない. 「りんご一筋 30 年」 というと,長そうだけど,農業の場合はたった 30 回のチャンスしか無いわけです.失敗したら1年間無収入.とんでもないバクチです.はっきり言って,父親としては失格なのでしょうが,木村さんの夢は,いつしか家族の夢にもなっていたというのが救いでしょうか.良い奥様とお子様に恵まれた方だと思

  • ホワット・ア・ワンダフル・ワールド それはデバッガ関係無いですよね

    ちょっと気になっただけですが. でも、設計もせずに行き当たりばったりに手を動かして、ちゃんとしたものができるとは思わないし、結局デバッグではまる原因になる。yuguiさんが講演で言ってたことも結局そういうことじゃないかと解釈したし、Linusが長い間カーネルデバッガの導入に反対だった(2.6.26でkgdbがマージされた)のも同じ理由からだろう。 (Plan9 日記 2009-04-25 ■[イベント] Debug hacks conference 2009) 別に oraccha さんに何か物申したいわけではないのですが,この手のデバッグの話になると,なぜか 「デバッガを使うよりも ○○ (コードの書き方とか,設計とか,開発プロセスとか,テストとか,何でもいいのだけど) の方が大事だ.」 という論調の人が沸いてくるのはなんでなんだろうな,と思います.単なる論理のすり替えなんじゃないかな…

    advblog
    advblog 2009/04/26
  • ホワット・ア・ワンダフル・ワールド 人間が情報を与えるか,機械が推論して情報を増やすかという違い

    型宣言と型推論とか,手動メモリ管理と GC とか,要するに全部,人間が手で情報を与えるか,機械が推論するかということに一般化できると思う. んでまぁ,一般にうれしいのは,最初のプロトタイプは人間が不必要なことまで考えなくても動いてくれて,後々必要になってきたらボトルネック部分に情報を追加してあげると,さらに最適なコードが出る,ということをインクリメンタルにやっていけるようなモデルだと思う. その点,手続き型言語ってのは,細かいところまでを最初からいきなり全部指定しないといけないから,人間の脳に対する負荷がデカいし,柔軟性も失われてしまうし,機械がプログラムの意味を変えないで最適化できる余地も無くなってしまう.というようなことは,これまでにも散々書いてきたことなので,まぁ良いとして. いろいろ気になった記事があったので,単なるメモ. lethevert is a programmer のコメ

    advblog
    advblog 2009/04/19
  • ホワット・ア・ワンダフル・ワールド Linux の移植方法まとめ

    前回のエントリで書いたように、今まで自分で実装した独自の ARM システムシミュレータに Linux を移植していたわけですが、シリアルドライバ (8250 コンパチ) と NIC ドライバ (smc91x) が動き、rootfile system on NFS が可能になって、ようやく一段落しました。 全くの素人が 2 週間ぐらいでできたので、(優秀なデバッガさえあれば) 世間一般で思われているほど難しく無いんだな~ というのが感想です (もちろん途中途中ではかなり悩みましたけど… しょーもないミスや誤解も無数にしました)。 難しいデバイスを動かそうと思ったらメチャクチャ大変なのだろうと思いますけど、今回は、全部自分で書いた仮想デバイスの上に移植したわけですから、動かし方などは完璧にわかりますし、いざとなったらハードウェアを printf デバッグして、ちゃんと I/O レジスタが叩けて

  • ホワット・ア・ワンダフル・ワールド Linux のポーティング

    最近はずっとハードウェアシミュレータを開発していて (GCC x86/sh のバックエンドを hack したりもしてましたが),仮想 CPU エミュレータ (PARTNER デバッガと直結)/割り込みコントローラ (PIC)/シリアルコントローラ/ネットワークインタフェースカード (NIC) と一通り実装して,テストプログラムをそれぞれ書きました (NIC は ping サーバ,要するに ARP と ICMP に応答するプログラムを書いた). そしたら社長が 「そんだけあれば Linux 動くやん.ほなら移植してみましょか.若槻さんのお勉強もかねて.良い経験になるで」 という展開に. Linux とか全く開発したこと無いし,ましてや ARM のアーキテクチャ依存部なんて,いくら Linuxは多いとはいえ資料全然無いし,ほんまにできるんかなと,ここ数日はけっこう暗中模索で大変でした.社

  • ホワット・ア・ワンダフル・ワールド KMC ウェブリニューアル会議

    弊社のウェブサイトがいろいろ古いので,改善点について議論するための会議が昨日開かれました. 始まる前は,弊社は 40 代 50 代の開発者が中心という,平均年齢が高い会社ですので,実効的な議論ができるかどうか正直疑問だったところもあったのですが,蓋を開けてみれば非常に活発なやりとりがなされ,あっという間に 2 時間が経過しました.大成功だったのではないかと思います. 特に印象的だったのは,40 台中盤と定年間近の営業部の方々が,積極的に議論に参加されていた様子でした. RSS などのキーワードや,使いやすいサイト・見づらいサイトなどのウェブに関する感覚が (僕もそんなに詳しくないし,それほど最先端を行っている若者でもないのですが) 普通に通じる.偏見かもしれませんが,このことだけでも非常に驚きでしたし,日ごろから当に真剣にアンテナを敏感に張っておられるのだなと,改めて信頼感が強まりました

    advblog
    advblog 2009/03/28
  • ホワット・ア・ワンダフル・ワールド 大阪 Prolog 会

    Prolog大阪さんの事を論理的に考える集い Canonical life - Prolog大阪さんの事を論理的に考える集いについて イネムリネズミ日記 - Prolog大阪さんの事を論理的に考える集い参加記 埒を明ける日々 - I'M BACK.. リリカル☆Lisp開発日記 - SBCLとか色々 Yet Another Ranha - 大阪さんがPrologの事を知りたがっているようです 歳のせいか、もともと悪い記憶力が最近さらに悪くなり、お酒が入っていたこともあり、あんまり細かいことを覚えてないという。話題が多岐に渡り、終始僕は適当なことばかり言っていたと思います。まぁ、だいたい皆さん書いてくださっているので補足程度。 ○ マイナー言語を流行らすにはどうすれば良いかという主題 まぁ、僕はそもそもこれは無理だと思っていて、学生の時はそれが仕事でしたから言語とかプログラミングの話と

    advblog
    advblog 2009/03/25
  • ホワット・ア・ワンダフル・ワールド メタサーキュラープログラミング

    入社して最初の一ヶ月は,実機ハードウェアの上で動くプログラムを書くために四苦八苦してきた.ひたすらマニュアルと格闘しながら,組み込みプログラミングってのはこういうことなのかと,いろいろな発見があった. 次の一ヶ月は,自分が書いたプログラムを動かすための仮想ハードウェア (プログラム) を作るために四苦八苦した.最初の一ヶ月で学んだ知識が有機的に結びついてくる思いがして,これもまたいろいろな発見があって非常に面白かった. まだまだ修行中.これからは,いろいろな仮想デバイスを作りつつ,自分で書いた仮想ハードウェアの上に,Linux とかをポーティングして動かしてみたいと思っている.FPGA とかで実際にハードウェアを作るのも,達成感があって面白いのだろうけど,全てがソフトウェアの世界というのもまた,独特の趣があって面白いものだと思う. 実機ハードウェアに JTAG デバッガをつなげて,実機の

    advblog
    advblog 2009/02/08
  • ホワット・ア・ワンダフル・ワールド 二ヶ月経過

    久しぶりの更新です.なんか文章の書き方を忘れてしまったなぁ… 今のところ,想像以上に楽しくやらさしてもらってます.仕事が楽しすぎて,その他の活動が全て停滞しています (苦笑) # 仕事で思いっきり書きたいコードが書けるので,帰ってきたらコード書く気にはあまりならないという.twitter したりしてぐだぐだしてるだけ w 休みの日も会社に行くし,というか,今から行くし.大学の研究室の時と,やってること全く同じ. 先輩社員の方々を見ていても,みんな業務内容,会社形態,給与水準,全てにおいて (これは良し悪しがあると思いますが) 特に不満なさそうなので,将来的にも特に問題は無いのではないかと思います. 最初の一ヶ月ぐらいは,組み込みのいろはを勉強させてもらっていたわけですが,最近はようやく仕事のコードを書き始めました.これが順調に育っていけば,けっこう大きなビジネスにつながりそうで,非常にワク

  • ホワット・ア・ワンダフル・ワールド 徹底討論 朝まで生 KMC 会議

    KMC では月に一回,東京オフィスを含めた全体会議 (通称 KMC 会議) を京都社で行うのですが,最近人が増えてきたため (ここ2年間で5~6人ぐらい増えたらしい.現在 (パートや経理の人などを除いて) 16人ぐらいなので,比率的にはかなり急激な増加),今一度全体の意思統一を計るために,昨日は時間無制限の徹底討論会が行われました. 13:30 から,定例通りのいろいろな情報共有会議が 17:00 ぐらいまで行われ,それからディスカッションに. 未来を考えるためには,まずは過去を振り返らないといけないということで,KMC の成り立ちから現在までの歴史を年表で振り返りつつ,社長がひたすら当時の思い出を話しまくりました.非常にドラマチックで面白かったです. 「一時間半もよーしゃべりはったなー」 「いやいや,こんでもかなり短縮してんやで.こんなんなんぼでも話せるし,細かいところまで説明したら

    advblog
    advblog 2009/01/11
    すばらしい
  • ホワット・ア・ワンダフル・ワールド kzm-arm11-01 のシリアル通信プログラムの ROM 化

    会社の kzm-arm11-01 という現役のボードを触っていました。 これは freescale の i.MX31 (arm1136 core) という、マニュアルだけで 2400 ページぐらいある多機能な石 (巨大 PDF 注意) を積んでいて、ペリフェラルも HDD とかカメラとかタッチパネルとか SD カードとか AUDIO とかいろいろ付いてる高機能評価ボードで、パソコンがそのままマイコンチップになったようなものなので、シリアルポートを使えるようにするだけでもえらい大変でしたが、ようやく ROM 化まで漕ぎ着けました。 最低限のハードウェアの初期化 (クロックとか DRAM とか) と、UART1 につながっているシリアルポートの初期化しかしてません。今回は .data セクションが空 (.bss セクションしか使ってない) だったので、ROM から RAM への転送さえやってま

  • ホワット・ア・ワンダフル・ワールド シリアルコンソールの読み書き

    会社の古い MIPS ボードで遊ばせてもらってます。 とりあえず、簡単なシリアルコンソールの Read/Write の習作を作りました。レジスタポーリングしてるだけの超簡単なプログラムですが、クロックが入って無いと回路が動かないとか、そういうマニュアルに明記されて無い仕様がよくわからなくてけっこう大変でした。JTAG デバッガが無いと当に何もできない世界ですね。 基的にボードごとに何もかもお作法が異なる世界なので、頼りになる情報はマニュアルだけなのですが、幸い Toppers/JSP に、たまたまこのボードの config があったので、いろいろ参考になりました (あと NECVR4131 チップのマニュアルが日語だったので楽だった)。 NECVR4131 という、Sigmarion II にも使われた石らしいです。CPU の DSIU (デバッグ・シリアル・インタフェー

  • ホワット・ア・ワンダフル・ワールド C/C++ コンパイラでの末尾再帰最適化判定

    なんかプチブームに. 末尾再帰最適化をC/C++上で検知してみたい (higepon さん) 末尾再帰最適化判定 (yaneurao さん) 再帰判定 (shinh さん) んで,ちょっと気になったのが. 再帰の最適化 (masa.edw さん) shinh さんの fact のコードは末尾再帰じゃないけど、こういうのもちゃんと解析して最適化するんだー GCC すげー。 いやいや,ちゃんと末尾再帰のコードですがな… 追記 : 全然末尾再帰じゃないです (寝ぼけすぎ…).末尾再帰 (= ループ) に (GCC が) 変換可能なコード,です. shinh さんのコード (質部分だけ) int fact(int x) { return x == 1 ? 1 : fact(x-1) * x; } は, int fact(int x) { if(x == 1) return 1; else ret

  • ホワット・ア・ワンダフル・ワールド JavaScript とか CSS とかについてバイナリアンの立場から一言言っておくか

    とかいうはてぶとかにありがちなタイトル付けはキモイよなぁ… どうでもいいけど. # そもそも僕はバイナリアンじゃないです. まぁ,いまさら言うまでも無いけど,全ての具象プログラミング言語で書かれた具象プログラムは,機械語と考えることもできるんだよね. 例えば JavaScript なんかは,ブラウザという仮想機械の抽象機械語なわけだ.機械語なんだから,IE とか Opera とか Firefox とか,ブラウザごとに挙動や命令 (API) セット全然違っても,それは別に問題じゃない. もっと上位レベルの記述からのコンパイラがあれば良いだけだよね.んで,(よく知らないけど) MacOS のユニバーサルバイナリみたいに,どのブラウザでも同じように動くコードが生成されれば良い,と. 逆に,全てのブラウザの JS の仕様を揃えようってのは,全ての OS や CPU のシステムコールや命令セットを揃

  • ホワット・ア・ワンダフル・ワールド gcc のフロントエンド作る日記 (1) if を作ろう

    いつものことながら gcc のことを書き出すと目に見えてアクセス数が落ちる当ブログですが,そこはまぁ KY で (最近の中高生は「空気読めない」をこういうそうです). フロントエンドの雛形は hello-world を使うとして,後は個々の構文木の作り方をいろんなところからパクッてくれば,とりあえずフロントエンドは作れるはず. 一番手ごろなところということで,いつものように treelang フロントエンドサンプルを見て見ます. treetree.c あと,wo さんの ILogScript のマニュアルも非常に参考になります. ILogScriptほげほげ # あー,そろそろ真面目にgcc internals/9.8 Expressions の翻訳進めないとなぁ.gcc には大量の組み込みの構文木ノードが用意されていて,これを読めば,ソースコードを構文木として表現するにはどのノードを使え

  • ホワット・ア・ワンダフル・ワールド GBA の上で動く μITRON OS を作りたい

    とりあえず下記のサイトに習って開発環境をインストール & サンプルソースをビルドできるか確認. GBAソフト開発の第一歩 そして Visual Boy Advance という GBA エミュレータを実行して,ビルドしたバイナリを Open して,動作確認.ちゃんと動いている模様. やはり実機が欲しかったので探したのだけど,もう GBA は古すぎてどこにも売ってない感じ… 中古屋をマメに探すしかなさそうですね.一応,ちゃんと ROM か何かに焼きこめば (個人で可能なのか ?) たぶん DS とかでも動くのかな ? なんでターゲットに GBA を選んだのかというと, (1) 入手が (現在では微妙ですが,それでも他のマイコンとかに比べると) 容易 (2) C/C++ で開発できる (3) ハードウェアスペックもプログラミング情報もエミュレータも豊富 (4) まだ μITRON の GBA 版

  • ホワット・ア・ワンダフル・ワールド デバッガを勉強しよう

    今回,初めてまともに gdb を使いました.ちょーいまさらで,すいませんすいません.生きててすいません. ことの経緯は. マイミクの組込み系の偉大な御方が,最近仕事で gcc のバックエンドを作り始めたそうなんですが. gcc はデバッガで完全に動作を追いかけられるのでどこで何をやってるのかを見るのは比較的楽なんだけど,逆にデバッガ無しでソースコードだけを読むのは無理.理解する頃にはエンジニア人生が終わってそうだ. とのこと.linux kernel のコードをスイスイ追っていたような人でもこうなのだから,やっぱり gcc のコードは頭おかしい魔窟なのだろう. 僕は 「ソースコード -> GENERIC」 のあたりをちょろっと見たことがある程度なんですが,「GIMPLE -> RTL -> アセンブリコード生成」 のあたりは関数ポインタ使いまくりなので,コードだけを追っていくのはほぼ絶望的

  • ホワット・ア・ワンダフル・ワールド 電子資源枯渇論

    sumiiの日記 ■[雑談]最近のPCやオンラインサービスが非常に遅い件 ここらへんはまぁ,アラン・ケイとかが散々言い尽くしているところなのであえて何も言わないけど. 僕は,(今の) ブラウザを経由して使用する,いわゆる Web アプリケーションの世界には全く魅力を感じない.未来も無いと思っている. 結局諸悪は,CPU はドンドン早くなるから… メモリもどんどん増えるから… という,石油じゃぶじゃぶ王国の発想なんだよなぁ. 回線はどんどん早くなるから… ってのは,確かにそうなのかもしれないけど.そのぶん,伝送するデータ量もどんどん増えていくわけで.んで,明らかに,増加するトラフィック量の方が,回線の速度向上率を上回っていると思う.このまま,今の形態の Web アプリが普及すればするほど,破綻の X デーは早まるわけで. まぁ,日とか韓国みたいな,小さい国は,まだマシな方だと思います.日

  • ホワット・ア・ワンダフル・ワールド GNU C 拡張を使って関数のコールグラフをプロファイルする

    今スゲー酔っ払ってるので,メモだけ.指がうまく動かなくてタッチタイプがミスる.てか,うちのマウス,ゴミがつまりすぎだよなぁ.さっぱり回らない. きっかけは,rayfill さんのコメント. コールグラフ 呼び出しに関する情報ならコンパイル時に-pgつけてプロファイラまわせばでませんでしたっけ? x86環境でlinuxとかならValgrindのプラグインのCallgrindでdotファイル & Graphviz経由だったかでコールグラフが書けたと思います。 gcc拡張使ったこういう手(http://www-06.ibm.com/jp/developerworks/linux/050722/j_l-graphvis.shtml)もあるようです。 finstrument-functions オプションの説明とかは,件の ibmdeveloperworks か,BINARY HACKS の 「HA

    advblog
    advblog 2008/11/29