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

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

836 :デフォルトの名無しさん:2015/08/01(土) 06:09:17.52 ID:keSdeN9Q
Emacsからタグジャンプできない

837 :デフォルトの名無しさん:2015/08/01(土) 06:13:25.83 ID:8dgAmKAh
>>836
clojure-modeとciderを入れるんだ

838 :デフォルトの名無しさん:2015/08/02(日) 03:59:48.42 ID:V6PM64+2
clojureのソースを置く場所をsrc以外に変更するとciderが認識しない
https://github.com/clojure-emacs/cider/issues/950
こんな感じのエラーになる
じゃあsrc以下にclojureとjavaのコードを混在するの?

project/src
project/java

にわけるとか?

839 :デフォルトの名無しさん:2015/08/02(日) 04:19:31.77 ID:13FPdMsD
>>838
うちは
project/src/clojure-name-space-directory
project/java/path-to-package-base-directory
を標準にしてたからきがつかなんだけどそういうバグ居たのか
つってもjavaコードって速度優先のprimitive計算系のコードとか旧来のライブラリ用のPojoしか入ってないんで滅多につかわんのだけど
やはりjavaコードは単独のprojectにしてjarをmavenのローカルリポジトリに突っ込むべきなんかね?

840 :デフォルトの名無しさん:2015/08/02(日) 18:16:00.36 ID:El3q6dsC
ちょっとしたテキスト処理とかの普段使いの言語にclojureって使い物になる?
あきれるほど起動が遅すぎて使い物にならないと思うんだけど、何か裏技でもあるの?

841 :デフォルトの名無しさん:2015/08/02(日) 18:39:29.27 ID:13FPdMsD
>>840
Emacs+REPLを昔はCLでやってた、今はClojureでやってる
環境を一度立ち上げたらそれをずっと使う様にしてるからJVMの起動の遅さは気にならない(つかJVMの起動が遅いのはJavaから変わらない)

でも最近Elixirに浮気気味

842 :デフォルトの名無しさん:2015/08/08(土) 16:11:49.52 ID:sIHWU5bW
cons car cdrがないとマクロが何か使いにくい気がする

843 :デフォルトの名無しさん:2015/08/08(土) 16:15:59.58 ID:kkkSL9bh
>>842
cons はあるし car cdr は first rest だけどダメなのかい?

844 :デフォルトの名無しさん:2015/08/15(土) 01:40:55.03 ID:90IR3onH
ドットセルのことでは

845 :デフォルトの名無しさん:2015/08/15(土) 04:33:23.76 ID:qZnzjC8o
>>844
replacaとか破壊書き込み無いんだしどうしてもcar,cdrが欲しいならmapで{:car value :cdr value}で良くね?

846 :デフォルトの名無しさん:2015/08/17(月) 21:31:17.48 ID:3XTzV4r5
car, cdr は川下りの如し。

847 :デフォルトの名無しさん:2015/08/24(月) 12:53:25.74 ID:GzXb53Jk
clojureからpythonのライブラリを使う方法ないのでしょうか
numpyとかjythonで動かないものが使いたい

848 :デフォルトの名無しさん:2015/08/24(月) 12:56:19.63 ID:g5T9Gxtu
>>846
どうして?
俺にはただの語呂合わせ
知性のないおバカさんに聞こえるが
俺がばかなのか?

849 :デフォルトの名無しさん:2015/08/24(月) 16:29:58.64 ID:SHTnF8RO
>>848
いやその通りなんだが。

850 :デフォルトの名無しさん:2015/08/24(月) 18:45:47.43 ID:g5T9Gxtu
>>849
いたずらに「いや」からはじめるやつは自己中の精神病だと思うんだが

851 :デフォルトの名無しさん:2015/08/24(月) 19:37:06.37 ID:zrEdzFeo
いやそうでもない

852 :デフォルトの名無しさん:2015/08/24(月) 19:40:24.80 ID:KgOqinrw
いやよいやよもいいのうち
チンコたちますぅ

853 :デフォルトの名無しさん:2015/08/27(木) 00:26:48.27 ID:XEJ5PHRj
>847
javaからcpython使えるライブラリがあるから、
こういうのであれば、numpyの結果そのまま持ってこれるんじゃないかな。
https://github.com/mrj0/jep/blob/master/README.rst

