memo.yammer.jp

常に完成形
2020-07-09 02:09
自作コンパイラのfor文バグ
C言語のコンパイラを自作に関する今日の日記。 これまでの記事 「数日前からCコンパイラを書き始めた。」 「自作Cコンパイラの途中経過」 「自作コンパイラのセルフホストに挑戦中」 「C言語の構造体メンバのアライメント (x86_64, Linux (System V ABI))」 今日実装したのは次の2つ。 構造体のアライメント for文バグの修正 ちなみに昨日はastをjsonで吐くコード(git反映前に間違えて切り取って飛ばしてしまい頑張って再実装したが、翌日セルフホスト向けにはバグっていることがわかりお蔵入り)、セルフホスト用のシェルスクリプトなどを実装していた。 構造体のアライメント w
2020-07-09 00:59
C言語の構造体メンバのアライメント (x86_64, Linux (System V ABI))
System V ABI における構造体メンバのアライメントの方法を記す。 C言語のコンパイラを自作しているときに学んだことの記録で、 これまでの記事 「数日前からCコンパイラを書き始めた。」 「自作Cコンパイラの途中経過」 「自作コンパイラのセルフホストに挑戦中」 に続く記事である。 System V ABI とは? ABI (Application Binary Interface) とは、バイナリレベルでのコンパイラが満たすべき規約である。 アーキテクチャやOSごとに決まっており、例えば我々が一般的に使うintelのCPUである x86_64 でいえば、 Windows は Micro
2020-07-07 01:54
自作コンパイラのセルフホストに挑戦中
以前の記事「数日前からCコンパイラを書き始めた。」「自作Cコンパイラの途中経過」に続く記事。 これは日記であって、知見が書かれた文章ではない。 経過報告 気づけば2020年も半分が終わり、梅雨に入って雨が続き、今日もジメジメと蒸し暑い。 大学の研究室は相変わらずリモートで、新型コロナウィルスの東京都の感染者数も100人を超える日が続き、収束の気配がない。 世間は春から夏へ季節が変わろうとしているし、世界的にウィルスとの戦いを繰り広げている昨今だが、私のやっていることは相変わらずCコンパイラ「willani」の制作。もう6週目になるだろうか。 昨日あたりからセルフホストに向けて、やっとコンパイラ
2020-06-14 21:26
はてなブログに乗り換えた
昨年に作ったブログの公開場所をはてなブログに変え、名前も「やんまーのブログ」と改名した。 以前は Firebase Hosting 上に、 Nuxt.js の Generate モードで生成した HTML ファイルを公開していた。 移行するにあたって次のことを行った。 はてなブログCLI gimonfu による記事管理 Zeit Nowを使った旧ドメインの転送処理 1. gimonfu による記事管理 はてなブログは Markdown で記事を作成でき、これが乗り換える後押しになった。 Markdown の記事は、以前のブログでも GitHub 上で記事を管理していたので、今回も同じことを行い
2020-06-14 21:23
gimonfu で、はてなブログの記事を GitHub と同期する
ブログをはてなブログに移行するにあたり、記事を管理する CLI 「gimonfu」を作成した。 本記事では、gimonfu と GitHub Actions を使って、GitHub のリポジトリとはてなブログを連携し、記事を git で管理できるように設定を行う。 記事の内容を設定すれば、Markdown ファイルを GitHub のリポジトリにプッシュするとはてなブログに記事を公開できたり、はてなの Web ページで記事を編集すると、GitHub のリポジトリに自動で反映されてバックアップを取ることができる。 最終的な GitHub Actions の設定は、私のブログの記事リポジトリにある
2020-06-09 17:00
自作Cコンパイラの途中経過
Cコンパイラ自作の進捗 以前の記事に書いたとおり、C言語のコンパイラを自作している。 セルフホストには至ってないが、教科書であるオンラインブック「低レイヤを知りたい人のためのCコンパイラ作成入門」の内容が一通り実装し終わったので経過報告をする。 裏で最初は毎日記録をつけていたのだが、だんだん面倒くさくなってやめたので、コミット履歴を見ながら振り返る。 最初のコミットは19日前(5/21)なので、そろそろ三週間経ったところだ。 5/28-30の三日間以外は何かしらコミットしているので、継続的に開発できている。もっともバイトや授業に遮られることがなく、時間がたくさんあるのでできることであるが。 こ
2020-05-31 16:44
Zeit Now を使って、express.jsで書かれたアプリケーションを独自ドメインで公開する
now という PaaS がある。 Node.js で書かれたアプリケーションを、無料で3つまでホスティングできるらしい。 heroku を無料プランで使うと、dyno の立ち上げに30秒くらいかかるので、Web サーバとしては致命的に遅い。 一方 zeit はそのような待ち時間は発生しない。(どこかに、AWS Lambda を中で使っていると書いてあった気がする) 今回はシンプルな express.js のアプリケーションを now でホスティングする手順。 インストール $ mkdir now-app $ cd now-app $ yarn init $ yarn global add n
2020-05-30 14:05
TCP と UDP
今日のインターネットの根幹をなすTCP/IPプロトコルスタックのうち、トランスポート層のプロトコルであるTCPとUDPについての基本的な知識を説明する。 本記事は研究室の輪講で「マスタリングTCP/IP 入門編」を読んだことがきっかけの第2回。 前回はTCP/IPプロトコルスタック全体についての概要を書いた。 参考文献: マスタリングTCP/IP入門編 第6章 pp219-246 もくじ トランスポートプロトコルの役割 ポート番号 TCP と UDP TCP の様々な制御 トランスポートプロトコルの役割 トランスポート層の役割は主に3つある。 End-to-End の通信を実現すること。 アプ
2020-05-30 11:46
デスクトップLinuxでCPUの状況を確認する
$ cat /proc/cpuinfo # CPUの各スレッドごとの情報を含んだファイルを表示する $ nproc # CPUのスレッド数(プロセッサの数)を表示する $ top # CPU使用率の高い順にプロセスを表示する。定期的に内容は再描画される。 参考: CPU and Linux - Youtube Satoru Takeuchi
2020-05-25 01:02
数日前からCコンパイラを書き始めた。
数日前からCコンパイラを書き始めた。(GitHub) 植山類さんのオンラインブック、低レイヤを知りたい人のためのCコンパイラ作成入門を読みながら、概ね本の内容に沿って進めている。 自分の書いたコンパイラで自身をコンパイルするセルフホストを目指している。 コンパイラというのはある言語で書かれたプログラムを別の言語に変換するプログラムだ。 ここではC言語をアセンブリに変換するものを指している。 いきなりC言語をコンパイルするのは無理なので、徐々に複雑な入力を受け付けるように改良し、最終的にC言語を受け付けるようにする(したい)。 最初は入力をそのまま出力することから始まり、四則演算ができるようにな