Skip to content

Instantly share code, notes, and snippets.

🤷‍♂
I know the value and cost of nothing

Ohta Shogo athos

🤷‍♂
I know the value and cost of nothing
Block or report user

Report or block athos

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
View instruction_set.txt
[:add z x y]
[:sub z x y]
[:mul z x y]
[:div z x y]
[:rem z x y]
[:eq x y]
[:lt x y]
[:gt x y]
[:neg]
[:push z x]
View description.md

Libs are blindly added into loaded-libs even if an error occurs during loading

Suppose you have a lib that causes some errors during loading, like the following:

(ns broken-lib)

(} ; this line will cause a reader error

And then, if you require the lib, it would be added into loaded-libs in spite of the reader error,

View gist:11020181
(defrecord Path [path]
clojure.lang.IFn
(invoke [this n]
(clojure.string/replace path ":id" (str n))))
(defmethod print-method Path [o ^java.io.Writer w]
(.write w (str "#path\"" (:path o) "\"")))
(set! *data-readers* (assoc *data-readers* 'path ->Path))
View bowling_game.clj
(ns bowling-game)
(defn- apply-to-nonnil [op & args]
(->> (reverse args)
(drop-while nil?)
reverse
(apply op)))
(defn partition-frames [throws]
(loop [n 1, [throw & more] throws, ret []]
View abstract_for_shibuyalisp_TT.md

genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター

シンタックスハイライトは、キーワードを強調表示し、ソースコードの可読性を高めるためのものであり、今や多くのテキストエディタやコードビューアが標準で備える基本的機能である。シンタックスハイライターは、シンタックスハイライトをするモジュールであり、一般的には簡易的な字句解析により実現される。

しかし、多くの動的言語のシンタックスハイライターは、そのような簡易的な実現手段では不十分である。動的言語では、ひとつのフォームが他のコードの意味に影響を及ぼしうる。そのため、より正確なシンタックスハイライトをするには字句解析や構文解析だけでなく、プログラムの意味を解析する必要がある。

Lisp系言語におけるマクロも、Lispコードのシンタックスハイライトを困難にするひとつの要因である。マクロを使えばユーザが独自に構文を定義できるため、一般のLispコードでは字面上のどのシンボルがローカルな束縛を表しているのかを識別することすら難しい。

本発表では、この課題を解決するために開発中の、マクロを認識するClojure向けのシンタックスハイライターであるgenuine-highlighterと、その基盤ととなっている解析器symbol-analyzerの仕組みについて述べる。また、genuine-highlighterをビルドツールLeiningenから使用できるようにするプラグインについてもデモにより紹介する。

View highlight_test.clj
(let [name #(subs (name %) 1)]
(name 'foo))
(letfn [(name [sym] (subs (name sym) 1))]
(name 'foo))
View user.clj
(ns user
(:refer-clojure :exclude [send])
(:require [clojure.tools.namespace.repl :refer [refresh refresh-all]]
[clojure.repl :refer :all]
[clojure.pprint :refer [pp pprint]]
[clojure.core.async :as a]
[clojure.java.shell :refer [sh]]))
(def to-listeners (a/chan))
(def pub (a/pub to-listeners :type))
View license_of_talks.md
Title Conference License
Transducers Strange Loop 2014 CC BY
Implementation details of core.async Channels EuroClojure CC BY-NC
Design, Composition and Performance QCon San Francisco 2013 InfoQ *1
Clojure core.async Channels Strange Loop 2013 InfoQ *1
The Language of the System Clojure/conj 2012 standard YouTube license *2
The Value of Values JaxConf 2012 standard YouTube license *2
Reducers QCon NY 2012 InfoQ *1
Simple Made Easy
@athos
athos / rich_hickey_q_and_a.md
Last active Aug 29, 2015
This document is translated from the interview at http://codequarterly.com/2011/rich-hickey/
View rich_hickey_q_and_a.md

Rich Hickey Q&A

by Michael Fogus

Best known as the inventor of Clojure, a Lisp that runs on the Java Virtual Machine and the first new member of the Lisp family to attract any widespread interest since Scheme and Common Lisp, Rich Hickey has been a software developer and consultant for two decades.

Rich Hickeyは20年来のソフトウェア技術者およびコンサルタントで、Clojureの創始者としてよく知られる。ClojureはJava仮想マシン上で動作するLispで、Lisp族の中ではSchemeやCommon Lisp以来はじめて幅広い人の興味を引いた新しい言語だ。

View core.clj
(ns redef-as-serializable.core)
(defmacro redef-as-serializable [& ts]
`(do ~@(for [t ts
:let [c (resolve t)
fields (mapv #(symbol (.getName %)) (.getDeclaredFields c))]]
`(deftype ~(symbol (str t \')) ~fields
java.io.Serializable))))
You can’t perform that action at this time.