occ で構造体サポート

本当はOSCまでに構造体をサポートしたかったのですが、叶わず・・・
α0.13でようやく構造体を実装しました。

サンプル:https://github.com/liva/occ/blob/release/sample/sample8.c

構造体の中に構造体が入っていても大丈夫です。
内部構造は一般のアーキテクチャーにおける実装とはかなり違いますが、これはOSECPU-VMの仕様上、
どうしうようもないですね。


構造体が使えると、OSECPUアプリでの大規模開発が一気に現実味を増してきます。
現時点では構造体の動的確保ができないので使い勝手が悪いですが、すぐに実装する予定です。


構造体サポートはocc開発での悲願だったので、これで折り返し地点に到達した、といった所ですかね。
ただ、これは、occ開発では、という意味であって、僕が思い描く物を実現する道のりとしては、まだ第一の
関所くらいですが。



今後の開発方針としては、

・最適化、スタックアロケーションのサポート
・OSECPUのフォークによる独自VMの開発

といった所でしょうか。
VM周りに早く手を付けたいのですけど、スタックサポートと最適化をしないとすぐレジスタが枯渇してしまう・・・。

OSC行ってきたど

帰ってきたウルトラマ・・・もといOSASK計画の出典側のお手伝いとして参加してきた。
途中体調崩したけど、いろいろ楽しかった。

・キャンプ関係者にいっぱい会えた!
・特にmafice君に会えたのが一番良かった
・<教訓>キャンプ講師陣に「僕の事覚えてます?」or「彼の事覚えてます?」的な事を言ってはいけない

・結局構造体実装し終わらなかった。つらぽよ

・Web業界、頑張ってるなー(棒)

・坂井さんが、「OSCのLT、度肝を抜かれる程面白いよ」って仰ってたけど、坂井さんのLTが一番面白かった
・小川のせせらぎ(笑)


月曜日に微熱が出てたけど、日曜日は大丈夫だったのかって?
シュレディンガーの体温って言葉があってだな・・(関係者の皆様、ご迷惑をお掛けしました

雑記

Twitterよりも自分のブログの方が人目に触れないのではと思ったので、あまり大きい声で言いたくない事はここに書こう。

・webアプリなんて書かなくて良い、webセキュリティなんて考える必要ない(XSS Free!)、そんな世界を僕は作りたい。
・osecpuで全部解決できる気がする

・某なんとかcampで情報系バイトに誘われたとかって人がいたけど、僕は誘われる事すらなかった気がするなぁ。人望と技術力のなさの故か
・よくよく考えてみれば、僕が出した成果ってoccが初めてでは。なんか納得できた。
・来年辺り、mitouとか応募したい。玉砕覚悟で。

コンパイラ開発、ちゃちいのなら意外と気合でなんとかなるもんね。開発速度遅いけど。

occ α0.10公開

・occとは?
OSECPU用のC言語コンパイラ
ちょうど1ヶ月前から作り始めて、ようやく公開できるレベルに達した。まだ未実装の機能が多いけど。
URL : https://github.com/liva/occ
現状で書けるコードはこんな感じ:https://github.com/liva/occ/tree/release/sample


・特徴

  • コンパクト(C言語で約3500行)
  • 純粋なコンパイラとリンカのセット。プリプロセッサはmcppを使う
  • バックエンドコードを出力(フロントエンコードの出力はosectolsを使う)
  • 独自のアセンブリ構文サポートにより、アセンブリコードをリンクする事も可能
  • 次期バージョンからは独自OSECPU拡張を使用するかも(しないかも)
  • 将来的にはOSECPUアプリとして実現される予定

・注意

  • 実装が間に合ってない機能がかなりある ex.構造体、配列、列挙子、グローバル変数、キャスト、標準ライブラリ...
  • ゆえに、ANSI Cに則った構文を書いても「unsupported syntax」エラーが出る恐れあり
  • 現バージョンでは最適化が殆ど掛かっていないため、レジスタを潤沢に使う
  • スタックは未サポート。ローカル変数を使いすぎるとコンパイルできない。また、変数のアドレスが取れない
  • OSECPUのセキュリティの関係で一部のC言語の機能は実現できない
  • リンカはリンク先ラベルが存在しない等のリンクエラーをチェックしてないので、OSECPu実行時に突然ラベル未定義エラーが出るのでバグの特定が辛い
  • デバッグが不完全
    • デバッグ対象項目>
    • エラー発生位置とエラーメッセージの表示が合っているか
    • 未実装機能によってエラーではなく、assertionで止まる可能性あり