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/

796 :デフォルトの名無しさん:2015/07/04(土) 10:31:13.07 ID:vGUPxdrf
そりゃJVMと一蓮托生よ

797 :デフォルトの名無しさん:2015/07/04(土) 11:27:28.07 ID:1j8Z8n9B
理想としては

leinとproject.cljをjavaのインターフェイスとして使って
主体のプログラムはkawaで書いて
racketとも互換性があるようにしたい

798 :デフォルトの名無しさん:2015/07/04(土) 15:17:09.17 ID:n0O10IcO
意味不明
せめて例示を

799 :デフォルトの名無しさん:2015/07/04(土) 18:06:24.23 ID:ThPkJ/+I
そこまでしないといけない理由が全く持って分からないし、Scheme処理系なんてそもそも互換がお互いにほとんどないじゃん。それもRacketとかRacket languageだし。

800 :デフォルトの名無しさん:2015/07/04(土) 21:51:58.00 ID:V2uWXOcR
>>795
移植性が高い = コンパイラ・インタプリタがインストールしてあれば、ソースコードをコピーすればそのまま翻訳実行できる

いままでの経験上、一番移植性が高いのはC言語
Javaは…

801 :デフォルトの名無しさん:2015/07/04(土) 22:12:12.38 ID:0/RKLMEi
>>800
JVMがあればそのまま実行できるじゃんよ
ClojureとClojure CLRだとJVM依存ライブラリ(jettyつかってるとかapache commonsとか)があるとソレの移植からになるのを懸念してるの?

802 :デフォルトの名無しさん:2015/07/04(土) 22:16:40.32 ID:V2uWXOcR
>>801
javaはそもそも10年前のコードがコンパイルができない

clojureはleinみたいなモノを使わないと、ライブラリで何を使ってるかすら把握できない

803 :デフォルトの名無しさん:2015/07/04(土) 22:32:24.41 ID:n0O10IcO
>>800 >>802
Cで同じコードがそのまま動くなんてラッキーくらいの感覚だけどな
まあこの10年だけで考えるならワードサイズも32bitでよかっただろうし、リトルエンディアンだけ考えてれば十分だったのかもしれないけど

で、10年で見るならJavaだって似たようなもんじゃないかと思うがコンパイルできないってどんなコード?

804 :デフォルトの名無しさん:2015/07/04(土) 22:44:01.81 ID:0/RKLMEi
>>802
C はAutoConfがー
RubyはGemがー
他多数

ですが?

805 :デフォルトの名無しさん:2015/07/04(土) 22:50:07.63 ID:ItRolA6R
Javaについては、90年代のプログラムをコンパイルしようと思うと
コレクションフレームワークのところでコケるかもしれない。
それ以外は大丈夫だと思うけど。

806 :デフォルトの名無しさん:2015/07/04(土) 23:11:09.88 ID:V2uWXOcR
>>803
・文字列処理(java.lang.Characterのメソッド)
・文字コードで分岐する処理
・日付(java.Dateのメソッド)
・型チェック(警告いっぱい)
・<>指定しないとコレクション使えない点

807 :デフォルトの名無しさん:2015/07/04(土) 23:16:12.23 ID:V2uWXOcR
>>804
Cは、10年前に gcc file.c でコンパイルできてたモノが、コンパイルできなくなるなんてないしな…

Rubyにはそもそも互換性なんか求められてない

808 :デフォルトの名無しさん:2015/07/04(土) 23:33:17.97 ID:ItRolA6R
>>806
10年前には当たり前なことだらけなので、
当時のコードを書いた人の技術力が足りなかったのでは。

809 :デフォルトの名無しさん:2015/07/04(土) 23:42:10.87 ID:n0O10IcO
>>807
gccの動く環境だけで移植性を語ってたのか・・・
つかgccが動いてもCPU次第だし標準ライブラリのみでやってたわけじゃないと思うけどな

810 :デフォルトの名無しさん:2015/07/04(土) 23:43:41.89 ID:V2uWXOcR
>>808
それより技術力が低いときに作ったはずのCがきちんとコンパイルできてるんだから、教訓としては、できてから10年しか経ってない言語で書くなということでしょうね

811 :デフォルトの名無しさん:2015/07/04(土) 23:47:10.33 ID:V2uWXOcR
>>809
gccが動けばOKというのは心強い
WindowsとUnix関係なく移植できるし

ライブラリの話までしだしたら、javaは標準APIの階層から変わってるしな…
clojureにいたっては、ネットワーク接続して頻繁にライブラリ更新するのが当たり前だしな…