854 :デフォルトの名無しさん:2015/08/27(木) 00:36:50.08 ID:XEJ5PHRj
jep使ってるclojureからpythonのライブラリ呼び出してる例があったけど、ロシア語が所々出てくるみたい。
参考にして、ロシア語に突き当たったら自動翻訳で英語にしたほうがいいかも。
https://github.com/hsestupin/clojure-pymorphy/blob/master/README.md

855 :デフォルトの名無しさん:2015/08/31(月) 14:29:43.34 ID:qLTFTNta
http-kitってクライアントとして使うとclj-httpより処理速かったりする?

856 :デフォルトの名無しさん:2015/08/31(月) 15:12:18.33 ID:KHlpHEgx
http://www.http-kit.org/client.html
早いかは気にしたことないけど、async出来たりするので、複数取得してまとめるなら速くなるんじゃないかな。

> Easy-to-use API, modeled after clj-http
あと、api自体はそれほど違わないと思うが、proxyなどに対応してるかはわからない。

857 :デフォルトの名無しさん:2015/09/01(火) 14:46:19.12 ID:hIVgRi+z
clj-httpからhttp-kitにして
concurrentにrequestするようにしたら3倍くらい速くなった
マジでありがとう

858 :デフォルトの名無しさん:2015/09/07(月) 15:02:38.08 ID:XFcMXbyl
SICPのClojure版出たな

859 :デフォルトの名無しさん:2015/09/07(月) 15:40:16.49 ID:Jef7Uaa2
へえー
ま、おれはSceme版でいいや

860 :デフォルトの名無しさん:2015/09/07(月) 15:47:00.11 ID:Jef7Uaa2
あ、ここクロージャスレか
しんつれいしますたぁ

861 :電波いっぱい:2015/09/07(月) 20:39:43.28 ID:PwlJ1i8i
>>858

どこ?

862 :デフォルトの名無しさん:2015/09/09(水) 23:01:39.56 ID:/2hOGL1j
http://www.sicpdistilled.com/section/welcome
まだ途中かな。
SICPをclojureに逐一書き換えたという訳ではなく、SICPの一部内容をclojureで説明したもの。

去年kickstarterでクラウドファンディングしてて、最近公開した。
https://www.kickstarter.com/projects/1751759988/sicp-distilled

RHも言ってるように、SICP全体を説明するにはclojureにはむいてないので、全部はやらないと思う。

863 :デフォルトの名無しさん:2015/09/11(金) 06:54:14.22 ID:C33hywT8
タイトルからして SICP *distilled* って言ってるんだし、全部はやらんのでは

864 :デフォルトの名無しさん:2015/10/09(金) 17:20:18.26 ID:YDe/U6R6
clojureは頻繁にリファクタリングを繰り返す開発には向いてない?
型がないと設計的な変更を避けるようになりそうだけどフォローはあるのかな

865 :デフォルトの名無しさん:2015/10/10(土) 02:42:57.67 ID:MGD+BScA
データの定義とチェックをするけど、
関数の型チェックはあまりしないみたい。
https://github.com/Prismatic/schema
https://github.com/miner/herbert


関数の型チェックは、phpみたいにIDEやlint向けだけのアノテーションにでも使えば(使える?)いいんだけど、いまのところ使いどころが難しいみたい。
https://github.com/clojure/core.typed

ライブラリ利用者としては、リファクタリングより、APIが非互換で型が変わったときにソース追うしかなくて困ることはある。

866 :デフォルトの名無しさん:2015/10/10(土) 02:46:55.61 ID:MGD+BScA
TypeScriptでJSのソースには型に全部Any型がつくみたいな問題があるけど、他にもあった気がする。

867 :デフォルトの名無しさん:2015/10/10(土) 08:24:33.67 ID:AZJ05Qb9
やっぱそういうところは難しいか
サンクス

868 :デフォルトの名無しさん:2015/11/01(日) 20:07:22.44 ID:tjf5Il2M
SICPの新約が出たよ!
http://d.hatena.ne.jp/takeda25/20151030/1446174031

869 :デフォルトの名無しさん:2015/11/01(日) 20:15:47.93 ID:x0Dl4mG4
売ってるやつの訳はとっつきにくかったからこれはありがたい
色々燃えてるみたいだけど一番良い訳を出した人が正義

870 :デフォルトの名無しさん:2015/11/01(日) 23:05:15.96 ID:PByF+5ro
原書で読むのが大正義

