【Lisp】プログラミング言語 Clojure #2【JVM】
5 :
デフォルトの名無しさん:2011/10/13(木) 19:12:09.10
京都大学霊長類研究所では、未知の感染症が蔓延し、
感染した研究員はどのスレッドにも同じコピペを
繰り返すといった症状が報告されています。
研究員によると思われる書き込みがあっても
近づかないようにしてください。
京都大学
乙
開発サイトが1.4に書き換わってる
lispで書かれた実用的なソフトってなんかあるのか?
Emacsとか初代Yahoo!のWebsiteとか。
人工知能のための超マイナー言語とおもっていたが、
結構面白いことできるんだな。
最初に発明された頃人工知能の研究がブームだったので自然にそれに
使われた例が初期には多いってだけなんだが
当時GCを持つ言語がLispぐらいしかなかったってのが大きい
人工知能みたいな大きな問題をGCがない言語でやりたいとは思わん
「Lispは人工知能の言語」は、今は「Cはカーネルの言語」よりも怪しい
Lispの後、1970年代にPrologが開発されたし
最近のAI系研究室は(Perl|Python|Ruby)を使ってる所もあるってたまに聞くし
>>7 Lispだと却下される案件でもClojureだとWarファイルで納品できるので通ったりする
実際2つほどプロダクトをリリースしてる。
今3つめの案件をClojureで書いてる
いいね。実運用での所感聞かせてよ。
eclipseでもemacsでもswank経由のREPLで即時実行テストができるのでコードが完成系になる為のサイクルがもの凄く短い
HTMLテンプレート展開はPHPとかのフロントエンドとデザイナ組に任せてバックエンドのロジックをringでガンガンつくっておいて、実サーバではTomcat等にWarで渡せる
なので実運用時のメンテコストも既存のservletと変わらないが開発サイクルが短いのとプログラマが嬉々としてコード書くのでチームのモチベーションが高い
最初上を説得するの大変だったんだけど、あっという間にプロダクトがリリースできるのを目の当たりにさせたら通った。
#ドカタが戦力になったというか
17 :
初心者:2011/10/15(土) 23:12:14.89
Clojureを勉強しようと思って、
Eclipseで counterclockwise(以下 CCW)をインストールしました。
新しいClojureプロジェクトを作ると、
自動的に、プロジェクトフォルダ直下に
clojure.jar, clojure-contrib.jar, clojure-contrib-src.jar, clojure-src.jar
が置かれていて、
すぐに、Clojureのプログラムが始められて便利でした。
それで、最近、1.3がリリースされたようなので、
1.3を使おうと思ったんですが、
CCWで作成されるプロジェクトは依然、1.2のままです。
(CCWは最新にアップデートしているつもりです。)
プロジェクト作成時に、Clojreの1.3 を選んだり、あるいは、プロジェクト作成後にClojure1.3
にする方法はありますか?
後者は、ホームページから、clojure.jar, clojure-src.jar くらい探してきて
置き換えれば十分でしょうか?? (1.3からはcontribがなくなっているようなので、削除して。)
ちょっとよくわからないので、教えてください
よろしくお願いします。
18 :
初心者:2011/10/16(日) 03:50:52.02
自己レスです。
要はEclipseの使い方でつまずいていたようです。
Clojureのサイトからダウンロードしてくると、clojure-1.3.jarなどが入ったファイルが落とせるので、
それを、Eclipseのプロジェクトの中に入れます。
それで、Project>Properties>JavaBuildPath
で、Librariesに clojure-1.3.jarを追加して、Orderで、srcディレクトリの上に追加。
もとの、clojure.jarとかclojure-contrib.jarなどは削除する。
という感じで、一見問題なく使えています。
sourcepath を設定していませんが、(デフォルトでは、clojure.jarはclojure-src.jarなどをsourceパスとして設定していましたが)
自分での作り方がわからないので、設定していません。
一応、問題なく使えています。
以上
eclipse/netbeans/inteliJで、mavenやleinningen、cakeのmaven経由で管理できるんだろうけど
IDEとの連携ってそれで機能するのかな
lein-eclispを入れればいい。
inteliJはla clojure+leiningen プラグインを入れる。eclispよりか
こっちのほうが出来がいいと思う。
前スレが埋まる前に新スレ使っちゃうのがクロージャ使い
ユーザーの民度が低い言語です
スレ違いだけど、
>>16の開発者が嬉々としてって羨ましいな。
俺がちゃんとコスト対効果と有用性を提示できてないのが悪いんだけど、
「コードなんて若い奴らに書かせとけばいいだろw」と言われて凹んだわ。
そして若手からも「今Javaで出来てるんだから、それでいいじゃないですか」と。
ジョブズ並とは言わんが、もちっと説得力あるプレゼンしないとな。スレチごめんなさい。
チュートリアルみたいなのを作って、啓蒙するとか。
Clojureは、チュートリアル的なものが少ない。英語でも。
簡単なところなら、演習問題や実例は99problemsやProject Eulerを使えばいいしね。
>>16 >プログラマが嬉々としてコード書く
kwsk.....。
29 :
デフォルトの名無しさん:2011/10/18(火) 00:09:36.78
結局、JVMを捨てて.NETメインにするまではマイナー言語のままなんだよな。
JVM言語だと、haskellがまともに動くようにいじってたり競争が激しいが、
作者さんは、2003年にDotLisp(.net)、2007年にclojure(JVM)と移ったのであまり.netに手を出す気はないらしい。
なので、別の人がclojure-clrをポートしてる。
31 :
デフォルトの名無しさん:2011/10/18(火) 13:37:01.57
Clojure1.3です。
defvar ってよくわからないんですが、
どういう働き、使い方をするんでしょうか。
変数を初期値とドキュメント文字列で定義する、もののようなので、
下記のようにしていますが、エラーがでます。。
(defvar vartest 123 "document")
(println vartest (class vartest))
defvar が何かわからないというエラーなんですが。。
def と同じような働きをすると思って、使ってみたんですが。。
(defvar vartest 123 "document" )
↓
(def ^{:doc "document"} vartest 123)
これをするのと一緒
33 :
31:2011/10/18(火) 21:03:13.70
defvar 使うと、
Exception in thread "main" java.lang.Exception: Unable to resolve symbol: defvar in this context
というエラーが出てしまうんですよね。
インストールの仕方が悪いのでしょうか。。
34 :
31:2011/10/18(火) 21:10:07.39
defvarは大分前からcontribにあるし、1.3ではdefがdocstringを受け付ける
(def foo "A meaningless number." 123)
これはdefnやnsと同じdocstring→内容という順番に揃えられた
(ns bar
"A useless namespace."
(:require [clojure.string :as str]))
(defn baz
"Returns \"foo,bar,baz\" always."
[]
(str/join \, ["foo" "bar" "baz"]))
1.2で関数ではないvarにdocstringを付けるには、contribを使うなり、
>>32のように書くなりすれば良い
s/docstring→内容/名前→docstring→内容/
38 :
31:2011/10/19(水) 22:45:49.36
なるほど。そういう流れだったんですね。
>>28 今時入ってくる新人ってREPL以前にMSXみたいなBASIC環境すらしらないんだ
で、コンピュータが対話環境で使えるときに感じる自分の能力の拡張みたいな感覚にアヘン吸ったみたいな快楽を覚えてしまって
ものすごい集中力でコード書きだして周りのほうがびっくり状態になってる。
実際ここ数年Unitテストとかで対話に近いテストサイクルでもモチベーションが少しだけ上がったんだけど
Realな対話環境がもたらす単体関数の即時テスト(たんにSlimeでevalするだけなんだけど)が面白くてしょうがないって言ってる。
だから16で「ドカタが」って最後に書いたんだけど、こいつらがそのまま会社に居着いてくれればうれしいけど、収入上がんないとこれ何人かは流れちゃうかもしれない。
アヘン吸わせると良いのか
>>39 それはぜひどこかの媒体で発表してもらいたいな。Clojure党支援につながる 笑
BASICを知らない新人が多いのは想像できるが
今時REPLを知らない新人が多いなんてことがあるのか
まだ「プログラミング教育はJavaでやってます()」って結構多いだろ
Windowsしか使ってないとテキスト端末環境を使うことにすら慣れない奴も多いし
まるでプログラミング教育をJavaでやるのがおかしいかのような書き方だな
>>44 初めて使う言語スレに移動すればこの手の話はいっぱい出てる。これを話しだすと
フレーム論争になるし、オフトピになってしまう。
>>41 ここに書いただけでもばれたらやばいので雑誌や論文誌でとかミリ
うん
煽りでもなさそうなのに「ドカタ」とか「Java()」みたいなことを平気で書いてしまうのは痛いな
プロダクトを2つリリースして今3つめって、見る人が見れば一発でバレるようなことを書いといて
バレたらやばいってのも意味が分からん
ちょっと頭の弱い人なのかな…
こういうのがいると言語自体の印象が悪くなるし、ホント迷惑だわ
2チャンの中ってほんとキチガイめいた人(キチガイかもしれない。)が
いて、行動の善悪の判断がずれてる人がいるから慎重になったほうがいい
ところ。彼らの思い込む正義のためなら何でもしてしまう危険な連中がい
るから。
JavaをしらんからJava()で煽りになるんかどうかすら俺は知らん。土方は
この板じゃ差別用語なのは知ってるが。
50 :
デフォルトの名無しさん:2011/10/21(金) 22:45:23.90
KCLの御大がご退官されるとのこと。
Smalltalkだったら失神するな
東大京大どっち?
53 :
デフォルトの名無しさん:2011/10/22(土) 17:18:47.63
lispスレに書き込むべきだったが誤爆したな。
京大のほう。
54 :
デフォルトの名無しさん:2011/10/23(日) 16:25:10.65
〜 Clojureで改行はいつするのかとRubyist 〜
Clojureでのコーディング規約というか、改行をどこで入れるのかとか、
説明したサイトありますか??
57 :
デフォルトの名無しさん:2011/10/25(火) 19:18:36.65
Clojureで、 [ ]括弧を使うのは、
let, defn の仮引数部 ,with-open とかだけど、
これらに共通するのは何か??
なぜ、def では[ ] 括弧を使わないのだろうか。。
シンタックスの一部としてベクタを要求するフォームは主に二種類ある。
・引数を表すベクタ(例:fn、defn、defmacro)
・その式の「内側」で有効な束縛を作るベクタ(例:let、binding、dotimes、loop)
defはそのどちらでもない
あ、引数のベクタも書式は名前と値のペアではないが
「内側」で通用する束縛を作っている点で共通すると考えてもいいな
Lispの生みの親が逝ってしまった・・
クソ言語生み出した奴は死んで当然
またそれか
>>64 匿名でブログことは余りコメントしたくないな。コード規約的に余り見たくないんだよな。
>コード規約的にあまり見たくない
日本人の方、いらっしゃいましたら翻訳をお願いします
_で始まる変数がキモイとかそういうことかしらね?
他人のコード見ると、コード規約を忘れてしまう、とエスパー。
> 匿名でブログこと
日本語でおk
76 :
デフォルトの名無しさん:2011/10/28(金) 13:38:25.12
Clojureと、elisp とで、クオートの意味合いは少し違いますか??
たとえば、.emacsの設定ファイルにある
(add-to-list 'foo-bar-alist '(name . value))
のは、
普通のClojureの関数だと、
(add-to-list foo-bar-alist '(name value))
こういう感じで、foo-bar-alistに、クオート必要ないですよね。
(もちろん、クオートが必要なようにadd-to-list関数を書くこともできると思いますが。。)
ClojureからLispに入っているので、
普通の人にはわかない疑問かもしれませんが、
皆さんの感覚を教えてください。
77 :
76:2011/10/28(金) 13:40:56.12
クオートというよりは、
あるいは、デフォルトの、
変数や、シンボルの扱いが違うのでしょうか?
その辺り教えてください。よろしくおねがいします。
言語やの違いとかではなくて、破壊的な変更をしたいときのやり方が違うだけ。
emacsのadd-to-listは破壊的な関数で、内容を書き換えたい変数そのものを渡すためにクォートしてる。clojureで同じことをするにはatomなんかをはさむからそうならない。
あ、言語の違いではあるな。クォートの違いではない。ごめん。
>>76 クオートは評価を遅らすという意味で違いはないでしょ。
確かにクオートとかシンボルはすごい混乱しやすい所。 俺も初心者の頃はreplでずっと考えを整理してた。
まず先頭が関数かマクロかをはっきり認識しておく。
関数なら引数は左から順に'評価'されていく。
評価とは以下のことだ。
(ここでめんどくさくなったのでやめる)
>>76-77 中途半端にいろいろ考えるよりも、
Lispにおける関数とマクロについて勉強してみたらいいんじゃないかな?
なぜ関数の引数にクオートが必要になる場合があるのか。
なぜマクロなんてものが必要になるのか。
クオート、関数、マクロ、に対する考え方は、elispもClojureも変わらないはず。
elispのadd-to-listでは、
foo-bar-listというシンボルが何を束縛するかを変更するから、
foo-bar-listをクオートしてシンボル自体をadd-to-listに渡す必要がある。
普通のClojureの関数?では、
シンボルが何を束縛するかを変更するのではなく、
シンボルが束縛してる物の状態を変えるから、
シンボル自体を渡す必要が無く、シンボルが束縛してる物を渡せば良い。
したがってシンボルをクオートする必要が無い。
1.3系って1.2の頃とcontribの扱いが違うのですげー戸惑っちゃうんだけど、感覚的に行き先がわかるようなドキュメント転がってないかな。
>>86 おおー、この最後のリンクだわ欲しかったの
感謝感謝!
1.2でコアに入ってなくて、1.3で入ったcontrib由来のライブラリって何があったっけ
2週間で80レスか。22−3週でレスを消費するペース
LeiningenよりかClojureのロゴが入ってるマグカップが欲しいわ。
>>91 いいなそれ
Land Of Lispでもいいや
この際、Half-Lifeでもいいよ
97 :
名無しさん@お腹いっぱい。:2011/11/06(日) 10:04:05.57
GUIやDB操作のClojure独自の使用できないのかね
>>97 jdbcとかコネクションプールとか、チョロく使えすぎるのでだれもわざわざ書いたりしないんだよね
GUIだったらseesawとか。
clojure 1.3にすると1.3へ未対応なライブラリが一杯あって^dynamicせいや!と山ほど警告が出るのがいやだなぁ
clojarsのサイトみてもdependencyは実際読むまでわからんから困る(clojarqlが山ほど居てどれが対応版かわからんとか)
^{:dynamic true}なら1.2で構文エラーにならずに済むらしい
ループ内でpersistent hashをassoc,dissocして新しいの作ってばかりだとGCやら処理コストで遅いかとおもってたらjava.util.HashMapと殆ど速度かわらないのね。
ものすげー驚いたわ
現実的な部分だとSTMを高速に書き換えるスレッドが競合するようなアホな事しなければjavaでsynchronizeに神経使うよりも開発効率めちゃくちゃいいわ。
>>104 haskellでもミュータブルなArray使って実用的な速度出したりしてたから、
実装を工夫してイミュータブルでGC減らしたりするのは、
関数型全体でも実装面で影響が有ったみたい。
>>16 二つのプロダクトは何人で開発していたの?
完成形になる速度は、どのくらい違うもん?
もっと熟練度が上がれば、どのくらいになりそう?
Scala,Clojure,Groovyは競走中じゃが、お互いに敵ちゃうよ。本当の敵じゃ
現状じゃよ。
*Clojureやるなんてデカイリスク抱えるやん。確かなのがいい
*ClojureはJavaよりええ選択やとおもうけど、Javaは産業の標準や
わしは、Clojureを選んでプロジェクトが失敗しよったら、より非難しそうや。
*Clojureを選んだら、よう知ってるClojure開発者をやとえるか知らん。
とこんなところがthe status quoの内容ですね。
2つめのこと
(Javaを使ってプロジェクトが失敗する時)より非難しそうや。
>>110 昔、「IBMを選ぶ理由は、IBM以外を選んで失敗したら何言われるか判らないから」って話があった。
そういうどうしようもない底辺は相手にする価値がない
結局管理者の立場になると、自分の責任になってくることをなるべく減らす
ために、既存の権威というのか常識にあわせて、そちらに責任転嫁をするように
できるというのは魅力的なんだろう。
海外ですら(あのブログの人どこの人かしらんけど。)あの状態だから、より
保守的な日本ならその常識がもっと重要なんだろうね。
なんでその内容をdevで周知してるんだろ。
clojureを購読してる人に「お前らもっと自分のコードアピールしろよ」ってことではなく
「clojure-devはcontributor向けのMLだから、こっちでアナウンスしても気付けない人がいるよ」ってことじゃね
そうだと思うけど、ツイートするだけじゃなくって言ってるのが一般向けに見えた。
それにdevでアナウンスしてる人なんて見当たらないし。
120 :
デフォルトの名無しさん:2011/11/16(水) 23:32:47.34
遅ればせながら意訳してみた。
君はClojureライブラリの開発者かい? 何かリリースしたばかり?
メインのClojureグループでアナウンスした? もししてないならやった方が良い。
あっちは現在でも何千もの人々に情報提供できる主たる場所なんだ。ツイートも良いけど、Clojureグループも入れてやってよ。
よろしくね。
リッチより
http://www.manning.com/rathore/ 正式に発売されたみたいね。
Clojure in Action is a hands-on tutorial for the working programmer who
has written code in a language like Java or Ruby, but has no prior
experience with Lisp.
とあるんで、すでに一つ言語を習得した人向けの本かな。
Clojure in Action は職業プログラマーのための実践的チュートリアルです。
JavaやRubyの言語でプログラムを組んでいる人向けで、Lispの経験はなくて
もいいよ。(使ってる言語:他の情報からだとOOPを扱った言語のことを指してるのかな。)
というようなこと。内容は多義に渡ってるのかな。基本から応用まで、実践例
を交えてるとのこと。manningは掲示板に登録したりしてメール広告をもらうよう
にしておくとクーポンは簡単に手に入る。
スレタイだけど、clojureならスレの番号はベクタで
[3]
とかにして
(プログラミング言語 clojure [3])
っていうのはどう?
124 :
デフォルトの名無しさん:2011/11/19(土) 16:06:40.75
conterclockwiseで開発しようとしてるんですが、何度も再起動ってどうやってやるんですか?
どうも、起動するたびにREPLというのが起動してとても遅い気がします
簡単な計算ならLoad File in REPLで素早くREPL内で起動するようですが、Swingを使うと
Load file in REPLでウィンドウが現れなくなってしまうようです
125 :
124:2011/11/19(土) 16:33:45.32
うーん、REPLが起動していないと、エディタ内の補完も効かないみたいですね
しかもSwingアプリを終了させるとREPLも終了してるようで、
補完が効かなくなってしまう
しかも特定の補完の仕方をするとめちゃくちゃ遅いですね
intelliJ IDEAのLa Clojureはこうした問題が何もないので、
こっちを使うことにします。
intellJ IDEAのほうがいいと思うよ。leiningenプラグインもあるから
そちらも入れておけばいい。外部ライブラリを使うようになれば
こちらはかなり重要だ。
でも、一番いいのは、leiningen+slime+emacsだから。
ものによったら、eclipseに限らずSwing アプリを終了したときにREPLも落ちることはある。
127 :
124:2011/11/19(土) 16:53:43.92
>>126 親切にありがとうございます。leiningenってツールが良いんですね。
Emacsという手もありましたか。
検討してみます。
Swingアプリケーションを終了した時にREPLが終了するのって
setDefaultCloseOperationにEXIT_ON_CLOSE(ウィンドウを閉じたら終了する)を指定したとか
どこかでSystem.exitを呼んでるとかではなく?
あと、IDEは一連の作業でそう何度も再起動するようなものじゃないと思うが……
viやnanoならファイルを開く度に起動して用が済んだら閉じるけど
viで開発するならscreenつかってバックグラウンドでreplを動かさないと
効率が上がらん。
俺も時間取って書く時はバックグラウンドで走らせる
viよりemacsの方が良いのか
>>132 一種のIDEだし, なじめば, まぁ...
slimeなれたら離れられなくなるとおもう
clojure 1.3で、
(def a 1)は警告でないのに(def *a* 1)は警告が出る。
二つの使い分けってあるの?
あと警告文の「名前を変えろ」の意味がよくわからんけど*取れってこと?
vimも良くなってる。vim+lein(cake)+screenという組み合わせは、
かなり機動力が高いと思うよ。vimclojureかslimzかどちらかのvimプラグイン
を入れれば、シンタックスは対応できるから。
>>154 1.3から*で囲われたvarは再束縛できなくなった、んで ^dynamicつけないといかんぞって警告が出てくる
CommonLisp慣れしてると結構面食らう
誤爆
*var-name*をclojure.jarでは定数に使ってるので、みんなも定数に使ってねって事だったかも。
>>136 あー、*で始まって*で終わる名前はdynamic専用の名前にすっからよろしく、ってことか。
>>139 定数・・・なのかな。定数は*なしで定義するのかなと思った・・・けど*clojure-version*が謎。
*つけるのはbindingで値を変える前提のVarだけにしとけって事。
みんなバラバラの意味で使って混乱するから強制にしたんじゃね。
逆に^dynamicついてないとbindingできなくなったし。
ついてないのを無理やり変えるならwith-redefsかalter-vat-rootかな。
>>142 二文目で
・(動的に再束縛することを意図しているなら):dynamicメタデータにtrueを付加する(indicate ^:dynamic)
・(慣習を知らずに、単に*で囲ってるvarをよく見かけるから付けたのなら)名前を変える(change the name)
のどちらかをやれ(Please either)と明記してるだろ?
それから、
>>136は「*で囲んだシンボルだけがデフォルトで再束縛できない」という意味合いにも解釈できるから
>>139は「Clojureでは*で囲んだシンボルを定数に使っているんだろう」と解釈したんだろうけど
「すべてのvarが動的に再束縛できる」→「:dynamicがtrueなvarだけが動的に再束縛できる」に変わっただけで
*で囲んだvarだけ特別に動的な再束縛を禁止しているわけではない
(
>>136は、Common Lispのdefvarから類推すると、Clojureの"var"はすべて動的に再束縛できて当然だから面食らったって話……だよな?)
あ、ごめん
もしかして136と139は同じ人?
>>145 面食らった件はそう、他のライブラリでも*db*とかを再束縛してたりしたので1.3で結構面食らった
*付きじゃないと警告でなかったような気もしたのだけど気のせいかな?
>>146 136だけど139じゃないです
>>147 *で囲まれていなければ警告は出ないが、動的に再束縛できない点は変わらない
*で囲んだ時だけ警告されるのは、慣習と実際が食い違っているから
逆に、1.2まではこんなこともできた(:inlineでインライン化される場合は効かない)
(binding [println (fn [& args] nil)]
(println "hello, world")) ; 出力されない
>>148 動的束縛全面禁止になったのか、で、*はよく用いられていたから警告だすようになったって事でFAってことかな?
全面禁止じゃなくて、:dynamicがtrueなvarに限定された
よく使われているというか、Clojureでも動的に再束縛できる変数は*で囲む慣習がある
ただ、名前によって動的な再束縛の可否という振る舞いを変えるのではなく
移行時に警告で振る舞いの変更を知らせるようにした
まったくの初学者で、labreplはじめたんだけど、It's all dataとloopingの間に
深い深い溝があるような・・・みんな、軽々と乗り越えたん?
いきなりrecurだのベクター中の&だのif-letだの出てきてわけわからん状態で挫折しそう。
全くの初学者でよくそれを見つけたなw
今動かしてみたけど、結構良くできたチュートリアルだね。
でも確かにloopingの2番はいきなりdefn、loop、分配束縛、if-let出してきてそれ使えってのは無茶だな。
たっぷり例示してからやればいいのに。
テンプレでおすすめに入れてるから。
おまえら予約した?
Amit Rathore "Clojure in Action"
>>152さん、ありがとうです。やっぱり難しいですよね。
labreplは
>>154さんのいうとおり、テンプレのお勧め見て
試して見ました。・・・が、
>>153さんの言われている単語すら
よくわからない状態で。精進します。
>>155 まだ2つしか見てないけどいいわこれ
教えてくれてありがと
joy of clojure買ったのに読んでなかったわ
in actionのmanningは感謝祭の前日50%引きセールだそうで。
西海岸は、22日の午前8時過ぎだから日本時間だと今日17時までかなあ。
163 :
157:2011/11/23(水) 04:03:33.67
くぅ、まだ100ページ(四分の一)しか読んでないのに半額セールとか涙出そうだ
ショボーン
木曜休みとってあるからこの連休で全部読むしか orz
感謝祭前後には毎年なにか割引があること覚えておかないとなあ。
apressの場合、去年は12中旬ぐらいに25%セールがあったけど今年はどうだろ。
clojureスレにきてるやつって
なにげに英語余裕で読み書きできそうなやつがそろってそうな
気がしてならない。
>>165 まだ裾野が狭いからね。日本語のリソースをもっと増やさないといけ
ないのはわかってんだが。手が回らない。
クックブックみたいのが出るといいと思うんだがねえ。
入門はあの翻訳本でいいとして。
> 入門はあの翻訳本でいいとして。
取り上げてる例に興味が持てなかったので未だに積んであるんだが
俺もLancetには興味なかったけど、あの本のLancetパートは
別に熱心に読まなくてもいいというか、章末の復習ついでに実装が進んでいく感じ
第二版は全体の構成が少し変わってるけど、Lancetパートはあるんだろうか
170 :
157:2011/11/23(水) 23:58:22.32
Leiningenを例にする本がでればいいのにとか重いながら、Clojure in Actionをこの2日で180ページまで読んだ
どんどん濃くなるのでうれしいが今年中に読み終われるかギリギリな感じ
>>165 高卒のおばかなプログラマの俺でも興味のあるものの為に辞書片手に読むようになったらここ2年ですごい読めるようになったよ。
なんで生徒時代あんなに英語赤点だったんだろうかってくらい(大学入試ムリなくらいなレベル)
第二版は、はじめの方でちょろっとlein使ってるぐらい。
実践の部分はclojure.test(.generative),clojure.java.jdbc,compojureの説明があって、
それを使ってゲームを作る流れ。(jdbcは使ってないかも)
パフォーマンスの説明は、いまのところ、メモ化やlongとuncheck使った四則演算の話が少しある。
Lancetのところはみなすっ飛ばしたわ。笑 キョーミなかったし。
それでもなんとでもなるよ。基本的なことはそれ抜きに書かれてるから。
私はLisp系の基本だと思ってる関数で関数を返すといった技法絡みは無いけどさ。
技術的なことは分からんが、leinが簡単過ぎて嬉しい。
Mavenとかantとか複雑過ぎて俺の脳みそには入らん。
自動化ツールを自動化しなきゃダメな時点でどうなんだと。
アホのeclipseのために専用のプロジェクト作らなくても、emacsでほいほい開発できるし単純に楽だわ。
質問です。
LinuxerのサンデープログラマLisperなんですがJava未学習者がclojureを
覚える強いメリットっありますか?
あとOSごとにソフトを作り込んだ方がヘビーなエンドユーザーは使いやすいと
思うんですが、実際の所はどうなんでしょうか?
こういうメリット云々ぬかす奴は嫌い。
JAVA嫌いなら出来ない おわり
俺ジャバは知らないけど、使ってるよ。若干困るところはjavaの機能を
使おうとする部分かな。ライブラリ知らないのは資料だけならネットに
いっぱいあるから問題なしかな。protocolところは混乱するかもしれな
いけど、固有の機能を使うGUIだってseesawのようなものも出てきてるので
そんなに問題はないかな。
迷信のように、Javaを知らなければ、Clojureを使えないと言ってる人は
いるようだけど、(検索などで見かけた。)あれは真っ赤な嘘か、発言者の
頭のスペックの問題と考えていいよ。
>>175 javaしらなくても十分やる価値があるよ
Lispよりも純粋関数型言語の思想の方が強く関与してるおかげで副作用なしの関数の学習に適してるから
Emacs+Slimeの様なインタラクティブ環境でそれができるのは希有な上に学習曲線が緩いClojureは一押しだったりする
他にも関数型でHaskellやML系とかJVMならScalaもいるがこれらよりは優しいと思う
まぁ本人が何したいのかにもよるんだけどね。
みんなLancet飛ばしててわろた。
ビルドツールが例ってのはちょっとややこしいよなぁ。
そもそもAntって何だっけ状態だったし。
leiningenは良くできてるよなー。
このビルドツールの使いやすさもclojure普及に一役かってると思う
>>178-179 純粋関数型言語を勉強する気が起きたらならそれに適した言語で勉強します。言語マニアでも
ないので無駄な勉強時間は割きたくありません。
ようするに強いメリットはないようですね。こちらのスレが伸びていたのは知っていたので
もっと明確な答えが返ってくると期待したのですが間違いでした。
回答、ありがとうございました。
>>182 一役どころじゃないよな。
プラグインを個々にインストールする仕組みになったからproject.cljも変更しないで済んで更に便利になったし。
>>183 web屋さんには強いメリットはあるけどね。
415 名前:デフォルトの名無しさん [sage] :2011/11/25(金) 06:41:33.57
>>410 各ディストリでそんなに環境依存ってあるもんなんですか?
>>395のリンクでもありますがCで触れるのは最後にチューニングできるのは強みのような気もするんですが。
Richちゃんのいつごろ書いた記事?
>>411 朝、起きて気づいた。こっちの方が書き込み多いのは驚いた。Clojureスレのヤツはウンコだな。
>>412 それならGaucheで良くね?
CLならsbcl, clisp。個人の日本語解説サイトもあるから日本語資料には困らんよ。
日本語資料では間に合わなくなったら辞書片手に読めば良い。以上。
Clojureスレのヤツはウンコだな。
最近は質問する奴の方が偉そうなの多くなったのかねぇ
>>183 後出し設定乙でありますとしか、何がしたいために知りたかったのかが伝わらない質問した自分を恥じなさいな
ClojureスレからCLスレに転載したかと思えば、CLスレからClojureスレに再び転載
お前は一体何がしたいんだ
煽れば教えて貰えると思ってるんだろ。
皆通る道だ。
Herokuはいいとして、
GAEやbeanstalk,RUN@cloudなんかは、javaのインフラが使えること分からないとどう利用してるのかイメージつき難いのかな。
翻訳頼むわ↓
http://blog.raynes.me/blog/2011/11/27/the-clojure-community-and-me/ >I had a lot of time to do these things because I’ve always been
> home-schooled.
>I always say that Haskell was my first language.
>I’m 17
>I also landed a book deal with No Starch Press. I’m currently
> writing a book called Meet Clojure for them.
17ってのも驚きだけど、Land of LispやLearn You A Haskellの堅苦しくない
出版からClojureの本を出すことになってるってのも驚き。
Learn You~は大学生が出したHaskellの本だが。
中学生でHaskellをやったんかなぁ。
http://nostarch.com/ 伝統(?)の黄色い表紙は、キッチリしてるんじゃないかな。
オーム社のマンガガイドの科学シリーズが翻訳されててベストセラーにいつもはいってる。
英訳で始めてオーム社でこんなの出してたんだというのを知った。
>>193 ハングルはアニョハセヨぐらいしか知らんよ
user=> (map doc '(list))
java.lang.Exception: Can't take value of a macro: #'clojure.core/doc (NO_SOURCE_FILE:179)
というエラーが出てしまうんですが、どうすれば欲しい結果を返すことができるんでしょうか? version1.3.0
user=> (doc list)
-------------------------
clojure.core/list
([& items])
Creates a new list containing the items.
nil
user=> (map + '(1 3))
(1 3)
user=> (type list)
clojure.lang.PersistentList$1
user=> (map type '(1 list))
(java.lang.Integer clojure.lang.Symbol)
これならとりあえず動いた。versionは1.2.1。
user> (map print-doc (list (var list)))
(-------------------------
clojure.core/list
([& items])
Creates a new list containing the items.
nil)
レス、ありがとうございます。
version 1.2.1で動作確認しました。
;;version 1.3.0
user=> (map print-doc (list (var list)))
CompilerException java.lang.RuntimeException: Unable to resolve symbol: print-doc in this context, compiling:(NO_SOURCE_PATH:22)
欲しい結果がちょっと抽象的でしたので具体的にします。sbclでやるとこんな感じです。
CL-USER> (mapcar #'(lambda (f) (documentation f 'function)) '(list setq defun))
("Return constructs and returns a list of its arguments." NIL
"Define a function at top level.")
あと"(defun &ENVIRONMENT ENV NAME ARGS &BODY BODY)"という情報も欲しいです。
で、最終的にはこんな感じにしたいです。
("-------------------------
clojure.core/list
([& items])
Creates a new list containing the items.
nil" "-------------------------
hogehoge ..." "-------------------------
fugehoge ..." ...)
clの場合 (describe シンボル名)
(mapcar #'(lambda(x)(describe x)) '(cons defun))
>>198はメッセージの通り、docというマクロ自体を引数として与えようと事によるエラー
Clojureのマクロは今の所それ自体の「値」を直接手に入れることができない
>>200は1.2では内部関数であるprint-docが外部にむき出しになっていたのが
1.3でちゃんと外部から直接呼べないようになったので動かなくなった
ところで、要するにdocの出力を文字列として受け取ればいいんだよな?
Clojureでは標準入出力を直接使う代わりに*in*や*out*という名のvarを使い、それらがデフォルトで標準入出力になってる
with-out-strは内側で*out*を動的にStringWriterへ束縛して、*out*に出力された文字列を返り値にする
なので、こうすれば望んだ結果が得られる
(map (fn [name] (with-out-str (doc name))) '(list))
あ、*in*などを使うのは強制ではないし、System/inなどをハードコードしてる場合もリダイレクトできるってわけじゃない
coreは勿論、大抵のClojureライブラリも*in*などを使ってるんだけど、出力先を指定できないJavaライブラリを使うときは注意
>>203 俺もそんな感じでいけるんじゃないかと思ったが
docが変数名そのものから展開してしまって思うようにいかなかったわ
そのコード例だと、(fn …)の返り値が全部#'clojure.core/nameのドキュメントになる
>>200 (defmacro docs [& xs]
(apply list 'list (for [x xs] `(with-out-str (doc ~x)))))
とマクロを定義して
(docs print println def defn)
で(doc …)の文字列のリスト取得できるようになる…と思う
可変長引数じゃなくてベクタやリストを渡したければ[& xs]を[xs]にでもしてくれ
(source doc)してみれ docのマクロは読める。
1.3で(macroexpand '(doc list))するとどうなるの?
1.2.1だと(clojure.core/print-doc (var list))になるんで
>>199にしてみたんだが。
>>207 1.3だと((var clojure.repl/print-doc) (clojure.core/meta (var list)))になったよ
それじゃあと、(use '[clojure.repl :only (print-doc)])としてみたんだが
IllegalAccessError print-doc is not public clojure.core/refer (core.clj:3774)
というエラーが出た。
>>205 ああ、本当だ。間違ってたごめん
最初に#()で書いたら""が返ってきて「%というシンボルを探してるのか」と気付いてたのに大ボケかましてしまった
>>208 ならば、これでどうだ。もう本題から離れちゃってる気がするけどw
(map (var clojure.repl/print-doc) (list (clojure.core/meta (var list))))
>>207-208 1.3でprint-docはvarではなくメタデータを取るようになった
(source doc)すれば分かるけど、docにはいくつかの特別な名前の為の処理があるから、print-docだけではうまくいかない
useのエラーは上で書いた通り、内部関数のprint-docは1.3からは直接呼べない(:privateがtrue)が、シャープクォートを使えば迂回できる
(docの内部でシャープクォートを使ってるのも、展開先で呼び出せる必要があるから)
(#'clojure.repl/print-doc (meta (var list)))
>>203-208 みなさん、ありがとう。
とりあえず、長考するわ。
長考する前にデバック(on slime)についてのおすすめの英語サイトありますか?
>>211 なるほど。:privateみたいなのでアクセス制限できて、それを (var xxxx) = #'xxxx で回避できるのね。
docの結果は値としては返ってこないのか。
返ってくるのは結果をどこかへ出力する副作用をもった遅延シーケンスだから、
>>203みたいなことしないと出力を文字列として得ることができないと・・
結構面白い問題だから、公式のグループで聞いた方がいい。
clojureで作った関数をjavaから呼び出す方法ってありますか?
出来上がった.classファイルを解析するしかない?
Clojureの関数はCallableとRunnableを実装してるので
それらを実装した他のクラスと同じ感覚で呼び出せる
望むならjava.util.concurrentのタスクスケジューラなどに渡すこともできる
>>220 >>221 ありがとう。
英語苦手だからとりあえず:gen-classって付けてみたけど、
欲しい関数はどこにあるかわからなかった。
ゆっくり読みながら試してみます。
とりあえず"hello"ってStringを返すだけのdefnを
javaから呼べるようにすることからはじめてみます。
おいら、java側コードを道具としてつかっちゃうからjava側からclojureの関数呼び出すとかいう発想自体無かった
どんなときに有用なん?(出来ないのは困るってのはあるけど)
Javaアプリケーションのスクリプト環境として使う時?
GIMPのScript-Fuみたいな感じ
Clojureで作成したライブラリをJVMで使いたいときは、下記の機能知ってると、細かいところまで用意できるけど、
まず上に出てきた、コンパイル時の-Dclojure.conpile.path=classesと実行時の -cp classes:…、ソースの(:gen-class)とdefn -main[&args]で、javaのメイン関数的な呼び出しさえ出来れば良いんじゃないかと。(かleinのコマンドと設定)
230 :
デフォルトの名無しさん:2011/12/04(日) 16:28:18.48
Clojureの勉強のつもりで、EvernoteのAPIを使ってみようと。
んで、
(import '[com.evernote.edam.userstore UserStore$Client])
って叩いたら、
IncompatibleClassChangeError Implementing class java.lang.ClassLoader.defineClass1 (ClassLoader.java:-2)
とか怒られるんですよね−。
他のインナークラスは大抵importできるのに。implementsされてたらアカンいう事?
色々調べたけど、英語がそんなに得意でないこともあってもう限界。
だれか解決方法ご存知の人教えて下さい。
231 :
デフォルトの名無しさん:2011/12/04(日) 16:28:33.22
Clojureの勉強のつもりで、EvernoteのAPIを使ってみようと。
んで、
(import '[com.evernote.edam.userstore UserStore$Client])
って叩いたら、
IncompatibleClassChangeError Implementing class java.lang.ClassLoader.defineClass1 (ClassLoader.java:-2)
とか怒られるんですよね−。
他のインナークラスは大抵importできるのに。implementsされてたらアカンいう事?
色々調べたけど、英語がそんなに得意でないこともあってもう限界。
だれか解決方法ご存知の人教えて下さい。
大切なことなので2階言いました。
233 :
デフォルトの名無しさん:2011/12/04(日) 17:38:59.42
ミスっただけです
>>231 そのAPIを使ったことが無いので、ちょっと試してみたけど
そのコード自体は問題なく通ったよ
user=> (import '[com.evernote.edam.userstore UserStore$Client])
com.evernote.edam.userstore.UserStore$Client
user=>
自分がやった方法は
leiningenを使って、プロジェクト作ってlein depsした後
lib/以下にevernote-api-1.19/java/lib/に入ってあった
* evernote-api-1.19.jar
* libthrift.jar
の2つを置くだけ
そのエラーの原因は、メソッドやクラスの関係にズレが生じて
整合性がとれなくなるときに起きるエラーのようだよ
例示すると
"interface Aが定義された.classと、それをimplementsしたclass Bが定義された.classがあるとして
Aをabstract classとして定義し直して再コンパイルしたがclass Bのほうは古いまま"
のような場合に起きるらしい
>>231がどういう環境を使ってるかは良くわからないので
これでは解決にはならないかもしれないが、良ければ参考にしてくれ
235 :
デフォルトの名無しさん:2011/12/04(日) 18:37:59.57
>>234 おおお、ありがとう!
なんかかんやと出したり引いたり弄くっているうちにズレたのかも。
未知のバグだったら手も足も出んなぁ思っていたから、
そうじゃないと判っただけでもとても助かりましたです。
勝手→リファレンス
あと、記事のdate4jはjsr-310と無関係
よろしくお願いします。
リスト操作・lambdaの扱いが慣れていないlisper見習いなんですが、clojureを効率よく
勉強するにはclojureでの再実装を意識しながらsbcl or cclで実装してからcloujureで再
実装した方が基礎を固める意味で良いでしょうか?
それとも動くはずなのにエラーに苦しみながら何度も調べながらclojureで実装した方が
したっぽいが良いでしょうか?
clojureに慣れたらわざわざ他のclで実装する必要もなくなると思いますが。
動かないのなら、「動くはず」はただの思い込みだよ、ClojureでもCLでも
Clojureを学ぶのが目的なら最初からClojureをやればいいし
どのLisp方言を学ぶか選んでる最中ならCLと比較しながらやればいい
あと、念のために言うけど、Clojureの頭にCLの二文字が付いてはいるけど
SBCLやCCLのCL (Common Lisp)とは特に関係ない、別の言語だからね
驚き最小の法則()
Clojureは他のLisp方言に比べたらちょっと個性的だと思う。(破壊的処理
のところがね。副作用の部分をモナドで囲むようなHaskellのようなわけ方を
してる。もっともJava固有のコレクションや配列を直接扱うときはこの保護
機構を使わなくても書き換え可能)
>>239 Clojure is not CL.は知りませんでした。
後出しですがemacs lispも勉強したいのでCLベースで基礎を固めた方が良いのかな。
>>241 ちょっと個性的ですよね。記法を覚えていないとか、慣れの問題があるんでしょうけど。
Clojureは可変な値ではなく、refなどの可変な参照が指し示す値を変える事で可変な状態を扱う、って考え方だから
同じように「囲んで」いるように見えても、モナドとは考え方の背景が違うけどな
printlnみたいにむき出しにしてる部分も多いし、Clojureではそれも悪くはない
モナドが欲しい時はalgo.monadsを試すといい
>>242 JVM で動く CL 実装は ABCL 。
一応書いとくと、elisp も CL とは違うよ。
>>238 ClojureはCommonLispとはかなり性格が違うので一緒にやると混乱するよ
EmacsLispも学びたいって言う事から察するとLisp族初めたばかりだと思うからいくつか助言するとしたら
1.Clojureから先に覚えれば、破壊操作が楽な他のLisp族へは移行が優しい
2.通常の言語で高度なプログラムが書けるならCommonLsipからやる方が優しい
3.興味や学術方面から入るならSchemeがオススメ
の3つの選択肢があるのでどれか一つから始めるといいよ。
どれから始めてもカッコが気にならなくなったらいつでも他のLisp族にうつれるから気にしなくて良いよ、ただし3つのどれも同時に始めるとLisp族が嫌いになると思うのでできれば一つに集中してほしい
>>244 I know "Emacs lisp is not CL".
Why clojure?
Clojureが流行っているのは大量書き込みに難があると噂だけど並列処理ができるから?
>>246 (1)重要な要素ではないです。(3)Schemeでcar, cdrを覚えました。そして、本格的にプログラミング
しようと思って、速くて下品そうなCLに移って来ました。CLはEmacs lispと多少コードの互換性がある
ので再利用できるのもCLを選びました。(2)高度なブログラムを書けないけど、CLが体に馴染んで来ました。
カッコがないとむしろ気持ち悪いくらいです。
自分の判断としては(2)のコースで必要があればClojureで再実装なのかな。今、そこまで実装したいと
いう気持ちはありませんが、簡易なBlogシステムとか、Web関連でちょっとした遊びがしたいですね。
既にCL使ってるのか、
それなら、CLでもweb frameworkあるよ。
比較するならclojureだとjavaのservletを使ったSaaSにデプロイするのという手段がとれるので楽だと思うけど。(Herokuなど)
あと、CLとClojure比較するのに参考になる話題ではないけれど、
java以外のJVM言語のなかでは言語の組み込みなデータ構造と機構だけで、
デーモン上にて大量のオブジェクトを扱った場合でも比較的ヒープの使い方がうまいらしい。
(1,2年前の話。良く分かってないけど、2GB以上ヒープメモリつかっても、GC周りの地獄になりにくい?)
ヒープの使用効率は永続的なデータ構造(persistent data structure)の影響かな
今年のClojure/conjで発表した人だと、Phil Bagwellが永続的なデータ構造の論文をいくつも発表している
>>250 これってCommonLispで明示的に書いてできないもんなの?
>>251 もちろん永続的データ構造を実装すればできる
>>253 (loop FOR i FROM 0 TO 9 COLLECT i)という書き方が興味深かった。(loop For i From 0 To 9 Collect i)と
いう書き方ってコストじゃないからこういう書き方の方が良いのかな。
Amazonからお支払番号きた。
買う/買ったやついる?
1 Clojure in Action ¥3,652
買ったやつの大半はmanningからDL購入してると思われる。
257 :
デフォルトの名無しさん:2011/12/13(火) 20:43:49.40
>>255 こーてへんけど、本にはクーポンがついてて電子ブックは登録すれば
無料でもらえると思うよ。
>>255 e-book版ならだいぶまえに買ったよ
こーたり
やっと発売か
どうするって何が?
Programming Clojureの2nd Editionは以前から1.3ベースって宣言してるし
オライリーのClojure Programmingも作者的に1.3非対応にはしなさそうだけど
牛のブライアンに直接聞いてみたらなんか返ってくるかも 笑
彼日本語(漢字)勉強してるみたいだから。
誰か、凸れ
もちろんクリスマスはclojureを書いて過ごしたよね?俺だけじゃないよね?
>>267 イヴの夜は寒くて教会に行くのサボって、当日は顔を出して、ベイクセールで
募金したぐらい。あとはClojure : CL : Elisp : conf = 3 : 3 : 2 : 2で
オナっていたぜ。
本年がClojure祭りでありますように
>>268 今の教会って、「イブ、とは前日の事ではない」と教えないのか。
ウリストじゃないよね?
そもそも午前零時に日付が変わる、という意識が一般化したのが近世ないし近代。
それ以前の慣習については、日の出または日没が日の区切りである可能性がある、
というのがごく一般的な話。
クリスマスに Compojure が1.0.0になってたのな
真夜中に一日の区切りを持って来る事については、天文学者が猛反対した、という話も。
連中は、今でも正午を区切りにしようとか画策してる秘密結社だからな。
30時間制っちゅうのがあって、朝6時に切り替えって発想は星方面にはあるよ。
ClojureでAndroidとかやってみたけど、当たり前だけど文法が変わっただけで、やることは手続き型だった。
適材適所って大事ね。
>>276 ラップして楽するようにすると面白いっすよ
つかAndroidでswankできてもうなんかモニョモニョしちゃうくらいもだえたぜ
梱包じゃ
苦労じゃ
>>277 なんか例えばこんな時に…みたいなのってある?
AndroidというとUI部品への値の読み書きがほとんどで、Clojureが活躍する領域が思い浮かばない。
>>281 活発にメンテナンスされてなくて、メンテナーに立候補する人もいなかったライブラリと
既にclojure.jarに取り込まれてメンテナンスされているライブラリは移行してない
古いcontribもorg.clojure.contrib/standaloneかどこかで一応引っ張ってこれるはずだけど保証は出来ない
移行してないけどこれがないと困るってライブラリがあったら
IRCやMLで訊けば代替を教えてくれるし、メンテナーに立候補する手もある
実際、1.3リリース後に移行したライブラリもある
俺は今の所基本1.3でたまに1.4の様子を見てる
なるほど
swing utilsは代替がないね、
GUIFTWやSeesawを使えば良いんじゃね
GUIライブラリじゃなくてswing-utilsそのものが使いたいのなら、移行しないのか尋ねてくるといい
JavaしらんClojure使いだが。ちとJavaのことを知りたいなと思ってみたけど
本がわんさかあって、何がええやらよくわからんです。
初めてのRuby見たいな、他の言語習得者向きの本って無いんですかね?
洋書の安いのがあれば一番いいかも。
Head First Javaはamazon.comで売れてるみたいだし、検討中なんですがね。
PerfectJavaがおすすめ。網羅的に場広く解説さるてる。
>>287 ありがとう。今度本屋で確認してみます。:)
swank-clojure が動かない。
debian で
clojure 1.2.1
leiningen 1.6.2
をインストールして、
$ lein plugin install swank-clojure 1.3.4
~/.lein/bin/swank-clojure の
CLASSPATH="/home/なんとか/..." を "$HOME/" に(多分これはバグ)変更。
290 :
289:2012/01/18(水) 10:38:34.35
$ ./.lein/bin/swank-clojure
Exception in thread "main" java.lang.IllegalArgumentException: Wrong number of args (0) passed to: swank$-main (NO_SOURCE_FILE:0)
at clojure.lang.Compiler.eval(Compiler.java:5440)
at clojure.lang.Compiler.eval(Compiler.java:5391)
at clojure.core$eval.invoke(core.clj:2382)
at clojure.main$eval_opt.invoke(main.clj:235)
at clojure.main$initialize.invoke(main.clj:254)
at clojure.main$script_opt.invoke(main.clj:270)
at clojure.main$main.doInvoke(main.clj:354)
at clojure.lang.RestFn.invoke(RestFn.java:436)
at clojure.lang.Var.invoke(Var.java:373)
at clojure.lang.AFn.applyToHelper(AFn.java:167)
at clojure.lang.Var.applyTo(Var.java:482)
at clojure.main.main(main.java:37)
Caused by: java.lang.IllegalArgumentException: Wrong number of args (0) passed to: swank$-main
at clojure.lang.AFn.throwArity(AFn.java:437)
at clojure.lang.RestFn.invoke(RestFn.java:399)
at clojure.lang.AFn.applyToHelper(AFn.java:159)
at clojure.lang.RestFn.applyTo(RestFn.java:132)
at clojure.core$apply.invoke(core.clj:540)
at user$eval1637.invoke(NO_SOURCE_FILE:1)
at clojure.lang.Compiler.eval(Compiler.java:5424)
... 11 more
>>290 $ lein swank
じゃねーの?
292 :
289:2012/01/18(水) 22:17:50.98
>>291 https://github.com/technomancy/swank-clojure ここ見てやっていたのだけれど、さっきできた。
$ lein new myproject
して、Emacs 上で myproject に移動後 M-x clojure-jack-in するだけではだめ。
myproject に空の core.clj を作ってから M-x clojure-jack-in でできた。
project.clj の書き方も分からないので、
問題の切り分けのためにスタンドアローンのサーバを立ち上げようとしたけれど、
(それは今もできないけれど)まあいいや。
>290 のところは、>291 ではなくキャンセルして、最近おすすめのclojure-jack-in使ったんだよね?
あと、.emacs.elあたりにreqire 'clojure-modeがあると、拡張子がcljならclojure-modeを呼び出す状態になってる。
さらに、clojure-modeならswank-clojure関連でclojure-jack-inが呼び出せるようになってる。
みたいな感じをイメージを想像出来るといいね。
clojureある程度やってみたら、
少しemacsとjavaのことも勉強すると周辺環境の理解が深まるかも
>>293 流れとしては
1. プロジェクトを作らないとサーバが起動できないらしい
2. 作ったけど、 M-x clojure-jack-in で起動できない
3. project.clj かプロジェクト下の他のファイルが悪いのかも、でも何が悪いのか分からない
4. プロジェクトを作らない方法もあるから、そっちを試そう
5. 4 も駄目だ
6. $ lein new myproject すると Look over project.clj and start coding in myproject /core.clj
とでていたので、 myproject /core.clj を作ってから M-x clojure-jack-in するとできた
という感じ。
Emacs + slime で Common Lisp は以前から使っていたけれど、
JAVA は久しぶりにインストールしたよ。
scalaよりは名前カッコいいしLISPerの後押しもあるしで
そこそこ流行りそうだな
少なくとも日本ではScalaの方がずっと多く本出てるし
Lisperと言ってもそれぞれ好きな方言があるだろうからなぁ……
俺はどちらでもないから分からないけど、多分CLerやSchemerは
「Clojure(に〇〇があれば|が〇〇だったら)もっと良かった」って点をいくつか挙げるだろうし
>>296 javaから来たらscalaの方が覚えるのは楽だと思う
lispしってりゃclojureの方がreplで楽ができるから俺はclojureの方が学習コスト低かったけど
298 :
デフォルトの名無しさん:2012/01/29(日) 20:48:28.62
本当にScala流行るかわからんし少なくともすぐ流行るとも思えないから
Java使いが取り敢えずで新しいことやりたいならClojureという選択肢もありなのかな
>>299 むしろアリだと思うよ、Lava使いがLisp族を覚えるのにこれほど適した言語は無いし
覚えて損することも無い
scala は一時的なもんだろうな。一部引き始めてるから、大きなうねりには
ならんだろう。
なによりコミュニティが北斗の拳だし・・・。
Clojureは j の点の部分を四葉か三葉のクローバー、下をクローバーの
茎に見立てたデザインにすればきっと格好良くなる
>>301 「おまえは既に死んでいる」と言う事かな?
モヒカンがヒャッハーみたいな
世紀末でカオスな状態になってる
ってことだろ多分
うん。殺伐ってこと
へえ。そんなに殺伐としてるのか。
水嶋の真似をしようとした連中が、scala初心者に対して学術風味なご高説を垂れてるらしいな。
で、中にはご高説同士で「当然論文はご覧になってますよね?」的なノリの人格批判でうぼぁー。
って聞いた。
北斗の拳って言うからてっきり「今日より明日なんじゃ…」って言いながら非互換変更入れたり
自分のライブラリが標準ライブラリに採択されたら「神はわれわれを選んだのだ!」って叫んだりしてるのかと
名指しで他のコミュニティのことはとやかく言わないようにしよう。
誰も得しない。
osxにて、HomeBrewのcake.rbがなくなって、
brew install cakeでは、いけなくなっていた。
gemからはいけた。
古いHomeBrewのcake.rbでは、-HEADオプションつければ入るが、結局動かなかった。
たぶん、gem install cake使ったhomebrewのcake.rb書けばいいんだろうけど。
emacsのcompilation-error-regexp-alist
に良い指定の方法ないかな?、自分がやるとスタックトレースに出てくる方までひっかかっちゃって
emacs使った開発をしようとしていますが、
regionを関数に抽出したりするなどの、リファクタリングや
括弧の数が合わなければ色を変えて、教えてくれるなどの機能は、どんなプラグインを入れれば良いでしょうか。
ベタなコードをkill/yankで別関数に抜き出すと、括弧の数が合わなくなったりして、
よく無駄にハマる時間ができてしまいます。
あと今はparedit, clojure-mode, slimeをいれていますが、その他clojure開発でオススメがありましたら教えていただけると嬉しいです。
paredit使ってるなら括弧の数合わなくなることはあんまないでしょ。
あー、キルヤンクの時ね。C-Spaceとかで手動で範囲指定するとあわなくなるけど、
C-kやM-C-@とかで括弧単位でコピペするのが楽だね。
swank-clojure使ってるならC-c C-k すれば大体のエラー箇所は教えてくれるよ。
括弧の数合わないとか定義されてない変数使ってるとか。
後方互換性にとらわれないとはいっても、
プログラミングClojure第一版のコードすら結構動かないものがあるというのはどうかと。
仕様が固まってくるまでどれくらいの時間がかかるのかな。
いま固まりました
1.3では、大幅変更があったからなぁ。
高速化はどんどん期待したいけど、仕様変更だけは、4,5年くらい
変更なしでも動くような事のほうが使いやすいよね。
プログラミングClojure第一版は1.0(日本語版は訳者による開発中の1.1に基づいた脚注あり)だな
コアに取り込まれたcontribライブラリを使ってたり(例、c.c.duck-stream→c.c.io→clojure.java.io)
typeやprotocolにまったく触れてなかったり、proxyはあるけどreifyはなかったりと
1.1〜1.2の変化も書かれてないから、1.2でもちょっと古いコードになるな
原著第二版は2012-03-06発売予定か
322 :
デフォルトの名無しさん:2012/02/11(土) 14:08:31.04
JVMに縛られてる限り駄目だわこの言語
釣りにつられて スルーができるのか?みなさん
>>322 一度でいいからRichが書いてる事読んでから言えよ
JVMにこだわっているのじゃなくPlatformからの独立について語ってるって知るべき.
俺は後方互換性なんてあんまり考えないで欲しい。
より良い言語になるなら。
言語が良くなってもライブラリが付いてこないからな。
黒板言語と呼ばれて良ければそれでもいいんだろうが…。
>>326 javaライブラリの利用はさほどむつかしくないから、そうとはならないと思うが。
しばらくclojureを追っかけてなかったけど、contribの事どうなったの?
動向を追いかけてる人いるの?
instant literal とかいうのが入ったね。
使いどころがよくわからんが。
何それ
clojarsのリポジトリとかがClojureのバージョン別に検索しやすくなってくれないと正直leiningenやcakeで困るわー
ライブラリの最新バージョンとかいちいち調べるのすごいめんどい。
Clojureとライブラリのバージョン対応の問題は1.3.0以降急激に増加しているので、
なんとかmaven系の設定ファイルで管理してほしいところではある。
1.3リリース以降*db*関係でSQL系ライブラリが大混乱
これなんとかならんかなぁ
1.3の数値primitive指定使ったチューニング凄いんだけどDBでclojureql使いたいと思うとvarのdynamic指定関係でライブラリが選択しにくい(というかclojureのメインバージョンに引きずられる依存関係の解決ができない)
気付いたらパッチを送ってくれると大勢が助かる
>>315,316
遅くなりましたがありがとうございます。
RainbowDelimetersはこちらの黒背景だとそこまで目にうるさくないし、
明らかに足りないところは赤で分かりやすいのでちょうどいい感じです。
またお伺いしたいことがあるのですが、swank-clojureでエラーが消えません。
再現方法は
1. 適当にlein newでプロジェクトを作ります。
2. core.cljで (defn xxx [] (+ 1 2)) というコードを書きます。
3. clojure-jack-inでswankを起動します。ここでrepl上で (xxx)を呼ぶと、当然3が返ってきます。
4. ここで間違ってreplで (xx) と呼ぶと、Unable to resolve symbol: xx in this contextが返ってきます。
5. 以降、repl上でどんなコードを入力しても、Unable to resolve symbol: xx in this contextが返るようになります。
(xxx)を呼ぶと、別bufferにエラーが表示され、replには 3 が返ってきます。
C-c C-kをしてもダメで、emacsを再起動すると(というかswankを再起動?)、また正常になります。
emacsは23.4.1でclojure-modeは1.11.5(Marmaladeで落としました)、OSはMac OS 10.7.3です。
エラー情報をクリアするようなコマンドはありますでしょうか。
アメリカではClojureの本が最近、結構出版されてるな
>345
Clojure In Action
Joy of Clojure
Clojure Programming
の他にもでたん?
The little clojure
The reasoned clojure
The seasoned clojure
Land of Clojure
。。。妄想でどうぞ。
>>347 Land of Lispは買ったんだがなぁ、あのビデオクリップDVDでだしてくんねぇかな
実際のところ並列プログラミングでプログラムを高速化させたい場合は
C/C++で書いたほうがずっと早いんだよな
理由は
・もともと早い
・最適化するほどさらに速くなる(差が広がる)
・並列プログラミングも制限がないので早くできる
(関数型とかの並列プログラミングに対する利点は所詮、
並列プログラミングの力を削ぐ形で制限し、プログラムしやすくしているだけ)
C++との比較は見てみたいな。
結構な規模でコードの複雑さとパフォーマンスがどのぐらいになるのか。
小さな問題じゃ参考にならないや。
>>351 immutable/persistentなデータ構造はスレッドセーフでスケーラビリティも良好って事はCでも言われてるんだが
とBoehmのcordを最近知った俺がしたり顔で言ってみる
CやC++の方が速くしやすいのは確かだろうけど、俺はプログラムしやすい方がいいな
プログラマの時間よりCPUの時間が高価な分野にいないから持てる、甘えた考えかもしれないけど
手間暇かけていいんなら、そりゃCで書くよね。
やだよ
>>351 C++やCで並列化コード書く時ってOpenMPみたいなライブラリつかって丁寧に作らないとバグった時の悲惨さがでかいんだよな(特に何処かで実行単位相互に書き換わっちゃったみたいな計算結果がおかしいようなときのバグ)
実際機械コードに近いから実行効率はいいんだろうけど、万が一の時にリカバリする時間の労力考えるとマルチスレッドレベルでの並列コードならClojureはかなり優秀だと思うぞ(特に1.3以降)
最初から並列処理させるつもりで書かないと駄目だけど、
OpenMPは十分楽ちんだと思うけどなぁ。
Clojureも好きだけどね。
>>358 それぞれ違う特徴もってるからどっちが良いとか一言でかたづける問いじゃないんだよね
Clojureの場合スケール可能なのはコア数上限までで、それ以上のパワーが必要なら結局単体じゃムリだし。
その条件でも十分ならClojureで書く方がはるかに気が楽だったりするし
>>151あたりでも少し話題が出たlabreplの"looping"の項だけど
minを実装する節で出てくる以下のコード、4行目のseq関数って必要なのかな
(defn min-1
[x & more]
(loop [min x
more (seq more)]
(if-let [i (first more)]
(recur (if (< i min) i min) (next more))
min)))
>>363 そうだよな。ずっともやもやしてたんだ、ありがとう
(if-let [s (seq coll)] A B)
少し似てるけどこの位置のseqは意味のあるイディオム
EPLって、商業用に配布してもいいの?
いいよ
というか、それが駄目なライセンスをIBMが書く(前身のCPL)わけがない
ただし条件はちゃんと読んでね
いや、IBM云々以前にDFSGやOSDが商用利用を禁じるようなライセンスを認めてないんだったか
第1節で、別モジュールの場合はEPLが論じる「Contribution」に該当しないと
定義しているよ。
だからEPLなライブラリを動的リンクしたというだけで本体までEPLの効力が
及ぶことはなさそう。
programing clojure 2ed. の方はb5が出て、出版向けのデザイン・レイアウトになってた。
S式がどうこうというより、Clojure本体はclojure.langさえ移植すれば
Javaのクラスライブラリを直接使ってる場所以外は少ない変更/変更なしで動くようになってる
Clojureで書かれた部分がclojure.lang.RTを酷使してるのもそのため
375 :
デフォルトの名無しさん:2012/03/07(水) 02:29:05.50
Lisp界隈の進歩が亀のようにノロい理由として、
すぐに俺実装を作りたがって開発リソースが分散しがちというのが
大きな理由としてあると思っている。
わざわざ他スレにまで具体例付きで書き込むとはご丁寧なことだが、
Lisp界隈の進歩が遅いとみなした理由を教えてくれ。
俺がLispを嫌いな理由は。カッコの数を数えるのが面倒だから。
個人が勝手にやるのは自由だが、他人様に見せる物じゃないと思った。
>>375 ここ30年くらい、括弧の数なんて数えたことない、。
>>377 プログラムの読み方を知らないとそうなる。
あと、vim/emacsでいいがエディタを選ぶ言語だってのはあるな。
Lispに限らず括弧の対応は自動的に処理される環境を使うだろ?
誰だってそーする、おれもそーする
>>377 割とマジで括弧の数なんか数えないぞ
エディタの補助は使うけど、適切なインデントを用いることで括弧自体は存在自体が空気みたいなものだ
Pythonのコードを置換で編集するときに空白削って涙目(パンチカードをばらまくのと一緒だけど)よりも括弧の方が遙かにましというか
scalaやrubyつかえよ
あーるゆーびーわいってなんだすか?
>>383 酸化アルミニュームの一種ですよ
閃光を与えると特定波長のレーザーを励起できる物質で、宝石としても扱われます。
トラックボールの支持球で有名な奴ですね
>>378 戦前から括弧の数なんて数えずにlispのプログラムを作ってるよ。
clojure-pyサンプルにあったシングルスレッド用らしいfactorial.cljの実行時間を測ってみたんだが、
作者のマシンでpypy48s jvm25sのところ、
OSX@C2D 2.4GHzでやったら、
clojurepy
[email protected] 190s
[email protected] 79s
だった。
比率はいいとして、最近のCPUのシングルスレッド性能そこまで高いの?
ちなみに、Core i5 660は2コア4スレッド動作で、
>>388を動かしてる間は1スレッドがほぼ占有される状態で、
CPU使用率は25%〜30%をいったりきたりだった。
って採択まえなので当たり前だった。
schemeベースにしなかったのは何か理由があるんでしょうか?
作者の趣味?
ライブラリが充実さえしてれば人気ない方がいい
だがライブラリが充実するにはそれなりの裾野が必要というジレンマ
402 :
営利利用に関するLR審議中@詳細は自治スレへ:2012/04/06(金) 21:24:47.52
Clojureにおいて #' を使うのはどういう時でしょうか
(つまり var関数 をつかって直接Varを得るメリットということです。)?
CommonLispだと、#' を使うと、関数の名前空間から、そのシンボルに対応する関数オブジェクトを探しますよね。
#'がないと、変数の名前空間から対応する値を探しますよね。
関数オブジェクトを明示できて有用だと思います。
一方、Clojureだと、関数も変数問わず、
どちらにしろ、同じ (var 名前) が実行されて、Varが返ってきて
少なくともCommonLispのような使い分けのメリットないですよね。
強いて言うなら、Varは
ポインタみたいな役割を果たすのかとも考えたのですが、
いい具体例が思いつきません。
質問がわかりにくくてすみませんが、アドバイスお願いします。
よろしくお願いします。
(defn foo [f] (fn [x] (f x)))
(defn bar [x] (str "1st-" x))
(def boo-fn (foo bar))
(def boo-var (foo #'bar))
(boo-fn "XYZ") => "1st-XYZ"
(boo-var "XYZ") => "1st-XYZ"
(defn bar [x] (str "2nd-" x))
(boo-fn "XYZ") => "1st-XYZ"
(boo-var "XYZ") => "2nd-XYZ"
とりあえず、boo-var 側の挙動が必要なときに使えると教えてもらった。
鳥本くるんだね
ホントにたまたま間違って開いたすれなんだけど
見てたらやりたくなってきたから、関数型知らないけどやってみる
インストールから始めるかな
>>405 Leiningenからはじめた方が楽かも
とりあえずjre入れてjar落としてチュートリアルやってみた
(+ 1 2 3)で6が返ってきた時の感動は半端ない
関数型って楽しそうだ。遊んでみる
>>406 人居たのね
よく分からないけどゴリゴリやってみてる
>>407 >>406じゃないけど、このスレ割りと人いるんだぜ
clojureの楽しいところは、泥臭いのは全部javaのライブラリが請け負ってくれる事なので、安心してclojureの世界だけで行けるってかんじ
CommonLispのCFFIでOkみたいなのが全部java側なのでCFFIで必要なライブラリを呼ぶ苦労が全くないのがミソというか
ま、楽しんでちょ
409 :
デフォルトの名無しさん:2012/04/16(月) 12:10:14.52
そりゃよかった
コンセプトモデルなので、これから作るという話みたい。
clojureは少し枯れ気味になるのを待ってるけど、何年先になるんだろうな。
1.2->1.3のようなことが何度もあるとちょっと使いづらい。
java1.4-1.6で動くように作ってたので、clojureの後方互換性も重視してるのかなと思ったけど、
思ったよりライブラリ関連での断絶があるし、告知や対応が分かり辛いかな。
417 :
デフォルトの名無しさん:2012/04/23(月) 17:52:06.34
日本でClojure使ってるプロダクトやサービスとかってbyflow以外にあるのでしょうか?
海外だとミドルウェアでの利用を中心として、FlightCaster、Storm、Datomic、Prismaticあたりでしょうか。
419 :
デフォルトの名無しさん:2012/04/24(火) 13:09:26.53
おお!ありがとうございます。
ただ日本の事例がのってないのですね・・・
Typed Clojureという単語に、注目してるのは、型付きラムダ計算メインな人達なのか、LLメインの人達なのか、それともClojureメインの人達なんだろか。
Typed Racketのライブラリの移植なのかなと思ったんだけどどうなるんだろ?
clで、型指定してunsafeにするみたいな高速化の効果はあるんだろうか。
ループの中で(.read st)とかをぶん回すときに
#^java.io.BufferedInputStream stしてあるかどうかでかなり速度が違う。
424 :
デフォルトの名無しさん:2012/05/01(火) 02:10:51.29
Clojure に型推論+型宣言の”オプション”をつけてほしい.
425 :
デフォルトの名無しさん:2012/05/02(水) 01:09:54.57
.NET専用になってからな。
>>424 ソースは公開されてるからclokellとでもして新しい言語を作ってみたらどう?
Hasjureを推すね。
当たりとは正反対の方向を向いてる言語になりそうだ
くろ☆ける
はす☆じゃあ
>>424 後からソースコードに推論した型の宣言文を自動で追加するツールが欲しい
>>431 ちょろっとがんばれば作れそうだが俺がやるとマクロ展開済みになっちゃった後みたいな悲惨な事になりそうで鬱だ
コンパイラが型推論してくれてるんだから、その情報を吐き出してほしい
秘密のオプションとかないのだろうか
Clojureはコンパイル時に型推論はしてないんじゃないの?
ということは、自動化は無理だな…
JVMのバイトコード生成してるなら、javaの逆コンパイラjavapを利用してjavaのスケルトン生成して、それをパースして型を記述できないだろうか
型情報を静的に確定したバイトコードを生成しない
型安全性のためじゃなくて、パフォーマンス向上のための型推論なら、数値周りとstaticなメソッド呼び出し、型ヒントをつけたオブジェクト周りはやってくれたはず。
普通の関数呼び出しは型情報がなくても、invokeinterfaceにコンパイルされるから十分速い。
速度よりも、保守のために型の情報がほしい
1年後に関数見ても関数名だけじゃ何やってるか分からない
>>436 引数フィールドがObjectじゃ涙目になるしかなかろう
JVMのバイトコードまで追いかけるくらいならs式状態で追い回す方が楽だよ
カタカタ言ってる奴って何ガタガタしてんの?なんか麻薬が切れた中毒患者みたいに見える。
LISPで型を意識しながら作るってのは普通だけど、
なるべくシンプルに作ることを心がけてる?
うーん。3点
>>441 プログラムを作るのは自分だけじゃないから
他人の作ったプログラムも解読しないといけないから
自分の作ったプログラムでさえ何やってるのか忘れるというのに
型なんてコードを追いかける上で大した情報じゃないとおもうけどなぁ
型があると楽なこと
・オブジェクトを定義してるソースファイルをすぐに特定できる
・ユニットテストやるときにコードをブラックボックスにしてテストデータを自動生成できる
・勝手に型変換されてないかチェックしやすい
LightTableがkickstarterでスタートアップ資金20万ドル集めたり、Yコンビネータにスタートアッププログラム参加を認められたり。
商用IDEでClojureが話題になるとは思わなかった。
Clojure Programmingって本 1.3.0以上対応の本なんだね。
型推論でも静的解析でもないけど、
seesaw.dev の show-options や show-events は便利だと思った。
>>450 使いたい人が限られる状況だね。おっしゃるように
pythonライブラリ群を利用したい人みたいだね。
丁度、lispでjavaライブラリ群を使いたい人がclojureを始めたようにね。
末尾最適化ってJVMの都合でできないという話だったけど、マクロでできるならコンパイラでもできるのではなかろうか
限られたパターンに限ってループに変換することなら可能なんじゃない?
例えばSchemeの仕様が要求してる、可能なパターンにおいて全て最適化せよ、
という要求は満たせない、という意味かと>できない
トランポリンするコードへのソースコード変換
>>454 なんでできないんだろう?
JVMのインストラクション見てる限り不可能じゃなさそうだけど、クラスローダに却下されるんだろうか?
どの命令で出来るっていうんだよw
.NETでHaskell、という処理系も無理、とかいう話なんだよな。
>>458 仮に末尾最適化がJVMの都合でできないとしたら、JVMの計算能力は、目の前のPCのCPUの計算能力と異なるということではなかろうか
同じPCで動くSchemeのコンパイラは末尾最適化するから
組み込みでも動くように設計してるから、JVMは理論的な計算能力が低いということだろうか?
計算能力って?
>>462 それだと「末尾ジャンプ出来ないとチューリング完全ではない」と主張していることになる。
しかしそうではない。
チューリングマシンは無限長のメモリ領域を仮定するよね
動的メモリ操作が出来れば末尾再帰は仮想的に実現できる。
JVMの命令で直接実現するのは無理。
次の仕様変更のテーマの一つ。
ポインタというか、
リストか、
スタック二本(トランポリン)あれば、
実現可能。
>>471 マジか!
でもなぁ、実際仕事で使うときってJava側ライブラリとかつかっちゃったりするから単体の移植ってあんまり意味ないのが困るよね>>clojure
leiningenのCLI版も必須というか。 orz
473 :
デフォルトの名無しさん:2012/06/25(月) 02:21:58.68
いよいよJVMを切る時期が近づいてきたな
>>473 jettyかtomcatが必須なライブラリばっかり使ってるんだけどCLIだと何かいいのあるかな?
そういえばclojureCLRの紹介って、
WindowsのGUIがいじれるよとか、.netにある機能を使えるよとかだね。
JVM上で活発な機能を移植しようという話は、まだ聞かない。
ringのadaptorを用意すれば動くんだろうか。
CLRだとDBへのアクセスはどうなんの?
native clojureまだー?
>>477 リッチさんがそれは邪悪って論文かいてるやん
LLVMはアリかもしれんけど
>>478 初耳なんだが、ソースは?
そもそも論文書いてるの見た事ない。
Light Table playground試してみたけど、こりゃ楽しいな
$50でもなんでもいいから早く完成して欲しい
Counterclockwiseスポンサー付いてたのか
どんどん発展するといいな
そこまで行くなら普通にLISP使うか、ObjectiveCを使う
clojure-pyは、科学計算のネイティブライブラリー使うのにいいなと思ったけど、
clojurecみたいに全体をネイティブにするとなると、goとかシステム向けの特色が欲しいところ。
べーむのGCよりJVMのGCの方が性能よさげだと思うので実用向けというわけじゃないんじゃなかろか clojurec
>>490 そこ、発音悪い。オの口でエーと発音するんだ。orz
いやだからエーと発音してんじゃないかい?
. ゙ , ゙
ヾ .。 . 。
,゙ ./ / ./ / , -―-、
く ./ / ./ /./ ヽ
/./ ./ ̄ / /゙i⌒ヽ、| ヴェェェェェェェェwwww
ノ / ,ヽ V/ /゙ヾ/
/ 、/ ,ー´-/
=彳 |‘゚。、` ヽ。..,..o
/ ゙, ,( ゙゚、。、。、o\
/ | |ヽ ヽU o \
/ | │ \ o ∴ `ヽ8 \
│ \\U 。 ゙ 。 U 、 :l
/ ゙し、、 ・ 。 、 。 |:!
。 U\..\ o ○ U
。 ゙ o し ゙ 8 。
(・3・)エェーここなんのスレだYO
Clojureかabcl(JVM上のCL)で迷ってるんだけど、
みなさんがClojureを選んだ理由は?
何か決め手ある?
並列処理に強いって言っても、今回は細粒度の並列処理はそこまで必要性高くないんだよね。どうしようかな。
言語を選ぶ理由はひとつ。
流行ってるか、流行ってないかだ。
なら Javascript 一択だな
clojureって海外では流行ってるの?
twitterで、今やっとけばチートできる!(まわりを出し抜ける?)みたいな投稿あったけど。
abclはclを使いたいけど、JVMを使う必要があったり、ライブラリーが使いたい場合、
clojureは、clojureの記述方法が他のLISPより気に入ってたり、イミュータブルにやってみようと思ったり、積極的にjavaのツール・ライブラリーを密接に使いたいという場合になるかな。
>>499 d
とりあえずCojureをいじってるんだけど、LOLが積ん読状態なんだよなぁ。両方やりたいが頭が爆発しそうだ
ネイティブコンパイラのClojureってナンセンスだと思ってたんだけど、
冷静に考えるとIntelもHardware transactional memoryを提供する
方向に向かっていると思うし、HTMに対応できるかJVM任せっていう
状況になることを考えると、それほど無しでは無い気がしてきた。
BlueGene/QではすでにHTM実装されてるらしいし。
オライリーの翻訳本でないのかね?
でないんでない?
はやくJVMと決別しろ
The work on reducers on the JVM side has introduced version-specific implementation (using Fork/Join in JVM 7 or falling back to other means on earlier versions).
java1.4で動くんだっけ?
1.5以上が必要です。
>>512 サーバプロセスで使ったりしてる分には起動時間気にならないし普段slime(lein swank)相手だとそも再起動すること自体が少ないからこまらないが
アプリで使うには致命的なのかな
Leiningenも最初遅いよな(´・ω・`)
>>514 lein compile
とか
lein uberjar
するとき泣ける
でも
lein swankで
居続けをすれば良いことに気づいてから作り方の方を変えちゃったよ
>>506 JVMというか、JavaのAPIが使えないならLISPを使う
gem install cake
でインストールしたcake使うと、カレントディレクトリごとに
replが立ち上がりっぱなしになるのでそれなりに速い
cake旨く動かないんだよなぁ
rubyのバージョンとgemとかもう環境汚染の一種じゃなかろか
rubyはISOでなんとか規格化してくんないと今後滅ぶ物の一種だとしかおもえない(言語的には嫌いではないんだが、環境を揃えるのが苦痛になりつつある)
サービスやる人たちは、環境揃える必要は感じていてrubyのバージョン管理にrvmとプロジェクトのgemをbundlerを使ってるね。
mavenやleinningenがbundlerにあたるが。
rvmに当たる物はjavaにないけど、6,7やibmのjvmに切り替えるのも簡単だから必要ないかな。
サービスやる人たちは、環境揃える必要は感じていてrubyのバージョン管理にrvmをプロジェクトのgem管理にbundlerを使ってるね。
bundlerが、mavenやleinningenにあたり、
rvmに当たる物はjavaにないけど、6,7やibmのjvmに切り替えるのも簡単だから必要ないかな。
ニジューダー
ごめんなさい
関数への引数としてJavaのクラスを渡してインスタンス生成することは
できませんか?
http://clojure.org/java_interop を見る限り、なさそうなんですが。クラス名はコンパイル時に解決されるみたい。
やりたいことは、雰囲気としては
(defn myfunc [cls] (new cls))
(myfunc mypkg.MyJavaClass)
マクロ書かないと駄目でしょうか?
>>524 つリフレクション
(defn new-instance [klass] (.newInstance klass))
(new-instance HogeClass)
>>525 おお、ありがとうございます(`・ω・´)
Javaから勉強し直したほうがよい
Javaを抽象的に扱うことができるという利点に気付いてほしい
clojurescriptなど考えると、
javaを使うinteropとその他は切り分けて考えたほうがいいかも。
JavaしらんけどClojure使ってるよ。lispさえ知ってれば問題ない。
最近leiningenでdependencyのコンフリクトで悩んでる
1.3以降のclojureでだけなんだけど
一部のライブラリがそれぞれ依存しているjarのバージョンの微妙な差異で動かなかったりする
しかたが無いので元のライブラリのソースをforkしてローカルリポジトリで扱っているのだけど、同じような事のせいでclojarsとかに作者違いのforkバージョンがいっぱいあるんじゃないのかと思うようになった。
こういうのとりまとめてるサイトってないのかな?(みんなで車輪の再発明ならぬforkしてるというか)
前半は、毎年の調査結果と同じみたいだね。
clojureと一緒に使ってる他の言語はjava,ruby,python。
clojureが無くなったら、lispか(静的)関数型を使いたいという。
>>532 今痛感した
java.jdbcとかdatabase関係のライブラリが泣ける
clojarsみたらスゲー量のforkライブラリがあって泣き笑い中
swank-clojureいつの間にDeprecatedになってたんだ
これからはRitzってのが発展しそうなのかな
美味そうな名前でなにより
これからは、とか言ったけど2年前からあったんだな
知らんかった
>>536 同じ作者(?)のnreplっての使ってみたけど、触った感じだと結構良い。
nREPLは直接使うよりは、REPL-y等を使うほうが良いんでないかな
Ritz使いたくていれてみようとしたらEmacs22だと辛い
出たばっかりのEmacs24入れたらSegFaultで落ちることがあるので怖くて使えん
皆Emacsは23なの?
Emacs22でRitz使うTipsないかな(emacs package.elのTipsかもしらんけど)
仕事でClojure使っていたのだが、新しい案件でpure java言われて久々にJavaのみでコード書いたら辛いこと辛いこと。
hashやregexpのリテラルが扱えないのがこんなにめんどくさいとは思わなかった。
開発効率が違いすぎるのでclj解禁してくれるようにちょっと根回ししてみようと思うくらいClojure中毒かもしれない。
連休なくなっちゃうんだものなー、見積もり間違った俺がわりぃんだけどさ。
Emacs24でritz使ってみようと思ったんだけど、エラーで使えなかった。
とりあえずnreplを0.1.4にアップグレードして、
(marmaldeは0.1.3しか無いので、githubからダウンロードして
install-from-bufferみたいなやつでインストール)、
その後ritzインストールしたけど動かない。
ritz-nrepl-jack-inでエラーメッセージがminibufferに出るんだけど
スタックトレースの下の方しか見えない上にクリックとかすると
即座に消えてしまう・・・どっか別のバッファに出てないのかな?
>>542 clojure から .java ソースに自動変換するプログラムを作ってる人がいると思う
LISPからCに自動変換するプログラムがあるから
>>543 minibufferのメッセージはBufferListの *Messages*に全部積もってるからそれ見るとわかるかもよ?
ritzは1.3をママレから落としたのつかってるけど1.4だとなんか良いことあるのかな?
>>545 0.1.4を入れたのは、ritzが要求してるからなんだけどママレードには0.1.3しか
なくて、悩んだ末に一回も使ったこと無いinstall-from-buffer(だっけ)を使った
そうか、*Messages*にあるのか。見てみる。d
もしかしてritzのdependencyを書き換えたが方が早いというオチかな?
ritzのチュートリアル的なサイトってある?
>>544 .javaファイル生成する必要があるのなら、.classファイルの逆アセンブルになる気がする。
(ASM使ってる部分がどうなるか分からないけど)
そういえば、JVM,.net,pyだとclojureのコードが直接動くようにバイトコード変換する部分を作ってるけど、
js,cだと各言語に変換するのか。
ritzすげぇ、デバッグがめちゃ楽になった
>>549 ritzのバージョンがここの処毎週上がるのだが、上げたらデバッグ出来ない状態になって困った。
lein側でclojureの方はバージョン管理できるのだが
emacs lisp側がどうしようもない
nreplの nrepl-eval-requestの引数の数が違うとかで実行そのものが駄目になるとか勘弁してほしい(これは手でパッチした)>>Hugo先生
わーん、割とマジで困ってるので誰か助けて!
rein-ritz-jack-in
でrepl作っても例外で止まってくれない(SLDBモードにならない)
M-x nrepl-ritz-break-on-exception
するとウントモスントモ言わなくなる
nREPL> (throw (RuntimeException. "hoge"))
普通は↑でSLDBに入るはずなんだけどそうならなくなった
環境はEmacs24+elpa-marmaladeのnrepl, nrepl-ritz + leiningen2 preview10 ritz-0.5.0
Helpモノはいつまでに教えないと困るのか書かないとダメだと思う
news groupでも同じ質問でてたな
ritz作者のHugoからは返信きてないみたい、news groupのはMacOSだけど同じだったらJobsの呪いにちがいない
>>554 CL使ってる頃からREPLでそのまま実行してる
スクリプトを起動するんじゃなくて、自分の環境にファイル名を食わせるっていえばわかるかな?
バッチにするようなのはpython使ってる
>>555 >自分の環境にファイル名を食わせるっていえばわかるかな?
Smalltalk的だな、なんて思う自分は、まだまだ青二才なんだろう
スクリプトのファイル名の先頭に日付をつけたいです
意図がわからんけど、履歴を管理したいのであれば
gitやsvnみたいなバージョン管理システムじゃダメなの?
>>558 スクリプトごときでバージョン管理システムは使いたくないです
ファイル名前見ただけで、作った日付+内容が一目で分かってソートできるとよいのですが
シェルスクリプトとかlispとかはファイルに日付つけてたので
nreplって、leinプロジェクトの外でもrepl起動できるのか。
便利だ。
これって前からできたっけ?できなかったよね?
>>562 nrepl-3.xの頃には既にあったよ
五月くらいだったかな
>>561 ClojureTCOは、やってることは単純なCPS変換っぽいけど、変換するときにマクロ展開をしないでそれぞれの構文に対して変換処理を定義してるから、Clojureのかなり限られた範囲の構文しか使えない。
syntactic-closureは、syntactic closureとしては使えるのかもしれんが、そもそもsyntactic closureでマクロを定義するのがダルい。健全なマクロならsyntax-rulesも欲しい。
この中なら、Typed Clojureが一番成熟してそうなイメージ。使ったことはないが。
>>563 あー、swank-clojureと混同していたかも。スマソ
clojure-testモード使ってみて思ったが
コマンドラインでlein testってやるともっさりしてイヤになっていたのがウソの様に軽い
癖になりそうだ
4clojureの #120 がタイムアウトで通らない・・・なぜだ
ClojureでAOTねえ
https://github.com/frenchy64/typed-clojure/commits/master GSoCの評価が9月初めぐらいで終わってるのかなと思うけど、10月以降に0.1、0.1.1、0.1.2とバージョン上げてるな。
clojure/conj参加もあってモチベーションあがってるのかな。
> (typed.core/cf t) type checks the form t.
評価を型付きで返すもの用意されてるみたい。
> Only Clojure 1.5.0-beta1 is supported.
そうなのか〜、何が出来るかよく分からんがsample動かしてみようかな
jasper
Clojure/conj2012、はじまったか。
dripさんleiningenとかだと効果薄いなぁ
drip ps でみてみたら、コマンドラインオプションからclass名までハッシュにして、再起動してるみたいだね。
JAVA_CMD=drip lein で確認したら
/tmp/lein-trampoline-xxxxxってオプションがあるので、そこで引っかかってるね
開発中はswankに居座ってるからjavaの起動の遅さなんかまったく気にならないのだが、最後にbuildと統合testするときにモサーっとするのが悲しいのよね。
nREPL-ritzが0.6.0になってほぼ完璧なデバッグ環境になってた。
ありがたやありがたや
nrepl-ritz-jack-inしたあとにemacs抜けてもcdtへアクセスするjavaプロセスが残ってしまい、何回かやってるとメモリ圧迫しはじめちゃうのだけど
これって既知のバグ?
lein-ritz 0.6.0ね
逆にかんがえる
SoftwareDesignとかで、次世代言語の本命みたいに持ち上げられてるけど本当だろうか…
へー、ML語族のHaskell/Scala/F#には静的型チェックがあって実務向けというのは良く訴求してるのだが、
簡潔なlispと不変とREPL、Javaベースのインフラボリュームを押してくれてんのかな?
同じJVMプラットフォームの言語ならユーザベースでScalaに完全に負けてるような。
593 :
デフォルトの名無しさん:2012/12/27(木) 20:29:17.73
敗因は何だろう?
やっぱりカッコ?
それとも前置記法?
カッコ
>>593 クラスが作れない点かと。
いや、Clojureはすぐ挫折したから作れないと思ってるだけかもしれないけど。
末尾再帰最適化さえあれば…
>>595 ちょっち気になるのだが、なんで挫折したん?
身の回りだと、SLIME経由で触らせると継続して使ってくれるけどソース編集->コンパイル->実行のサイクルでやらせると挫折しやすい。
ただまぁSLIMEのためにEmacsのキーバインドでつらそうだったが>>Win系のエディタになれた人
Lispやschemeの構文が使えるけど、Lispやschemeのような最適化がないので、畳み込みを作る際にいちいち効率を考えなければならない
>227 gen-classといえばこんなのもあったな。
>>600 それうちのマシンのデスクトップの背景になってるw
>>599 そこまで最適化するのって本当に必要?
普通のコード的にはJVMのHotSpotで事足りるしそこまでするならNativeコンパイラ言語使うべきじゃ無いのかな?
Lispから見ると、再帰をジャンプに最適化してくれないと大変なことになりそうな気がするけど、そうでもないんかな?
>>598 メインで開発してる人達がJavaしかできない人達なので、
Javaからアクセスしやすいclassにコンパイルされるという条件で
関数型で手軽にプログラミングしたかった。
そこでscalaとclojureに出会って、どちらが学びやすいかなーってはじめたんだけど、
scalaの方がとっつきやすくて結局scalaしか勉強しなくなっちゃった。
こんな感じですねー。
clojureにも興味はあるんですけど、始められないままですねー。
>>604 REPLなしだとClojureの魅力半分以下だからしょうが無いかもね
Lisp系の一番良いところがまったくなくなっちゃう
100歩譲ってclojure に物凄い利点があるとしても、それをJavaでそこそこプログラミングできる人に実感させるのは難しい
テキストに載ってる例題程度のモノなら、REPLで試行錯誤するまでもなく頭の中で組み立ててJavaだけでサクサク作れちゃうし
逆に、Javaでできないことはclojureでもできないという
どこかの学部で、Javaを一切教えずに初めからclojureだけを教えるようなカリキュラムを作るまでは様子見が続くと思われる
>>606 そうかなぁ?
Clojure経由でJavaライブラリをインタプリタ(REPL)環境から触って実験とかするのってものすごく有用だと思うのだけど。
Javaで作られたインフラライブラリへのアクセスをREPL経由で簡単にアクセスできる環境って、ClojureとABCL以外に無いのよね。
BasicのREPL版が開発されずにQuickBasicやVisualBasicに進んでいったのを考えると、REPLは我々が思っているより便利ではない気がする
(Lispがあったので、REPLという発想はあったはず)
そもそもUNIXでシェルスクリプトを作るときだって、それほど頻繁にシェルでコマンドの実験をするわけではないことに気付く
今ちょうど久しぶりにシェルスクリプトをいじってるけど、
端末でちょっと動かして動作を確認とかやりまくり
シェルスクリプトは配列とかパラメータの展開関係でちょっとこったことしようとすると
実際に試してみないと安心してコーディングできんな
>>607 それならscalaで十分って思っちゃう。
scalaのREPLだとjava風に書いても動くからjavaからの人も使いやすいかと。
REPLにも出来ることの幅があるけど、
JavaのAPI確認するぐらいならGroovyからScalaまで好みだと思う。
ScalaだとREPLの作りはML系っぽいのかな?
一応、C/C++(Cint)やC#(mono)にもREPLはあったり。
強いていえばlisp系のREPLは動いてる環境を弄ったり、マクロ組んでDSL的にかけたりというのが、自然に出来るような。
ここら辺は必要なら他の言語でも取り入れられると思うけど、(Smalltalkにもある?)必要性が無かったり方向性が違うのかも。
Clojureは現代的な言語かつLispとかいうとてもすばらしいものだけど
Lisp族の括弧がとか読みづらいとか思われちゃう(食わず嫌いも入る)部分があるだけでLisp嫌いな人にはやっぱり無理なのかもね。
自動インデントと構文ハイライトのあるエディタがあれば括弧なんて全然苦にならんけどね
メモ帳でLispのプログラムを読み書きしろとか言われたらお断りしますが
>>614 メモ帳だったらまだedやexで書く方がマシなレベルw
ぼかぁ、Emacsとpareditがあればそれだけで幸せだ
REPLが便利というのは、横のtemで実験した行をそのままソースコードにコピペできます、以外の意味はないと思う
こうかくとClojureに否定的に思われるかもしれませんが、普及する言語という
のは、できるプログラマーに好かれるだけでは十分ではなく、そうではないプ
ログラマーにも敷居の低いことは要件なんですよね。逆に言うと圏論や型推論
など、一般のプログラマーには難しい理論を要求する言語というのは普及は難
しいのではないでしょうかね。もちろん完全に隠し込めればいいのでしょうが、
コンパイルエラーやデバッグなどで顔を出す限りはなかなか難しい。というわ
けで頭の良い方々が推奨されるプログラミング言語については、その普及とい
う点では否定的に見ております。なお、アカデミアのプログラミング言語を専
門とする研究者(特に優秀な研究者)が設計した言語が大きく普及しないという
のも、この辺りに遠因があるのではないかと邪推しております。
普及度よりも、論文に書きやすいかどうかが重要
>>616 そりゃ、REPLを単に端末代わりにしか使ったことがないんじゃねえの?
実行中のプログラムを実行したまま修正するとかできるのが重要だよ?
>616
Clojure+SLIMEで(SLIMEは実行Jarに入れておく)ライブデバッグとかすると全く違う感覚を得られると思うよ
Webサービスでバグが出たときに実プロセスにアタッチしても現場にソースがあるとかいうびっくりするような事とかが手軽にできる。
Lisp系言語の異常さをちゃんとJVMに持ち込んでるのがすごいんだわ。
>>620 それってplay for scalaでも普通にできるんじゃ
>>621 scalaだけじゃできないってことかね
playが使えないようなアプリの場合には同じような仕組みが別に必要だと
>>622 webサービスがscalaだけでは出来なくもないけどしんどい。
別にwebサービスでなければscalaだけでよい。
それよりclojureの良さを語ろうよぉ。
clojureって始めるまでの敷居が高すぎる気がする。
環境準備が大変すぎる。
そもそもJVMの互換性が…
>>623 始めるだけならJDK入れてleiningenスクリプトダウンロードするだけですむじゃん。
SLIME導入もEmacs24系ならパッケージ2個入れるだけだし。
Emacs24もWinですらNTEmacsで一発だし、MacはCocoa-emacsのDMGからドラッグするだけだし、Unix系なら普通にパッケージ入れればいいし
Eclipseでってなるとごめんなさいだけど。
>>625 インストールは簡単かもしれないけど
emacs自体の敷居の高さを無視されてもなあ
>>626 カスタマイズしなければ普通のエディタと変わらないと思うぞ
Quitできなくてびっくりするだろうけどw
clojure.core.reducers/* でマルチコア時代ktkr
>>632 clojure 1.0.0となっている、、、
ubuntu10.04は2010/4で、clojure 1.2.0は2010/8なのか。
>>632 defn-memoしたらすごいことになってわらた
毎回同じこと計算する一番重いアルゴリズムだから、本当に少しのことで変わるのが面白いよね。
ubuntuのclojureパッケージはバージョンごとに1.0/1.2/1.3と別れてるみたいだね。
sudo apt-get clojure{,1.2,1.3}
普段はleinだけ入れたり、ローカルにleinだけにしてるので知らなかった。
>>623 あけましておめでとう
>>622で言ってるのは、
>>620が言ってるClojure+SLIMEのような環境が、
Scalaではplayが無いとできないのね?さらにそれだとWebサービス限定だね?っという話
Clojure限定じゃないけど、Lisp環境ならだいたいどんなアプリにでも容易に組み込めるSLIMEはとてもよい
clojureのところは、コメントで更新されてるね。
そういえば、SunJDK6に比べてOpenJDK6はclojureに厳しかったか。
LispよりもSchemeをベースにしてほしかった…
あんたがschemeベースのを作ればいいじゃん?
馬鹿野郎か?
そんスキルあったらつぶやいてねーよ…
学部時代に演習でLISPでscheme処理系を作らされた
lazy stream や amb も実装したかなり本格的なモノ
そのプログラム流用してclojureでscheme処理系作ろうとしたけど、変更するところが多すぎてあきらめた
あらためてclojureとLISPは別物だと実感した
LISPでprologも作らされたけど、こっちは、ユニフィケーションの部分だけはLISPコードを根気よく修正してclojure版を実装した
DSL的な感じでけっこう使える
大学でclojure教えるところって、lispみたいに、記号処理やってprologのオモチャ作るカリキュラムなのだろうか…
>>643 どちらかというとCmmonLispよりSchemeの方に近いと思ってるんだけど、どうしてそう思う?
651 :
デフォルトの名無しさん:2013/01/13(日) 00:03:17.01
thx!
lispをclojureに自動変換するプログラムを絶対にだれかが作ってると思うんだけどな…
>>646 contribにもcore.logicやcore.unifyがあるけど
自作を使っているのはそっちには機能面で不満があるとか?
車輪の発明ほど楽しいことはない
発明は良いな。
再発明はくだらないけど。
何かを理解するために再発明するのは有意義。過程に意味があるので結果はくだらないけどね〜
core.unify って探索手法を制御できるのだろうか
>>657 make-*-fnに渡す関数によってできるんじゃないかな?
unificationをよく知らないから、関係ないところを見てるかもしれないけど
一番上のFP-OPもclojure本なのね。
タイトルからclojureだけとは思わんかった。
Java最新版に新たな脆弱性情報
www.itmedia.co.jp/enterprise/articles/1301/21/news022.html
# 米Oracleが脆弱性を修正したばかりの「Java 7 Update 11」に、新たな2件の脆弱性が報告された。
Clojure終わったな…
ただユーザ数が多いからバグ見つけた人が隠しておけないだけだと思う
ユーザ数が少なければ、黙って穴を使い続けるだけ
Javaっつーか、Sandboxの脆弱性じゃないの?
Clojureの主戦場であるサーバサイドにはあんまり関係ない話だという理解。
>>660 FP-OOPだけ読んでないなー
>>662 Sandboxじゃん
もうAppletとFXはあきらめる宣言だして欲しいわ
vaporwareまがいになるかと思ったら、ちゃんと出てたんだな。
clojure1.3みたいに、lein2もジャンプがあるんだっけ。
いつの間にかswank-clojureも非推奨になってるんだな。
nrepl.el入れてみたけどキーワード補完とかやってくれないし、
引数表示もREPLでしかやってくれないし、SLIMEからかなり退行してないか?
JavaAPIとかの非推奨とか誰が決めてるんだろうか…
>536-
あたりで、ritz-nrepl, REPL-yなど避難先の紹介があるよ。
アホな俺の頭では
>>676読んでもどういうライブラリなのかよくわからんかった。
GitHubのほうの要約を読むと
>Graph is a simple and declarative way to specify a structured computation, which is easy to analyze, change, compose, and monitor.
複雑な構造を管理しやすくするためのライブラリってこと?
頭の良いやつ解説してくれ;__;
関数やもっと大きくサービスとか変数や定数が多くなりそうな場合とかあるけど単純に組み合わせに出来るみたいな話にみえる。
nreplとREPL-yはLeiningen2の中に組み込まれててlein replするだけで使えるのか
>>676のはデータ処理のフローをマップ形式で簡単に定義できるライブラリってところなのかな
>>678のスライドpdfがわかりやすいね
Overtoneのgithubアカウントにあるemacs-liveなかなか良いじゃねえか
落としてすぐClojureハックできるし
質問です
clojureにschemeのfor-each関数相当のものってありますか?
それとgaucheのrlet1やbegin0のようなものはありますか?
最後にlet+fnとletfnの使い分けって何かありますか?
意味不明なことを書いていたので最後のはなかったことにしてください
構文は関数と同一視してよいのかわるいのか
どうも
doseq使うか自分で定義しろってことですね
rlet1とかは簡単に作れることがわかったので自分で書くことにしました
それとletfnの使い方もわかりました
>>692 ~/.m2/repository/org/clojure
の中が凄いことになってた
1.1.0
1.2.0, master-SNAPSHOT
1.2.1
1.3.0, RC0, alpha[24567], bata[234]
1.3.1
1.4.0, alpha[12345], bata[1234567]
1.4.1
1.5.0, RC[1-6], RC14, RC15, alpha[1-7], beta[12789], bata10, beta11, bata12, bata13
1.4から1.5の間はそんなに長くなかったとおもうけど確かに凄いねw
>692
MLのスレッドみても
clojure-1.5.0に移行してもそんなに問題なさそう?
(use 'clojure.core.matrix) の時点でできない
user=> (use 'clojure.core.matrix)
FileNotFoundException Could not locate clojure/core/matrix__init.class or clojure/core/matrix.clj on classpath: clojure.lang.RT.load (RT.java:443)
>>698 >core.matrix is starting to get serious as a tool for Clojure numerics. I’ve been contributing to the effort because I need it for my own machine learning work and also for some of my more fun / artistic projects like enlight and Clisk.
--- snip snip
>But in order understand the true performance potential, you would want to use an optimised core.matrix implementation, so I’ve chosen vectorz-clj for this purpose.
ってかいてあるやん
https://github.com/mikera/vectorz-clj
英語分からないけど、プリインストされてるコアじゃなくて別途APIをインストールしないといけないんかな
clojure.core.matrix って名前だからてっきりもともと入ってるのかと
contrib一覧でみると、結構coreで始まるのが多いんだね。
>>700 とりあえずvectorz-clj試した。
clojure.coreに入ってたら行列必須のプログラムでプロトタイプ作るための選択肢をnumpyからclojureに変えたくなる。
外部APIってことは、デフォルトでは matrix型は入ってないのね
schemeのgauche.arrayで作った行列演算を再利用したいけど、clojureのコードに自動変換できないでしょうか
自動変換できたとしても、手で書き直すよりずっと手間かかるんじゃなかろうか
もし真面目にやるなら、リファレンス見たらSRFI-25ベースだから、
siscかkawaに移植してそれをclojureから呼ぶというのが一番近い気はする
というか、clojureがSRFI 実装してくれないかな
>>709 IBMのJDKで通らないってどういう事情なんだろうね?
ってのは捨て置いて、Clojarsにつまんないもの公開したらいきなり四ダウンロードもらってびっくり中
clojureがIBMのjdkで動かないってことは、ベンダごとにclassファイルの互換性がない場合があるということだろうか
>>712 初版から電子版出してくれないかな、前作は両方買ったんだわ(自炊したんだけど容量でかくてさ)
defmethodにもdocstringほちい
manningのclojure in actionとjoy of clojure両方とも第二版草稿(MEAP)取り掛かってて、出版予定が秋になってた。
programming clojure 2ndとclojure programmingがclojure1.4に対応してるからどうしても欲しいわけではないけど、もう出版物では世代交代が終わるんだな。
ネット上では古い記事の方がおおいのかな。
そういえば日本のclojure関連のサイトでドメイン切れのサイトがあった、、、
land of lisp 読んだら、lisp言語の仲間として紹介されてたけどなんか異和感がある
clojureがlispじゃあなかったら、いったい何なんだ?
人生…かな
俺はLISPには萌えなんて感情は抱かないけどS式に魅入られた
それ恋だよ
洗いにして食うと旨い?
括弧があったら入りたい
自分の人生をマクロ化するとしたら、名前は何にする?
マクロ黒助
http://yogthos.net/blog/42 I've recently got signed by the The Pragmatic Programmers to write a book on web development using Clojure.
作者はcompojure系ではなく、noirがディスコンになったので変わりにlib-noirとluminusを作っている人らしい。
>>732 ClojureScriptがメインというわけでもないのか。
再帰やloopのたびに recur を入れるのが気持ちわるいです
>>736 CommonLispのloopマクロでも移植しなされ
lispやschemeから来た人にrecurの説明をするのは難しい
もしかして、JVMの制約で改善のしようがないとかいうオチではなかろうか
なぜアクターモデルを採用しなかったのか…
そもそも言語の順位がコロコロ入れ替わるという状況が想像できない
使い始めたら何年も同じ言語を押し付けられるから
erlangのアクターモデルみたいにプログラムを停止せずに更新できるようにしてくれたらなぁ…
プロセスの管理がVMというかREPLでできるようにするには、clojureとJVMの間にもう一個言語を間にはさまなければならない気がする
websocket系の実装の乱立なんとかならんのかー
というかこのあたりのフレームワークコンセンサスって全然無いのね orz
>>751 SLIMEサポート入ったら使ってみたいんだがClojureCLRってIDE関係どないなってんの?(あんまりそういうページ転がってない)
表現力に富んだ = 表現するのが難しい
Expressiveの訳としては結構いいと思うが、なんとなく文学評論的な薫りがする。
日本語でおk
としか言いようがない
ToCでは網羅的な意味でいい本に見えると思ったら、上のブログではあまりアクティブでないincanterに二章割いてるのはどうかと思うと批評されていた。
incanterの代替には触れられてなかったけどなんかあるのかね。
>>756 ちょうど欲しい事が書いてある本なので買ってしまった。
>>759 nettyがトップに来てるけどnettyベースのaleph+compojureとかも速いのかな
お、compojure表記のはjettyではなくlein ring uberwarでservletにしてresinで動かしてるね。
http-kitはec2の仮想サーバで速く、実サーバで遅いみたい。なんでだろう。
dbアクセスは、resinのconnection poolが効いているのか、
compojure表記のやつが速い。
>>764 http-kitは活発みたいだね。issueの一部の中国語がちと読めないのが残念orz
>>766 OracleJDKすげぇなARMのサーバクラスタでなんかする気なんだろうか?
サーバはネットのボトルネックがあるから処理速度はあんまり関係ない
サーバで処理速度が問題になるのは企業だと思うけど、企業がclojure使うとは思えんし
GLUTをclojureで実装しなおしてくれれば使いたい
そもそもservletの何に問題があったのか
>>776 Aleph,http-kitとかいっぱいあるけどWebSock経はかなり混沌としてるねぇ
とか思ってたのだけど、Jettyっていつの間にメジャーバージョンが9に!!!なっったん?
8見たこと無いw
最近、javaはC言語よりも互換性がないのではないかと思えてきた
昔のAppletとか今のJVMだと普通に動かないものもあるしね
Write once, run anywhere の標語をやめたのは結構前の事
pure clojureなら.Net, JVM両方で動くよ!!
って思ったがそんなものは滅多にないのであった。 ションボリ
>>781 でもWrite once, debug anywhere は健在なんだよね、こっちをはやくやめてほしい
最近debug everydayとかpatch everydayなのがなー
nrepl ってslimeより機能が足りないような気がする。replのバッファとcljファイルのネームスペースを同期させたりとかないよね?
ritzの方だよね?
787 :
785:2013/05/01(水) 21:52:27.38
>>786 ritz って何?名前は見たことあるけどよくわからないのでいれてません。
>>787 break-on-exceptionとか使えるnreplの拡張
Def news letteerで知ったのだが、ミョルニル(mjolnir)すげー
LLVMをClojureから触る、しかもシームレスとか思ってもみなかった。
発売日にかっちゃったからなー(英語版いれて4冊:日本語版紙の初版とPDF,二版のepub英語版とPDF日本語版)
Ohm社もepub版にしてくんないかなー(ちっちゃい端末でも文字大きく読めるのが楽なんだ)
>>792 リンクたどってった先のどっかでサンプルアプリがダウンロードできるから試してみろ
起動にこれだけ時間がかかるのが許容範囲かどうかは人によると思う
JVMの起動が遅いのがイヤでNativeコンパイルするclojureをCで書き始めてとりあえずcoreの一部まで動いたのだけど実に意味が無い orz
javaや.netのライブラリがお気軽に使えるのがみそなんだなぁとしみじみ思う。
やっぱそうだよね。
.net実装でも、contribほかjavaのライブラリ使ってるところの修正がいろいろあるみたいだし。
clojure本の第2版って、第1版となんか違うの?
第1版との差分だけがほしいです
>>807 3/5くらい違うから買ってあげなさいな。
>>803 rubyをやってた/やってる人たちが来てるからなんではないかなぁ。
>>809 事例を募集してて、投稿するともしかすると採用されるかもしれない。ダメもとでやってみるかな。
>>812 どっかで見た名前の人だなーと思ったらalephの人だった。
websocketですげーお世話になりっぱだわ
>>814 なんでそうなるんだよー(ああいえばじょうゆうな人なのか?)
数学の方のalephからの意味だと思うぞ。
オーム社が云々とかたまに聞いてくる人いるよね。
若い人はそもそも記憶ないんだろうけど。
ちなみにalephはヘブライ文字のAで、数学でギリシャ文字では
記号が足りないなどで使われることもある。
イスラエルでは普段使いで、中二病患者もたまに使う。
自然数の濃度のことを、アレフ・ゼロっていうよね、あれってカントールが厨二病というだけだったかと
アレフ・バー・タウ がアルファベットの語源だと誰も教えてくれなかったのだろうか…
本にいきなり「var」って出てくるけど、この「var」って何ですか?
名前空間との関係もよくわかりません
Clojure本の第2版からlancetの話がごっそり消えてたのはやっぱり不評だったからだろうか
第一版はleinningenが出来る前か広まる前で作者がDIYしてみたやつだったからね。
その後lancetがみんなで改良するということもなく、leinningenがデファクトスタンダードになった。
書籍の書き換えはそれなりに労力はあるが、利用者とおなじく最強のエバンジェリストさんには優秀なツールがあること自体が嬉しい事だろう。
clojureがSLIMEじゃなくてnRepl推奨してるのって、どういう理由?
clojureって仕様は安定してるの?
python2 のプログラムがpython3で動かなくなるような変更が頻繁にあったりする?
>>828 マクロがあるし、clojure.coreのほとんどが実はコアじゃなくて外部ライブラリだからな…
>>828 1.2から1.3へ行くときにイロイロあったけどpythonの2->3よりは大丈夫だった
つか1.3のときのイロイロのおかげで1.4,1.5と問題が出ずに移行できるようになったというか。
洋書だけど3冊新しく書籍でるみたいだな
最近1つ出たみたいだけど
日本語でおk としか…
どの環境で学習するのが一番便利?
eclipse?emacs?vim?メモ帳?
839 :
デフォルトの名無しさん:2013/07/15(月) 18:19:59.61
Lispにメモ帳は漢だな
便利なのがLightTableかemacs系のエディタだろうな
黒板
30年くらいまえは Emacs を使わせてもらえなくて
ed で lisp 書いてたんだがwWWW
# よくそんなことやってたよな < 俺
並列処理に強いとか言ってるから調べてみたけど
性能を犠牲にしてプログラムを書きやすくしているだけじゃん
Clojureのマルチスレッドプログラムでは、性能を徹底的にチューニングした
シングルスレッドのアセンブラやCのプログラムには勝てそうにない
>>842 > シングルスレッドのアセンブラやCのプログラムには勝てそうにない
10kコネクションをシングルスレッドでさばけるんだったら聞いてあげる
844 :
デフォルトの名無しさん:2013/07/15(月) 20:05:01.62
>>842 そもそも徹底チューニングCやアセンブリに勝てる言語はないだろ
みんなどういう用途でClojure使ってるの?
今までWebプログラムしかやったことがないから今一想像が出来ない。
程度の低い質問で申し訳ない。
847 :
843:2013/07/15(月) 20:33:39.39
>>846 個人的には, 変わり種のリスプ, 存在意義がわからない
Lisp系言語とウェブは結構よく合うと思う
>>847 ウェブアプリでLisp系言語の中で一番安心して使える
852 :
843:2013/07/15(月) 20:46:29.27
>>844 最近の最適化技術を舐めるんじゃねぇ
少なくとも VLIW 系の IA64 とか GPU とかだと, 人がチューニングするより
機械がチューニングしたほうが速い
ロック関連とかあるんで人の手は必要なことはあるが, 「いかにして確実に
ロックをかけるか?」方向に行くのが大半なのでスピード的には遅くなる
まぁ, 処理系の使い方が痛いっちゃ痛いんだが >> STM on clojure
VLIWはそもそもCPUの仕様に合わせて命令を詰め込んでやらないと早くならない
一般的な最適化技術とはちょっと違う
> CPUの仕様に合わせて命令を詰め込んでやらないと早くならない
これはみんなそうだろ。
VLIWは(というか、MIPSの名前のもともとも意味)では、
CPUの仕様に合わせて命令を並べてやらないと、そもそも正しいプログラムにならない。
間違ったプログラムだろうとCPUは全力で実行する、というのがVLIW。
IA64では特殊なルールに基づいて命令を並び替えてパックするとかだったな
それをしなくてもとりあえず動くけど効率が悪い
でも汎用CPUではこれ系の技術はオワコン
最適化はJVMにお任せ、が基本姿勢じゃないの?
個人的にはモダーンなLispとして悪くないと思ってるけど。
>>852 この流れでIA64とかVLIWの話にもってくのはどうよ?
862 :
843:2013/07/15(月) 22:19:54.53
>>860 その他は前振りで, 言いたかったのは STM の使い方が痛い!!!
「STM の使い方が痛い」じゃ何を言いたいのか伝わってこないんで
もうちょっと具体的にどうぞ
>>862 頻繁に排他的変更がされるクリティカルセクションのかわりにSTM使ったら駄目ってのは承知の上での「痛い」ってことかい?
チラ裏日記
>>861 MLの分散環境のトピックをなんとなく目を通してたら、ポラックさんが突然scalaのツールの話をしだしてビックリした。
そしたら最後に言いたいことが書いてあって、時間があったらcore.async使って自分がscala向けに実装したような分散実行ツールを作りたいという話だった。
>>844 教育コストや保守や移植コストまで考えれば…
なんでアクターモデルをデフォルトにしなかったのか
おっと、すごいポカをしてる。
実際は競合少ない場合に粗粒度のロックをSTMに置き換えることで、
細粒度のロックと同じパフォーマンスを出すことか。
>>869 結局アクターモデルは実装しなかったけど、
Goで使っているチャンネルを最近core.asyncに実装したので、そっちが急速に広まってるみたい。
872 :
デフォルトの名無しさん:2013/07/16(火) 00:02:52.27
>>845 この前データ解析の本でたぐらいだからClojureで解析しようとしたけど
javaとかscalaとかにそこまで離されるのか
性能が必要ならはじめからC/C++を使うべきだな
自分で速いコードを書けなくても、ライブラリとかで誰かが書いてくれているかもしれないし
チューニングしたら確実にC/C++のほうが性能高いんだから
組み込みをlispっぽいのでプログラミングしたいときはclojure一択だと思う
>>872 裏がjavaやC++でほとんどそっちで実行時間とるなら、あまり変わらないとおもう。
処理にハードディスクアクセスが入ると、実行速度はあんまり変わらないと思う
SSDの登場で状況が変わったよ
ハードディスクがボトルネックにならないアプリが増えて
メモリアクセスやCPUの性能を引き出すことが重要になった
まあ、それでもJavaやClojureの性能なら十分なんだけどな
>>872 数値計算がネックになるならそこだけjavaで書いちゃう、型指定してclojureで書き込むよりも中置記法の式の方がさすがに読みやすいし。
;;;この2日ほど凄いカキコがいっぱいでびっくり
そういえば日本でユーザグループってまだ無いんだね?
みんなでワイワイ出来る場があればいろんな意味でもっと楽しくなるだろうな〜。
情報の集積地みたいな。
それはそうと翻訳サイトの翻訳者リストをみるとGroovy界隈の人たちだね。
883 :
デフォルトの名無しさん:2013/07/17(水) 00:21:06.94
2chが一番のコミュニティーとか珍しいな
>>827 亀レスだけど参考になった。ありがとう。
>>883 いや、プログラミング関係だとなんだかんだでみんな2chに集まるよ
途中で送ってしまった、、、
もうclojureじゃないと駄目な体にされてしまった
letとかdefunとかで[]で括る事ができないとかなりイラっとする。(一部schemeは[]が()と同格なのですげーたすかるけど)
一般的なlisp/schemeの表記を捨ててまで独自表記を採用する価値があったのか疑問だが
まあ趣味を通せるのがmy言語のいいところだしな…
coreがコアじゃないのはどうにかならないのだろうか
Arcも括弧が少ないはず。
どこの処理系作者か忘れたけど、せっかくモダンなlispを設計するなら、簡潔にして括弧を減らすと書いてた覚えがある。
>>894 Web時代なのにnroffっぽいのはどうしてなんだろう、よみにくいよ orz
>>896 この手のやつって設定が楽にできるとEC2とかで活用できるんだけど、palletとかと組み合わせていったりしないのかな?
分散処理をする言語はたくさんあるんだから、最初から共有メモリを完全に捨てて簡素化をはかればよかったのに
分散処理で本当に性能が必要ならC/C++/Fortranしか選択肢はないんだし
他の言語はいかに簡単に分散処理できるかを競うべきだろうな
Erlangみたいにメッセージパッシングオンリーでいけばよかったのに…
Fortranって早いの?
数値計算のための言語なので、スーパーコンピュータのインフラ使って最適な計算するためのライブラリ、コンパイラはそろっている。
>>903 ClojureFortran作れば大規模シュミレーションのできる言語になれるな
渋谷.cljとかぶりませんように、、、
土地名.拡張子、ってもうダサいよ
raspberry pi でrepl起動するのに1分くらいかかるぞw
Python福岡とかならいいの?
大津.pyとかなら…
えー、別に良いじゃ〜ん
>>909 一回起動しちゃえば遜色感じないんだけどな
IncanterのexeをDLしたんだけど
Clojureのverが1.2だけど1.5にできない
exeのなかのjarのなかに、clojure1.2が一緒に入ってるんじゃないかな?
incanterがどのversionのclojureで動くのか分からないけど、
leiningenとかでproject.clj弄って環境用意した方が早いんじゃないかな?
Incanter 1.5.2出たらしいぞ
>>921 ポラックさんってLift(Scala)の人だっけ?
>>921 本当に凄い人って説明もわかりやすいのね
quilを使ってるんだけど
https://github.com/quil/quil defsketchに渡した関数の中で起こったエラーを見たいんだ。
今は
(def error (atom nil))
としておいて、エラーを取りたい関数の中で
(defn draw []
(try
(/ 1 0) ;;ここでエラーを起こす。
(catch Exception e (reset! error e))))
みたいにしてるんだけどもっといい方法はないか?
quil使っている人がいたら教えてくれ。
それとquil以外でclojureで書けるお絵かきするソフトってある?
うーん、IntelliJ12.14のLa Clojureを試してみてるけど、どうも実行(ctrl+Shift+F10)が実行出来ない。
プロジェクト自体はlein new project-nameで生成して、lein pom実行後、Intellijからそのプロジェクトをインポートしただけ。
Error:(1, 0) Clojure Compiler: java.io.IOException: No such file or directory, compiling:({プロジェクトディレクトリ}/src/{プロジェクト名}/core.clj:1:1)
931 :
930:2013/08/28(水) 05:00:22.76
日本語でおk
お、ちょうど2年でスレ埋まりそうだね
へー、intelijでleiningenプロジェクトのプラグインあるのか。
プログラミングclojureの2版にmidiの話が載ってて試してるけど、英語の情報ばっかりでつらい
そもそもjava関係以外はLispの本読めばなんとかなる件
940 :
デフォルトの名無しさん:2013/09/09(月) 04:39:57.48
Clojureを理解するために学ぶべきことはたくさんある。
Lisp本からだとマクロやMOPくらいか。
他にはHaskellによる純粋関数型、JavaやGoの並行処理、Prologなど論理プログラミング、Eiffelから契約プログラミングとか。
Clojureって文法の元ネタがLispだけど目指している先ってLisp1,Lisp2とは異なると思うのよね
どっちかってーとMLに近い感じ
「java関連以外は全部CommonLispと同じです」でよかったのに
なぜ、括弧を減らさすとか余計なことをしたのか…
似た言語を作ろうと考えてる人は、「java関連以外は全部scheme(R5)と同じです」という言語を作ってください
CommonLispとは違う新しいLispを作る方が主目的で、
JVM上で動かすのはオマケだろ
>>942 それならArmed Bear Common Lispで。
だがjavaのAPIは使いたい
javaのインフラに依存しまくるつもりなので別にclやschemeじゃなくてもいいやって感じ
俺は括弧が少なくなったり[]になったの歓迎派
とは言え、今のclojureの構文が最適解だとは思ってない
letのbinding部は[]じゃなく{}の方がよかったなあ、とか思ってる
950 :
デフォルトの名無しさん:2013/09/11(水) 18:35:30.08
順番関係あるんだからマップリテラル{}はだめだろ
カッコが少なくなるのは歓迎だけどリテラル以外は()で統一して欲しかったような気もする
そうすると他言語に慣れているとはじめは見にくくなる
初心者にはとっかかりにくいからいろんな括弧多用して読みやすくしてるわけだし
953 :
デフォルトの名無しさん:2013/09/12(木) 12:42:47.59
往年のLisperにとって()に統一されてないのは寂しいのかもしれないけど、
そもそもClojureで言われるS式は厳密にはS式ではないのだし、()にこだわる意味はあまりないと思う。
defun が defn になったのには反対
久しぶりに他のlispを書くとdefun, define, defnを間違えてコンパイラに怒られる
それって、editor の keyword (色付け)で気づきそうなもんだけど
IntelliJのLaClojureプラグインにあるレインボーなんちゃらっていうオプションをオンにしたら
対応するカッコ同士がマジレインボー
>>953 それでもcond節のカッコ省きはおいらはうれしかった
つか元のLispってなんでcondのカッコあんなんなんだ?
>>959 構造を素直に反映した結果じゃねえの。
フラットにすると情報が欠落して、cond は
ニコイチって知識無しには復元出来なくなる。
処理する時のループ書くのも楽だし、
書き損じのリスクやダメージも少ない。
等ともっともらしい事を考えてみたけど。
記憶違いな気がしてならないが
ホントはCONDを修正したいってMcCarthy自身が言ってなかったけ?
関数型言語でset!系まわりが面倒くさくなってるのがlispとの違いということでしょうか
find-doc があるから書籍いらないと思う
clojure-pyってgithubのデータ見るとVersion 0.1だけど
pythonのサイト見ると0.2.4になってるけどいったいどうなってるんだ
記述が古いってだけじゃ。
githubのソースみても、バージョン埋め込んでるところはなさそう。
どちらにせよ、githubもPyPIのも一年前のままという認識で合ってる。
本屋に新しいclojure本が出てた
外部ライブラリをふんだんにダウンロードするやり方だけど、あれって、どこまでオフィシャル度があるのだろうか
>>973 本で紹介してるライブラリが消えない or 統合されない or モジュールが変わらない or 関数名が変わらない 度数
coreですら不安
975 :
デフォルトの名無しさん:2013/09/27(金) 22:49:27.51
載ってる奴全部今の段階でフォークしちまって
お前のリポジトリとして公開すりゃその条件満たせるじゃん
git や lein は嫌いなんだ…
leiningen嫌いならClojureの何が好きなの…
mavenリポだし割と安心して使えると思うが
>>977 そもそも環境がスタンドアロンで独立した状態で完結してないと不安
>>978 $ lein uberjar
そんな我儘言うなら他所の子になりなさい
多分他所でも帰れって言われるから
どこで拾ってきたか分からないモノに汚染されてると、家でやってた作業が会社でできない
また、ライブラリ群のダウンロード前提だと、作業環境のサイズが爆発する
982 :
デフォルトの名無しさん:2013/09/28(土) 00:46:45.44
コレってどの本の翻訳なの?
原本のレビュー観たいんだけども
翻訳でなくてオリジナルでしょ。
986 :
デフォルトの名無しさん:2013/09/28(土) 01:21:21.39
>>983-985 ありがとうございます
やっぱり出てないんですね著者の名前で検索してみて出てなさそうだとは思ったんですが、
海外の人なのでもしかしたら原書があるかもと想いまして。
980超えてたね。次スレ建てみる
>>983 それ書籍になったんか、ちょっと前からおっかけてたけど、GitHubだと訳文そんなになかったのに
著者と訳者がんばってんだな
明日探して買ってこよう。(でも本当はオンライン版がいいんだけどなぁ orz)