2009年11月19日

まつもとゆきひろさんによって開発が開始されたオブジェクト指向スクリプト言語Rubyを初めとして、趣味/仕事を問わず、新しいプログラミング言語を設計/開発したいという需要は昔から一定数存在するようです。

言語処理系に関する本は昔から多数出版されてきていて、去年と今年、日本語の本だけでも10冊以上は出ているのではないかと思います。今年出版された日本語のものだけでも、5冊以上あります。

コンパイラ - 原理・技法・ツール (第二版)
プログラミング言語を作る
ふつうのコンパイラをつくろう 言語処理系をつくりながら学ぶコンパイルと実行環境の仕組み
※ 以下の3冊は、私は未読です。amazonの検索でヒットしたもの。
MLによる最新コンパイラ構成技法
やさしいインタープリタの作り方入門―オリジナルなインタープリタを作成する
やさしいコンパイラの作り方入門―オリジナルなコンパイラを作成する

さらに、11/20 に、コンパイラの構成と最適化の第二版も出ます。

インタプリタやほとんど最適化しないレベルの言語処理系ならば問題にはならないのかもしれませんが、プログラムを高速に実行しようと思うと、途中に変換や最適化が必ず入ってくるので、元のソースコードと生成物の乖離が進みます。効率的に最適化されたプログラムをデバッグするためには、デバッグ情報が不可欠です。

しかし、ソースコードの解釈方法や、機械語の生成方法については多数の文献が存在するわりには、デバッグ情報の生成について触れている本はあまり (私が知る限り、一冊も) 聞きません。デバッガベンダーとしては少し悲しいところです。

翻ってデバッグ情報 (DWARF3) の仕様を見てみると、以下のような言語への対応が仕様に入っているようです。ほとんどが伝統的な言語とその後継ですが、D 言語が入っているというのが個人的には意外でした。(D は 2007 年にDigital Mars 社からバージョン 1.0 のコンパイラが出たばかりの、かなり若い言語です。あと Unified Parallel C という言語は初耳です。)

続きを読む

2009年11月17日

私はちょうど去年の ET 2008 の最終日、2008/11/21 に KMC に入社したので、今回が始めての ET です。

いちおう初出社の日 (既にその前から普通に来ていて、いろいろ準備してましたが) なのに、「会社来ても ET で誰もいないと思うから、休みにしても良いよ。それとも ET 来る ?」と言われた記憶があります (笑) さすがにまだ入社前でしたので、前回はおとなしく京都で留守番してました。

北海道大学の博士課程を中退して KMC に入社したのですが、札幌時代に OSC Hokkaido で知り合い、いろいろとお世話になった古賀さんの会社、サムシングプレシャス様が弊社の隣のブースということで、これも何かの縁でしょうか。久しぶりの再会を楽しみにしていたりもします。

思えばあれからもう一年経ったのだなと。あっという間でした。たくさんいろいろなことを勉強させていただきました。今回の ET でも、いろいろと得るものが多いのだろうと期待しています。

ET 2009 に参加されるみなさま、何卒よろしくお願いします。

以下、京都マイクロコンピュータ出展イベント/展示会より転載です。
続きを読む

2009年11月13日

多くの CPU の命令セットでは、0 との比較を特別扱いしています。
そのため、ループを書く際には、なるべく 0 と比較するように書いた方が速いので良い、という主張をたまに聞きます。

しかし、一般的な for 文のイディオム for (i = 0; i < N; i++) を崩してまで、0 と比較するように書く意味が、本当にあるのでしょうか ? それぐらいは、現代のコンパイラならば勝手に最適化してくれそうな気もします。

というわけで、x86、ARM、SH、MIPS、PPC で検証してみました。

x86 は、手元の MinGW の gcc 4.4.0 です。
それ以外の CPU は、弊社の exeGCC 4 (GCC 4.3.3 ベース) を使用しました。最適化レベルは、全て一般的な -O2 です。(FPU は無関係だと思われるので、全て disable モードでコンパイルしています。)

続きを読む

2009年11月11日

これまで紹介してきたように、exeGCCのVLINK機能を使うと、ターゲット上で動くプログラムをまるでPARTNER-Jetの拡張機能のような雰囲気で動かすことができます。

今回はフラッシュメモリの書き込みプログラムの事例を紹介します。
続きを読む

2009年11月09日

今月30日に代々木で開催されるAndroid Bazaar and Conference 2009 Fallで「GOLDFISHをいじってみよう」というタイトルで少し話をさせていただきます。

このブログに書いたgoldfish関連のことを話します。よろしかったらご参加ください。

(2009.11.18 追記)

先日Androidのマスターのソースにeclairブランチがマージされました。予定を変更して新しく追加になったDalvik VMのJITの実験版やWebkitのV8についてGOLDFISHでいじってみたことを話そうと思います。

こちらのページに発表資料を置きました。

関連

Android SDKのgoldfishのCPUをarm1136に置き換える方法

AndroidのSDKのgoldfishのCPUをcortex-A8に置き換えてNEONのSIMD命令を試す

AndroidのDalvikVMのインタープリタをFPU命令で少し高速化する

AndroidのユーザーランドをFPUを有効にしてリビルドする



2009年11月05日

健康診断の時、尿酸値が非常に高いという指摘をされたという話を以前書きました。
こちらは、当然現在も治療を継続中です。ザイロリックという尿酸の生成を抑制する薬を毎日 1 錠、そして毎日 1 時間程度の運動(ウォーキングやランニング) を続けています。人間ドックの時は 9.6 あった尿酸値も、今では 7.2 にまで下がりました。