871 :デフォルトの名無しさん:2015/11/01(日) 23:29:27.25 ID:aNC/N0AH
ネットに全部出てるしな。
とはいえ今更英語に親しんでも……というロートルが趣味で読む分には日本語も悪くない。

872 :デフォルトの名無しさん:2015/11/01(日) 23:48:53.92 ID:X9VGfBzl
よく知らんけどSICPの原文の著作権とかは大丈夫なん?
公開されてるからって著作権フリーなわけないだろし
日本語訳を公開するのに原著者の許諾は得たのかしら
著者がMITの人間だからって発表した文章までかたっぱしからMITライセンスなわけないだしょうし
大丈夫なのかしら

873 :デフォルトの名無しさん:2015/11/01(日) 23:55:05.31 ID:X9VGfBzl
原著のライセンスはCreative Commons Attribution-ShareAlike 4.0 International License なのね
なら大丈夫そうね

874 :デフォルトの名無しさん:2015/11/02(月) 00:39:53.84 ID:dHMsk6uD
clojureを勉強して一番意味があったことは
オブジェクト指向の文法に寛容になれたことだな

C#やJavaを見て
「どうしてこんなに行数書かないと、こんな単純な実装すらできないんだ!
オレが間違ってるの?もっと短く書ける端的で最新な正しいやり方があるの?」
と模索してばっかりだった

最初からオブジェクト化に適さない、関数を詰め込んだユーティリティ(モジュール)クラスを見て
いったいなにがオブジェクトで、何がユーティリティで
その境目はどこにあるのかと、くだらないことを考えずに
ただ純粋に機能に実装すればいいんだと、Clojureの短さを見てそう感じた

オブジェクトの神秘性が完全に消えたんだ
オブジェクトは単にデータ構造と関数の詰め合わせに過ぎない
メソッドや継承というのは、単にディスパッチの手段にすぎない
そうして改めて観察することで、オブジェクト指向言語の活かし方も分かったし
関数型言語の強みというものが、改めてよくわかった

そうした意味合いでClojure(とLisp)には感謝している

875 :デフォルトの名無しさん:2015/11/02(月) 00:55:24.26 ID:3aJacJQZ
>>874
>オブジェクトの神秘性が完全に消えたんだ
>オブジェクトは単にデータ構造と関数の詰め合わせに過ぎない
>メソッドや継承というのは、単にディスパッチの手段にすぎない

CommonLispとか関数型の人間は昔からそう思ってるのだが、
OOそれ自体はどうでもいいんだ、というこの感覚は
なかなか納得してもらえないみたい

876 :デフォルトの名無しさん:2015/11/02(月) 01:01:02.40 ID:3aJacJQZ
Lispで自分でマルチディスパッチを実装してオブジェクトシステムもどきを作って見ると、
やってることの意味がわかるし、「オブジェクト」についてのよくある喩え話とセットに
なった単一ディスパッチがクソだなと思う。

877 :uy ◆Qawu9.2l1E :2015/11/02(月) 13:19:52.26 ID:5/Pq42i4
「アルゴリズムがデータ構造でしかない」までわかった次は
それを短くかく為に再帰呼び出しが有効だとわかる
全てのアルゴリズムは再帰で書きはじめる
しかしそれはループに比べて低速で複雑な再帰は末尾最適化もされないから
現実的には再帰でソースコード書いて良い場所は限られる
結局は「アルゴリズムをデータ構造」のように書く事をしてもしなくても、
最終的なコードを再帰呼び出しに出来ないならあまり意味がない
よってそういう方面から離れて非完璧方面へ歩んでいるのがC#やJAVAという言語
もう一周すればそっちの凄さがわかるよ

878 :uy ◆Qawu9.2l1E :2015/11/02(月) 13:24:03.74 ID:xhNmMlq/
JAVAとかで「クラス定義」している場所が「再帰」になる
今のPCスペックに合わせたプログラミングを極めたって
どうせパラダイム変化で灰燼に帰すから
今のハードウェアで動かなかろうと
究極的なソースコードを生産し
絶対的なCPUの演算速度が得られた暁に化けるコードをuyは書いています

879 :デフォルトの名無しさん:2015/11/02(月) 14:26:12.15 ID:LMLSqkfz
F#最強ですねわかります

