SlideShare a Scribd company logo
1 of 14
Download to read offline
Common Lispっぽい
処理系をつくっています
t-sin (@sin_clav)
2020-06-28, 関西Lispユーザ会#18
Sciurus – Common Lispてきな?
●
https://github.com/t-sin/mark
– ”mark”はSciurusで実装する予定のプログラム
●
C言語(C11)で実装
●
ビルドシステムにninjaとmesonを利用
– なんかFUSE (Filesystem in userspace)で使ってた
動機
●
言語をつくりたい
– というかLisp
●
どうせなら実用したい
– 実用の方法を意識した機能
●
Common Lispっぽくしたい
– Common Lispは永遠の輝き
– 慣れている
設計 – あるいは妄想
●
基本の機能はCommon Lispに寄せる
– 構文、パッケージ、シンボルのスロット…
●
ちょっと挑戦もしたい
– マクロシステム、GC、多値
●
実用: インタラクティブなテキストのリス
– 円城塔『リスを実装する』
●
https://www.amazon.co.jp/dp/B00WGS4L18/
– UTF-8な文字列、タイムスタンプ型、文字列系関数
– イベント駆動 or マルチスレッディング?
Lispオブジェクト
typedef struct lis_obj {
lis_byte tags;
union {
lis_int num;
lis_char ch;
struct lis_array * array;
struct lis_string * str;
struct lis_tstamp * ts;
struct lis_symbol * sym;
struct lis_cons * cons;
struct lis_env * env;
struct lis_function * fn;
struct lis_package * pkg;
struct lis_stream * stream;
struct lis_error * err;
struct lis_obj * mval;
} data;
} lis_obj;
Lispオブジェクト (のタグ)
/* tags
*
* least significant bit 'g' is a GC-bit
* second least bit 'm' is not used but reserved
*
* 000000mg => int
* 000001mg => char
* xxxx10mg => built-in types
* xxxx11mg => internal types
*
* built-in types
*
* 000010mg => array
* 000110mg => string
* 001010mg => timestamp
* 001110mg => symbol
* 010010mg => cons
* 010110mg => function
*
* internal types
*
* 000011mg => environment
* 000111mg => pakcage
* 001011mg => stream
* 001111mg => error
* 010011mg => multiple value
*/
Sciurusが動いてるところ
$ ./build/src/lis
Sciurus Lisp, v0.0.0
lis? (list-all-packages)
(#<PACKAGE:lis> #<PACKAGE:keyword>)
lis? :test
:test
lis? (symbol-package :test)
#<PACKAGE:keyword>
lis? (defun fn (n) (print n))
fn
lis? (fn "hogehoge")
"hogehoge"
nil
lis? (defun fn2 (fn) (apply fn (list 42)))
fn2
lis? (fn2 (function fn))
42
nil
lis?
できること
●
ファイルへの読み書き
– バイナリ or 文字
●
いくつかの特殊形式
– if, lambda, quote, function, let, progn, setq
– Multiple-value-call !!!!!!
●
マクロ展開 (macroexpand)
●
ファイルからLispコードをロード
●
階乗やZコンビネータが動くの確認済み
できないこと - ほしいもの
●
doループ
●
リードテーブル
●
setf的なもの
●
unwind-protect
●
コンディション
– エラー処理したい
– デバッガはいらないがスタックトレースは見たい
●
GC! (本は買いました)
●
いろんなオペレータが不足
このへんでデモでも
●
File IO
●
defun
●
factorial?
●
macroexpand?
●
Z combinator?
今後(1)
●
実用できるよう機能拡充したい
– 繰り返しくらいほしい
– タイムスタンプ型
– マルチスレッドは、どうしよう
●
JSみたいにシングルスレッドでスケジューリング?
●
謎
今後(2)
●
やるきがでない
今後(2)
●
やるきがでない
– 起動時にLispコードをロードしてdefunできるよう
になったところでやる気が尽きた
– 実用までの長い道のり
– やれること(やるべきこと)の広がり
●
TODOは広大だわ
– なにか、モチベを上げねばならない
– 動作目標となるコードを定めてみる?
●
めんどい
おらにやるきを
わ け て く れ
(完)

More Related Content

Similar to Common Lispっぽいものをつくっています

Portacle : Common Lispのオールインワン開発環境
Portacle : Common Lispのオールインワン開発環境Portacle : Common Lispのオールインワン開発環境
Portacle : Common Lispのオールインワン開発環境Satoshi imai
 
Lispmeetup #45 Common Lispで音声合成
Lispmeetup #45 Common Lispで音声合成Lispmeetup #45 Common Lispで音声合成
Lispmeetup #45 Common Lispで音声合成Satoshi imai
 
Making Editor written in Ruby version 20160611
Making Editor written in Ruby version 20160611Making Editor written in Ruby version 20160611
Making Editor written in Ruby version 20160611Langur
 
Roslynで体験してみるC#スクリプト #cs_fukuoka
Roslynで体験してみるC#スクリプト #cs_fukuokaRoslynで体験してみるC#スクリプト #cs_fukuoka
Roslynで体験してみるC#スクリプト #cs_fukuokaYuta Matsumura
 
CL21で色々なデータ構造を実装してみようとした
CL21で色々なデータ構造を実装してみようとしたCL21で色々なデータ構造を実装してみようとした
CL21で色々なデータ構造を実装してみようとしたblackenedgold
 
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Ransui Iso
 
Lisper はじめました(大嘘)
Lisper はじめました(大嘘)Lisper はじめました(大嘘)
Lisper はじめました(大嘘)Nobutada Matsubara
 

Similar to Common Lispっぽいものをつくっています (9)

Portacle : Common Lispのオールインワン開発環境
Portacle : Common Lispのオールインワン開発環境Portacle : Common Lispのオールインワン開発環境
Portacle : Common Lispのオールインワン開発環境
 
Lispmeetup #45 Common Lispで音声合成
Lispmeetup #45 Common Lispで音声合成Lispmeetup #45 Common Lispで音声合成
Lispmeetup #45 Common Lispで音声合成
 
Making Editor written in Ruby version 20160611
Making Editor written in Ruby version 20160611Making Editor written in Ruby version 20160611
Making Editor written in Ruby version 20160611
 
Roslynで体験してみるC#スクリプト #cs_fukuoka
Roslynで体験してみるC#スクリプト #cs_fukuokaRoslynで体験してみるC#スクリプト #cs_fukuoka
Roslynで体験してみるC#スクリプト #cs_fukuoka
 
clominal
clominalclominal
clominal
 
CL21で色々なデータ構造を実装してみようとした
CL21で色々なデータ構造を実装してみようとしたCL21で色々なデータ構造を実装してみようとした
CL21で色々なデータ構造を実装してみようとした
 
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1
 
Lisper はじめました(大嘘)
Lisper はじめました(大嘘)Lisper はじめました(大嘘)
Lisper はじめました(大嘘)
 
Scheme to x86コンパイラ
Scheme to x86コンパイラScheme to x86コンパイラ
Scheme to x86コンパイラ
 

More from t-sin

続・SECDマシン
続・SECDマシン続・SECDマシン
続・SECDマシンt-sin
 
SECDマシン 実装と動きとその他もろもろについて
SECDマシン 実装と動きとその他もろもろについてSECDマシン 実装と動きとその他もろもろについて
SECDマシン 実装と動きとその他もろもろについてt-sin
 
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミングSounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミングt-sin
 
謎の言語Forthが謎なので実装した
謎の言語Forthが謎なので実装した謎の言語Forthが謎なので実装した
謎の言語Forthが謎なので実装したt-sin
 
PythonでLispを実装した (evalつき)
PythonでLispを実装した (evalつき)PythonでLispを実装した (evalつき)
PythonでLispを実装した (evalつき)t-sin
 
バッテリー強奪! PythonをCommon Lispから使う
バッテリー強奪! PythonをCommon Lispから使うバッテリー強奪! PythonをCommon Lispから使う
バッテリー強奪! PythonをCommon Lispから使うt-sin
 
Common lispでグラフィックアート
Common lispでグラフィックアートCommon lispでグラフィックアート
Common lispでグラフィックアートt-sin
 
One - Common Lispでもワンライナーしたい
One - Common LispでもワンライナーしたいOne - Common Lispでもワンライナーしたい
One - Common Lispでもワンライナーしたいt-sin
 
Inquisitor -Common Lispに文字コード判定を-
Inquisitor -Common Lispに文字コード判定を-Inquisitor -Common Lispに文字コード判定を-
Inquisitor -Common Lispに文字コード判定を-t-sin
 

More from t-sin (9)

続・SECDマシン
続・SECDマシン続・SECDマシン
続・SECDマシン
 
SECDマシン 実装と動きとその他もろもろについて
SECDマシン 実装と動きとその他もろもろについてSECDマシン 実装と動きとその他もろもろについて
SECDマシン 実装と動きとその他もろもろについて
 
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミングSounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
Sounds Like Common Lisp - ゼロからはじめるサウンドプログラミング
 
謎の言語Forthが謎なので実装した
謎の言語Forthが謎なので実装した謎の言語Forthが謎なので実装した
謎の言語Forthが謎なので実装した
 
PythonでLispを実装した (evalつき)
PythonでLispを実装した (evalつき)PythonでLispを実装した (evalつき)
PythonでLispを実装した (evalつき)
 
バッテリー強奪! PythonをCommon Lispから使う
バッテリー強奪! PythonをCommon Lispから使うバッテリー強奪! PythonをCommon Lispから使う
バッテリー強奪! PythonをCommon Lispから使う
 
Common lispでグラフィックアート
Common lispでグラフィックアートCommon lispでグラフィックアート
Common lispでグラフィックアート
 
One - Common Lispでもワンライナーしたい
One - Common LispでもワンライナーしたいOne - Common Lispでもワンライナーしたい
One - Common Lispでもワンライナーしたい
 
Inquisitor -Common Lispに文字コード判定を-
Inquisitor -Common Lispに文字コード判定を-Inquisitor -Common Lispに文字コード判定を-
Inquisitor -Common Lispに文字コード判定を-
 

Common Lispっぽいものをつくっています