Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Scheme用nREPLの開発(エラー出力の改善)
Search
Niyarin
February 06, 2022
Programming
190
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Scheme用nREPLの開発(エラー出力の改善)
Niyarin
February 06, 2022
More Decks by Niyarin
See All by Niyarin
bel lispの紹介
niyarin
0
790
nanopass-compiler-frameworkを使ってみました
niyarin
0
490
Gorgos-parser-combinator-written-in-scheme
niyarin
0
420
outputting-beautiful-s-expression
niyarin
0
420
Serialisp
niyarin
1
730
Mongo DBとS式検索
niyarin
0
360
goodbye-python-repl
niyarin
0
390
SchemeのEphemeronとWeak Pairの説明
niyarin
0
1.1k
red-paren-scheme-rev-macro.pdf
niyarin
0
460
Other Decks in Programming
See All in Programming
過去最大のMCPアップデート! 2026-07-28 RC版の謎に迫る
licux
6
460
Hunting Vulnerabilities in Symfony with LLMs
vinceamstoutz
0
580
自作OSでスライド発表する
uyuki234
1
3.8k
Honoでのサプライチェーン侵害対策 〜 3つのライブラリに学ぶ
yusukebe
7
1.8k
コーディングルールの鮮度を保ちたい for SRE NEXT 2026 / keep-fresh-go-internal-conventions-sre-next-2026
handlename
0
140
LLMによるContent Moderationの本番運用の裏側と品質担保への挑戦
suikabar
3
840
トークンをケチるな、設計しろ:GitHub Copilotを賢く使うコンテキスト戦略
ochtum
0
310
act1-costs.pdf
sumedhbala
0
210
霧の中の代数的エフェクト
funnyycat
1
340
ランチタイムLT会3周年!ランチタイムLT会を3年間続けられたお話
y0hgi
1
140
なぜ関数型プログラミングで「型」と「証明」が語られるのか #fp_matsuri
kajitack
3
800
これからAgentCoreを触る方へトレンドはGatewayです
har1101
6
480
Featured
See All Featured
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
Between Models and Reality
mayunak
4
370
The SEO identity crisis: Don't let AI make you average
varn
0
510
We Have a Design System, Now What?
morganepeng
55
8.2k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.7k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
870
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
180
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
500
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
1k
Become a Pro
speakerdeck
PRO
31
6k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Transcript
Scheme用nREPLの開発 (エラー出力の改善) Niyarin @niyarium
エディタからnREPLに繋ぎ、楽に開発したい nREPL: network REPL 1/6 エディタ repl 他にもLSPでできそうな機能も持たせたり (やっていないけど)
Scheme用nREPL: Orange-paren ・依存ライブラリ SRFI 18 (Multithreading) SRFI 106 (Basic socket
interface) ・Ring、Clojure nREPL風なミドルウェア (メッセージを処理するやつ) ・Vim用のクライアント 2/6 niyarin/orange-paren ・ 標準出力系手続きの処理 ・ 多値の出力 ・エラーの出力 ・define-libraryを意識したeval ・機能増やす (マクロ展開結果とかみたい ) やったこと これから
nREPLからエラーをクライアントに送信したい この辺の出力、api有無は処理系依存 - api等がないこともある エラーメッセージはキャッチしたエラーをerror-object-messageでとれる 3/6 ソース上の位置やスタック情報がないのはつらい こういうのがほしい↓
自前でエラー表示をやる 4/6 ・評価前の式に手を入れる eval middlewareの前に位置記録や、式改変する middlewareを入れる よほど変なことをしないかぎり、想定外の挙動はない `(define (proc-name …`
なら、ソースの位置と proc-nameを記録 defineを改造したdefineに置き換える
出力例 5/6 きれいにはなっていないが
実装方針 6/6 (import (scheme base) (scheme write) …. ) (import
(except (scheme base) define) (only (orange-paren hack-expression) define) (scheme write) …. ) importを投げると改造したマクロが名前空間に挿入される (define log ‘()) (define-syntax define (syntax-rules () ((_ (proc-name …… (define (proc-name . args) (with-exception-handler (lambda (object) (set-log! log proc-name args)) ※ 実際には末尾呼び出し最適化を殺さないように外側の一回だけ例外キャッチする
おしまい ・nREPLは考えることがたくさんある ・エラー処理とか ・S式は強い ソースコードに強引にロガーをはさむという処理も容易にできた ・今後やること ある名前空間内で評価したらその名前空間ないでevalようにする処理