読者です 読者をやめる 読者になる 読者になる

type t (* void *)

関数型言語や英語学習の事とか。

OCaml: RWOを読み進めるためのOCaml設定

20150426加筆 RWOの説明を書いた
20150422加筆 より細かく書いた

20150909加筆 以下の内容はDebian 7向けに書かれており古いです! Debian 8ではより簡単にopamをインストール出来るようになっています! 下の記事では重複する部分は書きませんでしたが、インストール方法については下の記事が最新です。

no-maddojp.hatenablog.com

なんかちょっとだけOCaml環境構築が面倒みたいな話があったので、構築手順を書く。
大体確かめられた手順なのでよいはず。

Emacsのインストールまで解説しますが、RWOを読み始めるにあたりエディタの設定は必ずしも必要ではありません。
楽しんで下さい。

続きを読む

プログラミング: Makefileの雑い話2

ハマった


X = a b c
X += d e f

all:
  echo $(X)

これはmakeを叩いてみるとa b c e e fと出力される。 まぁ+=はこれで良さそう。

ちょっと直感に反している例として、make X=123みたいに 外側から与えられる場合。これは123とだけ出力される。

コレを123 d e fと出力させたかったらoverrideを加えればいい。

X = a b c
override X += d e f

all:
  echo $(X}

これで無事123 d e fと出力される。 しかしまぁこれ、なかなか悩ましくて外側から与えられる場合には、例えばコンパイルフラグが完全な状況になっていて欲しい場合もあり悩ましい。 例えば最終的にCFLAGS=-DA -DBとなってて欲しいところを-DAだけ外から与えてoverride +=-DBとする設計の場合、この+=を無視できなくなってしまう。しかし外側から与えられると共通のフラグは勝手に+=されて欲しい気持ちにもなって悩ましい。。。

結局は人間の運用をどうするべきかということなのですが、まぁ結論がない。。。。。

一般の話: 技術書典2に本を出しました

電子書籍販売し始めました!!!

コンパイラを作って遊ぼう - nomaddo - BOOTH


技術書典2に本を出してきました。う-15 「コンパイラを作ってあそぼう」です。 @alt_apさんの素晴らしいイラストを見て!

f:id:no_maddojp:20170409232749p:plain

経緯

締め切り駆動開発しようと思って、締め切りギリギリに申し込んだ。1月初めだったかな。
感想としては締め切り駆動は進捗はでるけど寿命を減らす感がある(徹夜3回くらいした

戦略

  • コンパイラの本を出す
  • 出すなら売れ残りたくないので色々戦略を考える
    • とにかくコンパイラ本だということを前面に出す
      見た時のわかりやすさ優先
    • 知り合いの@alt_apさんにイラストをお願いする
    • 60ページくらいで簡単に読み切れる分量、500円程度の値段設定
      実際はページが減って52ページになった……
  • latexが書き慣れてるしええやろ

大変だったこと

  • 残の業が障害になった
    残業がなければちゃんとコンパイラが完成していただろう……
  • 自分のわかっていないところがやっぱり分かって無くて大変だった
    レジスタ割付けはなんかこう、教科書通り全然出来ないし教科書では簡単な例ばっかりで駄目
    コンパイラはこういうのが多くて困る。実践のノウハウがやはり重要

準備がいる

印刷所から直入だったから荷物手ぶら状態だったけど、色々小物が必要だった

  • コインケース
    色々慌ただしくやり取りしているとただ机にコインを積んでいるだけだと落とす
  • A3イラストを立てるための台みたいなもの
    やはり机においているだけだと全然外から見えない
  • 値段を表示するためのもの
  • 机にしくマットみたいなもの
    見栄えの問題だなー
  • 大量のコインと札を持ち帰るための袋
    10万円分の1000円札……
  • ダンボール持ち運ぶやつ
    大量に在庫残った場合を考えてキャリーバッグをもっていったけど、もっと適切な道具があるっぽい

経費

  • 印刷費200部 45000
  • イラスト発注 25000
  • 参加費 7000
  • 交通費 4500

時給で換算すると余裕で100円を切るやつ。
赤字にならなくてよかった。

おまけ

今回使ったlatexのテンプレートを貼っておきます。
今回私の本文はこれだけで作っています。あと図にパワポから生成したpdf。
遷移図みたいなの書くのにパワポが最高。graphvizとか書いてられない。

GitHub - nomaddo/b5-book-template

f:id:no_maddojp:20170410012201j:plain

プログラミング: shellの雑いはなし

.shからmakeコマンドを叩きたくなり、さらにその中で実行するMakefileの変数を上書きする 処理を書きたくなった。そのラップするスクリプトはどう書いたらよいだろうか。

a.c

#include <stdio.h>
int main()
{
#ifdef A
  printf("a");
#endif

#ifdef B
  printf("b");
#endif
}

Makefile

all:
    gcc $(CFLAG) a.c

さて問題、これをCFLAG=-DA -DBにするようにmakeするためのシェルスクリプトはどう書いたらよいだろうか。 ただし、この実行は複数回やるので変数に束縛することにする。

build.sh

var="CFLAG=\"-DA -DB\""

make "$var"

コレを実行すると以下のようになる。

$ bash build.sh
make: 無効なオプション -- 'D'
make: 無効なオプション -- '"'

さあ何が悪いのかな。

追記

今日1時間ほど詰まった問題を書いてみました。
正解はMakefileの$(CFLAG)が"$(CFLAG)"となっていないからです。

まぁshellはつらいですね……

プログラミング: upstreamの変更を取り込みたくない時どうすればいいのか

Git運用中に困ったので正しい回答が欲しくメモしておく。
今レポジトリupstream, originがあるとする。

続きを読む

プログラミング: 言語処理系ハンズオンでチューターやってきました

どうもインターネットの闇@no_maddoです。
言語処理系ハンズオンでチューターをやってきたのでその感想とかを書き綴ります。

connpass.com

kmizu.github.io

続きを読む

プログラミング: 2017年度注目の技術

Coarray Fortran

Fortranの言語拡張。ノード間の非同期通信を隠蔽するための機能が多く含まれている。
Coarrayで書いたプログラムはMPIのライブラリが結合され、 Coarrayの配列として宣言された配列に代入すると通信が隠蔽されいつの間にか通信している。
非同期通信が基本。

とにかく楽にノード間(プロセス間?)通信するプログラミング言語はどういう設計があるのか気になる。

http://www.polyhedron.com/web_images//intel/productbriefs/8_CAF.pdf

数値計算のためのクラウド基盤

色々サービスがあるがどれが安価で使い勝手がいいのか確かめたい。
ついでに自分の数値計算屋の技量を高めたい。

0.5h/hour で物理96コアのマシン借りられるの良さそうじゃないですか。

Type 2A - The ARMv8 - Premium Bare Metal Servers and Container Hosting

ARMv8

ARMサーバーとして面白そうなサービスが沢山始まってほしいなぁということで ARMv8の命令セットに親しんでいきたい。

低レベル最適化

アドレッシングの最適化やPeepholeなど古典だけど あまり触ったことのない低レベル最適化に手を出していきたい。

Dockerとか仮想化技術

恥ずかしながら自分はこういうもの疎いのだけど、ビルドサーバでのビルドはなるべくクリーンな 状況でビルドしたいのでこういった技術に手を出さざるを得ない感じがする。
Gitlabとも仲良くしていきたい。

問題を解決するための開発・ビルド環境というのを研究していきたい。