5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  
レス数が950を超えています。1000を超えると表示できなくなるよ。

【Lisp】プログラミング言語 Clojure #3【JVM】

1 :デフォルトの名無しさん:2013/09/28(土) 11:03:28.38
JVM上で動作するLisp方言「Clojure」のスレ。

Clojure - home
http://clojure.org/
http://www.try-clojure.org/

前スレ:
【Lisp】プログラミング言語 Clojure #2【JVM】
http://toro.2ch.net/test/read.cgi/tech/1318498898/
【Lisp】プログラミング言語 Clojure【JVM】
http://hibari.2ch.net/test/read.cgi/tech/1255533519/

916 :デフォルトの名無しさん:2016/01/05(火) 07:29:17.35 ID:6GG4/tqm
>>915
コード読まずにってのはプログラミング言語に依存しない解説って意味で使ったんで、誤解させたみたいでスマン
できれば良書(英語でも日本語でも)示唆してくれるとうれしいんだけどお勧めってある?

917 :デフォルトの名無しさん:2016/01/06(水) 14:07:46.00 ID:QO+J3mMy
コアチームで書いてた初期のclojure解説スライドだと、hmatの説明はよく見かけたね。

richのスライドがイマイチ探せず。
集まってるところってあったっけ?
https://www.slideshare.net/adorepump/clojure-an-introduction-for-java-programmers
https://github.com/stuarthalloway/clojure-presentations/downloads

918 :デフォルトの名無しさん:2016/01/06(水) 14:42:18.83 ID:+GXK6sa1
実際にhashmap操作してるところの詳しい図説とかあった気がするけど、見つからず。

改良版が見つかったみたいで、ちょっと話題になってる。
http://blog.acolyer.org/2015/11/27/hamt/
http://dev.clojure.org/display/design/Release.zFuture

919 :デフォルトの名無しさん:2016/01/06(水) 21:40:29.86 ID:fHiB8twj
効率的な不変データ型構造はideal hash treeの論文とかを参考にしたんじゃないっけ
名前からするにこれはマップの実装だと思う

vectorについても確か別の論文を参照していたはずだが、名前を忘れた

920 :デフォルトの名無しさん:2016/01/06(水) 21:41:51.79 ID:fHiB8twj
あとどっかでmapは二分平衡木で実装されてるってのも見た気がするな

921 :デフォルトの名無しさん:2016/01/07(木) 00:25:20.65 ID:5kcmX1Qf
>>916
「Scala関数型デザイン&プログラミング」っていう
オブジェクト指向言語のScalaで関数型っぽい事にチャレンジしてみましたって感じの本がオススメ。
始めにScala言語の記法を解説しながら単方向連結リストを実装、
その後無駄な計算をしない為の遅延リストの作り方や並列処理構造・コンビネータなどを作った上で、
それらのデータ構造をさらに抽象化した関手などを実装して行くって流れなので、Scalaを知らなくても全然読めます。

ただ、この本の少し先をScalaでやろうとするとScalaの表現力の無さに絶望しますが。。。

922 :デフォルトの名無しさん:2016/01/07(木) 10:24:33.73 ID:dV4P966A
上のスライドだと32-34ページに
http://www.slideshare.net/adorepump/clojure-an-introduction-for-java-programmers

32. Persistent Data Structures
• Immutable, + old version of the collection is still available after 'changes'
• Collection maintains its performance guarantees for most operations
• Therefore new versions are not full copies
• All Clojure data structures persistent
• Hash map and vector both based upon array mapped hash tries (Bagwell)
• Sorted map is red-black tree
33. Structural Sharing
• Key to efficient ‘copies’ and therefore persistence
• Everything is final so no chance of interference
• Thread safe
• Iteration safe
34. Path Copying

923 :デフォルトの名無しさん:2016/01/09(土) 22:04:08.48 ID:zxrZwk9x
LightTableがErectron化して大分いい感じになってるな
Atomより使いやすい