(それでもまだ危険水域ですが。ちなみにこの検査結果は 2 ヶ月前のものなので、今ではもっと下がってるかもしれません。薬を一回に 3 ヶ月分もらえるので、病院に行くのは 3 ヶ月に一度なもので。)

実はそのとき、視神経乳頭陥凹という耳慣れない指摘もされていたのです。これは、緑内障の典型的な症状なのだそうです。
(まだ 20 代なのに、若い人には珍しい病気を二つも…)

続きを読む

2009年10月30日

長らく 3.x だった MinGW の GCC も、ようやく今年の 6 月に 4.0 がリリースされ、4.x 移行はだいたい終了したのではないかと思われます。今後は 4.x を無視することはできないと思われます。

gcc 3.x から 4.x に移行する際に問題となる変更の 1 つとして、cast-as-lvalue という GCC 拡張の削除があります。
cast-as-lvalue とは、キャストの結果を左辺値として使える、という機能です。
続きを読む

2009年10月28日

先週開催されたJapan Linux Symposiumに参加してきました。

その感想をランダムに書き綴ってみようと思います。

続きを読む

2009年10月22日

※ JTAG を熟知した上級者向けの Tips です。
※ 社内で裏ワザ的に使われている Tips なので、ブログでこっそり紹介。正式にサポートは行いません。

PARTNER-Jet の JTAG クロック周波数は、cfg ファイルの記述 (J_FRQ。通常は AUTO か ADPT が指定されています)、または zjc コマンドによって変更することが可能です。

マニュアルには、JTAG クロックの zjc コマンドによる動的な変更は危険なのでひかえるようにと注意書きが書いてますが、設定を熟知した上で使うならば便利です。

周辺装置のノイズが多いなどの状況で、安定して PARTNER-Jet を動かしたい場合には、JTAG クロックの値を若干下げてみることが有効なのだそうです。

また、大きなデータを転送する場合などには、ターゲットがサポートする範囲で、若干大きめの値に変更することで、(PARTNER-Jet はもともと高速なデータ転送がウリの 1 つなのですが) より高速なデータ転送が可能になるそうです。(ただし、あまりクロックを上げすぎると不安定になるので要注意です。)

このように、JTAG クロックを調整することにより、状況に応じて安定性と高速性のバランスを調節できるそうです。私はまだ初心者なので試したことは無いのですが、社内では普通に使われている Tips のようです。先輩にこの Tips を教わるまで、JTAG クロックをいじるなんて全く思いつきませんでした。面白かったので紹介しました。

2009年10月20日

エミュレータとシミュレータという用語の使い分けについて、私自身もいろいろ混乱していたところがあったので、ここでもう一度考えてみようと思います。

続きを読む

2009年10月16日

以前の記事で使用した 「リアルタイムトレース」 という用語は、KMC が製品の特徴を一言で伝えるためのキーワードとして使用している独自の用語であり、一般的な技術用語では無いので、社外や blog などで使用する時は注意が必要、という指摘を辻さんからいただきました。ありがとうございます。

ARM の ETM/ETB などのトレース機能は、例えばバッファに一時的にトレースデータをため、タイムスタンプなどはパケットがまとめて送信される時に付くので、厳密には本当にリアルタイムではないのだそうです。ARM 社などが「リアルタイム」という用語をあえて避けているのは、その辺の誤解を嫌ってのことなのでしょう。

KMC が「リアルタイムトレース」と言う時のリアルタイムとは、厳密な技術用語の文脈の「リアルタイム」ではなく、「プログラムの実行を止めなくても、動かしながらトレースログを見れる」という意味で使用しています。

例えばリアルタイム OS と言った場合には、スケジューリングや割り込み、システムコールなどの各種処理の実行時間の予測可能性が保証されている、という意味であるように、リアルタイムという用語には様々な技術的文脈でいろいろな意味があるので、説明無しに「リアルタイム」という用語を使ってしまったのは我ながら軽率だったと思います。技術者たるもの、誤解やすれ違いを避けるために、用語の使い方には常に気をつけたいものです。

2009年10月14日

前回exeGCCのVLINK機能を利用してPARTNERのコマンドウインドウで動く対話的なコンソールアプリケーションを作る例を紹介しました。今回は逆にバッチ処理で便利なようにVLINKでコマンドラインの引数を取得する例を紹介します。

続きを読む

2009年10月08日

twitter で gas の構文は理解しにくいと hmori さんがつぶやいていたのを見て、意外と知られて無さそうなので書きます。

x86 と x86-64 において、gas と GCC が出力するアセンブリコードのデフォルト構文は AT&T 構文と呼ばれる UNIX アセンブラの伝統的な構文です。プログラミングの力を生み出す本や、ふつうのコンパイラをつくろうなど、最初から一貫して AT&T 構文を元にアセンブリプログラミングを解説している書籍も無いことは無いのですが、確かにintel のマニュアルの構文とは引数の順番などが異なるので、慣れないと混乱の元になるのではないかと思います。

また、%レジスタや$即値などの独特のプリフィクスが大量に付くので、見た目が少しゴチャゴチャするようにも感じます。(movl などの b/w/l のように、データ長を指定するサフィックスも便利と言えば便利なのですが、区切りが紛らわしい気もします。サフィックスを付けるならば、mov.l のように区切りがある方が、個人的には好みです。ちょっと脱線しました。)

実は gas (GNU Assembler) は、バージョン 2.10 から、インテル構文 (intel syntax) もサポートしています。

続きを読む

2009年10月06日

前回exeGCCのVLINK機能を使ってターゲット側からホストPCの標準入出力を利用することができることを説明しました。

今回はコマンドウィンドウへのキー入力を拾って対話的なプログラムをつくる時の具体例を紹介します。

続きを読む

記事検索
最新コメント
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード