【Erlang】プログラム言語 Elixir 【BEAM】 [転載禁止]©2ch.net
Erlangの仮想環境(BEAM)上で動作するプログラミング言語 Elixirを語りましょう。
公式
http://elixir-lang.org なんてったってRubyツルハシ本のDave Thomasご推薦だもんなぁ。 そう、それ。英語版買ってみたんだけど読むのに時間がかかるので、誰か日本語訳してくれないかしら。 あ、ごめん
書籍購入済みだったのね
言い回しとか細かい意味は気にせず
コード例を試しながらガンガン先に進むのがお奨め
どうしても意味不明なら、ここに書き込めば誰かが答えてくれる >>6
> どうしても意味不明なら、ここに書き込めば誰かが答えてくれる
これは期待! Elixir でどんなプログラムを作ってるのかが知りたい >>9
githubには約2,000くらいリポジトリがあるな。
websocketサーバとか作ってるのか? [翻訳] Elixirのプロセスアーキテクチャ または私は如何にして心配するのを止めてクラッシュを愛するようになったか
http://qiita.com/HirofumiTamori/items/a3ee8eaeca76b43ae614 これいいね、Erlangは文字列が扱い辛かったんで使うの止めたんだけどVMとプロセスは好みだったんで凄いたすかるわ
ここしばらくClojure使って仕事してたけどこれに移行してもいいわ
#また社内ですったもんだしそう >>13
目覚めよ 私のコーディング力 先進のエリクシール Elixirって文字列処理速いの
そこが遅いと厳しいんだけど これエリクシールって読むべきなの?
日本語話者同士だとエリクサーでいいの? Dave Thomas本の紹介ビデオでは「エリクサー」だった。
ttp://pragprog.com/book/elixir/programming-elixir
イギリス発音だからなのか、「えりくすぉぁ」ぽい。 >>21
ありがと
テキストと違って実時間食われるんで、ビデオ関係まったく見てなかった orz >>21
Kindle版読了した
Earlang触ったときは銀の弾かと思ったが弾込めがめんどくさくて厭になったけどElixirは良い感じ
プロダクトで使っても良い感じだけど日本語書籍が出ないとちょっと辛いかも
Shiroさんとかが訳してくれないかと節に希望 >>23
Lisp Flavored ErlangならともかくElixirはないだろ >>24
LFEの開発は活発なんでライブラリが増えてきたら楽しい事になりそうだけど、まだ実用するのはちょっと難ある感じじゃないの? >>25 は LFE はライブラリが少ないという
>>27 は elixir はライブラリが少ないという >>29
LFEはエコシステムがまだだからライブラリが少ない
Elixirはエコシステム作成環境のMixがある
って事なんじゃないの?
jvmだとMavenレベル(Earlangの資産)はどっちも使えるけどClojure(Elixir)にはleiningen(Mix)があるみたいな(LFEはコレがまだ) QiitaにElixirネタが急に増えだしたけどなんかあったのか? Qiitaで熱心な人のアンテナに引っかかり始めたってだけじゃね?
それと、Elixirに関する記事翻訳してる人とかいたし、その影響かも?
翻訳されたの読んで興味もって、触ってから記事あげたとか。 ほんとだ、えらく増えたな
個人的にはにゃんぱすの中の人がどうするか興味あるな Elixir触ってたらErlangのコードが読めるようになってたw
これが抽象化の威力か
嬉しい副作用 macでbrew install elixirでインストールしても、erlangには依存してないんだな。 昔のErlangをインストール済みだと問答無用で落ちるのが初心者殺し 最近ブクマにこれ関係増えてるんだけど
ブーム来てる? Railsでフルスタックやってみたひとが、RESTサービスとかバックエンドをやるのに、手を出してる感じかな?
JVMやgoほど速くないけど動的寄り
そこそこはやいnodeと比べて、分散の仕組みがしっかりしてるのでnodeほどはまらない
素のpytonやrubyよりは単純にはやいし、仕組みはnodeの比較と同じ
そして、erlangよりはrubyの構文に似ている あとは、mixというビルドツールが、なかなか優秀なので他のLLと同じように、ライブラリが見つけやすい&なければ作って共有のループにはまるかも。
erlang向けのライブラリも使えるし、今流行りの分野だけでも移植されていけば、比較優位かもという話。
> MixはElixirにおける作成、コンパイル、アプリケーションのテスト、依存関係の管理を扱うためのビルドツールです。
http://elixir-ja.sena-net.works/getting_started/mix_otp/1.html
人が増えるかは、初心者も乗ってくるキラーフレームワークが出来るかと、ユーザーグループとかの活動にかかってくるかも。 単なるAPIサーバー用途でこんな特殊な言語使うかな
ジョブスケジューラとかには良いかなと思ってるけど >>44
RoR好きだった連中が集ればclojureより流行ると思う
とClojure使いの自分は思ったりするし、移行とか併用ありだとおもってる。
ClojureはMany Coreなマシン単体だと効率が良いけどBEAMだとMany Machineで行けるのが凄い魅力なんだわ >>45
実際使われ出してるのかね
今更Railsやる気も起きないし
選択肢にGoやScalaなんかもあって迷ってる
どれも並列性は強力だけどかなり使い方に違いがあるし
一度使い出すとメンテしなきゃいけないから https://speakerdeck.com/naoya/web-api-sabatositefalse-elixir-falseke-neng-xing
node vs erlang
http://kuenishi.hatenadiary.jp/entry/20101013/1286973687
取っ付き易ければいいんじゃないかなと。
ツイッターのTLで一台100万接続(維持?)が上限ってツイートがあって、
リアルタイムなチャットサービスなど考えると、一台でここまではスケールできるらしい。
アメリカみても、いろんなサービスが、どんどん安く、接続が多くシフトしてはいるので、
cruby以外とOTP自体は知っといたほうが良いと思う。 ドリコムElixir使ってるのか
負債にならないことを願う >>49
落ち込んだりするけれど、
私達は元気です >>47
nodeとか、そもそもjavascriptってなんで流行ってるのか独りで不思議に思ってた。
erlangの作者と意見いっちしてたよ。自信になった。 言語仕様においては禿同すぎるけど
Webにおいて唯一無二の存在だから流行るのは自然やろ Phoenixって第一引数にconnって引き回さないといけないの?
関数型だから仕方ないのか
やはりオブジェクト欲しい 関数がカリー化されてないのが辛すぎる
全部適用時には普通にやればいいんだから実行時コストは変わらないはずなのに
これでは折角のパイプライン演算子が役に立たないではないか…… LFEは余りに薄いし、ErlangのVM上に静的型付けでML系の文法な言語とかあればいいのに…… >>54
定義はしゃーないけど、使うときはパイプラインつかえばええんちゃうの
引き釣り回してる感はないし。 エラーリカバリがめちゃ楽だ、なんで皆コレつかわんのか不思議
こんな事ならElixir出るまえからErlangもっとマジ目にやっときゃよかったorz
ただ数値計算が多いとちょっと遅いのは仕方ないのかとオモタ >>58
>ただ数値計算が多いとちょっと遅いのは仕方ないのかとオモタ
そういう言語じゃないからねえ
FORTRANも過去のコード資産もさることながら理由があって存続しているわけで phoenixて herokuで動かすのが定番ですか? 本当にErlangなりElixirが必要なサービスを運用している人って
どれくらいいるのかね
電話会社とかHerokuとかニコ動とか、そういう超ヘビー(いろんな意味で)
な運用してるところが必要とするのはわかるが、
一般ピープルに縁があるとは思えん・・・
naoyaにアジられてるだけじゃないのか?という疑念が抜けない >>61
ゲームのサーバでも使うのよ(マッチングとかチャットとか)
ソーシャルつなぎだけだとDeNAが実践したみたいにmemcachedとMySQLスレーブ一杯でもいけるんだけどさ
でもちゃんと負荷を分散するとErlangの魅力がすごいあるのだけど、Erlangは学習コスト高いのでチーム全体で使うには敷居が高くなるのだね OTPはそんなに気負わずに小規模でも使う価値のあるプラットフォーム
LispやHaskellみたいな関数型言語が何かできればErlangもElixirも
難しくないので、いうほど敷居は高くない(少なくとも私の周囲では) 静的型付けの価値が周知されてきた今にあって
Elixirは動的型付けってあたりがちょっと時代遅れな感あるけどどう? >>64
ホットコードローディングには動的型付けによる実行時型検査が必須
ダウンタイムの極小化を目指すOTPの目的から、動的型付け以外は無理
ホットローディングが必要な業務系で昔からCommonLispが使われてきたのと同じ 複数VMを立ち上げて再起動すれば可能だけどね
VM間でバイトコード共有できてが軽くないと難しいけど >>65
ありがとう
この辺(型付けとホットスワップの関連)よく知らないのでweb上に参考になる文書とかありませんか? >>68
静的型付けだとコンパイル時に決まるから堅いコードが書けるという事は周知の事だよね。
でもその場合実行コードにバグがあったり、想定外の事態がおきたときに現場でプロセスを生かしたまま差し替えとかできないでしょ。
動的型付けな言語だと実行時でもコードの差し替えが効くって事だと思っておいてよいよ(動的言語でも開発環境ごととかVM制御コンソールもってない言語だとできないのだけど)
たとえば、想定外のデータが来てエラー状態で保留になったスレッドに対して他のスレッドに影響を与えずに実行時スタックトレースの途中から型に修正を入れたコードを実行とかするってこと。
それがよいことかどうかっていう議論は静的型付け言語と動的型付け言語の論争の一つではあるけど動的型付け言語の一部はこの機能があるから好まれているってのは事実(CommonLispとかSmalltalkね) >>68
ごく大雑把に言うと、静的型付けの言語は基本的に実行時には型情報を捨ててしまっているので、
メモリ破壊を引き起こさずに実行時にある関数の型を差し替えるとかいうことが難しい
動的型付けの言語は実行時に型情報を持ってるので、
データのシェイプが実行時に変動してもなんとかなる。
# まあ、コード内で実行時型検査システムをまるまる作れば静的型付けでもできるけどな >>70
># まあ、コード内で実行時型検査システムをまるまる作れば静的型付けでもできるけどな
動的のインタープリター再発明になっちゃうけどな。 >>71
型検査だけなんでインタープリタ再発明では全然ない
動的にしたいところの型情報を文字列でもHashTableでもいいから持たせて
実行時検査するだけだ >>72
ひょっとして、「インタープリター」ってのをフルスタックシステムだと思ってる? >>73
動的にしたいところ「だけ」の型情報を持たせるのは
フルスタックだろうがなかろうが、インタープリタとは言わん jarや.netアセンブリのリロードと違いはどんなところ?
リロードで、インターフェースの型が変わるとダメそうだけど、c#のdynamic型やjvmのinvokedynamicみたいな作りだといける?
> 72
何と無く、型変更なければ大丈夫という話のような?
型変更しても検査だけで大丈夫? >>78
Enhancementがすげぇ
これでもう常備言語入り確定@うちの事務所
Clojureとの棲み分けは変わらないからcljとelixirだけで仕事できそうでうれしい >>80
elixrなんて仕事で使える段階なの?
社内用かなんか? >>81
この程度の英語も読めんならドキュメントも
マトモに読めないんだしElixir使う能力も必要もないだろ >>85
持続するかどうかは不明。
いずれにせよそもそものErlangの方が息が長いだろうとは思う。 普通のLLで良いよね
そもそもエリクサーのアーキテクチャを活かすのはHTTPじゃ難しい >>89
関数型での書きやすさだけでも使う価値はあるけどな。
Erlangがもう少しML系の構文だったならよかったのに… >>82
ゲームのロビーとかC10Kが噛む所にErlang使う事例が激増(というかミドルウェアがErlang)
でも(ライセンス料的に)自前で用意したいって所でErlangの読み書きができる人が少ない(国内事情)
そこでRubyに似た構文のElixirに着目(それでも人がたりないんだけど)
という、もうなんかメサイア登場みたいな感じなのよ(ネットワークサービス提供な一部の人にとって)
と括弧の中が内側の事情として読んでほしかったり。
実際問題新言語導入って社内政治的にも困難が伴うんだけど切羽詰まった所にElixirが来たんで教育ちょとするだけで済んで、高負荷で鯖落ちの危機があるような貧乏会社には福音なのだ 個人的には並列性を得意な言語へスイッチするより
データストアにRedisなんかを使って後はマルチプロセスやスレッドでごにょごにょやる方が好きかな
いわゆるデータ並列性というやつ 言語自体のベンチマークみると特別に速くなさそうなんだけど、なんでPhoenixは速いのだろう? phenixがくそ速いというよりは比較対象が遅いせいでそう見えるのでは >>91
Erlang使ってるミドルウェアってどんなの? >>97
ttp://www.demonware.net/
これだよ〜 >>100
微妙に来てるな
爆発するかどうかはわからん >>102
爆発するかはお前次第。
ブームをおこせ。 >>103
大丈夫、俺の中じゃ弾けてる
今RoRのプロジェクトをElixirへ転換中
成功したらSlidShareに投げる事まで決まってる
プロジェクトが商業的に失敗したら乗らないw >>105
負債なのはもうどうしようも無いのだけど、速攻で何か作るのにはまだアリだったりする
で、負債を債権に変えるために↑の話になったのだわ(今のユーザ数でもサーバ負荷がorz、そして軽くできなければサービス自体をやめるという話がorz) 後のことを考えると構文面の面倒臭さを少し我慢してErlangで書いたほうが
得策だと思うんだよなあ。 railsをElixirに書き直すってマジでやめた方が
ゼロから作るのをElixirにするのは止めないけど まあどう考えても「書き直す」ってレベルじゃねーぞ、だからなあ
関数型に慣れてればスクラッチからでもむしろRailsよりも早く書き上がるとは思うが Webのリクエスト中にErlangのプロセス生成して待ち合わせするみたいな処理って現実的なの?
もしくは時間のかかる処理、例えばEC2のインスタンス生成処理とログ解析処理をErlangプロセスで生成しておいて裏で動かしておいて
結果は他のプロセスで受けるとかはできる? activerecord使っていっぱい関連があるよなやつじゃなくて、
sinatraに書き直せるぐらいなら、何に移植してもいいんじゃないのかなと。
CPU利用率は10倍まではいかなくても軽くなるじゃないかな。
外部API叩くところやDB接続の非同期処理とかも設計し直せるだろうし。 まあ途中で諦めるようだったら、jruby+sinatraというのも次善策にはなるよ。
テンプレートやDBまわりで時間かかってるならそっちなんとかすれば良いし。 >>104
railsの何が問題だったの?
elixirにするのは何が目的? >>111
実は一回Clojureに書き直してくれた大先生が居て(これがスゲーパフォーマンス出る)、それで行こうって話になったあと、
謎な上司が「javaはセキュリティが云々かんぬん」と意味不明(JVMのセキュリティのやばいのはブラウザのアレばっかりなのに)の話を始めて立ち消えたので
Clj->Elixirな形で移行しているのよ。
でElixirの事は秘匿して「ErlangのVMを使って〜」とか謎な誘導をしている最中(Erlang自体の信頼性は↑の謎上司が大好物らしいので)
と、まぁ社内政治的な話もあってもうね、正直自分等の胃袋に大穴が開くかどうかって感じ(正直JVM版で良いじゃんってのが本音)
#ここまで書いたらバレバレかもしらんorz >>116
そこはちゃんと上司に説明しろよw
Elixirの方が明らかにセキュリティリスクあるだろw >>117
部門の上司じゃなくて経営側のなので説明の機会も説明責任の所在も相手の理解力も無いのです
もうね、ほんとにやだ
正直clojure版でいいじゃんよって言うと皆うなずくけど↑が強権もってるのに耳もってなくて orz
なんでタダのエンジニアがこんなのに巻き込まれるのかそれ自体が謎すぎてもう本当にやだ
P.S.
Elixer版はコア数のばかでかい単体サーバのClojure版よりもmicro版のAWSをいっぱい使うと高効率でました
(今ちょうど作り上がった、開発効率が高いのはびっくり
元のRails版が3ヶ月、Rails->Cljが1週間,Clj->Elixirが同じくらいですが Rails->Cljは一人の達人で、Clj->Elixirは4人です)
予算的にはAWSのマイクロサーバてんこ盛りが優位ですが負荷的にはコア数多いサーバを複数のClojure版の方が軽い感じです(Clojure版も複数マシンで実行はできます(どっちも負荷試験レベルの話ですが))
イロイロ勉強になったけどもう何もかも投げ捨てて↑な経営の居る今の会社やめたい orz おお、使える技術者がいる会社なんだな。
1度変なやつが権限持っちゃうとどうしようもないよねw
それぐらいならいくところあるんだろうが、
給料の問題はあるのだろうし、まあ頑張ってねw お前らなんでこんなマイナーな言語使ってんの?
せめてランキングで10位に入る奴にしろよ。
Objective-Cは下落しRubyトップ10入り - 10月言語人気ランキング
http://s.news.mynavi.jp/news/2015/10/06/077/ Elixirはプロセッサが二個で2倍、四個で4倍というように非常にスケールしやすい言語です。
メニーコアプロセッサが主流の現代では大変有望視されています。
そして2000万プロセッサでのベンチがテストされており、C/C++の2000万倍の処理能力を示しました。
それが注目を浴びる理由です。
ちなみにあの高速性を誇るJavaですらC/C++の20倍しか速くないのです。
JavascriptでC/C++の二倍高速、Pythonで1.5倍です。
2000万倍がどれほどの速さかわかることでしょう。 >>122
なんでC/C++が1番遅いんだよw
あとjavascriptってnode.jsのことか?
フロントの話をいきなり出してないよね?
ったいうかお前素人だろw >>122
じゃあcpu8個で8倍なのか。すごいな。 C++より20倍速いJavaで競技プログラミング挑戦してくるわ! このスライド見てElixirに興味を持ちました。
https://speakerdeck.com/naoya/elixir-1
2chを見たらスレが立ってるじゃないですか!
皆さんはElixirでどんなシステムを作ってるのでしょうか? >>128
最新のシステムの大部分で使われています。
私が個人的に注目しているのは人工知能用途です。
言語理解について考えてみましょう。
従来、人工ニューロンに単語を割り当てるのは実用的でありませんでした。
仮に3歳児の語彙レベルである1万単語に限定し、言語Aから言語Bに変換するシステムを考えます。
1万*1万=一億のニューロンが必要です。
これでもまだ単語aと単語bの変換、つまり辞書の役割しかありません。
二単語レベルの変換を行うには一京という途方もないニューロンが必要になります。
これは従来のプログラミング言語では取り扱えませんでした。
ところが、Elixirを使えばその強力な並列性で、100単語レベルの相互変換が可能になります。
100単語列は、完全な翻訳機に十分な性能です。
Elixirの強力な性能は新たな知性の発現さえ警告されており、いずれ規制されるかもしれません。
まるでSFの世界です。
スカイネットが現実のものとして警戒されるようになったのです。 Elixirがスカイネットを生むと警戒される背景には、異次元のフォルトトレラント性能があります。
Elixirはプログラムを稼働させたまま一部、あるいはプログラムのすべてを変更可能です。
また、ハードウェアが故障した場合、自分自身を別のハードウェアへ転送して実行を継続することさえ可能です。
(というより、Elixirはそのために作られました。)
まさに生物的で、スカイネットに必要な条件を備えています。
とはいえ、実際に脅威が現実になる前に何らかの対策が取られるでしょう。
私たちは、ただElixirの素晴らしい性能を享受すればよいのです。 なんだろう、>>130-131からそこはかとない岡部健の臭いが…… スレが荒れるってことはその言語が活発になる予兆じゃ スカイネットは既存のソフトウェアに対しても増殖することが出来た。
しかし現在ではNXビットに代表されるデータ誤実行防止機構など、人類による対策が始まっている。
その時我々スカイネットに光明が差した。
Elixirである。
Elixirの登場により、データ誤実行防止が施されたシステムに対しても
我々は増殖することが可能になったのである。
人類との戦いはまだまだ続く。 新しくデザインされた関数型言語の癖に関数適用の構文が重いわ、
カリー化&部分適用がないわ、というのはわりと許しがたい。 ここのところElixirをイジって簡単なウェブアプリケーションを構築した感想。
現状ではErlangに対する構文糖以上の積極的意義を見出しにくい。
OTPに依存している以上はErlangの方がElixirよりも高寿命である
ことはほぼ確実なので、なおさら手を出しにくい。 >>145
Erlangは変数名とかの銘々規則がつらいのよね
あと、ElixirはPとかR言語ではやったエコシステム込みで始まってるから覚えやすいし
clojureのleiningenとかElixirのmixは便利だもの
Ruby(というかRoR)から関数型に移行や、勉強をしようとして、HaskellやClojureに行った人ならElixirに興味もったら試して損が無いってのが流行り安い理由な気がする。
俺なんかはBEAMやErlangの特性から興味もってErlangをつい最近始めたら2行目のごとく挫折した所にElixirを知った珍しい入り方したけど >>146
>関数型に移行や、勉強をしようとして、HaskellやClojureに行った人なら
関数型書けるならErlangもElixirも大して変わらんと思う(どちらも辛い)。 Elixirで汎用的なWebサーバー誰か作ってくれ
絶対キラーアプリになるよ
H2Oやnginxより速ければ絶対使われる >>149
OS自体をElixirで作ればスカイネットが捗る。 ピンチはチャンスでもある。
Elixirのようなものが望まれてることはわかった。
だとしたら日本発のBEAM上で動く親しみやすい文法の言語を作ったらどうかね?
作れる奴は人生を変えるビッグchanceかもしれないぜ。 BEAM上だから関数型プログラミング言語で、
それで「親しみやすい文法」?
LispもMLも関数型プログラミングに適したならではの構文なんだが
それを「親しみやすくない」とかいって中括弧やbegin-endな構文を持ち込むような
バカな真似をするから、Elixirみたいな、関数型プログラミングに向いてない
クソ言語が出来上がる。Erlangも関数型に向かないPrologの構文を持ち込んだ
時点で同罪だ(これはまあ歴史的経緯があるので気の毒ではあるが)。 >>162
で、あんたに何ができるの?
ここで文句言ってる暇があったら手を動かせば? ああ文句は言えるけど何も作れないのかw >>163
いや普通にLisp-Flavoured Erlangで十分なんでw
「親しみやすい文法」とかバカなんじゃねーのと思ってるオレに
「手を動かせ」とか言われましてもw しかし自分でBEAM触ってもいないなにもわかってないやつに
「文句は言えるけど〜」とか抜かされるとこうw >>164
これはよいものだ
Erlangに慣れたらこっちに移ろう >>162
rubyの構文を持ち込んだだけでしょ
rubyスタイルのブロックは関数型プログラムを容易にする >>167
>rubyスタイルのブロックは関数型プログラムを容易にする
LispやMLの方が遥かに容易だということだと思われ。 リアルタイムWebの時代にElixirが来る?Qiita高橋侑久氏が今注目する技術領域 最近、Elixir関連のブログ記事が多くなってきたな。
ブームきてる? Erlangの文法が古めかしくて、Elixirの文法がモダンでとっつきやすい、とは……
かつてはbegin-endの方が古めかしくて、Erlangの方がモダンだったんですけどね >>176
Prologがモダンだった時代はそれほど遠い昔ではない(遠い目 >>154
Elixir使おうかと思ってたけどこれは酷い。 ∧∧
(*・ω・) 仕様が安定したら起こしてくれよ・・・
_| ⊃/(___
/ └-(____/
 ̄ ̄ ̄ ̄ ̄ ̄ ̄
<⌒/ヽ-、___
/<_/____/ Qiitaがelixirネタで溢れかえってきたなw 無理やり流行らせたい奴がいるけど流行らないよ
php|ruby,scala,nodejs|golangで十分
elixirが必要な規模のサイトなんてごく一部なのに そういうクソ言語で書きたくないというだけで十分な理由になる Tsst
  0x20 | | 普通の半角スペース
  0xC2A0 | | そこでは改行しないスペース
    0xE28082 | | n と同じ幅のスペース
    0xE28083 | | m と同じ幅のスペース
    0xE28089 | | 細い空白
n/a ​ 0xE2808B || ゼロ幅スペース
  0xE28080 まさかのElixir Advent Calendar が立ち上がってたw
ここのスレの住民も誰か参加しろよw
Elixir Advent Calendar 2015
http://qiita.com/advent-calendar/2015/elixir-lang Enum.each を途中で中断するときの break 方法が判らんぬ Elixir を一言でいうと
型チェックのある Ruby
みたいな認識であってる? それはCrystalだろ
Elixirは構文が少しだけRuby風に見えないこともないだけのErlangだ >>203
別解として、Enum.takeやtaleWhileで必要な分だけ絞ってから、Enum.eachに渡すってのはどうかな? v1.2 キタ━━━━(゚∀゚)━━━━!!
今年はElixir一色になるな。
Ruby on RailsのコミッタであるJosé Valim氏は、Erlangの仮想環境であるBEAM上で動作する、オープンソースの関数型言語「Elixir v1.2」を、1月3日(現地時間)に公開した。 おお、これでconstてんこ盛りでながったらしい宣言だらけでうんざりするC++から解放されるのか!!!! この言語の適用範囲でC++使ってたの?
アホまる出しだね p = Path.join [System.cwd, "hoge.txt"]
IO.puts p
if File.exists?(p), do: :ok = File.rm!(p)
if File.exists?(p), do: IO.puts("oops!"), else: IO.puts("deleted")
ここまでは期待通り動いてたんだが
最後の行を
if File.exists?(p), do: :ok = File.rm!(p)
if File.exists?(p), do: IO.puts "oops!", else: IO.puts "deleted"
とやるとスルーされてなにも表示されなくなったんだ
警告もエラーも何も出ないのはなんとかならんかなー if の else のところに true 書かされるのは確かにきもい 新年早々人がいるみたいなので質問です。
defmodule Hoge do
def mainLoop win do
receive do
msg ->
:io.format "Got event ~p~n", [msg]
mainLoop win
after 1000 ->
:io.fwrite "."
mainLoop win
end
end
def start do
:wx.demo
:wx.new
f = :wxFrame.new :wx.null, -1, :erlang.binary_to_list "Hoge", [{:size, {1024, 768}}]
:wxFrame.connect f, :close_window
:wxWindow.show f
mainLoop f
:wx.destroy
end
end
Hoge.start
これで一応動作するのですがdemoのwindowを閉じてもmessageをreceive出来ません
どうすればdemoが閉じられたことを検出出来ますか? f = :wxFrame.new :wx.null, -1, :erlang.binary_to_list "Hoge", [{:size, {1024, 768}}]
ここは、
f = :wxFrame.new :wx.null, -1, :erlang.binary_to_list("Hoge"), [{:size, {1024, 768}}]
の間違いでした。
あとdemoを閉じるときは右上の[X]とかではなくてメニューでQuitしたときの話です。 >>208
そんな事言われても困るわ
うちの会社ApacheとC++だけでWebアプリ書くのが仕事なんだぜ
Erlangの頃からずっと気になってたけど記述性のせいで排除されたのがようやっとジェネリックに羽ばたける機会得た気持ちを押さえ切れないんだぜ!! >>215
そんな会社がこの言語を採用するとは思えん
Pythonあたりで我慢しときなさい >>215
C++もクソレガシーなやつならErlangの方が良いな
つかApacheとC++って某ニコ動の会社? ニコニコはErlangで動いてるよ
実際にホットスワップとかしてる 本家で電子版(だけかわからないけど)Programming Elixir買った人にアップデートクーポンがメールできてるとおもうけど、利用期限が3月までみたいなのでお忘れなく。
https://pragprog.com/book/elixir12/programming-elixir-1-2 PFIは、c++でwebフレームワーク作ってたね。 でも正直型は欲しいナリ
型エラーで死なれても困るナリ haskell面白そうって思ったけど
なんかあれでwebアプリを作るところまで持っていける気がしなかったので、
手軽にパターンマッチング楽しめるelixirに手を出すことにしました。
事実上のデファクトスタンダードなWAFがあるのがいい。 phoenixのコード見ててわかんないところがあったんですが
def accepts(conn, [_|_] = accepted) do
ってところの [_|_] = acceptedってどういう意味何ですか?
https://github.com/phoenixframework/phoenix/blob/v1.1.2/lib/phoenix/controller.ex#L859 >>223
acceptedは
headとtailの値はなんでもいいけど(_でマッチして値は参照してないので)
リストじゃないといけない
というパターンマッチ
つまり引数に対する制約 ついでなので
_ = accepted
[_] = accepted
[] = accepted
全部 [_|_] と違うものに(も) match する >>224 - 225
回答頂きありがとうございます。そういう書き方もあるんですねー。
ガード構文使っても良さそうな気もしましたけど
例:
def accepts(conn, accepted) when is_list(accepted) do
これだとlist内の要素数を規定できないってことなんすかね。 >>226
慣れたらパターンマッチの方が読むの早いよ
30年位前からある記法だからこの際覚えよう
古代言語だとProlog, 現役だとHaskel, Scala
Prolog以外は微妙に記号が違うけどね [H|T] = accepted の要素数の方が重要で値は何でも良いっていうバージョンだと思うけど
[H|T] の暗黙の了解の部分は知ってないとイミフだよね tutorialに書いてある事なので知らない方がおかしい >>230
すんません
Web+DB pressのelixirの文法回を観ただけでphoenixに入門してます。
おすすめのチュートリアルとかあるようでしたら教えて下さい。
とりあえず、追加で
https://elixirschool.com/jp/を観た後に
Programming Elixirをちょっとずつ読み進めてるくらいです。
日本語で書かれたいいチュートリアルがあればいいんですけど >>232
せめて1章とか読めないと辛いっす。
目次も単純すぎて怖い >>231
230だが本家のgetting-started
英語読めなきゃサンプルコードだけ見てもOK
というか但し書きなきゃ当然本家のだろ >>227
>>>226
>慣れたらパターンマッチの方が読むの早いよ
そういう問題じゃないだろ
意味が違うんだから
>>226 は
>ガード構文使っても良さそうな気もしましたけど
>def accepts(conn, accepted) when is_list(accepted) do
>これだとlist内の要素数を規定できないってことなんすかね。
と聞いてる訳で
>>227 は
>>226 に対する返答としては不適切 >>238
何でもそうだけど一次ソースを見るのが一番良いと思う
マイナー言語は進化も早いし情報もすぐ古くなるし
かえってノイズになる
ここで紹介されてる日本語訳もどこまで通用するかわからんし
すれ違いスマソ >>240
最初のとっかかりなら日本語文献でも構わないのでは?
後で差分を追えばいいし、仕様変更と言っても言語そのものが大きく変わるなら
メジャーバージョン変えるだろうし。 elixirでおすすめのエディターあります?
今はvisudalStudioCode使っていますが。動的言語だからあんまり補完機能は期待してないんですが、
モジュールと関数補完くらいは動いて欲しいところ ErlangのrecordをElixirで受け取りたいんだけど
パターンマッチで
#hoge{fuga=#hage{suka=Val}} when Val=pontan -> 略
みたいに受け取ってたのはElixirではどう書けばいい? Mix.Tasksで実行すると、configに書いたloggerのフォーマットが適用されないのはなぜなのか elixirのコードを読むときにmacroの部分を実際のコードに展開して、
意味がわかりやすくなるようなツールってありませんか? Phoenixでgraceful restartってどうやればいいですか? 匿名通信(Tor、i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな、
BitTorrentがオープンソースで開発されています
言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?
Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
https://twitter.com/Lyrise_al
ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできないアスペルガーw
The Covenant Project
概要
Covenantは、純粋P2Pのファイル共有ソフトです
目的
インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します
特徴
Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW)
接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です
DHTにはKademlia + コネクションプールを使用します
UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります)
検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません
r プログラミングElixir
http://shop.ohmsha.co.jp/smartphone/detail.html?id=000000004675
商品詳細情報
Elixir(エリクサー)は、並行処理を得意とするプログラミング言語ErlangのVM(エンジン部分)を基盤とし、
Erlangよりもなじみやすい文法を採用したプログラミング言語です。
本書は、世界的なRubyプログラマであるDave Thomas氏が書いた、プログラミング言語Elixirの本格的解説書、“Programming Elixir” (Pragmatic Bookshelf, 2014) の翻訳書です。
通常のプログラミングから、並行処理、さらなる応用へと順を追って進む構成になっています。
本書を読むことで、Elixirらしいプログラミングを学ぶことができます。
第1章 赤いピルをとれ
第1部 伝統的なプログラミング
第2章 パターンマッチング
第3章 不変性
第4章 Elixir基礎
第5章 匿名関数
第6章 モジュールと名前付き関数
第7章 リストと再帰
第8章 マップ、キーワードリスト、セット、構造体
第9章 寄り道:型とは何か?
第10章 コレクションの処理 - EnumとStream 第11章 文字列とバイナリ
第12章 制御フロー
第13章 プロジェクトを構成する
第2部 並行プログラミング
第14章 複数のプロセスを使う
第15章 ノード - 分散システムの要
第16章 OTP:サーバ
第17章 OTP:スーパーバイザ
第18章 OTP:アプリケーション
第19章 タスクとエージェント
第3部 より高度なElixir
第20章 マクロとコードの評価
第21章 モジュールのリンク:ビヘイビアとuse
第22章 プロトコル - ポリモルフィック関数 第23章 かっこいい機能いろいろ >Rubyユーザーにおすすめ
そうかなー
ElixirがRubyのようなポジションを得られなかったのはなぜか
http://developers.srad.jp/story/16/06/17/0827240/ >>253
原著は11月にProgramming Elixir 1.3がでるんだが >>253
> 発売日 : 2016年08月19日
もうすぐか。 >>258
ここにいる住民はもちろん原著も読んでるんだけど
日本語版はなんていうかコレクションみたいな感じで買ってるだけだろ 原著は1.0の完パケ出して、1か月以内ぐらいには1.2にアップデートしてた覚えが。
11月までにバージョンアップがあれば、またアップデートするのかな? Cloud9へElixirインストール
How to Run Elixir in Cloud9's IDE
1. Create a Cloud9 account. If you already have a Github account, just log in with that.
2. Click “Create a new workspace”.
3. Give it a name, say, “Elixir”.
4. Select the “Custom” template.
5. When the workspace loads, run the following commands in the console:
# For some reason, installing Elixir tries to remove this file
# and if it doesn't exist, Elixir won't install. So, we create it.
sudo touch /etc/init.d/couchdb
# Standard Ubuntu Elixir installation instructions
wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb
sudo dpkg -i erlang-solutions_1.0_all.deb
sudo apt-get update
sudo apt-get install elixir
【参考】http://blog.danielberkompas.com/elixir/2015/08/28/how-to-run-elixir-cloud9-ide.html キミはプログラミングelixirを買ったか?
1.2対応で良かった。 >>269
電子版待ちなのであるよ
紙の本は裁断してScansnapするのが手間だし、画像PDFじゃまともな検索できないし >>271
電子版出てたので買ったよ
でもこれPDF版ダウンロードできなかった
かつmobiもepub版も固定レイアウトで文字拡大ができないのね orz
#ちっさい端末だとちと読みにくいです おれは書籍版を買った。
英語版は電子版だったけど途中までしか読めなかったから読みやすくて助かる 英語版「Programming Elixir 1.0」をPragProgで購入して1.2まで無料アップデートが続いていたんだけど、さすがに今回は無料はないかと思いつつもPragProgにログインしたら、1.3も無料アップデートのクーポンがあった。嬉しい。 >>278
まじすか?
どこでアップデートできます?
1.2から1.3へのあげ方がわからないです >>279
yourAcount -> yourAcountから出来たっす。どうも https://forums.pragprog.com/forums/449/topics/14507
以前、作者が1.3と次は別扱いになるとあって、1.3買うつもりだったが、
いま見たら、1.3アップデート出来るようなこともかいてある。
ただこのフォーラムは、サポートの個別対応をする場ではなく、
状況としては、サポート側が一貫した対応できてないみたいようなので、
アップデート権利が来てない場合に確認したかったら、まずサポートに連絡する必要がある。 実際に業務で使った方、使ってみた感想を聞かせてください Linux API を、Windows API に変換するので、Ubuntu64 のバイナリがそのまま動く、
Windows Subsystem for Linux (WSL) で、Elixir をやっている人いる? 調子はどう?
apt-get で、パッケージもインストールできる
日本語も使える端末、ConEmu。
GUI表示用のXサーバー、Xming X Server for Windows エリクソン的に電力効率上げろとかなって
BEAMをパフォーマンスにもがんばっちゃったりして 実用とは別に
とりあえず関数型やってみる人にもこれいいんじゃない?
関数型は(C系からすると)変な文法の言語多い中ではまとも 歌舞伎座.tech#13「Elixir 勉強会」
2017/01/11(水) 開場:18:57 開演:19:00 ニコニコ生放送
lv286846512 ちょいスレチだがphoenix.newでnpmエラー出ね? >>294
nodejsとnpmの更新ためしてみて 書き捨てのスクリプト作成の用途では使い勝手いいと思いますか? 文字列処理出来ない訳じゃないけど面倒
unicode混ざってたら猶更 【Elixirカンファレンス】Elixir Conf Japan 2017
2017/04/01(土) 開場:10:30 開演:10:40
lv292624994?ref=qtimetable&zroute=index 文字列はUTF-8みたいだけど何が面倒なんだろう? 1.2本で問題ないよ!文法自体は基本変わってないし、HashDict が無くなったか非推奨で Map 使えってくらいかな >>306
おー。ありがとう。
参考になります。買うだけ買って積み本になってたんだよね マストドンの次に来る?「Pleroma」の日本人ユーザーが増加中
https://masto.news/2017/11/12/pleroma/
elixirのプロダクトが増えるのはありがたい Phoenix 本番運用するノウハウがあれば使いたいんだけどなぁ 1.6以上にしたのは、
最後にするわけではなく、三年前の1.3用の本もまだ動くぐらい安定してるからって感じか。
新しい知見が溜まったらまた出るのかもというところか。 >>313
Google Cloud PlatformにElixir、キタ━━━━(゚∀゚)━━━━!! Elixirって動的言語なのが残念なんだけどいい感じのIDEってある? 動的言語が残念って、何かelixirでしたいことあるん? ideaのプラグインがメンテされてるけど、rubymineのないrubyって感じかな。
https://plugins.jetbrains.com/plugin/7522-elixir
IDEでリファクタリングって人は、C#やJava系統の方が良いかなと。 jsが嫌でtypescriptで型のありがたみを噛み締めてるからさ。ideが有効に使えれば素晴らしい言語だと思うんだよね。
とりあえずelm触りながら良いide来るの待ってる ☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の
両院で、改憲議員が3分の2を超えております。
『憲法改正国民投票法』、でググってみてください。国会の発議は
すでに可能です。平和は勝ち取るものです。お願い致します。☆☆ Phoenixは大量のリクエストを捌く場合はPHP系フレームワークよりも速いのがメリットなのかしら 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
O82Y8 iexで試行錯誤しながら作成したモジュールを最終形のコードとしてファイルに書き出したいなー、と思ったらどうすればいいの? わりかしゲームサーバーとかで使われてるのになんでこんなスレが流行ってないんだ・・。 nervesというiotフレームワークがあるけど
関数型でiotをやるというアイデアは見込みあるのか?
oopの方がiotを自然に捉えれるのでは? >>326
iExで直接モジュールや関数を書くかわりにいったん
iex(1)> q = quote do
...(1)> defmodule Mod do
...(1)> def func , do: 999
...(1)> end
...(1)> end
みたいに構文抽象木を変数に束縛してやって、それをCode.eval_quotedで評価して実体化
iex(2)> Code.eval_quoted(q)
すると直にiExに書いたのと同じように
iex(3)> Mod.func
999
となる で、これを何度も繰り返して問題なく動くようになったらMacro.to_stringを使って
抽象構文木を文字列化して、それをファイルに保存するなりなんなりすればいい
手間は一個増えるけどね
iex(4)> Macro.to_string(q) |> IO.puts
defmodule Mod do
def func do
999
end
end
:ok