924 :デフォルトの名無しさん:2016/01/11(月) 00:36:20.46 ID:VkRRM6DP
勝手にerectしてもらっちゃ困りますけどね

925 :デフォルトの名無しさん:2016/01/16(土) 11:40:10.04 ID:NQXxqmGZ
元々 Lisp + immutable みたいな宣伝されるからコンスセルを想像するんじゃないかな

926 :デフォルトの名無しさん:2016/01/16(土) 11:43:57.30 ID:NQXxqmGZ
言葉足りなかった。説明がなくてもコンスセルを連想する、の意味

927 :デフォルトの名無しさん:2016/01/18(月) 15:50:53.02 ID:b/h+vel4
HikariCPのロゴ見てると何とも言えない気分になるな
ネイティブが日本人の英語名ライブラリ見るときもこんな気分なのかね

928 :デフォルトの名無しさん:2016/01/25(月) 23:04:08.20 ID:uLOkekXP
typed clojure や plumatic schema はどんなもんですか?
型付きlispって話題にならないのですか?

929 :デフォルトの名無しさん:2016/01/26(火) 01:07:42.01 ID:4P/8QI2U
ちゃんと計測した上で、必要ならtype hintつけるし
型チェックが必要ならそうするまで

930 :デフォルトの名無しさん:2016/01/26(火) 01:12:37.06 ID:fLwBjkWJ
schemaは、xml schemaみたいなもんかなと。
データ(ドキュメント?)のバリデーション用途で、
用途的にもジェネリックではなく固定されるので型アノテーションもやってくれる。

lispの型推論とかは、shenとかtyped racket、typed clojureとかあるけど、ジェネリックみたいなの含むため、静的型付けするわけではなく、高速化はしない。
あと、コアライブラリに対して、typescriptのd.tsファイルみたいなのがある訳ではないので、(あってもどこまでできるかというのはあるが、)範囲は狭いはず。


clojureみたい(lispみたい?)に、動的言語に型アノテーションつけるのは、ちょうど流行ってきてるみたい。

931 :デフォルトの名無しさん:2016/01/27(水) 16:34:50.32 ID:Y3ed6r+r
ClojureでVPSにWebサービスを立てるときって
uberjarしたjarをVPS側でjava -jarして
nginxで80を3000(jarが起動するPort)にリバースするだけでいいの?

932 :デフォルトの名無しさん:2016/01/27(水) 16:44:07.32 ID:nOSDiMZQ
>>931
問題ないよ
awsでELBも使うならポート番号差し替えるだけで良いからnginxすらいらない(staticファイルあるだろうからそっちをどうにかするって事の方がデプロイ時にめんどくさいかもね)

933 :デフォルトの名無しさん:2016/01/28(木) 00:13:56.24 ID:3RvzDSbC
herokuもそんな感じであげたりする。
portが変わったりするので、昔はProcfileで環境変数指定したりした。

いまは、lein herokuってのがあるんだね。
https://devcenter.heroku.com/articles/deploying-clojure-applications-with-the-heroku-leiningen-plugin

934 :デフォルトの名無しさん:2016/01/29(金) 22:51:01.29 ID:YK9TzO4/
>>921
ちなみにどういうところが表現力低いと感じる?>scala

935 :デフォルトの名無しさん:2016/01/30(土) 02:25:24.66 ID:MfxV3bNM
land of lispのコードをclojureで書くってブログのコード消えていた。
前はあった。
あれ参考にしながらcommon lispとclojure同時に勉強しようと思っていたから残念。

936 :電波いっぱい:2016/02/01(月) 06:48:44.66 ID:iITfW2yZ
>>935

CLとclojureを両方同時に勉強するのは大変だと思う。
基本的な考え方が、かなり違うから。

937 :デフォルトの名無しさん:2016/02/01(月) 10:21:51.93 ID:viFYU2Ui
>>932
thx
日本語の情報だとHerokuばっかでVPSの場合がいまいち確証が持てなかったんで助かった