880 :uy ◆Qawu9.2l1E :2015/11/02(月) 14:29:18.81 ID:QQA4QdjN
lambdaが使えれば言語は関係ない
アルゴリズムの究極的メタプログラミング
メタをメタで生成しそれをさらにメタしていくんだよ
メタするほどに速度はお察しになる代わりにソースコードだけは極限まで短くなるのです

881 :uy ◆Qawu9.2l1E :2015/11/02(月) 14:30:59.68 ID:gLS3ib7d
自分のアルゴリズムを動かすだけにスパコン欲しくなってきてる
個人で100万くらいで買える奴って性能どんくらいなのか

882 :デフォルトの名無しさん:2015/11/02(月) 14:43:06.93 ID:kfXAgSVx
x F#
o Elixir
ここ大事

883 :デフォルトの名無しさん:2015/11/02(月) 16:06:23.49 ID:Vf0g8fE7
>>877
ロジック記述の簡潔さと、cpu実行の効率性は必ずしも一致しないんだけど、そういうのを全部飲み込んだ上で、最高の知能集めてvmとjit作れば克服出来るってのがjavascriptだよ。

884 :デフォルトの名無しさん:2015/11/02(月) 17:36:40.52 ID:VA7rHB22
>>881
むかーし、ペンティアムを最初に搭載したPC-98シリーズが100万円くらいの
値段を付けていた。パソコン、今は高いもので数十万円か。

スパコンというなら桁が違うのではないか。店で買うものでもなかろう。
その金額では人に作ってもらうわけにいかないだろうから、自作かな。

885 :デフォルトの名無しさん:2015/11/02(月) 18:52:22.02 ID:GSPDOiRN
スパコンって言ったらたいてい億の単位を使うよな
というかあれは個人で所有なんてせずに時間あたりで借りるんだよ

886 :デフォルトの名無しさん:2015/11/02(月) 22:46:11.53 ID:3aJacJQZ
>>877が再帰の基本も知らんことはよくわかった

887 :デフォルトの名無しさん:2015/11/03(火) 16:02:45.04 ID:47MAD1yd
esehara が気持ち悪すぎる

888 :デフォルトの名無しさん:2015/11/04(水) 22:54:55.98 ID:8s3mVvwI
>>881
AWSとか使えばいいのかも。

889 :デフォルトの名無しさん:2015/11/08(日) 08:27:51.85 ID:YmehbHLE
>>888
1000インスタンスあったら1000倍のパフォーマンスでるような処理ならAWSは実際お勧めだと思う
Clojureだとマシン数よりコア数が多い方が簡単にスケールできるからこのスレ的には難しいかもしらん
ElixirとかErlangだとコア数よりマシン数が効くのだけど、純粋な数値計算だとものすごい遅いからこれまた難しい(IO待ちが多い処理だと有利なのに)

ManyCoreを重視してるけどManyMachineでも簡単にパフォーマンス出せるようになってほしいなcore.async

890 :デフォルトの名無しさん:2015/11/08(日) 21:35:01.30 ID:z0yAetDY
計算より通信がボトルネックなら並列計算機とかIB使ったりするんだろうけど、
単純に物量が多いだけならば、awsのemrやらとspark使ったりでなんとかなるのではとも思う。

891 :デフォルトの名無しさん:2015/11/08(日) 22:04:02.66 ID:z0yAetDY
kontraktor 3 っていう高性能なdistributed Actors の実装があるんだけど、
いまのところclojureやscalaでは(javaも)流行ってない。
http://ruedigermoeller.github.io/kontraktor/

892 :デフォルトの名無しさん:2015/11/22(日) 20:01:37.25 ID:NW0PnoYA
単純なことを聞いて申し訳ないのだが
外部ライブラリのdocを簡単に調べる方法ってないですかね
今例として探そうとしているのはclojure.data.jsonね

leiningenで依存関係を定義して、lein repl ->docで調べられるのは知ってるけど
その名前空間にどんな関数があるのかを列挙できない

逆にlighttableやLa clojureを導入してみると
その名前空間にどんな関数があるかは列挙できるけどdoc関数が使えない?

なんか勘違いしている可能性が高いけど詰まったので教えてほしいなあ

