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
180
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
480
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
450
Other Decks in Programming
See All in Programming
スマートグラスで並列バイブコーディング
hyshu
0
150
Creating Composable Callables in Contemporary C++
rollbear
0
140
Even G2とAWSで推しのエージェントを召喚しよう!
har1101
1
120
生成AI時代にこそ効くGo | Why Go Works in the Age of Generative AI
mom0tomo
8
3.2k
ふつうのFeature Flag実践入門
irof
7
4k
代数的データ型って何が嬉しいの? #frontend_phpcon_do
kajitack
8
3.7k
DynamoDBには集計系のクエリがないけどなんとかしたい
musan
1
140
Claspは野良GASの夢をみるか
takter00
0
190
エンジニアと一緒にテストコードの設計と実装を改善した話
mototakatsu
0
180
Webフレームワークの ベンチマークについて
yusukebe
0
170
依存関係から依存物へ―Dependencyという言葉の歴史をひも解く
j_lee
0
120
Vue × Nuxt × Oxc どこまで使える?実運用の現在地
andpad
0
250
Featured
See All Featured
Accessibility Awareness
sabderemane
1
140
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
410
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
220
Darren the Foodie - Storyboard
khoart
PRO
3
3.4k
The Cult of Friendly URLs
andyhume
79
6.9k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.3k
Believing is Seeing
oripsolob
1
150
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
1.1k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
Statistics for Hackers
jakevdp
799
230k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.2k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
190
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ようにする処理