938 :デフォルトの名無しさん:2016/02/02(火) 05:02:05.41 ID:ePEtCP+F
>>936
935とは別人だけど、そんなに違うもんなの?
まだ本当に触りしかやってないけど、関数名とかの違いだけで、概念とかにそこまでの差は感じられないな

939 :デフォルトの名無しさん:2016/02/02(火) 10:33:02.57 ID:F+BpmlFQ
ClojureはLisp-1、データが不変、何でも遅延評価なところで書き方が変わる

↓でちゃんとまとめてくださってる
https://sites.google.com/site/clojurejapanesedocumentation/home/reference/lisps

940 :デフォルトの名無しさん:2016/02/02(火) 20:34:14.57 ID:2heLfAb0
何でもは遅延しないわよ。遅延するものだけ。

941 :デフォルトの名無しさん:2016/02/02(火) 20:40:48.46 ID:u0ZREARr
こういうのは同時にやる俺凄くねってだけだからなあ

942 :電波いっぱい:2016/02/02(火) 21:25:09.45 ID:JPo4W//F
まとめに書いてあることって、まあ、その通りと思うけど、CLって真にマルチパラダイムな言語であるのに対して、clojureは、関数型言語であることが一番の違いだと思う。

だから、clojureらしい書き方というのはあるけど、CLらしいってのは無くて
C使う人かこう書きたいと思う方法でちゃんと書くことができる。

943 :デフォルトの名無しさん:2016/02/02(火) 22:56:43.66 ID:9WMu+hA1
clojureの作者もこんな感じの事いってる。
http://d.hatena.ne.jp/katzchang/touch/20120211/p1
lispから引き継いだところと、捨てたところがあるので、litle schemerとかの本から持ってきてもうまく実装出来ない場合もある。

944 :デフォルトの名無しさん:2016/02/04(木) 08:45:20.39 ID:0n3FRGss
ClojureとCL両方やると、CLがいかによく考えられた言語であることが分かる。
Clojureは、細かい挙動が曖昧な部分やどこにも記されてないコアチームの暗黙的な知識が多いように思う。
CLは、大抵議論が尽くされていて、仕様として定まっていて、仕様関連資料を読めばよい。

Clojureは、CLに比べて、シンプルで、簡単であるように思っていて、
JavaやJavaScriptが競合となるWebシステム、Webアプリ領域では、開発環境やライブラリの充実度から見ても無双状態かもしれない。

ただ、開発環境含めてリソース食いで、プログラムの起動時間が長すぎて一部クライアントアプリには向かないし、ハードの性能を絞り出すのにも不向き。

945 :デフォルトの名無しさん:2016/02/04(木) 12:49:32.34 ID:fYtnlKxz
いや、でもCLは混乱するよ。初学者としては。C++並に複雑に見える

946 :デフォルトの名無しさん:2016/02/04(木) 16:49:53.79 ID:0n3FRGss
「仕様として定まってないので混乱する」vs「仕様を知らないから混乱する」による見え方の違いかもしれませんね。
Clojureは前者、CLは後者。

947 :デフォルトの名無しさん:2016/02/05(金) 16:52:53.80 ID:kM+NK6dn
play-clj、または、生libGDXでClojureによるクロスプラットフォームなモバイルアプリ開発をされた方いますか?
特に、起動時間やリソース使用量含めたパフォーマンスがどうなのか気になるところです。
play-cljは、iOSサポートは現在やめてしまったようなので、生libGDXを使うことになるかもしれませんが。

948 :デフォルトの名無しさん:2016/02/07(日) 00:26:47.10 ID:4QXOAnIu
RoboVMが、有償ライセンスないと使えなくなったのが原因かなと。
libGDXも影響は受けてて今後RoboVMの有償ライセンスが必要になってくる。
https://github.com/libgdx/libgdx/wiki/Setting-up-your-Development-Environment-%28Eclipse%2C-Intellij-IDEA%2C-NetBeans%29

BugVMという公開コードからポートしたプロジェクトもあるが、今後新しいiOSに対応できるのかなど状況がわからない。
http://bugvm.com/