893 :デフォルトの名無しさん:2015/11/22(日) 20:04:40.49 ID:NW0PnoYA
すいません、これだけだと意図が伝わらないので補足します
具体的には
(find-doc "^clojure.data.json.*")で、全部の関数のdocがずらずら表示されて欲しいんだけど
これやるとclojure.data.jsonの名前空間の説明だけが出てきて保持している関数の表示はされないということです
なぜそうしたいのかというとdeprecatedな関数とそうでない関数の区別をしたいからです

894 :デフォルトの名無しさん:2015/11/23(月) 01:53:49.91 ID:D9Y34ii+
https://crossclj.info/doc/org.clojure/data.json/latest/clojure.data.json.html
こういうのは、組み合わせればできるんじゃないかな。
これでclojarsのレポジトリにあがってるのは見られるし、ローカルでやりたければ、似たようなツールのソース持って来ればいいし。

895 :デフォルトの名無しさん:2015/11/23(月) 03:32:36.20 ID:Tb9WhGMi
>>893
find-docは引数のregexにマッチするネームスペースのドキュメントを表示する奴なので
特定の名前空間にあるvarにマッチする関数については表示されないよ
ひつようならns内の名前一覧からclojure.repl/docを呼び出す関数自分で用意しないと駄目だとおもう
普段cider-repl使ってるからあんまりそう言うの必要って感じないけどあれば便利っぽいなぁ、書いてみようかな(さがせばありそうだけど)

896 :デフォルトの名無しさん:2015/11/25(水) 01:43:06.77 ID:7h/fcopS
名前空間で定義されてるpublicな名前の一覧が欲しいだけならns-publicsで取れる

897 :デフォルトの名無しさん:2015/12/04(金) 18:18:34.43 ID:uaMoILlJ
byte-arrayのクラス表示バグってない?

898 :デフォルトの名無しさん:2015/12/06(日) 21:32:31.19 ID:8Olb+xvH
ClojureScript2版出るのか
今度こそは翻訳じゃなくて原著を

899 :デフォルトの名無しさん:2015/12/11(金) 20:51:07.58 ID:vPkQdQym
>>892

clojure.repl/dir で特定のネームスペースにインターンされている Var 一覧が出る
clojure.repl/doc で特定の Var のドキュメントが引っ張れる
が、そもそもライブラリでまともに docstring 書いてるの少ないから
clojure.repl/source とかでソース見る方が早い
cider 使ってるなら M-. でライブラリの中に定義ジャンプ出来るし、それが一番早かったりする

900 :デフォルトの名無しさん:2015/12/15(火) 17:10:27.31 ID:QFBdnAFu
LightTableいつの間にかElectronになってる

901 :デフォルトの名無しさん:2015/12/16(水) 01:17:04.18 ID:gGq035Jk
http://lighttable.com/2015/12/10/light-table-0-8-0/
> CHANGED: We have switched to Electron from NW.js
とのこと。

902 :デフォルトの名無しさん:2015/12/26(土) 19:12:25.41 ID:+4+8NPVu
新人に関数型言語と定数性について教える羽目になったんだけど、Clojureだとどんな入り口があるかな?

;;; つかなんで自分なんだと言う疑問もつきまとうわけであるが

903 :デフォルトの名無しさん:2015/12/26(土) 20:57:36.20 ID:EJm55LSE
そもそも関数型って切り口そのものがどうなんだって感じだけど
いわゆる関数型ならHaskellの方がいいんじゃない?
Lisp未経験者だと関数型要素とLisp要素を両方理解しなきゃいけないし

904 :デフォルトの名無しさん:2015/12/27(日) 23:45:07.88 ID:ZrvCKGgP
HaskellだとどうしてもMonadの話になっちゃうし、関数型どうこうならOCamlの方が・・・。

905 :デフォルトの名無しさん:2015/12/28(月) 23:24:55.87 ID:eYzd465J
http://www.amazon.co.jp/gp/aw/d/4781912850/
http://www.amazon.co.jp/gp/aw/d/4781911609/

ocamlだと簡潔な日本語の本もあるのも
imutableなlispで教えようとするとracketかclojureあたりになってくるが、日本語で関数型を教えるとなると、資料作らないと注力し難いかも。

906 :デフォルトの名無しさん:2015/12/29(火) 00:32:05.46 ID:NgHVQYk6
>>903-905
ありがとう
Ocamlは確かに良いかもしれないですね、自分も再学習してみます。