812 :デフォルトの名無しさん:2015/07/04(土) 23:55:48.86 ID:n0O10IcO
>>806
> ・文字列処理
CSIなCと比較できないっしょ

> ・文字コードで分岐する処理
基本的に上と同じ指摘になるが、そもそもどういう処理だとJavaでコンパイルできない?

> ・日付(java.Dateのメソッド)
Cなんかtime_tのサイズも違うし分解能もプラットフォームごとにいちいち考慮するぞ

> ・型チェック(警告いっぱい)
このあたりは既に >>803 で指摘したとおりだが、そもそもdeprecatedなメソッドはちゃんと警告でるだけかなり親切だと思うがな

> ・<>指定しないとコレクション使えない点
使えない?

813 :デフォルトの名無しさん:2015/07/05(日) 00:01:50.24 ID:EDD7h1SP
>>811
ずっと規格とか言葉の定義があやふやなままだけど、gccが動くってのもGNU tool chainが動くって意味だね
Unixって書いてるけど本当にUnixなら間違いだし知ってて書いてるとは思えない

自分定義で移植性を語るならもう少しみんなに分かるように定義してくださいね

814 :デフォルトの名無しさん:2015/07/05(日) 00:16:09.10 ID:6U0/+Enp
>>813
ここでの移植性を次のように定義すればどうでしょう

大学の演習で処理系に付属しているAPI以外を使わずに作成した
・行交換するGaussの消去法のプログラム
・自作Prologの処理系
・エコーサーバログラム

のソースコードが、32bitか64bit かに依存してコードを書きかえることなく、
・Windows8.1 (MinGW gcc, JDK javac)
・Solaris11 (付属のcc, JDK javac)
・Ubuntu10 (gcc, JDK javac)

の最新バージョンで動く

815 :デフォルトの名無しさん:2015/07/05(日) 00:36:21.06 ID:EDD7h1SP
>>814
移植性という言葉を使うには狭いかな
せめて実用的なプロダクトベースのコードで語ってほしいし、
JVMで動くJavaとCを比べるならハードウェアアーキテクチャ抜きに比較するのは不適切だし、
10年前云々がすっぽり抜けちゃってるぞ

816 :デフォルトの名無しさん:2015/07/05(日) 02:34:42.80 ID:ex8y+zyl
その定義ならClojureとLeiningenの
組み合わせでまったく問題ないじゃん。

817 :デフォルトの名無しさん:2015/07/05(日) 06:35:28.36 ID:EoM2Wfz5
移植性の意味が10年前のコードがコンパイルできるかって話になってて驚いてる。

Javaの10年前というと時代的にJDK5になるのな。JDK5時代に書いたコードがJDK8で動くか、なら限りなくほとんどのコードはそのまま動くんじゃないの?
(知ってる限りでもAPI階層から変わったものなんて山のようにないし、それこそ警告が出てくるんだからそれ変えるだけで普通に動くと思うんだが)
JDK8で書いてJDK5で動かすのは当然無理だけど。
あとは指摘されてる通り、JVM動けばアーキテクチャ依存なコードを書かない限りは動くでしょ
(ウェブアプリケーションならほとんど引っかからない問題な気がする(過去に1.4で動いてたのを6か7でコンパイルしてワーニング出たくらいで収まった経験ならある))

818 :デフォルトの名無しさん:2015/07/05(日) 06:36:52.54 ID:EoM2Wfz5
Clojureの話はどっかに書いてあったけど、Clojure1.3から1.7までならほとんどの標準ライブラリは動くと思う(deprecatedは仕方ないとして)。そもそもproject.cljにclojureのバージョンまで指定しておけばどこでも同じバージョンになると思うし、JVM動けば動くんじゃないの?
外部ライブラリだって日々更新していく方針を取らなければ、ずっと古いバージョン使えるわけだし。

なんか間違ってる?

819 :デフォルトの名無しさん:2015/07/05(日) 13:20:49.21 ID:18+ya5CF
うん

820 :デフォルトの名無しさん:2015/07/05(日) 23:24:23.30 ID:W3uesJYK
leinがデフォルトで生成するディレクトリ構造だと
src/projectname/core.clj
に全部書いてねって感じだけど
core.cljが巨大になってきたので
my-util.clj
io-util.clj
etc-util.clj
みたいな感じでファイルを分けたいのだけど
src/my-util.clj

src/projectname/my-util.clj
のどっちが推奨なんです?

javaのプログラムもsrc/以下に放り込むのが推奨スタイル?

821 :デフォルトの名無しさん:2015/07/05(日) 23:57:33.00 ID:EDD7h1SP
>>820
このあたりの設定例読んで、
https://github.com/technomancy/leiningen/blob/master/sample.project.clj#L278

