elixir

マクロでerlang:qlcモジュールの妙な制限を撤廃する

Qlcモジュール erlangにはリスト内包表記でクエリを記述できるqlcモジュールというものが標準で付いており、それをelixirから利用するためのモジュールがQlcだ。hex.pmに登録してあるのでmix.exsにdepsするだけで利用できる。インストールしたのちの話だが、…

実行時にマクロ展開を行う

この記事は #サッポロビーム #137 でやったことの記事です。クリス・デイトのリレーショナル言語「tutorialD」が気に入ったので、処理系を作ろうと思っていた。 erlangのmnesiaを基盤として、とりあえずできたのだが、何をするにもフルスキャン必須で、実用…

elixir-v1.1.0リリース

elixirのv1.1.0がリリースされました。パチパチ。MapSetなど重要な機能が追加されています。Macro周りではimportでの名前の衝突を検出して、勝手に乗っ取ることがしずらくなっています。Mm.exというファイルを作ってみます。 defmodule Mm do def h do IO.pu…

elixir v1.1.0-betaに対応したリファレンス作った

最近盛り上がってきているelixirですが、v1.1.0-beta記念に、久しぶりに リファレンスの翻訳を再開してみた。 いつものように elixir, iex, ex_unit だけですが、http://ns.maqcsa.org/elixir/docs/v1.1.0-beta/に置いてみました。これまで同様、やる気のな…

QLC for elixir

QLCとはerlangのリスト内包表記を使ったクエリ書式であり、リストやEts, Dets, Mnesiaなどに対応している。今回はこれをelixirで使えるようにしようと思う。 qlcの使い方 基本的には、erlangなので変数は大文字で、 [Expression || Qualifier1, Qualifier2, …

アナフォリックマクロを作ってみる

Elixir Advent Calendar 2014 16日目。またマクロのネタを。 On Lispでは、Common LISPの力の例として、アナフォリックマクロが紹介されている。elixirでも、アナフォリックマクロを作ってみよう。 アナフォリックマクロとは アナフォラ(anaphora)というのは…

elixirプロトコルについて(Enumerable)

elixirでは標準でいくつかのプロトコルを提供しているが、あまり目立っていない。そこで、モジュールではなくプロトコルに着目して調べてみた。 Enumerable Enumerableとは、「数え上げることができる」という意味で、主にEnum、StreamモジュールがEnumerabl…

elixir地域化の話: アプリケーションのロード

地域化の話ではあるけれど、Elixir/Erlangのコードローディングとアプリケーションの話でもある。 地域化の基本設計の段階で、翻訳リソースはアプリケーション毎(OTPでいうところのアプリケーション)に決定した。 ところが、Code.get_docs/2では、モジュール…

elixir地域化の話その2

前回のExgettextは、ビルドが面倒だったり、mixのdepsへ入れると うまく連動しないとか不満があったので、その辺を整備してみました。 不満1 mix depsに入れるとexmoがビルドされない 当たり前で、deps.compileではMix.Tasks.Compileが呼ばれます。Mix.Tasks…

無名関数での再帰処理

elixirでの無名関数はfnスペシャルフォームで定義できるが、無名関数のため、自分自身を呼び出すような処理は記述できない。 たとえば、フィボナッチ数を求める関数は、 fn (0) -> 0 (1) -> 1 (n) -> self(n-1) + self(n - 2) のように書くことは出来ない。 …

shinjuku.ex#7

久しぶりに開催されたshinjuku.exに参加。今年に入ってからelixir界隈はにぎわってきていて、 Programming Elixir のような書籍が現れてきた。他にもオライリーからも出版されてきている。そんな背景と関係あるのか無いのか、今回はKDDIウェブコミュニケーシ…

ex_doc

elixirは「ドキュメントが第一級のオブジェクト」という面白い概念をもっている。どういう事かというと、プログラムのドキュメントをプログラムから操作できるという事である。doxygenなどは、プログラムのコメントを書式化するものだが、elixirではモジュー…

erlang like record manipulator

rabbitmqのクライアントamqp_clientをelixirで使おうと思ったのだが、erlangのrecordを使い倒していて困った。elixirにもレコードはあるし、erlangレコードをコンバートする事も出来るのだが、-includeを追いかけてくれないとかのelixirのRecord.extract_fro…

Elixir v0.5.0 releasedの超意訳

はじめのお断り これはPlataformatec社のコンテンツを勝手に翻訳したものです。 追記: twitterで翻訳した旨伝えたところ、怒られなかったです TOEICの成績がヤバすぎる私の超意訳なので、突っ込み歓迎。 文中の「私」は作者のJosé Valimを指します。 では行…

elixir-0.5.0 リリース

Release 0.5.0 \o/ · elixir-lang/elixir@6052352 · GitHubによると、0.5.0がリリースされた。0.5.0-devからの主な違いは、 new syntax: match: が->になり、cond 式が追加。 else:、after:などが else, afterなどになり、より普通の文法に。 @file属性の追…

elixirはプログラマの万能薬になるか その4

今回はマクロプログラミングをelixir自身を例題にしていこうと思うが、マクロをプリプロセッサと勘違いしている人も多いので、まずは入門から。 マクロ入門 Elixirのマクロは、コンパイルプロセス中において、構文解析後のツリーを入力として、別のツリーを…

elixir-modeをハックしてみた

elixir向けのemacs メジャーモードとしてはhttps://github.com/secondplanet/elixir-modeがあるのだが、0.4.0-dev以降のelixirには対応していない。elixir側も結構キーワードが変わっているし、作者氏も更新するのをやめてしまったみたいだし、インデントコ…

elixirはプログラマの万能薬になるか その3

前回はrubyなところを主に説明してきたので、いよいよ今回はLispな所であり、個人的に最もエキサイティングだと感じているメタプログラミングについて記述する。 メタプログラミング プログラムを書くプログラムを書く事をメタプログラミングと呼ぶ。Cのプリ…

elixirはプログラマの万能薬になるか その2

前回のエントリの続きで、elixirの「ふつうの」言語である側面の説明となる。とはいうものの、関数型言語になじみがない人にとっては新鮮かもしれない。 内容は、Redirecting…とほぼ同じになってしまっている。 データタイプ 基本データタイプ 基本データタ…

elixirはプログラマの万能薬になるか

erlang/OTP界隈でreiaというrubyフレーバーの言語が開発されて以来、erlang/OTP上で動作する言語がいくつか開発されている(efene, LFE(Lisp Flavoured Erlang)など)。どれも、erlang/OTPの独特な機能である、並行性、動的アップグレード、対障害性などをもっ…