実は自分等が使ってるのがClojureなんです(自分は下っ端の上の方、んでもってそのさらに下に新人が来るわけです)
でもって自分は好きこそ物の上手なれというかLisp系言語は以前から遊んでいたせいで違和感無くClojureのプロジェクトこなせてしまい、
java,とかP言語とかしか知らない新人に教えるのに必要な切り口やら入り口やらがまったくわからんのです。(この辺が自分が担当になるのに不適切だとへこむ理由)

情報小出しになってごめんなさい、新人が入ってくるのは四月からなのでまだ時間はあるから自分も書籍よみあさって推薦図書とかも探している真っ最中
かつパニック状態でして、自分の書き込みみて何書いてんだこいつとか思うほどです、ほんとごめん。

907 :デフォルトの名無しさん:2015/12/29(火) 14:51:23.64 ID:/YFVsl6a
>>906
相手が分からないうちにどう教えるかばかり考えてもな
今できることとしては、自分でJavaなりで一つ実用になるプログラムを書いて、同じものをClojureで書いてみるんだね
何が違いか、そもそも自分が分かっているのかが自覚できるだろ

908 :デフォルトの名無しさん:2015/12/29(火) 16:25:30.83 ID:PvAiYDv0
devopsの話からはじめるなら、達人プログラマーや最近の本などやってもいい。
clojure関連しては、repl、開発環境、leiningenもあるけど、
ボキャブラリー増やしていくのはkoansとかでも。
http://clojurekoans.com/
ここら辺の機能一覧は見た方がいいし、
http://clojure.org/documentation
実際の開発で、javaやjavaの相互が必要ならそこらへん分かるといいし、
http://clojure.org/java_interop
あとは、ライブラリやテストの話となるかな。

本でやるなら、プログラミングclojureが古くなってるので、英語の入門書も一冊あった方がいいかもね。
http://shop.oreilly.com/product/0636920034292.do
https://www.manning.com/books/the-joy-of-clojure-second-edition
http://shop.oreilly.com/product/0636920013754.do

909 :デフォルトの名無しさん:2015/12/29(火) 16:31:00.36 ID:PvAiYDv0
前もって会社から人数分の教科書代出してもらったほうがいいと思うが、会社に置いとくか配るかは、なんとも言えず。

910 :デフォルトの名無しさん:2016/01/02(土) 15:49:24.29 ID:X0SWm6Bi
関係ないが902の言う定数性がどういう意味なのか気になってるんだけど、誰か教えてくれ。
ググっても分からん。イミュータブル??

911 :デフォルトの名無しさん:2016/01/03(日) 18:33:46.58 ID:ff7EiwBI
オブジェクト志向から関数型に来るには
エリック・エヴァンスのドメイン駆動設計がいいんじゃないかな
この本を最近読み返したんだけど、オブジェクト志向と関数志向の
バランスについてうまく書かれている気がする

エリックとしてはオブジェクト志向啓蒙の書として書いたんだろうけど
あれで書かれていることは関数型のほうが自然に実装できる気がする
問題は文章が冗長なところと、アジャイル特有の扱いにくい言語が出てくるところだな
あと初心者が読む本でもない気がするからやっぱ微妙かな

912 :デフォルトの名無しさん:2016/01/04(月) 00:32:59.75 ID:BGdG54RB
あれはオブジェクト指向で満たすべき不変性を素晴らしくよく説明した良著だと思う
関数型言語のほうが実装しやすいとは言い切れないが設計に関数型のエッセンスをいかに取り込めばよいかについては白眉であった

913 :デフォルトの名無しさん:2016/01/04(月) 14:59:48.28 ID:29eVGrdT
やべぇドメイン駆動とか腐敗防止層とイーガーとレイジー位しか覚えてないわ。

914 :デフォルトの名無しさん:2016/01/05(火) 05:19:43.68 ID:6GG4/tqm
>>910
たぶんイミュータブルの事だと思われ
>>911,912
Object指向な頭でドメイン駆動読まずにImmutableなコードにしようとしてしまうとコピーコストが高いコードができちゃうよね。
Clojureのlist,vector,mapってCloneじゃなく変化差分の生成しているところとかを強調して記述してる書籍ってないのかな?(コード読めってのは無しで)

915 :デフォルトの名無しさん:2016/01/05(火) 07:11:26.90 ID:f4fgmR8a
コード読まないならClojureに限定せず普通に関数型データ構造の説明を読めばいいのでは。

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.02 2018/11/22 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)