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
800
nanopass-compiler-frameworkを使ってみました
niyarin
0
500
Gorgos-parser-combinator-written-in-scheme
niyarin
0
430
outputting-beautiful-s-expression
niyarin
0
430
Serialisp
niyarin
1
740
Mongo DBとS式検索
niyarin
0
360
goodbye-python-repl
niyarin
0
400
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
GraphRAGのKnowledge Graphを 直接!見る/View-GraphRAG's-KnowledgeGraph-directly!
tyumugi1113
0
170
ALB ログから Trace を気合で繋げる技術
fohte
7
860
T3DD26: From RAGs to Riches
martinhelmich
0
140
いまどきの Codex で開発する visionOS アプリの開発スタイルについて
karad
0
180
不幸な GC
chencmd
0
870
DroidKaigi 2026 「個人開発という実験場: Android エンジニアが手にする4つの自由」
slashnephy
0
200
Swift愛好会100回記念 第1回を振り返る
jollyjoester
0
110
iOS開発×AI駆動開発 〜最近使って便利だったスキルの話〜
nogu66
0
140
What We Talk About When We Talk About XP
m_seki
2
310
数年滞っていたダークモード対応をおよそ2週間で完了させる
chigichan24
0
660
Flow は今どうなっているか
mizdra
PRO
0
880
新卒PdEのリアル
ryu1013
0
160
Featured
See All Featured
Everyday Curiosity
cassininazir
0
310
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
370
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
290
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
510
The Pragmatic Product Professional
lauravandoore
37
7.4k
Accessibility Awareness
sabderemane
1
200
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
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ようにする処理