OOC 2024 の発表資料です。後のフィードバックを参考に、より妥当な文言に改訂してあります。 ※ 本コンテンツには、一部特定の宗教思想の迫害に言及する表現がございますが、そのような行いを肯定する意図の内容ではございません。
https://old.reddit.com/r/emacs/comments/lly7po/do_you_use_emacs_lisp_as_a_general_purpose/ 1990年代初頭、東欧革命で東西ドイツが統一したあと、私は厄介な仕事、というか誰もやりたがらない仕事に派遣された。ある月曜日の朝、DASAの工場に入った(DASAというのは当初ドイツ航空で、そのあとダイムラー航空になり、今はエアバスに吸収された) プロジェクトはDASAからHPが受注したもので、東西のATC(航空交通管制)システムを統一するというものだった。つまり2つの大企業と政府からの発注ということで、うちのような受注会社はおこぼれを預かっていたわけだ。Emacsの話は実は2つある。 最初の話。その月曜日の朝、手助けする開発者達と顔合わせした。彼らは素晴らしいものに囲まれた研究所にいた。最新のHPワークステー
言語実装 Advent Calendar 2022の1日目の記事として書いた。 Lisp Advent Calendar 2022でも枠が空いていたのでダブル投稿。 プログラミング言語を実装してみたい!と思ったらまずは簡単なLispインタプリタから始めるというのは一つの王道だと思う。 複雑な構文解析は要らず最低限の再帰下降法パーサで手に入る構文木を、そのまま再帰的な関数で実行していくtree walking評価器。メモリ確保もヒープにそのまま置いていって、メモリ解放は実装言語のGCに任せるなりプログラムの終了時までやらなかったり。そんなインタプリタを作る経験から得られるものは非常に大きく、どんなプログラマでも一回は試してみてもいいのではないか?と思っている。(個人的な感想です) そんな簡易Lispを実装してみて沼にハマってしまい、より精緻な言語処理系を作りたいと思ったとする。その時点で:
「本記事は、技術的な視点から情報を提供することを目的としております。内容については可能な限り正確性を期しておりますが、記事内の見解は執筆者の意見や理解に基づいており、すべての方にとって普遍的な結論を示すものではありません。技術の分野は常に進化し、新たな知見が追加されることもあります。ご意見がある場合には、建設的な対話を歓迎いたしますが、批判的な意見を展開する際も、お互いの尊重を大切にしたコミュニケーションを心がけていただけると幸いです。」 タイトル: 「東京プログラマー リスプを書かずにはいられない物語」 新宿の夜景を見下ろすカフェで、主人公の大輔は、ノートパソコンに向かって静かにキーボードを叩いていた。彼は東京で働くプログラマー。コードの世界に浸り、特に最近夢中になっているのが関数型言語LISPだった。 LISPは、数学のように純粋で美しいロジックが展開できる言語。大輔は「この関数型の世
私は新たにプログラミング言語を学ぶとき、しばしば簡単なLisp処理系を作ってみます。いくつかの言語で取り組んでいるうちに、このLisp処理系群に小さな共通基盤も出来上がったりしているので、これを紹介しつつ、Lisp処理系の実装がプログラミング言語の学習にどう丁度いいのかを紹介します。 Rosetta Lisp 自作のLisp処理系群を、ロゼッタ・ストーンから名を借りてRosetta Lispと呼んでいます。Rosetta Lispは以下のような特徴を持ちます。 一定の共通した言語仕様・VMの仕様に基づいて動作する Rosetta Lispは (Rosetta Lispに準拠するLisp処理系群は)、いずれも共通した命令セットのVM上でLispプログラムを実行するように実装されています。 Lispの簡単な実装では、よくインタプリタ形式が採用されます。kanaka/malやrui314/min
伊藤直也さんが「今逢いたい」ソフトウェアエンジニアに声をかけて対談を重ねてきたシリーズの最終回は、これまでの対談の文章化を手がけたラムダノート株式会社の鹿野桂一郎さんとの異色対談です。コンピュータ技術書や記事の編集者であると同時に仕事や趣味でHaskellのプログラムも書く鹿野さんの視点を通し、現代のウェブシステム開発に伊藤さんが何を見ているのか、特に「型」と「エンジニアの学び」というこれまでの対談に通底するテーマについて掘り下げます。 ・伊藤 直也さん / 株式会社 一休 執行役員 CTO 新卒入社したニフティ株式会社でブログサービス「ココログ」を立ち上げ、CTOを務めた株式会社はてなでは「はてなブックマーク」などの開発を主導。グリー株式会社では統括部長としてSNSを担当した。2016年4月、一休に入社し執行役員CTOに就任。 ・鹿野 桂一郎さん / ラムダノート株式会社 代表取締役社長
If you’ve ever built a web service or a web app, you know the drill: pick a database, pick a web service framework (and in today’s day and age, pick a front-end framework, but let’s not get into that). This has been the case for several decades now, and people don’t stop to question if this is still the best way to build a web app. Many things have changed in the last decade: Disk is a lot faster
リクルートアドベントカレンダーの20日目の記事です。 adventar.org 最初にこの疑問を思ったのは、今も忘れない R-ISUCON 2021 というリクルートの社内ISUCONの運営で炎上していた時の話です。 ちなみに R-ISUCON 2021 は劇的な結果で終わっているので、興味のある方は見てみてください。 blog.recruit.co.jp R-ISUCON 2021 では、 Node.js (TypeScript), Go, Java の3パターンの実装が出てくることが通例になっていまして、今回は Java の実装から Node.js, Go に適用していた時に一緒に実装していたメンバーからの疑問が『例外には色々な議論があるけれど、「例外を初めて実装した言語」ってどういう気持ちで実装したんだろう』という話が挙げられたので、そのネタを持ってきました。 ちなみにここで指してい
新型コロナウイルスの感染がまたも拡大し、外出を控える人が増えてきた。自宅で何かできることを探している人は多いはずだ。中にはプログラミングを始めてみたい人もいるだろう。あるいは、プログラミングに関する新しい技術を身に付けたいソフトウエアエンジニアもいるかもしれない。 プログラミングを学ぶ際には、プログラミング言語の選択が重要になってくる。言語が異なると、プログラムの書き方が変わってくるからだ。 では、どの言語を学べばよいだろうか。最近はPython(パイソン)が人気で、Go(ゴー)やRust(ラスト)といった低レイヤーに強い言語も注目を集めている。ただ、「人と同じような言語を学ぶのはつまらない」と考える人もいるかもしれない。 そうした人にぜひお勧めしたいのが「Lisp(リスプ)」だ。数ある言語の中でも独自の存在感を放つ。現役バリバリでソフトウエアを開発しているプログラマーでも「いつかはLis
Ichigo Lispコンパイラ完全解説 はじめに この記事では私がWebAssemblyで書いた Ichigo Lispという LISP 1.5実装のコンパイラのソースコードをすべて解説する。 というのも、最近とあるコンパイラの本を読んで 「説明が特定の実装に基づいてる割にそのソースが一部しか載ってない」 という不満を感じたのだが、自分で書いたコンパイラの記事 を読み返してみると、コンパイラのソースコードが一切出てこないことに気づいた。 こんな記事を書きながらよく人様の本に不満を持てたものだと 瀬戸内海より深く反省したので、 ここにIchigo Lispのコンパイラのすべてのソースコードを解説する。 想定読者とか Ichigo Lispのコンパイラは(ほとんど)すべてLISP 1.5で書かれている。 LISP 1.5特有のややこしい機能などは使っていないので、 Common Lisp、S
ChatGPTのプロンプトをLispで書けることに気づきました。プロンプトによって処理系としてふるまってもらうという話は聞いたことがありましたが、Lispの場合はそのようなプロンプトがなくても解釈されました。 モデルはGPT-4です。言語としてはClojureをベースにした擬似コードを書いています。 ※いくつか例を追加しました。思った以上にプログラミング的なことができるみたいです。 単純な生成と変換の例 子供っぽくする 静かなヤンデレっぽくする (しっぽりやんでれ?) 対偶を返す 小説を作ってそれを要約する 鶏の唐揚げのレシピのJSONを生成する Lispについて執事っぽく説明する クラムチャウダーのレシピを妹として箇条書きにする お兄ちゃんとツンデレの妹の誕生日ケーキについての会話を生成する Clojureの関数を使う例 3つの文を元気にする 犬の名前を5個生成してひらがなにする キリン
LISPとは インストール Hello world REPL (Read-Eval-Print Loop) スクリプト実行 FASLファイル 実行ファイル コメント S式 Lispで扱える型 出力 文字列出力(write, write-line) 文字列・数字出力(print, princ, prin1) 改行出力(terpri) フォーマット(format) アトム(atom) 数値(number) 整数(integer) 小数(float) 分数(ratio) 複素数(complex) 文字列(string) 文字(character) シンボル(symbol) 真偽値(t/nil) リスト(list) リスト(list) 空リスト(()/nil) 要素抽出(car, cdr, first, second, ..., rest) リストの長さ(length) リスト連結(append)
*scratch* バッファ S式の評価 直前のS式を評価 → C-j(結果は次行) カーソルの直前のS式を評価 → C-x C-e / eval-last-sexp(結果はミニバッファ) カーソルの位置か、そこ以前の行頭で始まるS式を評価 → M-C-x / eval-defun バッファ全体を評価 → M-x eval-buffer 選択範囲を評価 → M-x eval-region 各種定義の確認 関数定義の確認 → (symbol-function '関数名) interactiveじゃない関数をEval → M-: / eval-expression 入力履歴は M-: からの M-p / M-n で辿れる C-x M-: / C-x M-ESC で直前のコマンドを再実行 / repeat-complex-command 入力シンボルの補完 → M-Tab (emacs-list
本記事は Emacs - Qiita Advent Calendar 2025 - Qiita の19日目の記事です。 成果物 経緯 参考資料 動作するまでの話 1. CPU の実装 実装メモ:cl-destructuring-bind との出会い 2. 各命令のユニットテスト 実装メモ:ELFファイルの解析 3. 文字の出力 実装メモ:ANSI カラー対応 4. 文字の入力 実装メモ:echo-back の二重表示を防ぐ 快適なLinux体験を目指して システム出力テキストおよびユーザー入力テキストの保護 Q. なぜ read-only だけでなく領域チェックまで? ノンブロッキングUI Q. なぜスレッドやマルチプロセスを採用しなかったの? emacs-riscv の全体図 おまけ (Claude Code + NotebookLM) まとめ 成果物 github.com Emacs
Claude-3 Sonnetがだいぶ良いので、前々から考えていた、「Lispっぽい記法で書けるけど他の言語に慣れた人にも使える言語」の処理系を作ってみた。仮にEasyLispという名前にした。 この言語ではこんな感じでプログラムが書ける (define person (object)) (set! person.name "Alice") (set! person.age 30) (print person.name)personというオブジェクトのプロパティをnameやageがあって、これをドット記法で指定するとpersonオブジェクトのプロパティにアクセスできる。 同じことをCommon-Lispでやろうとするとこうなる (defun example () (let ((person (make-object :name "Alice" :age 30))) (format t "N
Googleスプレッドシートの名前付き関数でLISPインタプリタを作った はじめに こんなの を作った。 エラーチェックをサボっていたり、 少し複雑な計算をすると途中で打ち切られたりするが、 それなりに遊べるはず。 Googleスプレッドシートとは Googleスプレッドシートはいわゆる表計算ソフト。 表に色々入力したり、色々計算させたりする。 =SUM(A2:A10) とか書くと2行A列から10行A列までの合計を計算してくれたりする。 スクリーンショットを貼り付けるためのソフトではないはず。 名前付き関数とは Googleスプレッドシートには前述のSUMの他にも色々関数があるが、 ユーザが自分で新しい関数を定義することもでる。 例えばNの階乗を求める関数を定義してみよう。 メニューの [データ] - [名前付き関数] を選択し、 [新しい関数を追加] をクリック。 [関数名] に FA
ノルウェーのソフトウェア開発者であるアンドレアス・エリクセン氏が、使用環境により最大2年バッテリーが持つコンピューター「PotatoP」を開発しました。 PotatoP | Hackaday.io https://hackaday.io/project/184340-potatop Andreas Eriksen's PotatoP Is a Lisp-Powered Laptop with a Battery Life Measured in Years - Hackster.io https://www.hackster.io/news/andreas-eriksen-s-potatop-is-a-lisp-powered-laptop-with-a-battery-life-measured-in-years-2f5d79653f24 PotatoPには1万2000mAhのリチウムイ
If you've wondered how much a solo dev can build for seamless C++ interop on a quarter, you're about to find out. In April, jank was unable to reach into C++ at all. Toward the end of this post, I'll show some real world examples of what works today. Before that, though, I want to say thank you for the sponsorship this quarter, not only by all of my individual Github sponsors, but also by Clojuris
reddit/lisp 英語圏のreddit/lispで投稿しましたら、思いのほか反響がありました。日本訳をここに投稿します。 よくある質問 reddit/lispを見ていると、頻繁に同じ質問が繰り返し出てくるのを目にします。 「Lispは優れているにもかかわらず、なぜもっと広く使われないのでしょうか?」 私は、その答えはLispの本質そのものにあると考えています。私の意見では、Lispは知的なおもちゃです。ここでは、この問題に関する私の考えを共有したいと思います。 個人的なチューリングマシンへの欲求 1958年、マッカーシー博士はLispを考案し、発表しました。当時、IPL-Vというシステムが存在していましたが、マッカーシー博士はおそらくこれよりも優れたものを求めていたのでしょう。彼はかつて、自分の個人的なチューリングマシンが欲しいと言ったことがあります。Lispは多くの研究者に受け入れ
SectorLISP now supports garbage collection. This is the first time that a high-level garbage collected programming language has been optimized to fit inside the 512-byte boot sector of a floppy disk. Since we only needed 436 bytes, that means LISP has now outdistanced FORTH and BASIC to be the tiniest programming language in the world. SectorLISP consists of 223 lines of assembly. It provides a LI
さる8月1日、計算機科学の根幹を揺るがすドドスコ問題が出題され、エンジニアたちは震撼した(意味: 面白問題が出たので、なるべくヘンテコな解法を使って己の技巧を誇示するためにエンジニアたちは競ってコードを書きはじめた)。 【問題】配列{"ドド","スコ"}からランダムに要素を標準出力し続け、『その並びが「ドドスコスコスコ」を3回繰り返したもの』に一致したときに「ラブ注入♡」と標準出力して終了するプログラムを作成せよ(配点:5点)— ((🐑++)) (@Sheeeeepla) 2022年8月1日 そこで、関数型テクニックをなんとかねじこんだ解法を作ったのでここに示す。 import higherkindness.droste.Coalgebra import higherkindness.droste.data.list.{ListF, ConsF, NilF} import higherk
Gamedev in Lisp. Part 1: ECS and Metalinguistic Abstraction In this series of tutorials, we will delve into creating simple 2D games in Common Lisp. The result of the first part will be a development environment setup and a basic simulation displaying a 2D scene with a large number of physical objects. It is assumed that the reader is familiar with some high-level programming language, has a gener
プログラミング言語の処理系を実装してみたく思い、LispのようなS式を実行する簡易的な処理系を書いてみました。 「第一級の継続(call/cc)を実装する」というのが一番の目標でした。 ひとまずは動くものができたと思うので、実装するにあたって考えたこと、試したことなどを書き残しておこうと思います。 ソースコードはこちらとなります。 言語を軽く説明 Rubyで実装したS式の簡単な処理系です。 VM(バーチャルマシン)実行方式を採用しました。ソースコードを独自のバイトコードに変換して、それを独自のVMで実行します 扱える値は整数と文字列くらいです。組み込みの関数名などは若干Rubyに寄せています。if、while、変数などは実装してあって、こんなコードが動きます。
;; &() is object literal used with quasiquote (let ((obj `&(:name "LIPS Scheme" :version ,lips.version))) ;; you can access JavaScript properties ;; with dot notation, print is display + newline (print (string-append obj.name " " obj.version)) ;; you can mix scheme and JavaScript (setTimeout (lambda () (alert (JSON.stringify obj))) 1000) #void) With LIPS you can mix Scheme and JavaScript. You can
By Robert Smith Simulating a universal, gate-based quantum computer on a classical computer has many uses and benefits. The top benefit is the ability to inspect the amplitudes of the system’s state directly. However, while the mathematics is very well understood, implementing a general-purpose simulator has largely been folk knowledge. In this tutorial, we show how to build an interpreter for a g
Goodbye, Clojure After ~7 years, I was done with Clojure. I was writing a some CLI apps, and I hated how long they took to start up. The community at large seemed not to care about this problem, except for the babashka folks. However, I spent long, hard hours banging my head against native-image and it just wasn't working out. It was incredibly painful, and at the end of it, I still didn't have st
This book, written by Protesilaos Stavrou, also known as “Prot”, provides a big picture view of the Emacs Lisp programming language. The information furnished herein corresponds to stable version 2.0.0, released on 2025-12-10. Official page: https://protesilaos.com/emacs/emacs-lisp-elements Git repository: https://github.com/protesilaos/emacs-lisp-elements The purpose of this book is to provide yo
Lisp in Life is a Lisp interpreter implemented in Conway’s Game of Life. The entire pattern is viewable on the browser here. To the best of my knowledge, this is the first time a high-level programming language was interpreted in Conway’s Game of Life. Running Lisp on the Game of Life Lisp is a language with a simple and elegant design, having an extensive ability to express sophisticated ideas as
本記事は、ラムダノートで発売している『定理証明手習い』を買っていただいた方に「読んで」とお願いするための「私家版、読み方のおすすめ」です。そもそも定理証明とか自分には関係ないしっていう人も多いと思うので、「気になるけど買ってない」という方に興味を持ってもらうことも目的としています。 「ラムダノートの本の読み方(私論)」シリーズはこれで第3回なのですが、前回からは丸1年も空いてしまいました。この間に『実践プロパティベーステスト』を出版し、プログラムの挙動を検証する本について語れることが増えたので、そのあたりの世界観自体から話を始めていきたいと思います。 テストケースを手作りして挙動を確かめる 性質からテストケースを自動生成するプロパティベーステスト プログラムの性質を値によらず「証明」する 証明してみよう 続きは『定理証明手習い』で 現実的な効能? テストケースを手作りして挙動を確かめる 配
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く