みんながどうやってるか眺めて好きなやり方をとればよい
https://github.com/search?l=Clojure&q=clojure&type=Repositories&utf8=%E2%9C%93

822 :電波いっぱい:2015/07/06(月) 20:04:01.75 ID:z0yxLIYt
>>820

僕なら、utilディレクトリを作って目的別のファイルに入れる。
でも、etc とか、my とかは目的名じゃないからもっと考えて命名する。

目的が明確なら、そのディレクトリを作るのもいいと思う。ioとか。

823 :デフォルトの名無しさん:2015/07/07(火) 02:10:30.78 ID:FANO5u+E
sjisで書かれたjavaコードと
utf8で書かれたclojureコードが混在している場合って
project.clj
はどう書けばいいのでしょうか

824 :デフォルトの名無しさん:2015/07/07(火) 02:22:56.44 ID:Q1eHRJ8E
>>823
javaコードはjavacでコンパイルされるからここを参考に設定すればよい
https://github.com/technomancy/leiningen/blob/master/sample.project.clj#L251

825 :デフォルトの名無しさん:2015/07/16(木) 22:09:29.07 ID:pZIQE70v
ClojureでもJavaみたいにnamespaceを
com.example.foo.bar/MyClass
みたいに深いディレクトリを掘ってファイル置かないといけないのです?
簡単に bar しかnsにしてない人が多い印象ですが

826 :デフォルトの名無しさん:2015/07/16(木) 23:32:45.55 ID:UiQdF58b
>>825
好きにすればいい

Javaは慣例で”com.company.product.xxx”とか”jp.co.company.product.xxx”なんてやってるが実は考え過ぎで、せいぜい”product.xxx”で困らなかったのではないかという気もする

827 :デフォルトの名無しさん:2015/07/18(土) 00:50:24.79 ID:XMhN9NpT
java使ってるときは、ドメイン名の部分は一括りで識別してたんで、長さはあんまり気にしてなかった。

828 :デフォルトの名無しさん:2015/07/18(土) 01:14:33.74 ID:XMhN9NpT
clojarsでも、こんな感じ。
[ring "1.4.0"] 親プロジェクト (ring/ring)
[ring/ring-core "1.4.0"] 子プロジェクト
[org.clojure/clojure "1.5.1"] maven centralにあげる場合は、グループ名がドメイン名

maven centralにあげる場合にグループ名にドメイン名を付けるぐらいで、パッケージ名にはつけないみたい?

https://github.com/ato/clojars-web/wiki/Groups
https://github.com/ato/clojars-web/wiki/tutorial
https://github.com/technomancy/leiningen/blob/preview/doc/DEPLOY.md

829 :デフォルトの名無しさん:2015/07/20(月) 12:48:43.17 ID:MJ+wdIOr
Javaとclojureのコードを同じネームスペースに置いてしまうのって大丈夫なんでしょうか

830 :デフォルトの名無しさん:2015/07/20(月) 13:24:27.17 ID:4YwvXMoy
>>829
問題無い、ただ分けた方が見通しは良くなる
Clojureのプロジェクトでjavaソース併用するときに相互依存な物書くのはできないのでやっちゃだめ

831 :デフォルトの名無しさん:2015/07/24(金) 13:32:52.45 ID:W0iRT6Hu
JavaのClassの中で(lex/yaccとかつかって)
自動でClojureに変換できる関数だけClojureに変換して
残りはJavaのまま残しておいて
同じnamespace内に混在

832 :デフォルトの名無しさん:2015/07/25(土) 23:12:36.29 ID:47K/058z
Leinは依存関係にあるcのプログラムもビルドしてくれるようにならないものか
Python のpipはしてくれる

833 :デフォルトの名無しさん:2015/07/27(月) 00:37:08.41 ID:SYhC4jQ3
>>832
JNIでも使ってんの?

834 :デフォルトの名無しさん:2015/07/28(火) 04:16:47.13 ID:JdT7Ezwf
leinの前工程で、ネイティブの依存関係をyum,brewなりで解決させるしかないのでは。
それこそpipやgem
premakeなりmakeなり
leinのプラグインでシェル扱うのもあるけど。
https://github.com/hyPiRion/lein-shell

835 :デフォルトの名無しさん:2015/07/28(火) 04:17:18.39 ID:JdT7Ezwf
途中で送信してしまった

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使ってるからあんまりそう言うの必要って感じないけどあれば便利っぽいなぁ、書いてみようかな(さがせばありそうだけど)

263 KB
新着レスの表示

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


read.cgi ver 05.04.02 2018/11/22 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)