プログラミング

【Common Lisp】Go言語の goroutine っぽいものを作ってみたかった話

Lisp Advent Calendar 2019 23日目の記事です。 近頃仕事で書いている Go 言語の勉強も兼ねて「Go言語による並行処理」という本を買ったので Lisp を書いていくぞという内容です。goroutine っぽい cloutine なるものを Common Lisp 上で作ってみようという…

【Common Lisp】REPL 上で手軽にスレッドの動作を試すためのライブラリを作った

Lisp Advent Calendar 2019 12日目の記事です。Commmon Lisp の REPL (Read Eval Print Loop) 上でお手軽にスレッドの動作を試すための小さなライブラリ repl-thread を作ってみた話です。 github.com 前置き 動かしてみる 中身 概要 queue: ただのキュー wa…

【マクロ小ネタ】Common Lisp で defer してみる

時には実用を考えずにマクロを書いて遊んでいると楽しいというだけの記事です。 Go言語の defer が簡単に実装できそうな気がしたので書いてみました。と思っていたら、途中で記事後半の事実に気付いて思ったよりも長くなりました。 defer の単純な模倣 Go言…

【小ネタ】 簡易な関数定義マクロ, マクロ定義マクロを自作してみる

defunまでマクロで出来ているということはユーザがその気になれば関数定義の構文に手を入れたりも出来るということだ。 ~中略~ このような設計はマクロで制御構造までも作れるから出来るのだ。関数定義構文をマクロで定義している言語はLisp以外に私は知ら…

proto-cl-client-side-rendering に画像描画機能を追加した話

前回記事でクライアントサイドレンダリング (2D) のためのライブラリを実装してみました。 eshamster.hatenablog.com この時点では丸や四角といったプリミティブな図形の描画しかできませんでした。画像(テクスチャ)の描画機能も必要だろうなと思いつつ面…

クライアントサイドレンダリング (2D版) を Common Lisp で実装してみる

2019年と令和元年、二重に本年最初の記事です。あけましておめでとうございます。 クラウドゲームをつくる技術 ―マルチプレイゲーム開発の新戦力 (中嶋謙互) (以下、「クラウドゲーム技術」)で提唱されている「クライアントサイドレンダリング」が面白そう…

LISP: '$e eeeeeeeeeeeeeeeeeeeeeeeeeeee eeeeeeeeeeeeeeeeeeeeeeeee eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee E

ひたすら「e」が並んでいるだけのリポジトリが話題になってました。 github.com Lispはどうかと見てみると、シンプルに無限ループで面白いというのが初見の感想でした。 e.lisp (loop (print "e")) しかし、ここでC言語の実装を見てみると何やら面白いことを…

多重ディスパッチの実装 on Parenscript

lisp Advent Calendar 201810日目の記事です。 今年はCommon LispサブセットをJavaScriptに変換するParenscript + three.js な2Dゲームライブラリ(もどき)のcl-web-2d-gameが育ってきたので、テトリスを作ってみたりブロック崩しを作ってみたりして遊んで…

AWS LambdaでDockerHubの定期ビルドを設定したときのメモ

DockerHubに登録しているCommon Lisp実行環境eshamster/cl-baseと、それをベースとした開発環境eshamster/cl-devel2ですが、RoswellやQuicklispリポジトリがそれなりの頻度で更新されるので、latestに対しては定期的に更新をかけておきたかったです。そのた…

[Common Lisp] ros templateの紹介

cl-web-2d-game *1 のようなWebアプリ向けのライブラリなどを作っていると、使うまでに色々とサーバ側の設定コードが必要で、中々気軽にプロジェクトを起こせなかったりします(単にインタフェースが悪いのではという議論は置いておきます)。そうした課題の…

Common Lispでホットローディングを試しに作る (2) 実装について

前回記事ではCommon Lisp上で実現したホットローディングのプロトタイプのデモや使い方について見ました。 eshamster.hatenablog.com 今回はその実装についてです。といってもベースは実に単純なもので、ParenscriptによってCommon LispコードをJavaScriptに…

Common Lispでホットローディングを試しに作る (1) 使い方について

前回記事「[Clojure] Figwheel + cljsjs/threeでホットローディングを試す - eshamster’s diary」ではClojureScriptでホットローディングをお試ししました。そして、おおむね次のような機構で動いていることが推測されました。 なんらかの契機でLispコードの…

[Clojure] Figwheel + cljsjs/threeでホットローディングを試す

前回記事「Clojure + Emacsな開発環境を作った on Docker - eshamster’s diary」でひとまずClojure開発環境を整えたので、前々から気になっていたClojureScriptを試してみます。 これまでもThree.js(WebGL上に構築された3Dライブラリ)を触ってきたので、ま…

Parenscript上でシンボルのインポートやエクスポートを模倣する

前書き Lisp Advent Calendar 2017の20日目の記事です。 Common LispのサブセットコードをJavaScriptに変換するParenscriptというライブラリの上でそれらしい名前空間を導入してみた記事です。考え方や実装の整理・メモという意味合いが強いので、果たしてこ…

木構造の親子関係を考慮したソート

前置き Common Lisp(サブセット)をJavaScriptコードに変換するParenscriptを色々拡張しているps-experimentで以前パッケージもどきを追加したことがありました。 eshamster.hatenablog.com 単にuse-packageしているパッケージをたどっていって、その配下で…

