Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
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
20260828_品質と開発生産性を両立させる、AI時代のE2Eテストの考え方
magicpod
0
190
Snowflakeで業務アプリを作ろう。 Snowflakeのアプリ機能解説&実践ガイド
ayumu_yamaguchi
1
220
高専キャリア LT 発表内容
crysta1221
6
5.6k
20260914 AIエージェント時代のPlatform Engineering LLM基盤とプロダクトの責務境界線
kanfab1
3
1k
一参加者から『中の人』へ 〜全通PHPerがブースに立って学んだ、カンファレンスを100倍楽しむコツ〜
wp_daisuke
0
140
GraphRAGのKnowledge Graphを 直接!見る/View-GraphRAG's-KnowledgeGraph-directly!
tyumugi1113
1
280
個人開発基盤をまるごとCloudflareに引っ越して爆速で総合的体験を向上させた話
tinykitten
0
160
デプロイ直後のレイテンシスパイクを調べたら、 Railsの仕様にたどり着いた
nhsykym
0
110
AIエージェント時代のコードレビューを設計する
nogu66
6
2.6k
LL言語やWebフレームワークのPostgreSQL対応 〜DBの機能がユーザーに届くまで〜
kentaroutakeda
0
150
iOS開発×AI駆動開発 〜最近使って便利だったスキルの話〜
nogu66
0
140
Intent as Code
shoppingjaws
6
880
Featured
See All Featured
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
290
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Odyssey Design
rkendrick25
PRO
2
800
Prompt Engineering for Job Search
mfonobong
0
450
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.3k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
410
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
590
Mind Mapping
helmedeiros
1
350
Building Flexible Design Systems
yeseniaperezcruz
330
41k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
Bash Introduction
62gerente
615
220k
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ようにする処理