あと、RoboVMがlibGDXのスポンサーになってるのもあるので、
libGDXのBugVM対応あるとしても、BugVM側でポートして対応することになるかなと。

949 :デフォルトの名無しさん:2016/02/07(日) 01:03:23.32 ID:4QXOAnIu
いちおうbugvmにbinding入れてるっぽい。
https://github.com/bugvm/bugvm/tree/master/libgdx

950 :デフォルトの名無しさん:2016/02/07(日) 01:11:34.22 ID:4QXOAnIu
centosみたいに有償が成り立った上での存続にはなるんだろうけど、
作業自体は大変そうなので、継続できるように何か援助したいが、どんな状況なんだろうね。

951 :デフォルトの名無しさん:2016/02/07(日) 04:05:41.80 ID:afxS0p+G
BugVM初めて聞きました。情報ありがとうございます。

RoboVMのライセンスの件、リンク先を見る限り、必ずしも有料ではなくて、
・3人以下のチームの場合、無料でインディーライセンスキー発行
・3人より大きいチームの場合、問い合わせが必要で、有名ゲームスタジオは有料になるが、そうではない場合、人数関係なく無料
・商用可
・ライセンスキーは無期限有効

また、play-cljがiOSサポートをやめてしまったのは、lein-fruitが動かなくなったのと、実機での動作に問題がありそうと説明してますね。
https://github.com/oakes/play-clj/releases

952 :デフォルトの名無しさん:2016/02/07(日) 04:43:54.31 ID:afxS0p+G
あと、ClojureScriptになりますが、Cocos2D-JSによるJSとネイティブコードのハイブリッドアプリという選択肢もありそうですね。
主にCocos2D-html5を使ってブラウザ上で開発をし、リリースの際には、Cocos2D-x JSBを使ってハイブリッド化。

953 :デフォルトの名無しさん:2016/02/07(日) 20:32:38.50 ID:8pvMtac5
なるほど、RoboVMはインディーズライセンス発行できるんですね。

robovmでiOS9,xcode7への対応と諸々が秋頃にあったので、それ以降に作者さんがメンテしてないか、対応出来なかったかのどちらかも。

954 :デフォルトの名無しさん:2016/02/07(日) 20:34:13.83 ID:8pvMtac5
953の部分は、lein-fruitが動かない理由についての話です。

955 :デフォルトの名無しさん:2016/02/07(日) 20:43:24.24 ID:8pvMtac5
clojureとは直接関係ないのですが、
javafxportsの方は年初にメンテしてて動くようになってました。

https://bitbucket.org/javafxports/javafxmobile-plugin
https://bitbucket.org/javafxports/samples
https://bitbucket.org/javafxports/javafxmobile-plugin-ensemble

試した感じだとiosのアプリ証明書まわりの動きが、RoboVM直と違いちょっとおかしそうでしたが。

956 :デフォルトの名無しさん:2016/02/07(日) 22:51:41.81 ID:8pvMtac5
別ブランチ切って、robovm-studio(1.9.0-)対応作業としてやってたみたいですね。
試してないので、動くか分からないですが。
https://github.com/oakes/lein-fruit/commits/robovm-studio

11/19にコミットが有りますね。
https://github.com/oakes/lein-fruit/commit/1490e38649b5a71a92d1e924a2cf1a2b2beb0376
構成が変わっただけなら、これだけでいいのかな。

lein-fruit 0.2.4って書いてありますが、clojarsには0.2.3までしかあげてないので、
試すには、本家とはべつにローカルか別名のリポジトリ作成してやる必要がありますね。

957 :デフォルトの名無しさん:2016/02/08(月) 15:20:13.39 ID:fZyGkNbq
いろいろ情報ありがとうございます。

JavaFXPorts追ってなかったので見てみましたが、iOS用にはRoboVMを使っているんですね。また、Clojureがそのまま動くのか気になるところです。