PostgreSQL (POSTGRES) におけるLisp

前書き LispからPostgreSQLを扱う記事…ではなく、PostgreSQLの歴史に見え隠れするLispについての調査もどき記事です。 発端は次のようなものです。仕事柄PostgreSQLのメーリスやソースを見たり見なかったりするのですが、今年の1月にRustgreSQLというスレッ…

Three.jsなWebアプリをCommon Lispで書く話

前書き Lisp Advent Calendar 2016の20日目の記事です。 13日目の記事「フロントエンドもサーバーサイドもCommon Lispで書く試み - @peccul is peccu」のタイトルを見た瞬間「あっ」と思ったのですが、テーマがダダ被りです。しかも、pecculさんの方はメンテ…

リーダーマクロで非公開シンボルの参照を簡略化する @ テスト

「#:g1: リーダーマクロでシンボルの略記をする」を読んでいて、こういうリーダーマクロの使い方することあるなと思ったので投稿。大した用途ではないですが…。 こんなことはないでしょうか。 インタフェースとしては不要なので公開はしたくない補助関数があ…

Common LispでSlack botを作る

チャットbotなるものにも(今さら)手を出してみようと、Slack用のサンプルbotをCommon Lispで書いてみました。 github.com 使い方 一応使い方です。 上記プロジェクトをquicklispからロード可能な場所にclone settings.json.inを参考にsettings.json(下記…

Common Lisp開発環境 on Docker

Docker上でCommon Lisp開発環境(by Emacs+SLIME)を起こしてみました。何が入っているか分からない開発環境だとどうしてもアップデートが億劫になるので、その辺をきっちりコード化したかったというのが動機です。 どちらかと言うとAnsibleやChefのように直…

JavaScriptのモジュール定義構文をParenscriptで抽象化(マクロで遊ぶ)

前書き JavaScriptを書いていて「ここでマクロがあれば…」と思う事案があったので、マクロ欲を満たすためのエントリです。 JavaScriptでのモジュール定義 JavaScriptでcounterモジュールを作ってみます。 var counter = (function() { var count = 0; var ad…

[JavaScript] ブラウザからSuperAgentでファイルをPOST

ブラウザからSuperAgentでファイルをPOSTしようとしてハマったのでメモ。なお、SuperAgentはAJAX通信に特化した軽量なJavaScriptライブラリです。 SuperAgent紹介記事リンク:jQuery.ajaxの代わりにSuperAgentを使う - Qiita ハマった部分 まず、HTMLでform…

[Common Lisp] システム内のパッケージ間の関係をグラフ化

システム内に存在するパッケージ間の参照関係をgraphvizでグラフ化するRoswellスクリプトmake-package-tree.rosを書いてみました。リファクタリングに使える…かもしれません。 github.com 前説 これを作ったきっかけの話です。 Common Lispを始めた頃に、と…

Node.js本のサンプルをCommon Lispで書く

JS+Node.jsによるWebクローラー/ネットエージェント開発テクニック作者: クジラ飛行机出版社/メーカー: ソシム発売日: 2015/08/31メディア: 単行本この商品を含むブログ (2件) を見る こんな本を買いました。タイトルを見てもピンと来なかったのですが、目次…

Common Lisp開発環境を新規に作ったのでメモ

JavaScriptの本「JS+Node.jsによるWebクローラー/ネットエージェント開発テクニック」を買ったのでCommon Lispの環境を新規に作ってみました(正しい日本語です)。 Emacsには抵抗がなく、これからCommon Lispを始めたいという人にもちょうど良いぐらいの内…

認証付きプロキシ環境でも(多少は)快適なpackage-installの利用

Emacs24を入れてから、list-packagesで適当にパッケージを追加してきたのですが、そろそろ.emacs.d/init.elのポータビリティが怪しくなってきたので、環境を見直し始めました。当初は、CaskやEl-getといったモダンな?パッケージマネージャを使おうと意気込…

2015年に作っていたもの

2015年に作ったものまとめ。1つ例外を除いて全部Common Lispでした。 全体的に飽き性っぷりが垣間見えるだけな気もしますが、来年どれかは発展させていきたいです。 オセロ (旧版:sample-of-eshamster/othello-cl · GitHub) github.com 作るものに困った…

マクロ展開時に副作用を起こすことの恐ろしさ

Lisp Advent Calendar 2015の23日目の記事です。 qiita.com すごく及び腰でしたが、ずっと空いていたので、えいやで登録してみました。 マクロ展開時に副作用を起こすな危険、という内容です。 前書き On Lisp: マクロのその他の落し穴によると、「Lispは,…

SBCLとCCLの違い:defstructのincludeにおけるスロット名の比較方法

Common Lispの構造体定義マクロdefstructでは、:includeで別の構造体のスロット名やその初期値を引継ぐことができます。このとき、下記の(a 100)のように初期値を上書きできます。 CL-USER> (defstruct parent (a 10) (b 20)) PARENT CL-USER> (defstruct (c…

Common Lispでマクロ展開時エラーをテスト

前回記事の「Parenscriptで少し遊んで見る (5)defstruct編 - eshamster’s diary」ではdefstruc.psマクロ内で展開時のエラー処理を入れたので、テストも一緒に作っています。このときに、マクロ展開時のエラーをテストする方法が意外と見つからなかったので…