タグ

マクロに関するmatatabityのブックマーク (4)

  • sweet.jsでJavaScriptを拡張する - Qiita

    sweet.jsとは Mozilla製のJavaScriptコンパイラです。コンパイルと言っても仕事は定義したマクロの展開です。 特徴として、ここで定義することのできるマクロはSchemeやRustのようなハイジニック・マクロであることがあげられます (と、家より。Rustってマクロあるのかー)。 GitHub では、2,600以上のstarがついている人気プロジェクトです (2014年12月現在) 。たぶん。 何に使えるのか JavaScriptの文法をユーザが任意に拡張し、イケてるJavaScriptプログラミングをごりごりできるようにします。 あの言語にあるあの構文が使いたいんだけどJavaScriptにないしなあ 頻繁に書くパターンがあるんだけど、関数やプロトタイプ継承ではDRYにできないやつだこれ といった悩みを解決します。 自分の学習モチベーション 世のJavaScript

    sweet.jsでJavaScriptを拡張する - Qiita
  • コンパイラマクロとインライン展開とその問題

    最近、Allegro Common Lisp の Enterprise 版が手に入り、最適化熱を再燃させています。その手始めとして、Computer Language Benchmarks Game の Lisp プログラムを高速化しようとしましたが、正直に言って、これらのプログラムは Lisp らしからぬ書きぶりで(いやむしろ Lisp らしいと言ったらいいのか)、高速化しようにもなかなか手が付けられない状態です。どういうことかと言うと、例えば fannkuch-refux には次のようなマクロがあります。 (defmacro setlambda(n) (declare (type fixnum n)) (let ((copy (gensym)) (perm (gensym))) `(lambda (,perm ,copy) (declare (optimize (speed 3) (s

  • Common Lisp is still hard to satisfy. - Qiita

    Abstract マクロは、構文拡張により言語の高い次元の抽象化を行うことができる、Lisp 特有の機能です。マクロは、S式をコンパイルするとき、そのheadがマクロをもつシンボルであったならば、対応する macro-function を呼び出して式を変形させるという動作をします。コンパイルは構文木のrootから順に行われます。 この記事では、マクロ一般の能力ではなく、 現在の Common Lisp におけるマクロシステム について、それが制限を持っているということを示します。また、この制限を克服できる新たなマクロシステムを提案します。 マクロとは (略) マクロに関係するマクロ、関数、変数は以下です。 (defmacro name lambda-list &body body) (macrolet bindigs &body body) (eval form) (compile nam

    Common Lisp is still hard to satisfy. - Qiita
  • Scheme:マクロの効用

    普通のやつらの上を行けでLispにおけるマクロの効用が述べられているが, 「じゃあ具体的にマクロを使って『こりゃ便利だ』っていう例を見せてよ」 と言われてもなかなかすぐに出て来ない。 そこで、なんかいいマクロの使用例を思い付いたら書いてってみるコーナー。 通りすがりのマクロ初心者です。便利なマクロの具体例はすごく知りたいので、この項、期待してます。 Paul Graham「On Lisp」を読書中でなかなか良いけど、日語の解説があった方が理解が早まるので。 もくじ マクロを使う局面定型パターンの簡略化関数呼び出しのインライン展開の代用新しい構文による抽象化ミニ言語の埋め込み宣言的なコードに見せるコンパイル時の処理具体例クラス定義でのリーダーの生成リストの内包表記 (List comprehension)リストの構築他の処理系の移植 関連:Scheme:マクロの危険 マクロを使う局面 なん

  • 1