ちなみにですが、Clojure1.8のダイレクトリンキングによる起動時間とJARファイルサイズへの影響を手元のMac上で簡易的に調べてみたところ、Clojure 1.7.0 -> 1.8.0では、
・起動時間が約0.3s短縮
・JARファイルサイズが約230KB小さく
とかなので、モバイル端末実機でも効果を期待できそうです。

あと、Clojureと生libGDXで作られたというゲームをAndroidタブレットの実機で遊んでみましたが、
ダイレクトリンキング以前の状態でも、起動時間は許容範囲で、ロゴを表示することで、大して気にならない感じです。
また、その他ゲームプレイもClojureを一切感じず軽快でした。
ゲームが開発された当時は、libGDXとRoboVMの連携が無く、無料で簡単にiOS版をリリースする方法が無かったので、Android版だけのようです。

「Bounce Away」
https://play.google.com/store/apps/details?id=com.friendlyvillagers.ballz&hl=en

958 :デフォルトの名無しさん:2016/02/19(金) 17:16:41.79 ID:/EKT/6se
EmacsでlispにどっぷりはまってClojureに辿り着いたよ
・調べたところ結構方言が強いみたいだけどみんな違和感無いのかな?better lispになってるかな?
・Emacsでの編集は快適かな?
まだ使ってないからこの辺りが知りたいところだけど、手の空いた時にでも
教えてもらえると助かります。

959 :デフォルトの名無しさん:2016/02/19(金) 21:29:40.96 ID:0R2jEsLy
>>958
emacs+ciderで幸せ
break pointはよ(昔はswank-clojureでできたのに)

960 :デフォルトの名無しさん:2016/02/20(土) 15:11:04.21 ID:NsOi1z3Q
CIDERにもbreakpointあるよ。

Clojureは良くも悪くも、より抽象化されたLispという印象かな。
State of Clojure 2015によると、Clojure界で一番人気あるのがEmacs+CIDER(約45%)で、次がIntelliJ+Cursive(約25%)。
どちらも業務に使えるし、快適ですね。

961 :デフォルトの名無しさん:2016/02/20(土) 17:24:53.45 ID:JX9OE3S7
>>960
え?マジか、defaultのkeyboard bind何になってる?(キーバインド無し?)
swank-clojure -> ritz でお世話になった後ciderになってbreak関係無くなってションボリしてるんでどのバージョンから使えるかもプリーズ

updateとかの後に.elファイルまで読まないから全然気がつけてないんでマジでお願い。

962 :デフォルトの名無しさん:2016/02/20(土) 20:08:32.16 ID:SJ1YLAR4
https://github.com/clojure-emacs/cider/blob/master/README.md#debugging

ciderかは忘れたけど、ns変えてやらないとブレークしないという話を聞いたことがある。

963 :電波いっぱい:2016/02/20(土) 23:37:36.42 ID:bGD6QKVk
>>958
CommonLispが好きでずっと使ってたのにClojure鞍替えした者ですが、Clojureは全てのひとにとってのbetter lispではありません。見方によっては全く違う言語とも言えます。
ですが、LISPというのは懐の広い言語ですので、ClojureもLISPです。関数型に振られていて、javaの資産が使えて、活発なコミュニティーがあるというのが特徴かな。

僕にとってはまさにbetter lispだったので、メインの言語として使ってます。

964 :デフォルトの名無しさん:2016/02/21(日) 01:08:40.47 ID:/soU/W5W
設計の意図を探してきて読むと違いに対する違和感は減るかも。
https://sites.google.com/site/clojurejapanesedocumentation/home/reference/lisps
http://www.geidai.ac.jp/~marui/clojure/rationale/

上の日本語訳は結構前かな。よく使われる機能は変わってる場合もある。

965 :958:2016/02/22(月) 17:10:14.60 ID:OQxBKkBP
>>959-964
遅レスですまんが、みんなciderとか色々教えてくれてどうもありがとう
その辺りから色々調べてみると、意外と業務で使ってるところがあってびっくりした
JDK使ってるってのが大きいと思うけど、この時代にLispが選択されるというのも凄い事だ

263 KB
新着レスの表示

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50
名前: E-mail (省略可) :


read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)