SLIMEの設定をちょっと変えた

最近、自宅のWindowsマシンでCommon Lispの勉強をしています。IDEEmacsSLIMEを使っているのですが、ところどころ手になじまない部分があるので、ちょことだけカスタマイズしてみました。

;; SLIME環境の設定
(unless (package-installed-p 'slime)
  (package-refresh-contents)
  (package-install 'slime))
(setq inferior-lisp-program "c:/sbcl/sbcl.exe")
(require 'slime)
(slime-setup '(slime-fancy))
(add-hook 'lisp-mode-hook (lambda ()
                            (slime-mode t)
                            (show-paren-mode)
                            (slime-autodoc-mode)
                            (setq transient-mark-mode t)))
;; キーバインドのカスタマイズ
(define-key slime-mode-map (kbd "C-x C-e") 'slime-eval-last-expression-in-repl)
(define-key slime-repl-mode-map (kbd "C-t") 'other-window)

前半のSLIME環境は、SLIMEがインストールされていなかったらパッケージをインストールし、使用するCommon Lisp処理系を指定して、各種設定を行うという基本部分です。

後半のキーバインドが今回追加したものです。デフォルトでC-x C-eには'slime-eval-last-expressionが割り当てられていて、カーソルキーの直前までの式を評価してエコーエリアに結果を表示します。これを、式をREPLにコピーしてから評価してくれる'slime-eval-last-expression-in-replに変更しました。カーソルはREPL側に移動しますので、ソースコード側に戻すためにC-tを追加しています(デフォルトでC-tはカーソル位置の2文字を入れ替えるという使わない機能なのでいいでしょう)。

他にもParEditやRainbow Delimitersも使っていますし、HyperSpecをewwで見られるようにしてもあります。いずれこのエントリに追記するかもです。

Apple M1でJuliaコードのディスアセンブル(Julia 1.7)

marui.hatenablog.com

上記のJuliaでディスアセンブルをしたときはIntelチップだったので、M1(ARMチップ)でやったらどうなるかを試してみました。

julia> versioninfo()
Julia Version 1.7.2
Commit bf53498635 (2022-02-06 15:21 UTC)
Platform Info:
  OS: macOS (arm64-apple-darwin21.2.0)
  CPU: Apple M1 Max
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-12.0.1 (ORCJIT, cyclone)

同じコードを使います。

julia> function add1(x)
         return x+1
       end
add1 (generic function with 1 method)

@code_llvmの出力は以下のようになり、Intelチップを使ったときとほぼ同じです。

julia> @code_llvm add1(10)
;  @ REPL[1]:1 within `add1`
define i64 @julia_add1_124(i64 signext %0) #0 {
top:
;  @ REPL[1]:2 within `add1`
; ┌ @ int.jl:87 within `+`
   %1 = add i64 %0, 1
; └
  ret i64 %1
}

@code_nativeの結果はこんな感じ。

julia> @code_native add1(10)
        .section        __TEXT,__text,regular,pure_instructions
; ┌ @ REPL[1]:2 within `add1`
; │┌ @ int.jl:87 within `+`
        add     x0, x0, #1                      ; =1
; │└
        ret
; └

同じコードをIntelチップ用のJuliaでディスアセンブルすると以下のようになりました(Rosettaを使ってM1 Macで実行しています)。

julia> @code_native add1(10)
    .section    __TEXT,__text,regular,pure_instructions
; ┌ @ REPL[2]:2 within `add1`
; │┌ @ int.jl:87 within `+`
    leaq    1(%rdi), %rax
; │└
    retq
    nopw    %cs:(%rax,%rax)
    nop
; └

Intel用として生成されるコードがJulia 1.0のときからも変化しているのがわかりますが、ARMとIntel用とでもだいぶ違います。建て増しを続けてきたIntelチップの命令セットに比べて、ARMのほうがシンプルに見えますね。

2022-05-08追記

Windowsマシンでもやってみました。Mac用のIntelコードと若干違うけど、誤差の範囲?

julia> versioninfo()
Julia Version 1.7.2
Commit bf53498635 (2022-02-06 15:21 UTC)
Platform Info:
  OS: Windows (x86_64-w64-mingw32)
  CPU: Intel(R) Core(TM) i5-10400 CPU @ 2.90GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-12.0.1 (ORCJIT, skylake)

julia> function add1(x)
  return x+1
end
add1 (generic function with 1 method)

julia> @code_llvm add1(10)
;  @ REPL[3]:1 within `add1`
; Function Attrs: uwtable
define i64 @julia_add1_202(i64 signext %0) #0 {
top:
;  @ REPL[3]:2 within `add1`
; ┌ @ int.jl:87 within `+`
   %1 = add i64 %0, 1
; └
  ret i64 %1
}

julia> @code_native add1(10)
        .text
; ┌ @ REPL[3]:1 within `add1`
        pushq   %rbp
        movq    %rsp, %rbp
; │ @ REPL[3]:2 within `add1`
; │┌ @ int.jl:87 within `+`
        leaq    1(%rcx), %rax
; │└
        popq    %rbp
        retq
        nopw    (%rax,%rax)
; └

本日の給油(CRF1100Lアフリカツイン/2BL-SD10)

給油日 オドメーター (km) 給油量 (L) 単価 (円/L) 燃費 (km/L) 距離単価 (円/km)
2021-10-24 10 9.69 155.01 - -
2021-10-24 48 7.62 154.99 - -
2021-10-30 267 13.46 162.04 16.27 9.96
2021-11-06 507 15.29 157.03 15.70 10.00
2021-11-14 737 13.01 157.03 17.68 8.88
2021-11-27 924 13.07 157.00 14.31 10.97
2021-12-25 1188 15.90 155.97 16.60 9.39
2022-01-10 1398 13.71 153.03 15.32 9.99
2022-02-05 1740 18.22 158.01 18.77 8.42
2022-03-07 2007 16.46 162.03 16.22 9.99
2022-04-10 2283 14.23 162.97 19.40 8.40

休みの日に東京都23区外への長距離を走ったりしたおかげか、できるだけサスペンションやエンジンはURBANモード+DCTはDモードで走ったからか、燃費がとても良かった。サスペンションやエンジンはTOURモード、DCTはS1モードが好みなんだけどねぇ。

6ヶ月点検では特に問題なし。エンジンオイルは800 kmの時に交換したので、次は4,000 km前後での交換ですね。スパークプラグもエアクリーナーも40,000 kmくらいで交換でいいと言われましたが、部品の耐久性の進化に驚きました。スパークプラグはイリジウムを使うことで耐久性が格段に上がったんだそうです。

Windows用のEmacs設定ファイル

自宅ではWindowsも使うようになったので、現時点のEmacsの設定ファイルを置いておきます。後で再インストールが必要になった時のための自分用メモです。Windows 10 Home(21H2)、本家GNU Emacs 27.2で使っているものです。

どのエディタを使うかは宗教戦争に発展してしまうので気を付けないといけないのですが、僕は学生時代からEmacs一筋です。もちろんViもVisual Studio Codeも使えますが、手になじんでいるのとカスタマイズの柔軟さにおいてEmacsに勝るものと出会えていません。

(もしこれからEmacsに入門したくなったら「2020年代のEmacs入門 | Emacs JP」がよいかも)

続きを読む

本日の給油(CRF1100Lアフリカツイン/2BL-SD10)

給油日 オドメーター (km) 給油量 (L) 単価 (円/L) 燃費 (km/L) 距離単価 (円/km)
2021-10-24 10 9.69 155.01 - -
2021-10-24 48 7.62 154.99 - -
2021-10-30 267 13.46 162.04 16.27 9.96
2021-11-06 507 15.29 157.03 15.70 10.00
2021-11-14 737 13.01 157.03 17.68 8.88
2021-11-27 924 13.07 157.00 14.31 10.97
2021-12-25 1188 15.90 155.97 16.60 9.39
2022-01-10 1398 13.71 153.03 15.32 9.99
2022-02-05 1740 18.22 158.01 18.77 8.42
2022-03-07 2007 16.46 162.03 16.22 9.99

東京都内唯一の道の駅である「道の駅 八王子滝山」に行ってきました。地元の野菜たっぷりのナポリタンが美味しかったです。

本日の給油(スーパーカブ110プロ/JA07)

給油日 オドメーター (km) 給油量 (L) 単価 (円/L) 燃費 (km/L) 距離単価 (円/km)
2021-02-21 11900.9 2.92 139.73 47.98 2.91
2021-03-12 12042.2 3.08 133.77 45.88 2.92
2021-05-03 12177.4 2.46 139.84 54.96 2.54
2021-06-06 12290.5 1.99 142.21 56.83 2.50
2021-07-31 12417.3 2.62 148.09 48.40 3.06
2021-09-25 12563.7 2.81 148.04 52.10 2.84
2021-11-04 12711.0 2.44 156.97 60.37 2.60
2022-01-03 12814.3 2.18 153.21 47.39 3.23
2022-02-23 12910.1 2.55 158.04 37.57 4.21
2022-03-06 13058.0 2.83 160.07 52.26 3.06

ちょっとした買い物や近距離の移動であればカブの方が圧倒的に便利なので、大型バイクを手に入れたところでカブの使用頻度は変わりません。タンク容量が小さいので、頻繁に給油が必要ですね。

本日の給油(スーパーカブ110プロ/JA07)

給油日 オドメーター (km) 給油量 (L) 単価 (円/L) 燃費 (km/L) 距離単価 (円/km)
2021-02-21 11900.9 2.92 139.73 47.98 2.91
2021-03-12 12042.2 3.08 133.77 45.88 2.92
2021-05-03 12177.4 2.46 139.84 54.96 2.54
2021-06-06 12290.5 1.99 142.21 56.83 2.50
2021-07-31 12417.3 2.62 148.09 48.40 3.06
2021-09-25 12563.7 2.81 148.04 52.10 2.84
2021-11-04 12711.0 2.44 156.97 60.37 2.60
2022-01-03 12814.3 2.18 153.21 47.39 3.23
2022-02-23 12910.1 2.55 158.04 37.57 4.21

アフリカツインに乗ってからカブに乗ると、ついパワーを出したくなって低速ギアで高回転を引っ張ったりするので、燃費が悪くなるのでしょう。これまでで最低の燃費値でした。