タグ

cに関するsugyanのブックマーク (7)

  • 自作したRISC-V向けCコンパイラでセルフホストまでこぎつけた - 詩と創作・思索のひろば

    低レイヤを知りたい人のためのCコンパイラ作成入門 まさに低レイヤのことが分かっておらず、以前から気になっていたこの。取り掛かってみたところ思いのほかスイスイ進められて、勢いに乗ってセルフホスト(自分が書いたコンパイラで自分自身をコンパイルするところ)までいけたので記念に書いておく。正確には C コンパイラのサブセットです。 GitHub - motemen/mocc 全体的な進め方は、 上記のの通りに進めていく。 それ以降は自作の 8queen が普通に書けるように機能を強化。 それ以降はセルフホストを目標に進める。 プリプロセッサやリンカは作らず、C からアセンブリまで。 という感じ。自分は手を動かさないと進んでる気がしないので、まずは書いてみつつわからない所があれば調べる、というスタンスでいく。 あと、せっかくなので RISC-V の勉強もしたかったのでこれ向けに書く。なので実行は

    自作したRISC-V向けCコンパイラでセルフホストまでこぎつけた - 詩と創作・思索のひろば
    sugyan
    sugyan 2022/11/21
  • CとRustで一から作るマイクロカーネルOS

    マイクロカーネルは浪漫に溢れる非常に作りがいのあるソフトウェアです。この記事は,「マイクロカーネルベースのOSの一から作ってIaaSで動かす」ことを目標に作ったマイクロカーネルベースのOS Resea(りーせあ)の設計と実装について軽くまとめた物です。 ソースコードはGitHubにあります。 マイクロカーネルとは Linuxのようなモノリシックカーネルでは色んな機能がカーネル空間で動きますが,マイクロカーネルではユーザプロセスたちが互いに通信しながらOSを作り上げます。プロセス・スレッド・仮想メモリ管理,プロセス間通信,タイマーといった必要最低限の機能だけをカーネルが担います。デバイスドライバやファイルシステムといった残りの機能は,独立したユーザプロセスとして動きます。たとえデバイスドライバが暴走しても他のコンポーネントを壊すことはないのです。マイクロカーネルは信頼性が高く,疎結合で美しい

    CとRustで一から作るマイクロカーネルOS
  • 低レイヤを知りたい人のための Cコンパイラ作成入門

    はじめに このオンラインブックは執筆中です。完成版ではありません。フィードバックフォーム このには一冊のに盛り込むにはやや欲張りな内容を詰め込みました。書では、C言語で書かれたソースコードをアセンブリ言語に変換するプログラム、つまりCコンパイラを作成します。コンパイラそのものもCを使って開発します。当面の目標はセルフホスト、すなわち自作コンパイラでそれ自身のソースコードをコンパイルできるようにすることです。 このでは、コンパイラの説明の難易度が急に上がりすぎないように、様々なトピックを書全体を通じて次第に掘り下げていくという形で説明することにしました。その理由は次のとおりです。 コンパイラは、構文解析、中間パス、コード生成といった複数のステージに概念的に分割することができます。よくある教科書的アプローチでは、それぞれのトピックについて章を立てて解説を行うことになりますが、そのよう

  • 自作Cコンパイラで Ken Thompson のログインハックを再現してみた - 0x19f (Shinya Kato) の日報

    UNIX 開発者の一人である Ken Thompson が初期の UNIX にバックドアを仕掛けていたと言われている通称 Thompson hack を自作Cコンパイラで再現してみました。 Thompson hack は UNIX のログイン処理のコンパイル時にバックドアを仕掛けるようなコンパイラを作り、さらにコンパイラのソースコードからその痕跡を消し去るという神業です。 元ネタは Reflections on Trusting Trust という1983年に Ken Thompson が Dennis Ritchie と共にチューリング賞を受賞した際の記念公演です。 Ken Tohmpson はこの細工をしたコンパイラを配布したことはないと主張しているそうですが、このバックドアを利用したと見られる不審なログインがあったという報告もあったとのことで、実際にはベル研究所の外部に配布されていた

    自作Cコンパイラで Ken Thompson のログインハックを再現してみた - 0x19f (Shinya Kato) の日報
  • Better C - Goと整数 #golang - Qiita

    はじめに GoはC言語やその後のオブジェクト指向言語における課題をシンプルな手法で解決しており、大変使い勝手の良い言語になっています。 具体的にはC言語と比較すると以下のような点が優れています。 充実した標準ライブラリ コンパイルの容易さ 公式フォーマッター クロスコンパイル、マルチプラットフォーム対応 複数返り値によるerrnoからの脱却 インターフェースによるオブジェクト指向の実現 GC(Garbage Collection) スタックやヒープを意識しないプログラミング 整数仕様の整理 今回はこの中でも紹介されることが少ない整数の仕様について紹介したいと思います。 整数オーバーフローの仕様 整数オーバーフローについてGo言語仕様を確認すると以下のように記載されています。 Integer overflow For unsigned integer values, the operatio

    Better C - Goと整数 #golang - Qiita
    sugyan
    sugyan 2016/12/24
    違いがそれぞれ例とともに紹介されていて分かりやすい…
  • ngx-queue.h - unknownplace.org

    libuv のソースを見ていたら、ngx_queue_* という API が出てきてびっくり。どうやら nginx から ngx-queue.h っていうリンクドリストの実装を持ってきているようだ。 include/uv-private/ngx-queue.h at master from joyent/libuv - GitHub なかなかおもしろい。これ、いろんなところで使えそうなので手元でも試してみた。 #include <stdio.h> #include <assert.h> #include <stdlib.h> #include <string.h> #include <stddef.h> #include "ngx-queue.h" typedef struct { ngx_queue_t queue; char* data; } chunk_t; chunk_t* chu

    sugyan
    sugyan 2011/11/15
  • Big Sky :: libuvを使ってみた。

    node.jsのスライドを見てて、プラットフォームの違いを吸収するnode.jsの核でもある非同期通信ライブラリuvを今日知ったので試してみた。 joyent/libuv - GitHub platform layer for node.js https://github.com/joyent/libuv libev/libeventをwindowsでもちゃんと使いたいという所から出てきたライブラリ。 #include <iostream> #include <uv/uv.h> int main() { int r; uv_tcp_t tcp; struct sockaddr_in server_addr; server_addr = uv_ip4_addr("127.0.0.1", 80); r = uv_tcp_init(uv_default_loop(), &tcp); uv_con

    Big Sky :: libuvを使ってみた。
    sugyan
    sugyan 2011/10/31
  • 1