プログラミング言語 Scala 6冊目
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2011/06/07(火) 12:21:04.30http://www.scala-lang.org/
リンク集
http://sites.google.com/site/scalatohoku/%E5%8B%89%E5%BC%B7%E4%BC%9A%E8%B3%87%E6%96%99
前スレ
プログラミング言語 Scala 5冊目
http://hibari.2ch.net/test/read.cgi/tech/1294487102/
0002デフォルトの名無しさん
2011/06/07(火) 12:21:38.32Scalaは簡潔かつ優雅で型安全な方法でよくあるプログラミングパターンを表現できるように
設計された汎用プログラミング言語です。
Scalaはオブジェクト指向と関数型言語の特徴をスムーズに統合しておりJavaやその他の言語を扱う
プログラマをより生産的にすることができます。(以下略)
ttp://www.scala-lang.org/node/25
・Scalaに関する書籍(英語)
ttp://www.scala-lang.org/node/959
リファレンスマニュアルや草稿のPDFなども充実しているのでそちらも参照してください。
日本語の資料には、チュートリアルの訳やIBM dW、IT Proの連載記事、各々で開かれた勉強会の資料などがあります。
0003デフォルトの名無しさん
2011/06/08(水) 02:25:29.410004デフォルトの名無しさん
2011/06/08(水) 05:21:14.410005デフォルトの名無しさん
2011/06/08(水) 08:05:05.030006デフォルトの名無しさん
2011/06/08(水) 10:24:19.11ttp://www.readwriteweb.com/hack/2011/06/cpp-go-java-scala-performance-benchmark.php
0007デフォルトの名無しさん
2011/06/08(水) 12:23:27.66https://days2011.scala-lang.org/sites/days2011/files/ws3-2-scalallvm.pdf
LLVMってどれくらい実用性があるの??
マニアが面白がって遊んでる程度?
0008デフォルトの名無しさん
2011/06/08(水) 12:35:39.83> GoogleがC++, Java, Scala, Goのベンチマークを取りましたとさ。
> ttp://www.readwriteweb.com/hack/2011/06/cpp-go-java-scala-performance-benchmark.php
あれ?これみると、Scalaってかなり早いってこと?
C++ > Scala > Java > Go > C++デバッグ情報付
なの?
( Javaは、GCとかの最適化の具合で、もっと遅い場合もあり。)
ベンチマークのより詳しい情報はこちら:
https://days2011.scala-lang.org/sites/days2011/files/ws3-1-Hundt.pdf
もちろん、
C++ > Scala >>>> PerlやRuby
なのは、言うまでもないけど,
Java(やJVM)が遅いってイメージがあったのは、GCとかの最適化具合が原因だったのかな?
0009デフォルトの名無しさん
2011/06/08(水) 13:24:21.190010デフォルトの名無しさん
2011/06/08(水) 13:51:21.48ずーっと一人歩きしてただけ。
0011デフォルトの名無しさん
2011/06/08(水) 14:29:54.570012デフォルトの名無しさん
2011/06/08(水) 15:05:20.730013デフォルトの名無しさん
2011/06/08(水) 23:26:07.280014デフォルトの名無しさん
2011/06/08(水) 23:58:44.69Apple 製品でよく使われているイメージ
Mac にも標準で含まれているし、OpenGL の最適化や
iPhone SDK, MacRuby などで採用しているらしい
あとは Google の NaCl も LLVM なんだっけか
0015デフォルトの名無しさん
2011/06/09(木) 00:13:16.280016デフォルトの名無しさん
2011/06/09(木) 00:26:38.64なるほど。
.Netの対応を強化するよりかは、LLVMにも対応した方が、幸せになる人がおおそうだ。
だけど、Ordersky先生には、言語そのもの、とりあえず、Scala3.0 の開発に没頭してほしいけど。
https://days2011.scala-lang.org/sites/days2011/files/ws3-2-scalallvm.pdf
これみると、メキシコの大学の人がScala のLLVM対応を研究しているのか。
0017デフォルトの名無しさん
2011/06/09(木) 00:33:32.85しかしフレームワークとしての素性や周辺ツールとの親和性は置いといて
生成するx86バイナリの質だけみるとICCには及ばないし、gccやhotspotと
比べても微妙なところっぽい
0018デフォルトの名無しさん
2011/06/09(木) 01:01:41.65ただしgcc等に比べるとまだまともな最適化は行われてない。
その上llvm-gccはお亡くなりになってしまった。
0019デフォルトの名無しさん
2011/06/09(木) 06:47:36.690020デフォルトの名無しさん
2011/06/10(金) 00:22:54.95それであのロゴマークか。
0021デフォルトの名無しさん
2011/06/10(金) 15:37:36.36http://d.hatena.ne.jp/kmizushima/20110608/1307547649
プログラミング・言語の新刊
http://www.shuwasystem.co.jp/category/html/pro.html
初のScala応用本として期待しているのですが、
発売1週間前なのに新刊ページにまだリンクがありません。
秀和システムは発売前の目次公開はしてないようですね。
0022デフォルトの名無しさん
2011/06/10(金) 16:45:23.270023デフォルトの名無しさん
2011/06/10(金) 22:35:44.03キンドルで読めると幸せなんだがなあ・・・
0024デフォルトの名無しさん
2011/06/10(金) 23:03:40.04―「Java」「.NET」のソフト資産を生かして開発を効率化! (I/O BOOKS)
赤間 世紀 (著)
というのも6月発売だが、、、、
中身をみなくても、中身が想像できちゃうのがなんとも。。
0025デフォルトの名無しさん
2011/06/10(金) 23:06:45.870026デフォルトの名無しさん
2011/06/10(金) 23:24:29.80・概要編
1章 Scalaの概要
2章 文法・構文・言語としてサポートする機能
3章 関数型プログラミング
4章 他言語との比較、関連
・実践編
5章 開発環境
6章 Webフレームワークを利用してアプリケーションを作成してみる
7章 デザインパターンとScala
8章 現場でのScala
9章 Javaとの連携
10章 特徴的なライブラリ
・付録:標準API簡易リファレンス
だって。
こういう実践的な本がでることで、現場への採用がすすむと良いなあ。
0027デフォルトの名無しさん
2011/06/10(金) 23:52:59.370028デフォルトの名無しさん
2011/06/11(土) 09:29:52.90が業務開発で魅力的だろうね。
Scalaは採用されないと思うね
0029デフォルトの名無しさん
2011/06/11(土) 11:15:23.19美しさならHaskellやSchemeが一番だろ。
美しいだけでは業務開発で使われない。ScalaはベターJavaとして業務開発では
ますます注目されるんじゃないかな。
Javaがずっと主要言語であり続けることはないだろうし。
0030デフォルトの名無しさん
2011/06/11(土) 12:20:25.70> Javaがずっと主要言語であり続けることはないだろうし。
いや、FORTRAN, COBOL, C並に長生きすることはもう間違いない。
0031デフォルトの名無しさん
2011/06/11(土) 12:29:33.980032デフォルトの名無しさん
2011/06/11(土) 13:46:17.61(ex.Friendクラスが無い)
安全性が高いのはいい事だと思うけど。
0033デフォルトの名無しさん
2011/06/11(土) 13:46:54.480034デフォルトの名無しさん
2011/06/11(土) 14:18:27.01確かにjavaが無くなることはないと思う。しかし主要言語ではなくなるだろう。
新しいプログラマがいつでも使い続けるような言語でもない。
0035デフォルトの名無しさん
2011/06/11(土) 15:10:57.520036デフォルトの名無しさん
2011/06/11(土) 15:18:35.60oracleの出方によっちゃ10年ももたない気がする
0037デフォルトの名無しさん
2011/06/11(土) 15:43:26.42Monoがブームにでもなれば別だが
0038デフォルトの名無しさん
2011/06/11(土) 21:22:26.950039デフォルトの名無しさん
2011/06/11(土) 22:34:45.43ttp://d.hatena.ne.jp/kaminami/20110611/p1
0040デフォルトの名無しさん
2011/06/11(土) 22:50:40.52正論過ぎて何も言えない
0041デフォルトの名無しさん
2011/06/11(土) 22:51:39.76http://d.hatena.ne.jp/kaminami/20110611/p1
0042デフォルトの名無しさん
2011/06/11(土) 22:59:09.27monoのコア開発者の移籍先のXamarinも、Unity3Dと同じスマートフォン開発中心に進めてるから、
.net4.0でしばらくペンディングかなあ
0043デフォルトの名無しさん
2011/06/11(土) 23:05:09.213回も貼らんでええがな…。
いや面白かった。
確かにあるなー、そういうの。
まだScalaそんなに扱ってないから(他言語もそんなに知らないし)そういう所に意識が回らなかったけど、
あるある。
いくつかは今後改善出来る所だと思うから、そういう所はどんどん出てくるといいよね。
0044デフォルトの名無しさん
2011/06/11(土) 23:56:47.31>forのネスト
>for(i <- 0 to 10; j <- 0 to 10; k <- 0 to 10) {
>ループが一つなのか、三つなのか、ぱっと見で分からない。必要だったのか?
これは三次元ループが一つでしょう。
for文をif文とgoto文に置き換えずにそのままの形で理解すべきであるように
これも三重の一次元ループに置き換えずに理解すべきだと思います。
0045デフォルトの名無しさん
2011/06/12(日) 00:13:04.08私は Scala が好きです。Scala は私のお気に入りのプログラミング言語なのです。
これまで数多くの開発組織で,Scala に関する話をしてきました。
しかしその後の Scala の普及状況を見たとき,私はこの言語が Ruby や,
あるいは Python の採用レベルにさえも達しそうもないことに気付いたのです。
0046デフォルトの名無しさん
2011/06/12(日) 00:15:47.86csh も大抵の環境で使える
0047デフォルトの名無しさん
2011/06/12(日) 00:20:12.210048デフォルトの名無しさん
2011/06/12(日) 01:55:10.12読んで損した。浅い。
0049デフォルトの名無しさん
2011/06/12(日) 02:21:31.470050デフォルトの名無しさん
2011/06/12(日) 02:27:25.63指摘されてから、知ってるけどあえて書いてるって…
0051デフォルトの名無しさん
2011/06/12(日) 02:33:53.83ミズシマさんはネット上のコミュニケーションが上手ではないですねえ…
0052デフォルトの名無しさん
2011/06/12(日) 02:40:01.11絡まれた方は誰一人有益な議論だったとは思ってないんじゃないかと。
matzさんしかりkなんとかさんしかり。
0053デフォルトの名無しさん
2011/06/12(日) 02:40:57.87Haskellのdoをforと呼ぶというのはなるほどと思ったのだが
まあ、forの中の構文が特殊というのは当たってるな
というかLispのloopをはじめ、内包表記にありがちなことなんだが
0054デフォルトの名無しさん
2011/06/12(日) 02:42:42.49あんなに真面目に議論する人なかなかいないと思うよ
0055デフォルトの名無しさん
2011/06/12(日) 02:56:53.630056デフォルトの名無しさん
2011/06/12(日) 03:01:53.070057デフォルトの名無しさん
2011/06/12(日) 03:06:22.840058デフォルトの名無しさん
2011/06/12(日) 03:12:15.36議論が目指してる方向についての認識が双方で一致してるんならね。
自分があんな絡まれ方したらもっと早いタイミングでブチ切れてるわ。
過去の人たちもそうだけど、よくあんな紳士的な態度で付き合ってるよな。
0059デフォルトの名無しさん
2011/06/12(日) 03:15:34.26何を期待してコメント書き込めるようにしてるの?
0060デフォルトの名無しさん
2011/06/12(日) 03:30:19.88そっちの方が双方の時間を浪費しないぶんましだが、
Smalltalkって思いきり書いてるぞ…
0061デフォルトの名無しさん
2011/06/12(日) 03:30:26.61明らかにScalaに悪意のある人間には何を言っても無駄だとわかるから何も言わない
でもそこでちゃんと言うほうがえらいじゃん
最近のTwitterのScala TLとか気持ち悪いわ
Scalaが複雑かどうかとかさ
普及のためには関数型のアピールやめろとかさ
バカに媚び売る必要なんてないよ
頭の悪いやつはどんどん置いていけ
自覚しています。それについては、批判されても仕方無いでしょう(実際、Twitterで、自分の言葉の
選び方に関して批判的なTweetがありますし)。それ以上の部分はここで書いても陰口
と取られかねないでしょうから、そこはTwitterなりブログなりで、隠さずに書きます。
0063デフォルトの名無しさん
2011/06/12(日) 04:41:56.39何でだろう?
省略してよかったり良くなかったり規則性が見つけにくいとかかな?
タプルとか優先順位なのかグルーピングなのか...
0064デフォルトの名無しさん
2011/06/12(日) 04:52:06.280065デフォルトの名無しさん
2011/06/12(日) 06:19:45.84「Twitter上でも」と書いてあったので調べました。
http://twitter.com/#!/kaminami/status/77679564867907584
>Scalaってのは「覚えるのが好き」な人のためのものだとつくづく。
>特別なメソッド、節操のない糖衣構文、暗黙のなんちゃら。
>「Scalaは、むずかしすぎて使えない!」から、
>JavaやC#に取って代わることはないだろう。
http://twitter.com/#!/kmizu/status/78123820237586433
>@kaminami ScalaがJavaやC#にとって変わるかどうかはともかく、
>Scalaが単純に「覚えるのが好き」な人のための言語だというのは異論があります。
>少なくとも、「Scalaは、むずかしすぎて使えない!」なら
>今のC#もまともに使えないかと。 #scala
http://twitter.com/#!/katzchang/status/79142581451243521
>@kaminami 横槍で失礼しますが、議論の目的はなんでしょうか?
>Scalaの言語仕様が複雑であるかどうかの議論ですか?
>それともScalaはプログラミング言語初学者向きかどうかの議論ですか?
http://twitter.com/#!/yukihiro_matz/status/79619048706551808
>我々が「言語が複雑すぎる」と発言するとき、
>ほとんどの人は「文法の複雑さ」ではなく、
>「認識しづらさ」とか「覚えにくさ」とかを問題にしていると思う。
>で、議論の最中、数人だけは本当に
>「言語(ルール)の複雑さ」について語るので大いに食い違う。
>正しく表現しない私たちが悪いんだけどさ。
katzchang氏とyukihiro_matz氏のtweetが鋭いですね。
Scala学習中のkaminami氏の中途半端な認識自体が
Scalaが覚えにくい言語である事の証明ではないでしょうか。
kmizu氏の反論は木を見て森を見ずになっていると思います。
0066デフォルトの名無しさん
2011/06/12(日) 06:35:51.90それをもって「覚えにくい言語である証明」って言うのは飛躍じゃないか?
その線でいくなら(できるだけ公平な基準で)他の言語の学習曲線と
Scalaの学習曲線を比較しなきゃ
0067デフォルトの名無しさん
2011/06/12(日) 06:51:58.070068デフォルトの名無しさん
2011/06/12(日) 07:14:32.44これからscala始めるのにコップ本でも
2.9との差異に困ったりしない?
それとも2.9対応本が出るまで待つべき?
0069デフォルトの名無しさん
2011/06/12(日) 07:21:02.82まあコップ本は2.7なんだけど
2.7と2.8はコレクションライブラリが総取っ替えのレベルで変わってるからなあ
でも言語の基本的な部分はあまり変わってないからコップ本は今でも十分に参考になる
0070デフォルトの名無しさん
2011/06/12(日) 09:37:49.450071デフォルトの名無しさん
2011/06/12(日) 10:05:51.62久々にコップ本で技術書をキッチリ読んだ俺に言わせると、他の方法は必要だと思うよ。。
0072デフォルトの名無しさん
2011/06/12(日) 10:10:20.35「どう動作するか」と、「何を記述したいか」の違いだねぇ。
もちろん、プログラマとしては前者も理解しておくべきだが、
後者の方が簡潔で本質的な記述ができるのも事実。
0073デフォルトの名無しさん
2011/06/12(日) 10:11:59.32ここがへんだよの人も読んだのがコップ本ならもうちょっとましなエントリ書けたと思うし
0074デフォルトの名無しさん
2011/06/12(日) 10:15:31.180075デフォルトの名無しさん
2011/06/12(日) 10:20:09.97何のかんので、読破にすごい時間かかったからなぁ。
一見さんを引っ張り込むには、言語のエッセンスを端的に伝えられる、もっと薄い本が必要。
その意味で関数脳本は悪くなかった。
0076デフォルトの名無しさん
2011/06/12(日) 10:25:28.09というのはああそうかもな、という感じはする。
まぁでも、「objectのapplyメソッドを使うとこんなことができます」という説明の問題か。
0077デフォルトの名無しさん
2011/06/12(日) 10:28:03.05"ACBED".sortWith(_1 > _2) みたいな書き方はできるようにして欲しい。
0078デフォルトの名無しさん
2011/06/12(日) 10:34:43.62あれは最初から意図したものじゃなくて、
仕様作成後に発見されたというのが凄すぎる。
よくあんな仕様作れたな。
0079デフォルトの名無しさん
2011/06/12(日) 10:46:49.72まぁ、内容はともかく、キレちゃだめだよ。
自分が入れ込んでる言語をハンパな知識で貶されて気分が悪いのは分かるけど、
それをScalaに何の思い入れもない人間が見たら、ということは考えた方がいい。
(あと、水島さんにだけ言ってるんじゃないよ、と一応)
0080デフォルトの名無しさん
2011/06/12(日) 10:54:00.11うまいこと誤解を解きほぐせば、支持者に変わってくれる可能性もあるわけだ。
Javaに異なるパラダイムを持ち込んでいるのがScalaなのだから、
誤解が生まれる事自体は受け入れるしかない。
そこを橋渡しできるドキュメントや人間がいるか、こそが問題。
まぁ、うまいことやろうぜ、ということです。皆さん。
0081デフォルトの名無しさん
2011/06/12(日) 11:05:53.28普及してくれるといいとかそういう気持ちは全くないな、俺は。
>>79の言うような書き込みもしたことはないが。
ただ、教え方というか、現状Web上にあるScalaチュートリアルとかがイマイチ
学習向けじゃなくて、それで小難しく感じられているというのはあると思います。
実際の所、Better Javaの部分だけ取り出してScalaを教えるのなら、Javaを
教えるのと比べて、staticって何よ、とか、プリミティブと参照型の違い、参照型で
値の比較に==使っちゃダメ、とかそういったこまごまとして事を教えなくていい分
楽な気がします。
0083デフォルトの名無しさん
2011/06/12(日) 11:10:08.88日本人に理解困難な言語を輸入しても悪影響しかでないよね?
ご忠告ありがとうございます。コメントの書き方については自覚的に挑発的に書いたので
あって、さほどキレていたわけではないです。
実際の所、ああいう書き方をしたのは、あのブログエントリがTwitterでのやり取りの
続きであると考えていたからなのですが、ブログを読む多くの人はTwitterでのやり取りは
見ていない、ということは失念していました。
0085デフォルトの名無しさん
2011/06/12(日) 11:15:18.97んだ。
というわけで期待してますよー(人任せ。
0086デフォルトの名無しさん
2011/06/12(日) 11:15:30.78てめぇが理解できないもんは他人にも理解できるはずがないとか思う超ド級のバカか?
0087デフォルトの名無しさん
2011/06/12(日) 11:34:33.57これを改めない限り1つの言語として認知されない
0088デフォルトの名無しさん
2011/06/12(日) 11:38:10.50一部の言語処理系では他言語は古い世代でのブートストラップにしか利用してないが。
0089デフォルトの名無しさん
2011/06/12(日) 11:41:11.050090デフォルトの名無しさん
2011/06/12(日) 11:46:21.42主語は明確にしよう。
何度も言われてるが、JVM言語である以上の限界はあるわな。
その分、ライブラリとか開発環境とか、メリットも大きいわけだが。
まぁ、今の言語の大半が、X86処理系の限界に縛られているのとそう変わらん。
0091デフォルトの名無しさん
2011/06/12(日) 12:02:31.30そもそもの問題は
そんな話してないのに、そっちに話持っていこうとすることだろ…
0092デフォルトの名無しさん
2011/06/12(日) 12:12:35.32これはいいんだよ、完全に事実だから
だからJavaと関数型を勉強してから来いよ
LLしか知らないようなやつがいきなり理解できるわけねーんだよ
0093デフォルトの名無しさん
2011/06/12(日) 12:44:38.86プログラマとして上を目指すなら、色々な言語を知っておいて損はない。
それと、初心者に門戸を広げるというのはまた話が別だけどね。
0094デフォルトの名無しさん
2011/06/12(日) 12:50:02.020095デフォルトの名無しさん
2011/06/12(日) 12:52:46.73というか抗争を煽ろうとしてる人間がスレに混じってるようで嫌だな
0096デフォルトの名無しさん
2011/06/12(日) 12:55:32.07僕と契約して、Ozを勉強してよ
http://www.mozart-oz.org/home/doc/tutorial/index.html
日本語翻訳は任せた
ていうか誰か完訳して…
CTMCPで使われてるのにまだチュートリアル日本語版が無いとか
日本の情報工学マジ…
0097デフォルトの名無しさん
2011/06/12(日) 12:57:32.95ガンガンdisられてこそ伸びるだろう
0098デフォルトの名無しさん
2011/06/12(日) 13:04:14.34歴史の浅い学問でまだ発展途上なんだから、
現在存在する全ての言語は後に置き換えられるべき通過点に過ぎないと考えるべき。
どうのつるぎみたいな。
0099デフォルトの名無しさん
2011/06/12(日) 13:08:12.37CTMCPは衝撃だった
マルチパラダイムであっても核言語を整理すれば
あそこまで簡潔になるんだなあと
じゃあScalaはっていう話になるが、どうしても複雑だという印象を拭えない
Ozとの違いでいくと、静的型付けって所が影響してるのかなあ?
0100デフォルトの名無しさん
2011/06/12(日) 13:09:20.030101デフォルトの名無しさん
2011/06/12(日) 13:09:31.95C#みたいに(またはVB.NETみたいに)
LINQすら読めないのにC#得意ですと言いだす人間ばっかりの言語なんていやだ。
0102デフォルトの名無しさん
2011/06/12(日) 13:23:35.550103デフォルトの名無しさん
2011/06/12(日) 13:27:42.690104デフォルトの名無しさん
2011/06/12(日) 13:29:32.80入ってくる気がないからああいうこと書くんだろうし
0105デフォルトの名無しさん
2011/06/12(日) 13:33:36.81好き 1%
嫌い 1%
なにそれ? 98%
みみちい争いは空しい
0106デフォルトの名無しさん
2011/06/12(日) 13:40:16.50例外発生時にJavaのエクセプション出す依存っぷりは、
同列に語れないレベル。
0107デフォルトの名無しさん
2011/06/12(日) 13:40:44.89この間クラスの女子に「Scalaって知ってる?」って聞いたら
「は?誰おまえ?」って言われたよ
一般的にはその程度の知名度
0108デフォルトの名無しさん
2011/06/12(日) 13:51:26.16ScalaがVMをきちんと開発しないかぎり
永遠に同列にならない
0109デフォルトの名無しさん
2011/06/12(日) 13:53:05.92グダグダ言ってないで手を動かせと
0110デフォルトの名無しさん
2011/06/12(日) 13:54:27.52つーかOzってCTMCPを読むための言語ってイメージだが
それならCTMCPを読めばええやんって話だから誰も翻訳しないんじゃね
0111デフォルトの名無しさん
2011/06/12(日) 13:55:17.18意味わからん
0112デフォルトの名無しさん
2011/06/12(日) 14:01:06.73専用に設計されたものだったりするが。
0113デフォルトの名無しさん
2011/06/12(日) 14:24:39.40そしてライブラリが無くて普及しない地獄が始まる。
0114デフォルトの名無しさん
2011/06/12(日) 15:00:04.28Scheme(SICP)は沢山入門文書があるのにね…。
原文読めよって話になるんだろうけど、それを嫌がる人にもCTMCPに触れてもらいたいのよ。
800P超える本に手を出す人が英語読むの億劫、ってのもレアケースかもだけど、
日本語文書で概要掴んで好きな所だけつまみ食いをもっと気軽に出来るようにしてほしいなって思って。
技術英単語にもっと明るくて時間があるなら、俺がやってもいいけどさ
0115デフォルトの名無しさん
2011/06/12(日) 15:45:33.420116デフォルトの名無しさん
2011/06/12(日) 16:59:13.29Scalaについてどう思う?
好き 0%
嫌い 0%
は?誰おまえ? 100%
0117デフォルトの名無しさん
2011/06/12(日) 17:00:37.03あの程度でdisだとかFUDだとか、被害妄想も甚だしい
0118デフォルトの名無しさん
2011/06/12(日) 17:04:49.64書いてる本人が自分で間違いに気づいてないんだから
0119デフォルトの名無しさん
2011/06/12(日) 18:19:47.59まだまだ未整備なのは事実だし、それは何とかしないといけない。
「お前の意見は間違いだ」といっても、間違った理解をする人間の方が多いなら、
それが言語に対する評価になってしまうわけで。
0120デフォルトの名無しさん
2011/06/12(日) 19:13:53.680121デフォルトの名無しさん
2011/06/12(日) 19:28:38.07Haskellならそんな難癖つけてくるやつはいない
Scalaなら俺にもできそう → うわイミフ → 言語が複雑すぎるから悪い
この流れ
0122デフォルトの名無しさん
2011/06/12(日) 19:40:31.51Scala実践プログラミング
http://www.amazon.co.jp/Scala実践プログラミング/dp/479802998X
が書店によってはフラゲ出来てしまう様ですが、
お前らにおかれましてはゲットされましたか?
0123デフォルトの名無しさん
2011/06/12(日) 19:41:57.290124デフォルトの名無しさん
2011/06/12(日) 20:09:27.760125デフォルトの名無しさん
2011/06/12(日) 21:35:38.27Matlab,Scilab,R,Maxima,BSH,CSH
とかいろいろな言語やってきた(やらされてきた)が、言語disっている暇なんてないぞ。
言語そのものに対する不満とか、言い始めたらきりがない。
職場のコーディングルールに従わなければいけない縛りの方が理不尽だ。
言語のバージョンが上がっても、職場では何世代も前のバージョンしか使えないとか。
Scalaをすべての人に使わせようと思ったら、コーディングルールで縛りを設けるべきだな。
C、C++とかは一時期「変数名はシステムハンガリアン以外認めない!」みたいな時期があったけど、
Scalaにもそういう時期は必要だな。「プレースホルダー使うときはコメントで説明がないとNG」、みたいな。
個人的には、Scalaはまだ発展途上なところが楽しみな言語である。
どんどん要望だそうぜ!
0126デフォルトの名無しさん
2011/06/12(日) 21:39:30.900127デフォルトの名無しさん
2011/06/12(日) 21:40:24.56> PockeconBasic
disってんじゃんYO!
0128デフォルトの名無しさん
2011/06/12(日) 21:41:51.22自分はProgramming Language Pragmaticsを読んでるところ。って、Scalaの話じゃないなw
0129デフォルトの名無しさん
2011/06/12(日) 21:46:23.24ハードウェア屋の人には多そうな取り合わせじゃね?
0130デフォルトの名無しさん
2011/06/12(日) 22:00:42.82Java SE 7 - Project Coinの整数リテラル区切り文字をScalaにも
http://d.hatena.ne.jp/yuroyoro/20110510/1305026957
これって、将来対応してくれるとうれしいなあ。
パッチまであるのだから、2.9.0.2くらいで入れてもらえるとうれしい。
0131デフォルトの名無しさん
2011/06/12(日) 22:08:06.60まぁ、そんくらいにしといた方がいいよ。
批判者をコテンパンに論破しても、別にScalaの普及には繋がらないんだしさ。
筆頭の論客は、どっしり構えるくらいでいた方がいい。
0132デフォルトの名無しさん
2011/06/12(日) 22:42:29.95http://dl.dropbox.com/u/261418/monads_are_elephants/index.html
モナドの実例はHaskellが定番でしたが、Scalaもメジャーになりましたね。
モナドはメタファーではない
http://eed3si9n.com/ja/monads-are-not-metaphors
>モナドの概念を初めて学ぼうとする者は、ブリトー、宇宙服、象、砂漠のベドウィン
>(訳注: アラブ系遊牧民) の共通項を探す努力をするハメになっている。
こちらは比喩と長文が苦手な人向きです。
0133デフォルトの名無しさん
2011/06/12(日) 23:53:28.22おそらく自分の事かと思いますが、ご忠告、痛みいります。おっしゃる通り、論破しても無益ですし、
むなしいだけですね。というのを、反論書いてから実感しました。これからは、議論の方に時間を割くより、
Scala日本語情報サイトのコンテンツ充実の方に時間を割いて行こうと思います。
0134デフォルトの名無しさん
2011/06/13(月) 00:54:22.11>>118
http://twitter.com/yuroyoro/status/79550622436831232
http://twitter.com/kmizu/status/79557535316717570
0135デフォルトの名無しさん
2011/06/13(月) 00:59:30.39いや、あれが無益かどうかは読み手によるんじゃ。
少なくとも自分にとってはScalaへの理解について、曖昧にしてあった部分が少しわかったし。
0136デフォルトの名無しさん
2011/06/13(月) 06:56:07.01http://twitter.com/kmizu/status/79974504956297217
こうゆう発想は子供っぽいからもうやめとけ。
0137デフォルトの名無しさん
2011/06/13(月) 07:13:17.360138デフォルトの名無しさん
2011/06/13(月) 07:20:51.29scalaコミュってまだ未成熟で子供と言う印象を与える原因になってるから。
誰を見本にしろというのはあまりいいたくないけど、schemeやlisp方面での
shiroさんから態度を学んでいったらいいんじゃないか?と思うよ。
scalaが他の関数言語より難しくなりやすいのってJavaの人々を取り込もうと
する仕様にあるように思うよ。オブジェクト指向と関数言語というのを
合わせようとする発想はいいんだけど、それがかえって難しくしているところ
がある。せめてCLOSやRのようなゆるいオブジェクト指向の仕様なら第三者か
ら見てわかりにくい概念が山ほど出てくるというのは少しは避けられたかも
ね。もとが複雑な言語を拡張して自由度を増やそうとした場合更に複雑な仕様になるのは自明の理なんだから、scalaが難しいということで怪気炎を上げる
ような行動は褒められたものではないよ。それより>>131さんの忠告を心から
理解することが大切じゃなかろうかね?
0139デフォルトの名無しさん
2011/06/13(月) 07:26:40.17主観的な評価だ、kmizuには伝わらん、って相手言ってんじゃん
お前らが突撃しといてその言い草かよ…
Scalaのイメージ悪くなるからマジ止めてくれ
0140デフォルトの名無しさん
2011/06/13(月) 07:50:16.690141131
2011/06/13(月) 08:08:46.95まぁ、きつい言い方をするとそういう事になるね。
「易しい」「難しい」「使いやすい」「使いにくい」なんてのは、
技術的に白黒つけられる類の議論ではないのだから、どうしても不毛になりがち。
それよりは、分かりやすい日本語ドキュメントを整備して、
「よく理解できる」という声を増やす事に注力した方が、結果的には実利にも適っている。
ともあれ、これからの仕事にも期待しているのでがんばって下さい。
0142デフォルトの名無しさん
2011/06/13(月) 08:12:45.420143デフォルトの名無しさん
2011/06/13(月) 09:03:01.850144デフォルトの名無しさん
2011/06/13(月) 10:42:19.020145デフォルトの名無しさん
2011/06/13(月) 12:20:36.590146デフォルトの名無しさん
2011/06/13(月) 12:26:19.48shiroみたいになれって?
自分のこと棚に上げて口だけなら何とでも言えるわな
向こうが屁理屈を並べたら理屈できっちり返さなきゃいかんだろ
それもできない連中はしょぼいコミュニティだと思うよ
プログラムを書くにはプログラミング言語の仕様を熟知しないといけないということをわかってないやつが多すぎる
今回の話についていけないようなやつはJavaやC#の仕様をちゃんとわかって書いてるのかね
細部を突ついたら似たような話になると思うけど
0147デフォルトの名無しさん
2011/06/13(月) 12:35:48.93率直に言って、仕様を熟知している人というのはごく一部ですよ。
それを踏まえて、いろんなことを言う人がいる。
shiroさんの名前を出したのは、彼もいろんな事で反論や説明は
良くしているけど、その立ち回りは大変上手だよ。だから見本になるだろう
といってる。
今回のことを見てて大変まずいのは、反論をするにしても一見丁寧に対応し
てるように見えつつも、技術的なことも書きながら、相手をなじるような記
述が度々見られる点かな。これでは、議論をする人も適当にあしらってさっ
さと関わらないという行動をとるだろう。つまり、論者としては二流ってこ
とさ。
ちょっと考えれば分かるだろうけど、相手にしてみればこれほどめんどく
さいと思うことはないよ。それに加えて、やや粘着な傾向も見られる点が
きがかりだね。
0148デフォルトの名無しさん
2011/06/13(月) 12:39:38.51>、kaminamiさんは、Scalaにおける基本ルールを中途半端にしか理解されて
いません。そのせいで、特例で無い事も特例としてとらえてしまっているの
でしょう(中には的を射た指摘もありますが)。以下、一つ一つ説明していき
ます。
とあるけど、上手な論者ならば、中途半端に理解されていないというところ
をオブラートに包むか、具体的な説明で暗にそれを示すかといったストレー
トにやらない方法をとるもんだ。言い回しを少し注意するだけでもずいぶん
違うと思うよ。
かなりきつい記述も含めたけど、このほうがこの人にはいいのかなと思って
書いてるけど、こうゆう書き方も反発はくらいやすいのは理解してる。133さん
がいってるようにきついですよ。
0149デフォルトの名無しさん
2011/06/13(月) 12:54:01.21mput氏)みたいな存在もそれはそれで有用ではある。
まぁ問題は懐かしのJavaHouseみたいに、その言語自体に対する評価において、
人に対する印象が先行しちゃう、ということだけど、それで言語に対する評価を
誤る奴なんてのは所詮そういうレベル、という見方もある。
hyuki氏やMatz氏のようにふるまえ、ってのを誰にも要求するのは無茶ってもんだと
俺は思うけどね。
0150デフォルトの名無しさん
2011/06/13(月) 12:56:08.37そりゃ処理系を作ってる日本の第一人者という言葉の重みがあれば、
説得力はまるで違うと思うよ
それと同じ次元で比較してるお前は何様なんだよって話だよ
matzと今回のkaminamiに共通するのは、動的オブジェクト指向言語の信奉者であり、
静的型や関数型に対して理解する気がない、
それなのに主観的な次元で良し悪しを論じているということ
Scala固有の話ではなく、静的型や関数型に対する偏見がまず先にある
要するに不毛だとわかってる宗教戦争を仕掛けてるのは向こう
まずは向こうが攻められるべき
0151デフォルトの名無しさん
2011/06/13(月) 13:23:19.49コップ本は1章割いてforの説明してるけど他で勉強するとこの程度の理解になっちゃうのかな
0152デフォルトの名無しさん
2011/06/13(月) 13:29:54.22Scala勉強したいな、って思った人が勉強しやすい環境を提供してあげるのが最優先じゃないかな?
それが出来た段階でScalaを知らない人に訴求していく。
「あいつは分かってない!俺が論破してやる!」これじゃ何も得るものが無いよ。
0153デフォルトの名無しさん
2011/06/13(月) 13:35:58.26だいたいが好きで使ってるようなやつだけだ。
Scalaはよくも悪くも、いろんなやつから注目されつつあるっていうだけ
なんじゃないかな。水島氏はそういう相手でもまじめに対応しててまぁ
がんばりやさんだと思うよ。
0154デフォルトの名無しさん
2011/06/13(月) 13:50:40.03PerlのCPANみたいなのがあるといいなぁ。
Rubyのgemみたいなのがあるといいなぁ。
とプロフェッショナルな人達は思わないのかな ^^;
0155ゆるよろ
2011/06/13(月) 14:01:55.47mavenは滅びてもいいけど、maven-repositoryが滅びると現実的には困るんだが
perlやrubyやpythonや他の言語にある、「ここで調べれば欲しいもの出てくる」的な
セントラルリポジトリは、Javaのころから憧れていた理想郷
0156デフォルトの名無しさん
2011/06/13(月) 15:03:16.84お前どういうtweetから始まったか見てねーだろ。
0157デフォルトの名無しさん
2011/06/13(月) 15:07:35.25CPANが「理想郷」だって?
「夢の島」と言うのならまだ分かるが。
0158デフォルトの名無しさん
2011/06/13(月) 15:30:05.75「Scalaでファイルの入出力」とかレベルの記事を書いていくのが簡単で良いんじゃない?
それらを纏めるのは後からでも出来るんだし。
情報が分散して云々で何も進まないよりは生産的だと思う。
0159デフォルトの名無しさん
2011/06/13(月) 15:35:23.650160デフォルトの名無しさん
2011/06/13(月) 15:36:57.720161デフォルトの名無しさん
2011/06/13(月) 19:23:25.65反論はありがたいけど、まずはお茶でも飲んで落ち着いたほうがいいんじゃないか?あまりにも狭くなってる印象がある。
この状態なら他言語やっていてScalaに興味を持ったとしてもやりたがらない
事になりかねないぞ。実際にgoogleで"Scala 怖い"でリアルタイム検索してみ
てはどう? 潜在的に何倍になってるかわからないが。b.hatenaのコメントも
よく読んだほうがいい。それが今回の騒ぎでScalaってどんな言語なのか?と
いう印象を持たれたかよく分かるだろうよ。
すぐに、二分化しちゃう思考って、考える能力を衰えさせるものだ。あまり、
敵味方みたいな発想にならないようにしたほうがいいと思うね。
そもそも、Scalaの感想を書かれたからといって、関数型への冒涜みたいな
捉え方はどうかと思うよ。
0162デフォルトの名無しさん
2011/06/13(月) 19:26:21.210163≠161
2011/06/13(月) 19:30:34.76「あいつらは愚かだから無視して良い」というのも二元論的思考だけどね。
今回のことが決定的だとは思わないけど、あまり何回もこういう事が起こるのはよろしくないと思うよ。
0164デフォルトの名無しさん
2011/06/13(月) 19:48:39.29これでScala怖いなんて言っている連中はプログラミングをなめてる
これだけ材料を与えられてるのに話の真偽を見極められずに、
態度とか口調とかで物事を判断しようとする連中がエンジニアなのかと思うと泣けてくるね
0165デフォルトの名無しさん
2011/06/13(月) 19:49:52.23「手続き的にどう動作するか、を想像し易いのが良い言語だ」という発想が根強い現環境において、
新しい発想を掲げている言語(の一つ)がScalaなわけだ。
ただ、ここで間違ってはいけないのは、「理論的背景をシンプルに実現しているから良い言語」なのではなく、
「やりたいことを容易に実現できるから良い言語」なのだ、ということだと思う。
(ちなみに、個人的には、ここに「やりたいことを頑健に記述できる」も追加したい)
「文法が簡単か否か」という論争は、結局のところ前者のフィールドで争うことに他ならない。
個人的には、Yコンビネータを巡る話を真っ先に想起する(あれ、全然分からんw)。
だから、「Scalaは簡単で素晴らしい言語だ」という時には、強力なコレクション処理とか、
Optionの話とか、そういう観点から語るべきなんじゃないか。
そういう観点が無ければ、implicitなんて「抜け道」を許容する最悪な仕様でしかないわけだし。
ま、結論は「>>158に賛成」ということなんだけどね。
0166デフォルトの名無しさん
2011/06/13(月) 19:58:02.71主観で語ることが重要だと言うことはアンチテーゼになるが
プログラミング言語を巡るほとんどの言説が感覚的なのに、
主観が重要だとあらためて言う意味はあんの?
0167デフォルトの名無しさん
2011/06/13(月) 19:58:51.28俺も含めて、大半の人間は、個別の論争の是非を精査してるほど暇ではないんだよ。
もっと抽象的な言い方をするなら、自分以外の人間に、何かに対して自分と同じだけの
コミットメントを要求するのは良い態度とは言えない。
特に、ネット上の発言は、何かに対して責任を負って為されるものではない以上、なおさらね。
一人一人の人間が、何かに興味を持っていたり、持っていなかったりすることは
当然のことなのだから受け入れるべきだし、
それこそが相手の人格を尊重するということだ、と俺は思うよ。
0168デフォルトの名無しさん
2011/06/13(月) 20:07:19.03当たり前だけど、そのプログラマのマインドセットと一致しない記述体系を強制しても不幸になるだけだからな。
で、新しいマインドセットを広めたいと思ってる我々の側としては、彼にそのメリットを「布教」するところから始めなけりゃならない。
そこで「悔い改めよ!」とか言って説伏させようとしても、周りから眺めてるだけの第三者にしてみれば「何あの人怖い」になるのは
避けられない。
つまり、うまくやろうぜ、ってことですよ。
我々の目的は、抗争での勝利ではなく、ハッピーなプログラミングライフでしょ?
0169デフォルトの名無しさん
2011/06/13(月) 20:09:22.11松本さんが最悪手だと発言してる真意もたぶん理解できないのではないか?
たぶん、松本=極悪のボスキャラという捉え方なのだろうよ?
コミュニケーションの問題を書いてるんだけど。異文化の人たちと会話を
成り立たそうとすれば、どんなことがあっても誤解などは当然あるよ。
それでも、話し合いが成り立つ人たちとそうではない人たちが世の中に
いるけど、後者にはならずに、考え方が違っても信頼関係が生まれる工
夫をした話し合いをしろよって事。殺伐として、対外的に強硬な態度を
とるのがよしとするコミュニティにするのが理想ならばそうすればよいが
その代償は高くつくことは覚悟したほうがいいよ。
要するにコミュニケーションにも頭を使えってこと。
0170デフォルトの名無しさん
2011/06/13(月) 20:29:58.42Scala使わないと考える程度の連中に対しては
無視するのが正しいコミュニケーションだと思うけど
matzの静的型ディスは前科があるから言ってることなので
ボスキャラというか、言語開発者なのによく自分から宗教戦争起こすなと思っただけで
あと、これは半分冗談だけど、別に今回の件が最悪手だとは思わない
『Scala実践プログラミング』のいい宣伝になってんじゃないの
kaminami氏に献本すればいいと思う
受け取るかどうかは知らんけどw
0171デフォルトの名無しさん
2011/06/13(月) 20:42:32.80思っているのだとしたら、俺は全く賛同できない。
このオープンソース時代に、周囲から孤立したエリートなんか目指しても、
すぐに行き詰まってしまうのは目に見えている。
「俺はエリートの一人だ、愚かな奴らとは違う」という自己満足しか残らんよ。
0172デフォルトの名無しさん
2011/06/13(月) 20:43:45.15エンジニアなら、技術的な真偽以外は気にしないとでも思ってるのかな。
0173デフォルトの名無しさん
2011/06/13(月) 20:45:45.53けど、俺にはRubyの方がその手のことをやっちゃう武闘派()が多いと思うんだよな。
自分の家で出来てないことを、別の家の子供に説教してる大人もどうかと思うよ。
0174デフォルトの名無しさん
2011/06/13(月) 20:48:28.83他人の愚行を、自分達が真似る必要なんか無いじゃない。
俺達は、俺達だ。
0175デフォルトの名無しさん
2011/06/13(月) 20:55:07.23私のために、争いなんてやめて!!
技術的な話題には、ほとんど食いつかないのに、
政治的な話になると、食いつきすぎです!
組み込み系にC++が導入された初期のころ、
コーディングルールに、「継承はなるべくしない。」とかあったよ。
Scalaも最初のうちは、↑こういう時期が必要だろうと思う。
0176デフォルトの名無しさん
2011/06/13(月) 20:55:08.81まず大前提として、はてブも2chも言語の趨勢には
全く影響がないということが意識として共有できてない気がするがw
だからちょっと暴論っぽく書いてるわけだし
だいたいジョブズやストールマンみたいな奇人変人が跋扈してる世界で、
なにみみっちいこと言ってんだとしか言いようがない
まあ、程度の低い意見は無視するのが正しいというのは間違いないが、
それに対して熱り立って反論するのも別に悪いことじゃないという話
それでもう俺からは終わりにします
0177デフォルトの名無しさん
2011/06/13(月) 21:04:58.00そうでない凡人は他人とわざわざ波風立てないようにコミュニーケション力をつけろってことだな。
0178デフォルトの名無しさん
2011/06/13(月) 21:19:42.70レス皆無のほうがまだまし。
0179デフォルトの名無しさん
2011/06/13(月) 21:21:27.73誰がどーしたあーだこーだって
お前らはてな民(笑)かよ
きもちわりい
まじきもちわりい
誰がどうしたって?
知らねえよそんな奴www
あーきもいきもい
芸能ニュースにかじりつくババァを見てるみたいだ
0180デフォルトの名無しさん
2011/06/13(月) 21:24:27.700181デフォルトの名無しさん
2011/06/13(月) 21:26:39.930182デフォルトの名無しさん
2011/06/13(月) 21:38:18.36俺は今それで勉強してる。
0183デフォルトの名無しさん
2011/06/13(月) 21:40:59.640184デフォルトの名無しさん
2011/06/13(月) 21:47:18.740185デフォルトの名無しさん
2011/06/13(月) 21:51:17.010186デフォルトの名無しさん
2011/06/13(月) 21:57:11.070187デフォルトの名無しさん
2011/06/13(月) 22:03:26.60Liftにも全く触れてない。
0188デフォルトの名無しさん
2011/06/13(月) 22:04:54.170189デフォルトの名無しさん
2011/06/13(月) 22:24:43.100190デフォルトの名無しさん
2011/06/13(月) 22:26:04.20Scalaプログラミング入門っていう本だ
http://beebee2see.appspot.com/i/azuYyYSKBAw.jpg
0191デフォルトの名無しさん
2011/06/13(月) 22:30:25.66ハゲ同
0192デフォルトの名無しさん
2011/06/13(月) 22:31:11.150193デフォルトの名無しさん
2011/06/13(月) 22:32:26.34裏じゃ3人仲良しこよしだぞ?
0194(1) ◆CgacaMDhSQ
2011/06/13(月) 22:43:31.23>>138
丁寧な忠告、ありがとうございます。実際の所、元々私は単なるScala好きであり、
Scalaエバンジェリスト(笑)という状態だったのですが、本当にScalaエヴァンジェリスト
であろうとするなら、おっしゃるとおり、態度を改めるべきだと思います。shiroさんは
技術的にも凄いだけでなく、やわらかい言い方で、人を説得するのが非常に上手な
ので、その点は見習いたいですね。
ちょっと長くなるので、複数レスに分割します。
0195デフォルトの名無しさん
2011/06/13(月) 22:48:58.24初めてよんだ。(翻訳ありがとう)
0196(2) ◆CgacaMDhSQ
2011/06/13(月) 22:50:03.55>ような行動は褒められたものではないよ。
端的に言って、これは間違いです。まず、ScalaはJavaのad hocな仕様をいくつも削っています。たとえば、プリミティブ型、static, break, continue,などなど。
その上で、関数型とオブジェクト指向を統合するために必要な仕様がScalaに付け加えられました。ですから、更に複雑になるのは自明の理ではありません。
これは、別に論破したいわけではなくて、Scalaはそういう言語ではないよ、という話です。
> それより>>131さんの忠告を心から理解することが大切じゃなかろうかね?
心に刻んでおきます。
0197デフォルトの名無しさん
2011/06/13(月) 23:40:20.28関数型言語で特徴的だった機能の一部を取り込んでいるだけ。
0198デフォルトの名無しさん
2011/06/13(月) 23:46:03.21Blogとか2chで、ちまちま言い争いするよりかは、
まとめサイトの記述を充実してくれた方がうれしいなあ。
たとえば、「記号が分かりにくい」みたいなのは、次のようなページみたら即解決だなあ。
http://www.ne.jp/asahi/hishidama/home/tech/scala/index.html
「Scala 日本語情報サイト」期待してます。
0199デフォルトの名無しさん
2011/06/13(月) 23:54:12.01削除依頼出すよ?
0200デフォルトの名無しさん
2011/06/14(火) 00:31:27.00C#のyield for
みたいな機能ってScalaにありますか?
0201デフォルトの名無しさん
2011/06/14(火) 00:38:17.54横レスですが、あなたはずれています。
>>65のまつもとさんのtweetが食い違いを明確に指摘しているのに
どうして「言語(ルール)の複雑さ」の話を続けるのでしょうか。
JavaやC++がオブジェクト指向という新しい概念が増えたために
それ以前の手続き型言語より覚えにくくなったように、
Scalaが関数型の概念という新しい概念が増えたために
Javaより覚えにくくなりました。
ad hocな仕様が削られて暗記量が減った事による覚えやすさは
新しい概念の理解が必要な事による覚えにくさと釣り合いません。
ですからScalaを覚えようとする人にとって
ScalaがJavaより複雑で難しい言語なのは自明の理です。
0202デフォルトの名無しさん
2011/06/14(火) 01:19:14.74それこそそんな自明な話は誰もしてないんじゃね
0203デフォルトの名無しさん
2011/06/14(火) 01:32:16.59遅ればせながらありが�d
とりあえずコップ本でscalaと恋愛してみるお
0204デフォルトの名無しさん
2011/06/14(火) 02:03:54.48新しい概念を使って「構文要素をシンプルに」しているんだから、
手続き的なパラダイムにのみ親しんでいる者の視点から見れば「複雑」に見えるってことでしょ。
「プリミティブ型、static, break, continue」みたいなのは、それが以下にad hocな仕様であろうと、
広く知られている既存のC/C++的な概念に含まれてるから、学習コストはゼロで済む。
しかし、関数型パラダイムは、たとえそれがシンプルな記述を実現するものであっても、学習コストを払う必要がある。
楽園に辿り着くには、乗り越えなければならない壁があるわけで、それを無視した議論をしてもあまり意味はない。
だからこそ、関数脳本みたいな「新しいパラダイムへの導入」を目的とした書籍の役割が重要になる。
#今度の新しい本も、Scalaプログラマとしてのレベルアップという意味ではとても期待してるけどね。
0205デフォルトの名無しさん
2011/06/14(火) 02:16:50.90結局単に関数型がわからないだけだろってのは
俺も最初からそう思ってるけど
とか書いてたら「Scalaはオブジェクト指向言語です」か
真面目だなあ
0206デフォルトの名無しさん
2011/06/14(火) 02:20:40.67そのページ、超役立つよね。
口論する暇があったら、こういう仕事をするべき。
0207デフォルトの名無しさん
2011/06/14(火) 02:20:45.39炎上マーケティングという奴ですね。流行りの。
0208デフォルトの名無しさん
2011/06/14(火) 02:39:01.64メッセージパラダイムを実現している言語が真のオブジェクト指向言語だ云々、
みたいな話に、実利的な意味があまりないのと似ている。
俺達は、要件をよりシンプルでかつメンテナンスしやすい方法でコードに落とすために、
オブジェクト指向のパラダイムを活用しているわけで、理論的な美しさや構文要素の
完成度みたいなものために使っているわけではない。
例えば、時々Javaのinterfaceを「盲腸的な仕様」だと看做す議論がなされることがあるが、
「インタフェースを決める」という作業の重要性を考えれば、
構文要素の追加を遥かに上回るメリットを持った仕様であることは、容易に理解できるだろう。
俺達は、『手続き・分岐・ループの三要素のみで理解できる言語が「シンプル」で
「実用的」な言語だ』という世の中の趨勢に対して、布教活動をしなければならないわけだ。
それをやるためには、「関数型のパラダイムで記述すると、あの面倒な記述が、
これだけシンプルでメンテしやすいものに変わるんだよ」というところを地道に見せていくしかない、と俺は思う。
0209デフォルトの名無しさん
2011/06/14(火) 02:42:16.57一般的にはあんたはそのはてな民に分類されてると思うよ?
ところでこのスレで赤間世紀
http://www.amazon.co.jp/dp/4777516083
の評価出た?過去の経験からすると読む価値無しと見てるんだが、一応。
0210デフォルトの名無しさん
2011/06/14(火) 02:47:42.680211デフォルトの名無しさん
2011/06/14(火) 03:00:43.280212デフォルトの名無しさん
2011/06/14(火) 03:16:00.67真のオブジェクト指向言語が何かというのは非常に重要な話だと思うよ
個別の言語を越えたパラダイムの世界があって、
優れた言語というのはまずそのパラダイムを過不足なく実装していなくちゃいけない
言語の流行り廃りに比べて、パラダイムというのは長いスパンの寿命を持っているし、
有用性、弱点も広く知られている
これに沿うことは目先の主観的な判断より上回るメリットが得られる
matzが口ではどう言っても、Rubyなんかは真のオブジェクト指向にめちゃくちゃ拘ってるでしょ
彼の静的型嫌いは本質的に動的でないと真のオブジェクト指向とは言えないという
原理主義的な背景があると思う
個人的な感想だけど、その点において、Scalaは
オブジェクト指向としても、関数型言語としても筋がいい
Javaの機能拡張で、かつ、プリミティブがないから静的型オブジェクト指向としては問題ない
関数型言語としては、型推論がHindley-Milner式ではないから違和感を感じる人はいると思うけど
機能としては一通りある
パラダイムを知っている人間なら、Scalaの機能が
どのパラダイムの機能なのかピンとくるようにできている
それを何もわかってないやつがごちゃごちゃとまあ(以下略)
0213デフォルトの名無しさん
2011/06/14(火) 03:20:40.30書籍情報 - Scalaではじめるプログラミング
http://www.kohgakusha.co.jp/books/detail/978-4-7775-1608-7
赤間 世紀の書籍
http://www.amazon.co.jp/%E8%B5%A4%E9%96%93-%E4%B8%96%E7%B4%80/e/B004L9W4Z0/
目次の底の浅さと筆者のこれまでの粗製濫造ぶりからおそらく外れ本ですね。
類書がないテーマなら粗製濫造本にも需要があるでしょうけど、
Scala入門書は良書が複数あるからこの本はスルーしてよいと思います。
0214デフォルトの名無しさん
2011/06/14(火) 03:31:59.53パラダイムを知っている人間なら、Scalaの機能が
どのパラダイムの機能なのかピンとくるようにできている
ってのを、例えば何がどれとか、教えて欲しいです、先生
0215デフォルトの名無しさん
2011/06/14(火) 04:01:04.16高階関数の名前が関数型でよく使われるものになっているとか
あとこのパラダイムなら当然この機能があるだろうというのがある
たとえば関数型言語においてはパターンマッチが非常に重要だけど、
知らない人間にとってはなんでそんなに重要なのかわからないかもしれない
他には、case classが代数的データ型であるとか、forがモナドであるとか、
ああOption型はMaybeのことね、とか概念を先に知っていればすぐに理解できる
まあ、この辺は知らないと難しいというのもわかる
たとえばいまどきのオブジェクト指向言語でカプセル化のための
アクセス制御がなかったらびっくりするけど、
オブジェクト指向を知らない人間には複雑に見えるかもしれない
それで「protectedって何だよ。複雑すぎるだろ、この言語」とか
言われたらイライラするだろ
0216デフォルトの名無しさん
2011/06/14(火) 07:24:25.98大筋では反対ではないけど、あるパラダイムに沿った言語設計が良しとされるのは、
そのパラダイムの有用性が既に証明されているからであって、パラダイムの理論的背景
そのものが「良い」からではない、というところは間違っちゃならないと思うよ。
結局のところ、一口に「真の」といっても色々と流派があって、それぞれメリットとデメリットが
ある状況だったりするわけだし。
0217デフォルトの名無しさん
2011/06/14(火) 09:22:23.78C#のyield for
みたいな機能ってScalaにありますか?
0218デフォルトの名無しさん
2011/06/14(火) 16:21:37.59for(x <- Iterator.range(0, 10)) yield (x, x * x)
一回しかyieldできないからちょっと違う?
0219デフォルトの名無しさん
2011/06/14(火) 17:23:47.430220デフォルトの名無しさん
2011/06/14(火) 20:53:31.29赤間本批判しない理由なんなの?結局、権威には逆らえないか
本を売るための売名という認識で正しい?
0221デフォルトの名無しさん
2011/06/14(火) 20:59:14.08板違いだからマ板でやれ
0222デフォルトの名無しさん
2011/06/14(火) 21:09:56.420223デフォルトの名無しさん
2011/06/14(火) 21:12:38.330224デフォルトの名無しさん
2011/06/14(火) 21:16:09.79『やさしいScala入門 平明な例と演習問題で学ぶ』の感想というかダメだし
http://d.hatena.ne.jp/kmizushima/20100222/1266771623
『やさしいScala入門 平明な例と演習問題で学ぶ』の重箱の隅をつつく
http://d.hatena.ne.jp/kmizushima/20100222/1266824371
あなたが相手の過去記事検索すらしないで自分の妄想だけを根拠に
あいつは市販本は批判しない卑怯者だと決めつける痛い人である、
という認識で正しいと思います。
0225デフォルトの名無しさん
2011/06/14(火) 21:18:41.07たぶん世界で一番出てる国なんじゃないの
C#のyieldみたいなのは、Scalaだと限定継続、というちょっと小難しいライブラリを使えば
実現できます。ただ、一度ライブラリ作ってしまえば後は使いまわせるので、そういう標準ライブラリを
Scalaチームの人が作ってくれれば、限定継続を知らなくても良いかと思います。
>>220
本を売るための売名、という指摘はちょっと意図をつかみかねます。あと、赤間氏の
本はそもそも購入していないですし、赤間氏の本には特に権威はないかと思われます。
0227デフォルトの名無しさん
2011/06/14(火) 21:41:27.69今回のも前フリってこと?
0228デフォルトの名無しさん
2011/06/14(火) 21:46:27.47まえにはHaskellの本がまとめてでた時期もあるから、一種のはやりなんでしょう。実際に有利な風も吹いてる(twitterなど)もあるからね。日本の中って
右に習えが普通になってるから、どこか大手が積極的に使い出すと、右も左も
Scalaとなることはありえるよね。選択する人たちがプログラムを作る人とは
限らないし。Javaで糞コードに悩まされる人は多いけど、
同じ事は起こるんだろうね。
みなさん殺伐なのが好きみたいね。いっそのことscala-house.jpなんて
作ってみてはどうか?
0229デフォルトの名無しさん
2011/06/14(火) 21:49:58.862chをなんだと思ってんだ
0230デフォルトの名無しさん
2011/06/14(火) 21:52:19.820231デフォルトの名無しさん
2011/06/14(火) 21:55:20.29お前、いったい誰とケンカしてるの?
雑魚Smalltalkerなんて誰も興味ないし、
赤間本は、このスレで批判されまくりだろ。
赤間博士は情報数学の教授って感じの人で、いろんな言語の入門書を出版しているが、
どんな言語を題材にしても同じような本になるというのが、ある意味すごい人である。
ちなみに、このスレで一番最初に赤間博士の本を発売日前に批判したのはオレだ。
批判しただけでは悪いので買ってみたが、やはり情報数学の初学者向けの本って感じがした。
0232デフォルトの名無しさん
2011/06/14(火) 22:01:52.90Scala勉強会 in 渋谷
ttp://www.scala-users.org/shibuya/index.php?title=メインページ
Scala勉強会@東北
ttp://sites.google.com/site/scalatohoku/
Scala勉強会@岡山
ttp://cappuccino.jp/scala-ja/?Scala%CA%D9%B6%AF%B2%F1%A1%F7%B2%AC%BB%B3-1
天領倉敷Scala
ttp://tenryo-kurashiki-scala.appspot.com/
名古屋Scala勉強会
ttps://groups.google.com/forum/#!forum/nagoyascala
Scala勉強会@関西
ttp://cappuccino.jp/scala-ja/?Scala%CA%D9%B6%AF%B2%F1%A1%F7%B4%D8%C0%BE-1
Scala勉強会 in 札幌
ttp://www.atmarkit.co.jp/event/calendar/detail.php?event_id=11216
Scala@福岡
ttps://groups.google.com/forum/?hl=ja#!topic/scala-be/yY2ggf5K5Bk
0233デフォルトの名無しさん
2011/06/14(火) 22:04:23.60Clojureはまだ全体的な人数が少ないところも影響してる。ここでは
Scalaとの比較は書かないが、日本のJavaの人たちから見れば先入観的にも
Scalaのほうが好きなんだろう。海外の方に目を向けると両方共プログラム
を作ってる人は多いみたいだね。planet(Clojure/Scala)ともに同じ人の
記事が出ていることはある。
それにScala以上にClojureは若い言語だよ。今年で4歳だ
0234デフォルトの名無しさん
2011/06/14(火) 22:07:25.850235デフォルトの名無しさん
2011/06/14(火) 22:25:50.870236デフォルトの名無しさん
2011/06/14(火) 22:42:47.15S式慣れ親しんでる(教え込まれてる)のは、CS系の人間ばかりなので
非CS系IT技術者が多い日本では、あまり興味もたれないとおもう。
海外でも、最近はML系が多いしね。
0237デフォルトの名無しさん
2011/06/14(火) 22:43:26.130238デフォルトの名無しさん
2011/06/14(火) 22:46:14.840239デフォルトの名無しさん
2011/06/14(火) 22:46:57.500240デフォルトの名無しさん
2011/06/14(火) 22:51:54.24海外でClojure好きの会社は、
Relevance, BankSimple, BackType, FlightCasterといったところ。
あとはCascalog(Hadoopデータマイニング)使ってるデータマイニングエンジニア
0241デフォルトの名無しさん
2011/06/14(火) 22:52:57.610242デフォルトの名無しさん
2011/06/14(火) 22:58:15.89ScalaDays2011のレポート
http://el.jibun.atmarkit.co.jp/kaigaiengineer/2011/06/scala-days-2011-4018.html
を見ると、
VMwareやAmazon.comも、Scalaを使い始めた?
0243デフォルトの名無しさん
2011/06/14(火) 23:21:35.31Clojureは海外でも純粋関数言語ぐらい普及した所で伸び悩んでいます。
Scalaは順調に普及し続けています。
Groovyの普及はScalaより2年先行しています。
http://www.indeed.com/jobtrends?q=SML,Haskell,Groovy,Scala,Clojure,Ruby
Rubyの普及はGroovyより5年先行しています。
Scalaは大手の支援がなくてもRubyの普及ペースは達成しそうですが、
もっと爆発的に普及して名実とともに次世代Javaになって欲しいですね。
0244デフォルトの名無しさん
2011/06/14(火) 23:33:34.71http://www.indeed.com/jobtrends?q=SML%2CHaskell%2CGroovy%2CScala%2CClojure&relative=1
リレイティブも見たほうがいいんじゃない?
0245デフォルトの名無しさん
2011/06/14(火) 23:49:32.73Java FXより少し上程度かと思ってた。
0246デフォルトの名無しさん
2011/06/15(水) 00:25:40.96Javaライブラリのプロトタイピングにも便利だし。
0247デフォルトの名無しさん
2011/06/15(水) 00:36:15.030248デフォルトの名無しさん
2011/06/15(水) 00:39:19.470249デフォルトの名無しさん
2011/06/15(水) 00:52:17.660250デフォルトの名無しさん
2011/06/15(水) 01:27:53.710251デフォルトの名無しさん
2011/06/15(水) 01:50:07.26http://www.slideshare.net/kohsuke/jenkins-groovy
0252デフォルトの名無しさん
2011/06/15(水) 01:58:16.03ここらへんか
Web上の出現率を表す?TIOBEだと、
Javaが1位、Scalaが50位以内で、Groovyが100位以内、Clojureは圏外
0253デフォルトの名無しさん
2011/06/15(水) 02:10:50.400254デフォルトの名無しさん
2011/06/15(水) 12:42:14.76byflowくらいしかclojureでつくられたとこ知らん。
0255デフォルトの名無しさん
2011/06/15(水) 13:15:49.16それらはJavaが嫌いな人が使っているだけで、ポストJavaという感じがしない。
0256デフォルトの名無しさん
2011/06/15(水) 13:55:12.630257デフォルトの名無しさん
2011/06/15(水) 20:54:21.45プリミティブ型、static, break, continue
が有って困る事って何?
ちなみにヘタレプログラマはどんな機能があろうがなかろうがヘタレ。
0258デフォルトの名無しさん
2011/06/15(水) 21:02:59.76逆に、Javaのライブラリ使えるから、
Scala用のライブラリをわざわざ作らない&公開しない傾向にある気がする。
弱点なような。
0259デフォルトの名無しさん
2011/06/15(水) 23:16:05.01言語としての一貫性の話じゃないかな。
>>258
Java用のだと、やはりScalaの作法とズレてるから、作り直しの需要はあるっちゃある。
0260デフォルトの名無しさん
2011/06/16(木) 00:36:46.090261デフォルトの名無しさん
2011/06/16(木) 01:01:07.050262デフォルトの名無しさん
2011/06/16(木) 01:43:18.010263デフォルトの名無しさん
2011/06/16(木) 17:38:07.56駄目本オーラがすごい
中身はまだ読んでない
0264ゆるよろ
2011/06/16(木) 17:55:26.300265デフォルトの名無しさん
2011/06/16(木) 18:55:59.570266ゆるよろ
2011/06/16(木) 19:30:30.570267デフォルトの名無しさん
2011/06/16(木) 20:16:14.26再帰的じゃない構造に再帰呼び出しさせて何の意味が
0268デフォルトの名無しさん
2011/06/16(木) 20:49:40.26末尾再帰にしようと思うとそうならない場合が多いね
このへん軽くジレンマというか、再帰の例を作る難しさという感じ
0269デフォルトの名無しさん
2011/06/16(木) 21:03:41.97買わなかったけど
0270デフォルトの名無しさん
2011/06/16(木) 21:15:19.09これ、Amazonで売れる系の本でしょ?
0271デフォルトの名無しさん
2011/06/16(木) 23:31:50.23別に対象が再帰的な構造じゃないループを再帰で書いていいと思うが?
文字列は再帰的な構造とまったく言えないわけでもないし。
ただ、
・コード構造が繰り返し版と対象になってないので対比がしにくい
・単純すぎてScala的でない。再帰のwikipedia項目に任せればいい単純すぎる例。
ってところが問題だろう。繰り返し版に合わせるとすると、
def hasA(i:Int, s:String):Boolean = {
if(i < s.length) {
if(s(i) == 'a') return true
return hasA(i + 1, s)
}
return false;
}
か。
0272デフォルトの名無しさん
2011/06/17(金) 02:01:15.90わざわざreturn書いたりelse使ってないのは意味あるの?
赤間氏の本の話でしょうか?
0274デフォルトの名無しさん
2011/06/17(金) 02:56:03.000275デフォルトの名無しさん
2011/06/17(金) 08:57:20.38オモシロかったら教えてくれ。本屋にでも探しに行くから。
0276デフォルトの名無しさん
2011/06/17(金) 09:09:10.91たとえば2分木の左の枝に対してまず再帰したら、そのあと右の枝に対しても
再帰するわけで、末尾再帰には普通はならない(末尾再帰にしようとするなら
継続渡しとかになる)。
きれいに末尾再帰になるのは、単方向リストの処理とか、単純なループ状の
繰返しを再帰にするような場合。
0277デフォルトの名無しさん
2011/06/17(金) 10:03:31.30> たとえば2分木の左の枝に対してまず再帰したら
末尾じゃないのに末尾再帰になるわけないだろw
0278デフォルトの名無しさん
2011/06/17(金) 10:11:09.42再帰は通常末尾じゃない、
っていう話じゃないの?
0279デフォルトの名無しさん
2011/06/17(金) 11:21:32.070280デフォルトの名無しさん
2011/06/17(金) 12:58:42.690281デフォルトの名無しさん
2011/06/17(金) 18:55:55.910282デフォルトの名無しさん
2011/06/17(金) 18:58:13.03末尾再帰に「末尾再帰の最適化」という技法がある、というだけで、
末尾再帰じゃなきゃダメ、というものではない。
0283デフォルトの名無しさん
2011/06/17(金) 19:08:34.48tail jumpする処理系作りたければ独自スタック管理。
効率目指してtail jump導入してもかえって遅い。
0284デフォルトの名無しさん
2011/06/17(金) 21:19:40.570285デフォルトの名無しさん
2011/06/17(金) 21:28:00.960286デフォルトの名無しさん
2011/06/17(金) 21:35:22.280287デフォルトの名無しさん
2011/06/17(金) 21:39:05.89http://twitter.com/functional2ch
ここの書き込みを転載しているBot
0288デフォルトの名無しさん
2011/06/17(金) 21:44:34.240289デフォルトの名無しさん
2011/06/17(金) 22:35:28.67> FAIRY TAIL - JUMP大好きっ娘です!
orz
0290デフォルトの名無しさん
2011/06/17(金) 22:49:33.74tail jumpは違うの?
0291デフォルトの名無しさん
2011/06/17(金) 22:56:21.48return f()の形の呼び出しは行きっぱなし。
戻ってきても返値をバケツリレーするだけだし。
ただJVMではclass verifierにおいて、stack増減もチェック対象なので、
tail callを入れるのはかなり大掛かりな改造になる。
LLVMは既に入ってる。
0292デフォルトの名無しさん
2011/06/18(土) 12:14:27.08コップ本読んだけど、一応基礎部分も通読しとくかー、と思って読んでるんだけど…。
P26,P27のfor文の例、間違ってね?
P27のScalaコードは、Javaと同じ結果を期待するのなら
val xs = List(0,2,4,6,8)
val ys = List(1,3,5,7,9)
for(x <- xs; y <- ys; if x > 3; if y > 4) yield x + ":" + y
という記述にして(二つめのifでxとy間違ってない?)、
結果も
List(4:5, 4:7, 4:9, 6:5, 6:7, 6:9, 8:5, 8:7, 8:9)
になるんじゃないのこれ?
あと、P25について細かい事なんだけど、
for( n <- 0 to 10 if n % 2 == 0;if n % 4 ==0 ) {print( n + "' "}
って、一つめのifの条件、すごく意味ないよね…。
なんで互いに素である2と3とかにしなかったの?
…うーん、これは…なんか不安になってきたぞ。
やはり秀和クオリティは伊達じゃなかったか…?
0293デフォルトの名無しさん
2011/06/18(土) 12:25:50.58読んでるにょ(笑)
にょ(笑)
ばかじゃね
0294デフォルトの名無しさん
2011/06/18(土) 12:27:57.710295デフォルトの名無しさん
2011/06/18(土) 12:45:38.00キモオタなんでつwww
P34にも2つスペルミス発見…。
val str = new String("aaa")"
fref? fret?
P28のチェック例外のが採用されなかった理由は一言理由について言及すべきだよね。
P33の高階関数の初歩の説明で
def int2EvenOrOddString(f:(Int)=>Boolean, n:Int)={
if(f(n)) "偶数" else "奇数"
}
ってのは関数のネーミングがちょっと良くないよね…。(というか、返す値を"真","偽"ぐらいにすべきじゃね?)
うおおおおおおおぉぉぉぉぉぉぉぉ………!!!!!!!
0296デフォルトの名無しさん
2011/06/18(土) 12:46:48.51でもこれ、まともに校正されてないでしょ…。
0297デフォルトの名無しさん
2011/06/18(土) 13:32:04.710298デフォルトの名無しさん
2011/06/18(土) 14:23:36.05しかもその対応がよくわからんから移行できないでいる。
定義のエントリの間に空行入れないと文句言うし、
かと言って依存するライブラリの List のエントリでは空行入れるとダメだったり。
DefaultWebProject も plugin になってからうまく動かないし。
0299(1) ◆CgacaMDhSQ
2011/06/18(土) 16:15:36.19まず、1件目はバグです。これは全く申し訳ないしか言いようがありません。
> for( n <- 0 to 10 if n % 2 == 0;if n % 4 ==0 ) {print( n + "' "}
については、共著による弊害というかなんというか…。意味が無いというのは
ご指摘の通りです。
> やはり秀和クオリティは伊達じゃなかったか…?
その辺りは、一通り読んで判断していただければ。実際の所、共著の弊害として、
章・節ごとに内容・品質にばらつきがあります。本の末尾に執筆分担があるので、
その辺りを参考にしていただければと思います。
0300(2) ◆CgacaMDhSQ
2011/06/18(土) 16:16:29.83>>295
> P28のチェック例外のが採用されなかった理由は一言理由について言及すべきだよね。
その辺りについては、あえて言及すべきだったかどうかは、微妙なところです。
> def int2EvenOrOddString(f:(Int)=>Boolean, n:Int)={
> if(f(n)) "偶数" else "奇数"
> }
これはその通りですね。よろしくないネーミングです。
>>296
校正はされてます。ただ、校正の方法に問題があったのは確かです。その点については申し訳ない、としかいえません。
0301デフォルトの名無しさん
2011/06/18(土) 19:12:56.84iterA.toTraversable.headOption
がベストかな?
>>298
同じく
0302デフォルトの名無しさん
2011/06/18(土) 20:07:03.70IteratorをtoTraversableすると、実際はStreamになってるみたいだが、
そのちょっとした無駄なオブジェクトが生成されることを気にしなければ、短くかけるしそれでいいんじゃないのかな
0303デフォルトの名無しさん
2011/06/18(土) 20:14:13.510304デフォルトの名無しさん
2011/06/18(土) 20:43:01.14なんてどうだろ
0305302
2011/06/18(土) 21:18:31.10>>303
リソース無駄遣いというのがどういう意味で言ってるのか知らないが、
Iteratorのコードは上記の様になっていて、
Stream.consは2番目の引数は遅延評価されるから、どんなにIteratorのサイズが大きくても、
Streamを生成する時間がO(n)になるわけではなく、定数時間しかかからないはず。
という意味で「ちょっとした無駄なオブジェクト」と言ったんだが。
それさえもったいないなら、IteratorのhasNextを直で呼んで調べる的な方法になる
>>304
コンパイル通らないよ?
0306デフォルトの名無しさん
2011/06/18(土) 21:31:24.620307デフォルトの名無しさん
2011/06/18(土) 21:31:27.25ソース読んでなかった…
Iteratorのみで書くなら>>304もいいですね
scala> "hoge".iterator.find(_ => true)
res0: Option[Char] = Some(h)
0308デフォルトの名無しさん
2011/06/19(日) 00:56:27.58レスありがとうございます。
うん、でもこの1件目のバグはかなりアウトやでぇ…。
「開発とデバグ終わりました。エビデンス取りました。」
で、エビデンスが間違った結果出してたのに納品したレベル…。
とりあえず通読する予定です。
何かおかしいと思ったらまた書くわ。
>秀和クオリティ
翔泳社・オームなんかと比べると、あま〜い仕事してる気がするよ…。
罵倒した所でいい仕事が出来るようになるかっていうと違うんだけど、
「これ目通してないだろ?」っていうレベルのものが頻出するとちょっとね…。
版を改めずに刷で改められないかな?
ごめんね、文句ばっかりで。
俺も一人前のScala戦士として前線に立てるように頑張るから…。
0309デフォルトの名無しさん
2011/06/19(日) 01:27:47.48ぶっちゃけすぎだろ。
共著者にバカがいるってことかよ…
0310デフォルトの名無しさん
2011/06/19(日) 01:43:02.62しーっ!
0311デフォルトの名無しさん
2011/06/19(日) 09:35:17.19オレにもそう読めた。
著者の一人が書く事じゃないよな。
0312(2) ◆CgacaMDhSQ
2011/06/19(日) 10:58:28.10>>311
いや、そういう意図ではありません。
共著であり、チェック体制に若干問題があったために(これは、もちろん詳細はかけません)、そういう部分が残ってしまった、
という反省です。内部の事情についてはさすがに書かないようにしています。書き方がまずかったです。末尾に各執筆者の
担当箇所一覧があるとはいえ、基本的に書籍の間違いについての責任は、共著者の共同責任だと考えています。
0313(3) ◆CgacaMDhSQ
2011/06/19(日) 11:09:16.42・共著だから自分の担当箇所以外についてのミスの責任は自分には無い、とは考えていない。
・ただし、チェック体制に若干問題があったので、書籍としての品質については、担当者ごとにばらつきがあります。
・私の担当箇所以外でミスがあったことについて、その著者がどうとかそういう憶測はやめていただけると助かります。これは自分の書き方がまずかったですが。
・ミスの指摘には可能な範囲でお答えします
0314(4) ◆CgacaMDhSQ
2011/06/19(日) 11:15:08.991件目については、これはほんと平謝りするしかないです。改めて製本版を
通読しましたが、これ以降、このレベルの間違いは無かったので、大丈夫かと思います。
>「これ目通してないだろ?」っていうレベルのものが頻出するとちょっとね…。
>版を改めずに刷で改められないかな?
その辺りは検討してみます。ただ、少なくとも正誤表には皆様のご指摘は可能な限り反映します。
0315(4) ◆CgacaMDhSQ
2011/06/19(日) 11:20:49.79ミスは確かに問題ですが、それ以上に重要なのはコンテンツだと思うので。
0316デフォルトの名無しさん
2011/06/19(日) 12:37:04.27共著担当関係なくそういうクオリティになるんだろ
0317デフォルトの名無しさん
2011/06/19(日) 14:32:10.560318デフォルトの名無しさん
2011/06/19(日) 15:01:14.10Scala初代スレを立てた人に「2chを控えた方が」はいまさら過ぎると思います。
0319デフォルトの名無しさん
2011/06/19(日) 15:16:51.490320デフォルトの名無しさん
2011/06/19(日) 15:55:06.320321デフォルトの名無しさん
2011/06/19(日) 18:40:02.34Scalaスレを立てた人は◆CgacaMDhSQ じゃないよ。ソースは以下の講演
ttp://www.nicovideo.jp/watch/sm2902315
やっぱそうですかね。2chユーザであっても本を買ってくれたお客さんだから
指摘には対応したいな、とか思ってしまうのですけど、それで誤解を
招く発言しちゃうようなら、2chで発言しない方がいいですね…
アドバイス通り、しばらく2chはROMに徹しておきます。
0323デフォルトの名無しさん
2011/06/19(日) 20:00:48.03余裕があるならROMらずに発言して善導してもらいたいけどね。
>2chユーザであっても
なめんなよ、と言えよう。
ここもコミュニティの一つとして扱った方がいいと思うよ…。
あなたが出てくる必要なないかもだけど、低く見てるのが透けて見えちゃう発言は良くないと思われ。
P58の上の方のソース記述部分の補助コンストラクタって、
new HttpURL(host,port,path)じゃなくて
new HttpURL(host, path)なんじゃねーの?
あとP144のコードの例なんだけどさ
|n = 1;
|println(n); //1
|m = n;
|n = n + 1;
|println(m); //2になる言語があるか?
って書いてて、その後に
>中にはそのような「変態的動作」を行う言語もきっとあるでしょう
とか書いてるけどさ、…これは論理変数がdisられてるのかな…?
0324デフォルトの名無しさん
2011/06/19(日) 20:07:18.06名無しのくせに態度でかかった。
反省してる…
0325デフォルトの名無しさん
2011/06/19(日) 20:21:34.13やっきどーげざっ!
0326デフォルトの名無しさん
2011/06/19(日) 20:37:35.31大変失礼しました。
その動画も見たのに記憶が改竄されていました。
初代スレを立てたのは石田さんですね。
初代スレが立ったころ水島さんはScalaを理解済みです。
http://web.archive.org/web/20070709180014/http://www2.coins.tsukuba.ac.jp/~i021216/diary/
水島さんがScalaの記事を書き始める。(2007/06)
http://d.hatena.ne.jp/syttru/20080305/1204733669
石田さんがScalaに興味を持つ。
http://pc12.2ch.net/test/read.cgi/tech/1205156417/
石田さんがScala初代スレを立てる。 (2008/03/10)
http://d.hatena.ne.jp/syttru/20080314/1205341962#c
水島さんが石田さんにScala文法を解説する。
0327デフォルトの名無しさん
2011/06/19(日) 20:59:10.91みたいな気持ちは分かるけど、一覧性の意味でも、その辺は自分の
サイトでまとめて書いた方がいいんじゃないかな。
どうせ、ここを見てる連中ならサイトの方も見てるだろうしw
0328デフォルトの名無しさん
2011/06/19(日) 22:04:13.900329デフォルトの名無しさん
2011/06/19(日) 22:41:52.80Prologならn=n+1がfailするから無問題
0330デフォルトの名無しさん
2011/06/19(日) 22:52:32.23C++でmがリファレンス型だと2になるな。
ただ宣言と定義を同時にしないといけなくて、
参照先の変更は不可能だから、字面上はそうならないが。
int& m = n; となる。
0331デフォルトの名無しさん
2011/06/19(日) 23:46:46.350332デフォルトの名無しさん
2011/06/19(日) 23:52:55.710333デフォルトの名無しさん
2011/06/20(月) 00:40:07.44なんかうざい
0334デフォルトの名無しさん
2011/06/22(水) 20:36:35.240335デフォルトの名無しさん
2011/06/22(水) 23:42:47.820336デフォルトの名無しさん
2011/06/23(木) 23:23:13.73なにがなんでも、Setter、Getterメソッド書けって言われました。
でも、Scalaでは、Setter,Getterは書かないよね。
どうして?
なぜ、Javaでは、クラスのフィールドに直接アクセスするのが悪とされてたの?
0337デフォルトの名無しさん
2011/06/23(木) 23:27:52.510338デフォルトの名無しさん
2011/06/23(木) 23:53:07.49class MyClass{
int a;
}
MyClass m = new MyClass();
x = m.a ;
m.a = y;
というように、書かなくてもget,setできるけど、 どうちがうの?
0339デフォルトの名無しさん
2011/06/24(金) 00:03:20.570340デフォルトの名無しさん
2011/06/24(金) 00:06:22.19EffectiveJavaを買って読んでみよう!
0341デフォルトの名無しさん
2011/06/24(金) 00:17:06.18自分で書かなくていいってだけで
外部に公開される変数を宣言したら自動でsetter/getterが定義されてる
直接変数に代入してるように見えるのはsetter呼び出しのシンタックスシュガー
class MyClass {
var a: Int = _
}
val m = new MyClass()
val x = m.a
m.a = y
上のように書いたら実際は下のように展開される
class MyClass {
private[this] var aa: Int = _
def a = aa
def a_=(value: Int) { aa = value }
}
val m = new MyClass()
val x = m.a
m.a_=(y)
0342デフォルトの名無しさん
2011/06/24(金) 00:34:34.55ありがとうさぎ。
でも、それって、Javaでも同じじゃないの?
Javaも自分で書かなくても、setter/getter できるでしょ。
>338の
x = m.a ;
m.a = y;
みたいなのは、自動でsetter/getterが定義されているのと違うの?
もちろん、
・Javaでは、自動setter/getter 定義しているわけでない。
・Scalaでは、自動setter/getter 定義されていて、シンタックスシュガーで、そうかける。
というのは良く言われていることだけれども、
両者の違いって、なんなの?
Scalaの自動setter/getter って Javaのpublicフィールドに直接アクセスするのと比べて
何がうれしいの?
0343デフォルトの名無しさん
2011/06/24(金) 00:50:13.30なら結局これってpublicフィールドとどう違うんだよ
という議論があったね。
0344デフォルトの名無しさん
2011/06/24(金) 01:03:29.59じゃあ仮に、後になってaは0より大きい数値でなければいけないとなったとする
class MyClass {
private[this] var aa: Int = _
def a = aa
def a_=(value: Int) {
require(value > 0)
aa = value
}
}
と修正するだけでOK。呼び出し側は修正の必要がない。
Javaでpublicフィールドに直接アクセスしてた場合、メソッド呼び出しに書き換える必要がある
0345デフォルトの名無しさん
2011/06/24(金) 01:10:27.38IDE使えよ。
0346デフォルトの名無しさん
2011/06/24(金) 01:18:51.620347デフォルトの名無しさん
2011/06/24(金) 01:19:40.66最初からメソッドにしとけば中身が変わっても呼び出し側はリコンパイルが不要になる
なのでScalaの見た目はフィールドだけど実際はメソッドって方が変化に強いはず
ちなみにC#のフィールドもプロパティにかえたら呼び出し側はリコンパイルが必要
0348デフォルトの名無しさん
2011/06/24(金) 07:53:42.52Effective Java読めつってんだろ
0349デフォルトの名無しさん
2011/06/24(金) 08:34:17.100350デフォルトの名無しさん
2011/06/24(金) 20:02:43.25scalaでプログラムは組んだことがないんでよく知らん。だけど、無
限ストリームを使って、他の言語でよく取り入れられてるフィボナッチを
作ってみた。でも型宣言が足を引っ張ってる感じがある。
この手のストリームを作るときにはかえって足かせになってるのかもな。
scala> def ite (f:(Tuple2[Int,Int])=>Tuple2[Int,Int],t:Tuple2[Int,Int]):Stream[Tuple2[Int,Int]]=Stream.cons(t,ite(f,f(t)))
ite: (f: ((Int, Int)) => (Int, Int), t: (Int, Int))Stream[(Int, Int)]
scala> def fib (t:Tuple2[Int,Int]):Tuple2[Int,Int]=(t._2,t._2+t._1)
foo: (t: (Int, Int))(Int, Int)
scala> ite(foo,(0,1)) take 10 print
(0,1), (1,1), (1,2), (2,3), (3,5), (5,8), (8,13), (13,21), (21,34), (34,55), empty
mapを使って第一要素だけ取り出したら完了だけど、scalaのmapはまだ知らんので
こうやって見てると、一応関数型言語の心は少しは持ってるとは思う。
0351デフォルトの名無しさん
2011/06/24(金) 20:07:33.81洗練されてないという印象も持ったな。
0352デフォルトの名無しさん
2011/06/24(金) 20:24:46.55res0: List[(Int, Int)] = List((0,1), (1,1), (1,2), (2,3), (3,5), (5,8), (8,13), (13,21), (21,34), (34,55))
scala> Stream.iterate((0,1)){case (a,b) => (b,a+b)}.map(_._1).take(10).toList
res1: List[Int] = List(0, 1, 1, 2, 3, 5, 8, 13, 21, 34)
こんなのも
def fibFrom(a: Int, b: Int): Stream[Int] = a #:: fibFrom(b, a + b)
参考URL
http://eed3si9n.github.com/scala-collections-doc-ja/
0353デフォルトの名無しさん
2011/06/24(金) 20:26:09.360354デフォルトの名無しさん
2011/06/24(金) 20:27:31.81http://eed3si9n.github.com/scala-collections-doc-ja/collections_14.html
0355デフォルトの名無しさん
2011/06/24(金) 20:41:50.490356デフォルトの名無しさん
2011/06/24(金) 21:03:03.15OCaml野郎がやってきたときにはここぞとばかりに反撃にでる
0357デフォルトの名無しさん
2011/06/24(金) 21:11:18.73さんきゅう
やはりもっと簡潔にかけるね。
0358デフォルトの名無しさん
2011/06/24(金) 21:13:18.80だから、タプルからタプルを返す関数ならなんでもおkです。
>>352をみると::でそれを実現してんねんな。
0359デフォルトの名無しさん
2011/06/24(金) 22:03:49.53def ite[A](f: A => A, start: A): Stream[A] = Stream.cons(start,ite(f,f(start)))
Stream.iterateの再発明になったけど
0360デフォルトの名無しさん
2011/06/25(土) 01:48:08.20ありがと。皆さんのアドバイスに色々勉強になりました。
Stream.iterateってあるんですね。どうせあるんだろうなとは思ってたんですよ
(なければないでまずいような関数ですしね。)
0361デフォルトの名無しさん
2011/06/25(土) 01:52:50.340362デフォルトの名無しさん
2011/06/25(土) 01:53:59.22lazy val fs:Stream[Int] = 0 #:: fs.scanLeft(1)(_+_)
0363デフォルトの名無しさん
2011/06/25(土) 04:58:57.94全く分からん
0364デフォルトの名無しさん
2011/06/26(日) 08:57:38.91そうでないと相変わらず set, seq, map, タプルとかから作り上げることになる。
いろんなGraphの代数データ型とかデフォルトで用意しろー>おだ
0365デフォルトの名無しさん
2011/06/26(日) 14:04:45.31自分勝手なクレーマーの典型例を見た
0366sage
2011/06/26(日) 14:26:36.37そんなに必要だと思って自信があるなら、自分でライブラリ作って、
それを本家にマージしてくれって言うくらいのことやってみればいいんじゃないの?
0367デフォルトの名無しさん
2011/06/26(日) 20:01:05.05// 何かの関数
def func () = {
println("in the func()")
"executing func()"
}
// 名前渡しされる関数
def hoge(f: => String) = {
println("in the hoge()");
f
}
実行すると↓
scala> hoge(func)
in the hoge()
in the func()
res33: String = executing func()
hoge関数の引数のところは、「Stringを返す関数をfという名前で受け取る」
っていう認識であってる?
あと、
def piyo(f:Int => String) = f(10)
っていうのも名前渡しになるんだよね?
この場合はの引数の意味は「Intを引数に取って、Stringを返す関数を、fという名前で受け取る」
ということ?
0368デフォルトの名無しさん
2011/06/26(日) 23:25:27.23それはどちらも値渡しだと思う
0369デフォルトの名無しさん
2011/06/27(月) 00:11:11.97名前渡しは、引数に渡した式を評価せずにそのまま関数に渡し、
関数内で参照するたびに式を評価するという方式。
引数の式がその場では評価されず、
hoge()内でfが参照された時点で評価されるため、
以下のような結果になる。
scala> hoge({println("in the arg");"executing arg"})
in the hoge()
in the arg
res0: String = executing arg
しかし、piyo()では引数を評価せずに渡しているわけではなく、
あくまで評価した結果の関数を渡しているだけなので、
名前渡しではない。
(違いが分かりやすいようにpiyo()を改変している)
scala> def piyo(f:Int=>String) = {println("in the piyo()");f(10)}
piyo: (f: (Int) => String)String
scala> piyo({println("in the arg");_.toString})
in the arg
in the piyo()
res1: String = 10
0370デフォルトの名無しさん
2011/06/27(月) 00:40:41.67>hoge関数の引数のところは、「Stringを返す関数をfという名前で受け取る」
>っていう認識であってる?
f は引数を取らないので関数ではない。(内部的には関数で実装されているかもしれないが)
hoge() 内の f の後ろに () を追加するとエラーになることからも、関数でないことは明らか。
あくまで参照するたびに式が評価される特殊な String だと考えるのが無難だと思う。
0371デフォルトの名無しさん
2011/06/27(月) 01:21:33.68> f
returnが省略されているからややこしいのかもしれないが、
単に引数fを返り値にしているだけだぞ。
ただ名前渡しだから、その時点で評価されるというだけ。
0372デフォルトの名無しさん
2011/06/27(月) 03:24:46.34名前渡しは実装上では
Function0のシンタックスシュガー
def hoge(f: Function0[String]) = {
println("in the hoge()");
f()
}
hoge( new Function0[String] {
override def apply() = func()
})
のように展開される
0373デフォルトの名無しさん
2011/06/27(月) 11:28:55.91ただ自由変数とか細部まで、実装方法で操作的に把握しようとすると、
結局ややこしいので、名前渡しをちゃんと理解するのがいい。
0374367
2011/06/27(月) 14:58:24.82教えてもらったことを咀嚼してるけど正直まだよく分かっていない。ごめん。
取り合えず今読んでる本を最後までちゃんと読み切ってみることにした。
そうすれば過程で感覚的に分かることもあるだろうし、それをさらに深めていく。
0375デフォルトの名無しさん
2011/07/02(土) 00:35:08.03かえってややこしくなるだけなので、概念を理解するのが良いと思う。実際にややこしくなる例:
class RichAny[T](block: => T) {
def until(cond: => Boolean) {
while(!cond) block
}
}
implicit def enablePostUntil[T](block: => T): RichAny[T] = new RichAny(block)
var i = 0
{ println(i); i+= 1 } until (i > 10)
こんなもん誰もつかわねーよと言われそうだが、Streamは実際にこのテのimplicit conversion(consWrapper)使ってる。
0376デフォルトの名無しさん
2011/07/07(木) 07:43:43.410377デフォルトの名無しさん
2011/07/08(金) 04:27:05.25Windows環境では、OracleのVM を使った方が速いのかな?
0378デフォルトの名無しさん
2011/07/08(金) 08:26:57.61ttp://www.ibm.com/developerworks/jp/java/library/j-java7.html?ca=drs-jp
起動が早いってのはfscやsbt使わない人には嬉しいかも
0379デフォルトの名無しさん
2011/07/08(金) 09:20:54.920380デフォルトの名無しさん
2011/07/10(日) 09:48:58.850381デフォルトの名無しさん
2011/07/10(日) 10:32:02.940382デフォルトの名無しさん
2011/07/10(日) 10:50:47.200383デフォルトの名無しさん
2011/07/10(日) 11:15:39.91今度のJava SE(まだ6)から付いてくる。
>>381
別のJVM実装として付いてくる。
>>382
報道を読む限り全てに付いてくる。
有償のみ付いてくるのはJRockitの開発運用系ツール。
続きは別のスレか板でやってね。
0384デフォルトの名無しさん
2011/07/10(日) 14:45:53.320385デフォルトの名無しさん
2011/07/10(日) 23:06:12.120386367
2011/07/11(月) 04:43:18.800387デフォルトの名無しさん
2011/07/11(月) 05:30:03.38どんなもんか知らんけど
0388デフォルトの名無しさん
2011/07/11(月) 08:38:23.130389デフォルトの名無しさん
2011/07/11(月) 08:40:41.450390デフォルトの名無しさん
2011/07/11(月) 09:48:00.95圧倒的と言っても相対的な事でマイナーだし。
他はもっとマイナーってこと。
0391デフォルトの名無しさん
2011/07/11(月) 23:07:50.07Play! を許すなら grails も Scala plugin がある
0392デフォルトの名無しさん
2011/07/16(土) 17:23:42.600393デフォルトの名無しさん
2011/07/16(土) 21:18:39.06http://oss.infoscience.co.jp/scala/liftweb.net/
play scala - Rails風
http://playscalaja.appspot.com/
この二つは日本語のサイトあるんだね
Scalatra - Sinatra風
Sinatraは薄いからScalateなどと一緒に使う
0394デフォルトの名無しさん
2011/07/18(月) 01:49:45.54("" /: lines) { (acc, line) =>
acc + line match {
case "hoge" => "hage"
case _ => // エラーなのでfoldLeftの外にそのことを伝えたい
}
}
0395デフォルトの名無しさん
2011/07/18(月) 02:21:55.670396デフォルトの名無しさん
2011/07/18(月) 14:37:21.230397デフォルトの名無しさん
2011/07/18(月) 15:03:21.29それが無理なパターンならEither型使うとか
0398デフォルトの名無しさん
2011/07/18(月) 15:59:10.76あんまりいいサイト見つからなかったけど…
http://en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B
0399デフォルトの名無しさん
2011/07/18(月) 17:14:37.150400デフォルトの名無しさん
2011/07/18(月) 20:58:39.83エラーが起きた時点で、残りの計算が必要でない、無意味なら例外、
とりあえず全部計算したいなら Either だろうね
0401394
2011/07/19(火) 06:39:42.26だとすると、計算コストが問題にならない場面なら例外を使うことになるのかな。
Scalaってgotoやbreakはないよね。。
0402デフォルトの名無しさん
2011/07/19(火) 07:44:03.73breakable
0403デフォルトの名無しさん
2011/07/20(水) 00:39:38.43breakableも、内部的には例外をスローしてやってるんじゃ?
0404デフォルトの名無しさん
2011/07/20(水) 08:40:20.75https://lampsvn.epfl.ch/trac/scala/browser/scala/tags/R_2_9_0_1/src//library/scala/util/control/Breaks.scala#L60
0405デフォルトの名無しさん
2011/07/20(水) 22:26:41.130406デフォルトの名無しさん
2011/07/21(木) 00:51:32.790407デフォルトの名無しさん
2011/07/21(木) 01:02:12.820408デフォルトの名無しさん
2011/07/21(木) 04:00:01.180409デフォルトの名無しさん
2011/07/21(木) 04:07:32.840410デフォルトの名無しさん
2011/07/21(木) 12:12:05.750411デフォルトの名無しさん
2011/07/21(木) 17:25:15.310412デフォルトの名無しさん
2011/07/21(木) 18:42:19.320413デフォルトの名無しさん
2011/07/21(木) 21:17:24.970414デフォルトの名無しさん
2011/07/22(金) 08:17:14.30でも英語たからなんて書いてあるかんからないね。
0415デフォルトの名無しさん
2011/07/22(金) 13:32:28.080416デフォルトの名無しさん
2011/07/22(金) 22:19:34.440417デフォルトの名無しさん
2011/07/23(土) 00:06:13.120418デフォルトの名無しさん
2011/07/23(土) 00:34:10.43こっちはスタックオーバーフローするけどね…。
https://gist.github.com/1099680
0419デフォルトの名無しさん
2011/07/23(土) 03:27:23.21昔ながらのikvmで動的にトランスレート+scala向けの機能追加なのか?
それともilasmにコンパイル出来るのか?
0420デフォルトの名無しさん
2011/07/23(土) 10:07:34.22このページの内容、ホントはScalaだとStreamクラス使えばいい、って理解でいいのかな?
0421デフォルトの名無しさん
2011/07/23(土) 16:44:46.430422デフォルトの名無しさん
2011/07/23(土) 22:28:16.53だけどscalaコマンドの高速版(fs?)はないのかな?
0423デフォルトの名無しさん
2011/07/23(土) 23:02:11.65おまえらの学歴ってどんな感じなの?
生物系の学部卒の日曜プログラマには、難しいかなぁ。
0424デフォルトの名無しさん
2011/07/23(土) 23:30:08.580425デフォルトの名無しさん
2011/07/23(土) 23:36:01.58機械系の学部卒の底辺プログラマでもやってるから気にすんな。
学歴とか関係ねぇ、多分。
とか言っても情報系院卒とかいう人にはコンプレックス持っちゃってるな、自分…。
スタートラインが違いすぎて…。
0426デフォルトの名無しさん
2011/07/23(土) 23:36:47.420427デフォルトの名無しさん
2011/07/23(土) 23:37:17.140428デフォルトの名無しさん
2011/07/23(土) 23:43:34.13そう思うだろ?
でも自分、大学までPC触った事ほとんど無くて、彼らはかなりの数が小学生から触ってたりするんだぜ…。
6年の差、どころか10年以上の差があると感じてるんだぜ…。密度の濃い10年以上の差が。
しかも自分は引きこもってて多留してるから余計にコンプレックスです。
ごめんなさい最近Scala触ってないです。
実践Scalaのデザインパターンの章面白かったです。
0429デフォルトの名無しさん
2011/07/24(日) 00:58:50.98これじゃメジャーになれないよ
0430デフォルトの名無しさん
2011/07/24(日) 01:33:05.71あるものを無いといってもネタにすらならないなあ
0431デフォルトの名無しさん
2011/07/24(日) 07:10:17.51就職してから初めてスターエンジニアやってる人もいるんだから、
まだまだこれからだよ。
0432デフォルトの名無しさん
2011/07/24(日) 07:27:51.780433デフォルトの名無しさん
2011/07/24(日) 11:24:24.960434デフォルトの名無しさん
2011/07/24(日) 12:16:54.64プログラミングなんて「正しい考え方」が身についてるかどうかだ。
何年やってても、スパゲッティコードを量産してドヤ顔してる奴なんていくらでもいる。
0435デフォルトの名無しさん
2011/07/24(日) 15:34:46.71俺がそれだな
最近良いコードと設計って何だろうってのが本当に分からなくなってきた
0436デフォルトの名無しさん
2011/07/24(日) 18:58:28.57最小のサイズで書かれたコードが駄目なことはほとんどない
だから言語も短く書けるものを選んだほうがいい
0437デフォルトの名無しさん
2011/07/24(日) 19:14:05.94重要なのは、見た時に意味が明瞭なこと。
長いコードが駄目なのは、見た時に意味が分からないからであって、
意味もなくワンライナーで書かれたコードもやはり有害。
特に変数名は、多少長くなってもその変数が置かれた文脈において、
意味が明確であるようにつけるべき。中途半端に省略しようとすべきではない。
0438デフォルトの名無しさん
2011/07/24(日) 19:28:22.73関数型っぽくてカッコいいいけど、そのコード片が何をしているのか分からなくなる。
これは、複雑な正規表現が暗号みたいになってデバッグ不能になるのと似ている。
呪文を操る魔術師(ウィザード)を気取りたいなら別だけど、それは俺の見えないところでやってくれ。
0439デフォルトの名無しさん
2011/07/24(日) 19:32:30.64変数名が長くなるのは、それが属しているコードブロックが扱おうとしている処理の範囲が広すぎて曖昧だから、だな。
だとすれば、変数名を短くしたいなら、そのコードブロックの位置づけを見直せばいい。
0440デフォルトの名無しさん
2011/07/24(日) 19:38:58.35コレクション操作を考えてみればいい。
Javaのfor文まみれのコードと、Scalaの高階関数を使ったコード、どちらがシンプルだろうか。
これは、単純に人間がコードをタイプする量を少なくすることとは全く違う。
ネットに転がっているScalaで書かれたコードを見ると、
変数名を過剰に省略したり、ワンライナーで書いてドヤ顔しているものを散見するが、
Scalaの記述力は、そういうことをするために使うものではない。
0441デフォルトの名無しさん
2011/07/24(日) 19:55:19.300442デフォルトの名無しさん
2011/07/24(日) 20:12:21.460443デフォルトの名無しさん
2011/07/24(日) 20:22:50.34>ワンライナーで書いてドヤ顔
これは同意。
あれはワンライナーでどれだけ書けるかっていうゲームを楽しんでいるものだろう。
俺もそういうゲームには興味がない。
> 変数名を過剰に省略したり、
この辺は、昔と今でパラダイムシフトがあったところ。
最近は、変数名は、短ければ短いほど良いとされている。
長い変数名をつけなければいけないようなコードは、たぶん、全体設計がうまく行っていない。
この辺は、>>439 も言っていることだと思う。
変数名は長く、、っていうのは、昔の言語は、いちいちそういうのを気にする必要があったから。
変数名が短くても良いように、言語の記述力が上がってきたからね。
C言語からC++になった時、あるブロック内で完結しているローカルな変数は、
短ければ短いほど良いはずなのに、いちいち長い名前つけている人がいるねえ。。
( C言語はブロックのスコープが広くなりがちだから、長い変数名で区別する必要があった。)
>Javaのfor文まみれのコードと、Scalaの高階関数を使ったコード、どちらがシンプルだろうか。
C言語の時代では、コレクション操作は自分で配列のインデックスを意識してfor文回すのが美しいとされてきたものだねえ。。
時代によって、良いコード・良い設計の指標は変わるものである。
0444440
2011/07/24(日) 21:19:53.88> C言語の時代では、コレクション操作は自分で配列のインデックスを意識してfor文回すのが美しいとされてきたものだねえ。。
データがメモリ上でどう展開されているのか、意識したコーディングが要請されていた時代の産物だなぁ。
ソフトウェアの複雑さが上がるに伴って、下のレイヤを抽象化することが必須になったことで、変わらざるを得なくなった。
0445デフォルトの名無しさん
2011/07/24(日) 21:25:11.07美しさはその言語が提供する抽象化レベルや構文の一貫性などに依存する
0446デフォルトの名無しさん
2011/07/24(日) 21:30:47.780447440
2011/07/24(日) 22:04:53.89なるほど、自分がやろうとしているのが何か、によって、良いコードの定義が違うのだなあ。
ところで、>>438の言うところの、
「過度なポイントフリースタイルの利用はよくない。」 っていうのは分かる気がする。
( PointfreeってHaskell界隈の言葉らしいけど、Scalaでもそう言うのか?)
クラスによるオブジェクト指向が流行った時、変なクラス設計する人が多くて萎えた。
下手にクラス使っても、関数に比べて遅くなるだけだしね。
でも、GoFのデザインパターンで手本が提示されることで、有効なクラスの使い方が皆書けるようになった。
Scalaも、何か指針が欲しいところだね。
0448デフォルトの名無しさん
2011/07/24(日) 22:12:15.72http://goo.gl/HEJ4V
0449デフォルトの名無しさん
2011/07/24(日) 22:41:42.11Perlのワンライナーがどうのこうのと反論するやつが必ずいるよな
あえてコードを長く書いてまでわかりやすさに拘るとか、
そんなに自分の主観に自信があるのかね
大体変数名とかワンライナーとかは瑣末な話であって、
名前は統一されていればよいし、ワンライナーくらい好きに書かせてやれよ
よっぽど変態的でない限り読めないほうが悪い
まず全体でコードが最小になる設計をして、
そこからトレードオフで拡張性や速度を考慮していくというのが
筋のいい考えでしょう
最初から自分の主観のわかりやすさなんかを優先するのは信じられないね
と言うとオブジェクト指向のメタファー全盛の時代では反動的なのかな
0450デフォルトの名無しさん
2011/07/24(日) 23:07:16.40チーム開発とかしたことない人間が言いそう
0451デフォルトの名無しさん
2011/07/24(日) 23:09:46.43彼は自分の主観に自信があるのさ
0452デフォルトの名無しさん
2011/07/24(日) 23:25:31.78よくまだ暗号とか魔術的とかそういうこと言えるよ
自分の知らないイディオムじゃないかとは思わないのかね
過渡期にありがちだから、まあ、いいけどさ
0453デフォルトの名無しさん
2011/07/24(日) 23:27:38.35いきなりどうしたの?
0454438
2011/07/24(日) 23:28:14.59> Pointfree
昔、偉いHaskellerの人が使ってて「ふーん」と思った。
「ああいうコーディングスタイル」をうまく表す言葉を他に知らないから、
Scalaでも使っていいんじゃないかな。
http://www.haskell.org/haskellwiki/Pointfree
0455デフォルトの名無しさん
2011/07/24(日) 23:34:46.09これまで、コード行数を最小化する方向に振っていいことなんか一つも無かった、
とプログラミング歴十数年の俺が言ってみる。
それが必要なイディオムなら、名前をつけてドキュメントをきちんと整備するべき。
「みんなが知らないイディオムを駆使してる俺カッケー」って悦に入りたいだけなら、
俺には関わらない場所で一人でやってて欲しい。
0456デフォルトの名無しさん
2011/07/24(日) 23:47:19.81へーそれは意外だね
よほどプログラマの腕の差がある職場なんだろうね
低レベルのほうに合わせなきゃいけないのは勘弁願いたいところだ
関数合成だって、そのうち平気でみんな書くようになるかも知れんぜ?
まあ、俺も2.8が出たときに、関数型言語なのに標準ライブラリが
こんなに読みづらいのはいかがなものかとここに書いたことあったけどねw
0457デフォルトの名無しさん
2011/07/24(日) 23:51:55.40それなら、君のやるべきことは二つのうちのどちらかだ。
『「低レベルの奴と一緒に仕事をする気はない」と宣言して、必要な知識を持ったプログラマだけを集める』か、
『低レベルの人間でも理解できるようにドキュメントを整備する』か。
まぁ、この先もずっと一人でコードを書き続けるなら、今のままでもいいんじゃない。
俺の職場やオープンソースには来ないでくれよ、迷惑だから。
0458デフォルトの名無しさん
2011/07/25(月) 00:01:33.01たぶん俺と君では職場のレベルが違うのだろう
そこらにあるオープンソースのプログラムなら十分高レベルだよ
大抵こういう仕事だと、わかりづらく圧縮されたコードに悩まされるより、
糞みたいなコードを書き直したら何分の一になったとかそういうほうが
多いもんだと思ったがそうではないようだ
まあ、俺は、良い設計がわからなくなったという>>435に
シンプルなアドバイスを書いただけだから、君との論争は本位ではない
ここで終わりにするよ
0459デフォルトの名無しさん
2011/07/25(月) 00:31:29.51http://www.atmarkit.co.jp/fdotnet/chushin/comparedataproc_01/comparedataproc_01_01.html
世間というか例によってあの方だが
0460デフォルトの名無しさん
2011/07/25(月) 01:46:32.880461デフォルトの名無しさん
2011/07/25(月) 06:37:22.370462デフォルトの名無しさん
2011/07/25(月) 06:41:57.99それは大いにやればいいんだが、コミュニケーションを拒絶するようなやり方は、
やはり問題があるという、それだけのことだよ。
コードは単なるロジックの塊ではなく、設計図であり、またコミュニケーションの媒体なんだよ。
コードの意図を読み取れない人間が多いなら、他の手段で意図を補足するのが、
コミュニケーションとして良いやり方。
0463デフォルトの名無しさん
2011/07/25(月) 08:24:58.11モジュール内のコードをそれぞれ最小化できるように、モジュールを構成(設計)するって話なら、指針の一つとしてはまあいいんじゃないかな?
ここでいう最小化は可読性を損なわない範囲でってことな。どこまでやったら損なわれるかは、使ってる言語やら現場の文化やらで変わってくるけどな。
0464デフォルトの名無しさん
2011/07/25(月) 12:36:52.830465デフォルトの名無しさん
2011/07/25(月) 13:01:51.920466デフォルトの名無しさん
2011/07/25(月) 17:24:05.22>使ってる言語やら現場の文化やらで変わってくるけどな。
同意。
最近、統一したコーディングルールを厳密に守って記述するなんてばかばかしいってことに気付いた。
割とコーディングルールがきっちり決められているJavaでさえ、
プロジェクトごとに独自ルール設定しているものだよ。
極端な話、1ソースファイルごとにコーディングルール別々にしても、全然可読性は損なわれないし、
プロジェクト全体に対して迷惑かけることもない。
ここで、俺様が、過去10年間読んだ中で、もっとも影響を受けた読み物(2分で読める)を紹介する。
コーディングスタイルの常識をぶち壊せ
http://codezine.jp/article/detail/3055
http://codezine.jp/article/detail/3055?p=2
ということで、この論争の元である>>435 に対する答えとしては
「435が何をやるかによって良い設計の基準が変わる」、のだから自分が美しいと思うとおりに設計すればOK!
っていうことで、どうかな?
0467デフォルトの名無しさん
2011/07/25(月) 19:04:16.32だったらClojureにおいで。Scalaよりずっと短く済む。
率直に言ってScalaもオブジェクト指向なんて使わずに書けるところを
増やせば簡潔に書けるようになるんじゃないかと想像してるがどうなん?
特に、Scalaに敵意を持ってるわけじゃないんで誤解されちゃ困るんだが。
0468デフォルトの名無しさん
2011/07/25(月) 19:08:19.28プロファイルしながら、高速化していくってのが関数型プログラミング
のいいところだと思うんだけどね。関数にいきなり複雑な操作を加えようと
してつくろうとしたところで簡潔にはならないし、デバッグも難しくなるし
さっさと作れる関数型プログラミングの良さは出ないんだよな。
0469デフォルトの名無しさん
2011/07/25(月) 19:16:23.27それはさすがに具体例を挙げてもらわんとただでは帰さんぞ
0470デフォルトの名無しさん
2011/07/25(月) 19:27:04.21常識だと思ってたんだけど、ちょっと考えれば分かるやん。
括弧と中括弧の使い方だけでも全然ちゃうのに。
一応例を示しとくけど、
http://www.bestinclass.dk/index.clj/2009/12/clojure-vs-ruby-scala-transient-newsgroups.html
https://gist.github.com/256367
0471デフォルトの名無しさん
2011/07/25(月) 19:29:15.560472デフォルトの名無しさん
2011/07/25(月) 19:34:26.850473デフォルトの名無しさん
2011/07/25(月) 19:44:24.22両方とも似たような高階関数持ってるし、サポートしてるデータ構造に
ついても、大して変わらんし。マクロをうまく活用できる人なら、確かに
「ずっと短く出来る」かもしれんが。
0474デフォルトの名無しさん
2011/07/25(月) 20:11:52.17(defn distribution [items]
(persistent!
(reduce #(let [lowcase (.toLowerCase #^String %2)]
(assoc! %1 lowcase (inc (%1 lowcase 0)))) (transient {}) items)))
(defn process-newsgroups [dir]
(let [format #(str-join \newline (map (fn [_] (str-join \tab _)) %))
data (reduce #(merge-with + %1 %2)
(pmap #(distribution (re-seq #"\w+" (slurp* %)))
(filter #(.isFile #^File %)
(file-seq (java.io.File. dir)))))]
(spit "/home/lau/Desktop/alphabetical" (format (sort data)))
(spit "/home/lau/Desktop/decending" (format (sort-by val > data)))))
しかし、最速なのはpythonなのが意外。
0475デフォルトの名無しさん
2011/07/25(月) 20:26:45.27俺はこれだな
http://www.artima.com/weblogs/viewpost.jsp?thread=74230
読んだのはBest Software Writingちゅー本の中でだけど。
0476デフォルトの名無しさん
2011/07/25(月) 20:50:28.07誤爆してたので
ttp://codezine.jp/article/detail/3055?p=2
switch(month){
case 1: tsuki= "一月"; koyomi= "睦月"; break;
case 2: tsuki= "二月"; koyomi= "如月"; break;
case 3: tsuki= "三月"; koyomi= "弥生"; break;
case 4: tsuki= "四月"; koyomi= "卯月"; break;
case 5: tsuki= "五月"; koyomi= "皐月"; break;
case 6: tsuki= "六月"; koyomi="水無月"; break;
case 7: tsuki= "七月"; koyomi= "文月"; break;
case 8: tsuki= "八月"; koyomi= "葉月"; break;
case 9: tsuki= "九月"; koyomi= "長月"; break;
case 10: tsuki= "十月"; koyomi="神無月"; break;
case 11: tsuki="十一月"; koyomi= "霜月"; break;
case 12: tsuki="十二月"; koyomi= "師走"; break;
default: tsuki= ""; koyomi= ""; break;
}
こんな単純な処理ならマルチステートメントなんか使わずに構造体の配列にしろよ馬鹿
0477デフォルトの名無しさん
2011/07/25(月) 20:51:00.12元ブログも読んだんだけどさ。結局
1.Clojureのライブラリの関数名が(Scalaに比べて)短いので行数節約できてる
2.ClojureがScalaとかに無いライブラリ使ってるので短くなってる
3.Clojureバージョンは一時変数使わないようにしてるので短くなってる
これだけにしか見えんのだが。なんかトリッキーなマクロ使って短くしてる
かと思っただけに拍子抜け
0478デフォルトの名無しさん
2011/07/25(月) 20:51:35.12> しかし、最速なのはpythonなのが意外。
pythonは軽い処理は意外と速い。
ユーザ定義データ構造少し複雑になると遅い。
http://shootout.alioth.debian.org/u64q/which-programming-languages-are-fastest.php
0479デフォルトの名無しさん
2011/07/25(月) 21:19:46.18http://www.bestinclass.dk/index.clj/2009/09/scala-vs-clojure-round-2-concurrency.html
これなんかもそうなんだけど、結局ライブラリの違いでしかないんだよな
どうせ書くならマクロでどれだけ短くなるかを書いて欲しいわ
Scalaにもコンパイラプラグインはあるけど、マクロみたいに気軽に使えるものでは無いし
0480デフォルトの名無しさん
2011/07/25(月) 23:33:10.93自分も、表現力や問題の本質をシンプルに記述する、
という点では Clojure に軍配が上がるかな、という印象。
Scala は、もともと複雑になりがちな継承ペースの OO をフルサポートしつつ、表現力を高める ( 関数型的な表現も可能にする ) ために、
更に implicit などが導入されて、
どうしてもややこしくなってしまっている ( コーディング中に考慮しなければならないルール、暗黙の前提が多い ) という印象。
複数のパラダイムをサポートしつつ、
型安全を得るためにはしょうがないのかなあ。
とはいえ、 Scala を学ぶのは楽しい。
0481デフォルトの名無しさん
2011/07/25(月) 23:44:39.890482デフォルトの名無しさん
2011/07/26(火) 00:50:38.00「表現力や問題の本質をシンプルに記述する」で差があるのは気になるな
RubyやScalaもいいとこいってると思うので、どこらで差がついてるんだろ
>>470みたいな比較だとScalaにioライブラリがないのがもろに響くなw
0483デフォルトの名無しさん
2011/07/26(火) 01:03:28.96S式は偉大なのさ♪
0484デフォルトの名無しさん
2011/07/26(火) 01:53:02.970485デフォルトの名無しさん
2011/07/26(火) 02:55:34.950486デフォルトの名無しさん
2011/07/26(火) 07:57:59.620487デフォルトの名無しさん
2011/07/26(火) 12:36:03.67MatlabとかScilabは文法的に限界に来ているからね。
ScilabとかはVer6で従来のMatlabライクな文法を捨てるって公言しているし、
この機会に、Scalaとか採用してほしいなあ。
ScilabとScalaって結構合うと思うんだ。
ScilabはJava(JVM)で大半書かれているし。
ScalalabとScilabが協力してくれれば、、。
0488デフォルトの名無しさん
2011/07/26(火) 12:57:56.92なるのは喜ぶのは一部だけっしょ。
0489デフォルトの名無しさん
2011/07/26(火) 21:32:50.39なんちゃってJavaが嫌ならIncanterで良いのでは?
http://incanter.org/
>Incanter is a Clojure-based, R-like platform for statistical computing and graphics.
Scalalabは型を書かせる代りに速いのが売りでしょう。
http://swik.net/scalalab
>scalalab provides the ScalaSci scripting engine,
>based on the new Scala programming language,
>that obtains scripting speed by resolving method calls at compile time (“statically typed”).
>The scripting code is extremely fast, close to Java,
>and about 20-40 times faster from equivalent Matlab .m scripts!
0490デフォルトの名無しさん
2011/07/26(火) 21:34:06.010491デフォルトの名無しさん
2011/07/26(火) 22:43:58.86まず、
Matlabって、数値計算では有名なソフトだけど、商用。
クーロン版は、3つくらいある。OctabとFreeMatとScilab。
他の2つがMatlabの完全互換を目指しているのに対して、
Scilabは独自路線を進もうとしている。
組み込み関数が異なるのはもちろん、基本文法も、ちょっと違う。
で、今のMatlab系文法はそろそろ限界にきている。
1)実行速度が遅いし、
2)ちょっと複雑なのを書こうとするとクラスとか書きたくなる。
実際、Matlabでクラスとか疑似実現している人はたまにいるけど、
仮想関数の実現がクラスの識別を文字列比較してからメソッド呼び出しみたいに
やるので、普段から遅いのが、さらに遅くなって使えない。
と、これまでは、スレ違いなんだけど、
Scilabは、一部Javaで書かれているだけあって、Javaとの連携は強いということろが重要。
JavaからScilabを呼び出したり、ScilabからJava呼びだしたりできる。
。。。。ということは、Scalaとの連携も容易にできるはず、、、、。
もっと言えば、ScalalabとScilabが連携してくれれば、やれることが無茶苦茶広がるのだが、、。
0492デフォルトの名無しさん
2011/07/26(火) 22:51:16.87Scalaのライブラリ無いですか?
Rの腐った実装は使い物にならない
0493デフォルトの名無しさん
2011/07/26(火) 23:52:29.78COLT使わんの?>>492
0494デフォルトの名無しさん
2011/07/27(水) 01:43:22.59Rより機能が少ないJava用数学ライブラリならありますが、
パッケージ数3000以上のRとまったく同程度のライブラリは無理です。
ところでRの腐った実装とは何を指しているのですか?
実行速度?データサイズの制限?
>>493
ColtよりCommons Mathが良いのでは?
Commons Mathの方がメジャーで機能も多いです。
Commons Math
http://commons.apache.org/math/
Commons Math 2.2 API
http://commons.apache.org/math/api-2.2/
Apache Commons Math (api-1.1の表を翻訳して詳細追加)
http://ja.wikipedia.org/wiki/Apache_Commons_Math
Colt
http://acs.lbl.gov/software/colt/
Colt 1.2.0 API
http://acs.lbl.gov/software/colt/api/
0495デフォルトの名無しさん
2011/07/27(水) 15:49:25.000496デフォルトの名無しさん
2011/07/27(水) 17:13:00.24インストーラ実行してる間にアーカイブの方を
解凍して配置してpath通してREPL起動して遊べちゃうレベル
0497デフォルトの名無しさん
2011/07/27(水) 21:48:34.00ドキュメントなんてローカルにインストールしなくていいって人いっぱいいると思うけど、
なんでオプションになってないんだろうな。
0498デフォルトの名無しさん
2011/07/27(水) 21:55:28.670499デフォルトの名無しさん
2011/07/27(水) 22:26:34.38ちょっとハマった。
@WebServletアノテーション付けたらコンパイルエラーになってまたハマりそうだったから切り上げた。
0500ななし。
2011/07/27(水) 23:16:12.180501デフォルトの名無しさん
2011/07/27(水) 23:31:52.390502デフォルトの名無しさん
2011/07/28(木) 01:29:25.050503デフォルトの名無しさん
2011/07/29(金) 23:52:44.91まあ翻訳でるらしいし、それからでもいいかもしれんが。
0504デフォルトの名無しさん
2011/07/30(土) 00:08:17.05それどんな本?ファウラーはもう害悪でしかないが?
0505デフォルトの名無しさん
2011/07/30(土) 05:07:23.30ファウラーってそんなに悪く言われるような事したっけ?
0506デフォルトの名無しさん
2011/07/30(土) 05:14:27.31言語能力に激しく依存する気がするのだが
0507デフォルトの名無しさん
2011/07/30(土) 09:11:54.120508デフォルトの名無しさん
2011/07/30(土) 12:25:41.690509デフォルトの名無しさん
2011/07/30(土) 13:11:52.410510デフォルトの名無しさん
2011/07/30(土) 13:53:59.16Scala のパターンマッチングになんて程遠い。
0511デフォルトの名無しさん
2011/07/30(土) 13:57:36.56ホントかどうかはシラネども、 late 2012 まで待てば良いなら、そんなに先じゃないかと
http://en.wikipedia.org/wiki/Java_version_history#Java_SE_8
0512デフォルトの名無しさん
2011/07/30(土) 14:17:17.23移行する意味をまるで感じないのだが
0513デフォルトの名無しさん
2011/07/30(土) 14:23:27.89Oracle による政治的判断によるリリースってやつだろ。1.4 の次が 5 になったみたいに。
0514デフォルトの名無しさん
2011/07/30(土) 15:22:32.860515デフォルトの名無しさん
2011/07/30(土) 16:57:50.96commons-io とか使ってればいまさらって感じもするけどな。
try が C# の using っぽく拡張されたのはちょっとうれしいけど。
0516デフォルトの名無しさん
2011/07/30(土) 18:06:11.180517デフォルトの名無しさん
2011/07/30(土) 18:52:11.26そいやそうだった。
0518デフォルトの名無しさん
2011/07/31(日) 01:50:10.590519デフォルトの名無しさん
2011/07/31(日) 06:43:31.100520デフォルトの名無しさん
2011/07/31(日) 23:55:42.76どうするんだろ。
0521デフォルトの名無しさん
2011/08/01(月) 00:17:13.44淘汰されるんじゃね?
0522デフォルトの名無しさん
2011/08/01(月) 08:32:59.230523デフォルトの名無しさん
2011/08/01(月) 12:20:26.18http://www.infoq.com/jp/news/2011/07/Scala.NET
0524デフォルトの名無しさん
2011/08/01(月) 14:55:30.200525520
2011/08/01(月) 17:12:04.67actorで逐次送るときたか。
0526デフォルトの名無しさん
2011/08/01(月) 18:57:54.960527デフォルトの名無しさん
2011/08/01(月) 19:18:16.91http://www.infoq.com/jp/news/2011/07/kotlin
>ジェネリックは実行時でさえ型安全である。
らしいぜ?
0528デフォルトの名無しさん
2011/08/01(月) 20:15:51.64程度の差はあるとはいえ。
0529デフォルトの名無しさん
2011/08/01(月) 23:27:47.46正解はなんなの?リンク先は絶対間違ってるのはわかるけどw
0530デフォルトの名無しさん
2011/08/02(火) 01:20:12.97nightly buildだとSerializableになってるんだね
0531デフォルトの名無しさん
2011/08/02(火) 03:47:46.65なんか不味いの?
0532デフォルトの名無しさん
2011/08/03(水) 15:52:38.200533デフォルトの名無しさん
2011/08/03(水) 17:40:40.02まずは言語仕様。Webで。
分かりにくいところ、疑問点を
書き出したあと、本屋でそれに
触れている本を購入。
0534デフォルトの名無しさん
2011/08/03(水) 17:57:55.86unapplyの返り値の型がわからない
使い型としては、::と同じ様に、
case Cons(hd)(tl) => ...
としたいんだけど
0535デフォルトの名無しさん
2011/08/03(水) 20:46:07.530536デフォルトの名無しさん
2011/08/03(水) 21:03:28.37unapplyはカリー化しても実質的に意味が無い。というのは、
case Cons(hd)(tl) => ...
みたいなのは「構文レベルで」駄目なことになってるので。ちなみに、unapplyの
返り値型は Option[(A, List[A])]。これは個別に覚えて無くても大丈夫で、
case classで自動生成されるunapplyの型は、プライマリコンストラクタ引数
列をタプルとして、それを単にOptionでラップしたものになる。
0537デフォルトの名無しさん
2011/08/04(木) 00:38:34.16本を読まない言い訳ができてよかったね
0538デフォルトの名無しさん
2011/08/04(木) 11:02:17.42今はamazonがあるからまだいい方だよね
0539534
2011/08/04(木) 11:55:55.43ありがとうございます
構文としてダメ、ですか…
別の方法を考えてみます。
unapplyの返り値がOption[(A,List[A])]になるということは、
カリー化しないunapplyと同じ返り値型、ということになりますね
すると、case Cons(hd,tl) => ...ということですか。
すごく気持ちが悪いような…
ちなみに、case classではなくて、
Listをextendしない(sealedだからできない)、
objectとしてConsのapply,unapplyを定義しようとしていました。
def apply[A]:(A => (List[A] => List[A])) = {
hd => tl => hd::tl
}
def unapply[A] (ls :List[A]) : Option[ ??? ] ={
if (false == ls.isEmpty){
Some( ??? )
}else{None}
}
>>532と>>535は同一人物?
立ち読みできない環境ならOderskyの、
Scala本の2nd Editionを買っておけば間違いないと思うんだけど…
本腰を入れるか迷ってるならもっとライトウェイトのもいいと思う
0540532
2011/08/04(木) 12:07:56.48Scala本の2ndはProgramming in Scalaってやつかな
Webで言語仕様をちゃんと見るのはやったほうが良さそうだね
写経して感じを掴みたいのでオライリーのもいいかなあ
0541デフォルトの名無しさん
2011/08/04(木) 13:02:47.05虫食い的な知識じゃなくて、網羅的に基礎を作ったほうが
後々に効いてくる。これは学習全般に言えることだよ。
0542デフォルトの名無しさん
2011/08/04(木) 13:33:21.31Webにある仕様を読めよ。
0543デフォルトの名無しさん
2011/08/04(木) 13:47:25.13だよ。仕様書読んで使い方わかる人は少ないけど、
一般人でも機能や定数、制限事項は分かる
0544デフォルトの名無しさん
2011/08/04(木) 14:01:11.99基礎を作るならば、それが向いてないといってるの。
はじめから大風呂敷を広げるようなものだから、挫折しやすい原因になるし
どこが大切か?というところのポイントが均一化されすぎて
掴みどころがない状況になり得る。いわばでっかい海に放り出されて
およげ、筏とオールをわたすからおよげといってるようなもの。
最初は入門書でひと通りやったほうがいいんだよ。
0545デフォルトの名無しさん
2011/08/04(木) 14:07:18.86異なるパラダイムのプログラミング言語を学ぶなら本が良い
それ以外ならWebのチュートリアル読んで仕様書読めば十分
0546デフォルトの名無しさん
2011/08/04(木) 14:20:21.61どっちかやってみてあかんかったらもう片方やってみたらええねん
0547デフォルトの名無しさん
2011/08/04(木) 14:34:11.38それは一理ある。似た言語を触ってる場合、チュート&仕様書で十分
書けるようになるからね。
0548デフォルトの名無しさん
2011/08/04(木) 14:38:59.34大陸から渡ってきて日本人に成りすましている似非日本人たる
関西人。その関西人の言語「関西語」は遺伝子的に我慢できない。
特に「大阪弁」
0549デフォルトの名無しさん
2011/08/04(木) 15:03:54.640550デフォルトの名無しさん
2011/08/04(木) 15:33:48.580551デフォルトの名無しさん
2011/08/04(木) 15:40:35.30わかってくれたらいいんだよ
もうそんな気持ち悪いしゃべり方はするなよ?約束だぞ?
0552デフォルトの名無しさん
2011/08/04(木) 16:08:08.90レイシスト集団みたいやな。
別に、東北弁やろうが九州弁やろうがかまわんやろう?
0553デフォルトの名無しさん
2011/08/04(木) 16:15:54.890554デフォルトの名無しさん
2011/08/04(木) 16:34:07.110555デフォルトの名無しさん
2011/08/04(木) 16:57:00.930556デフォルトの名無しさん
2011/08/04(木) 18:30:31.08Scala初心者ならWebで十分
0557デフォルトの名無しさん
2011/08/04(木) 18:32:46.67気持ち悪いんだから仕方ないだろ
0558デフォルトの名無しさん
2011/08/04(木) 19:13:21.71よその板でやってこい
0559デフォルトの名無しさん
2011/08/04(木) 19:56:33.140560デフォルトの名無しさん
2011/08/04(木) 20:02:57.27コーディングスタイルもわかるし
注意点や考え方がわかるって大切だからね。
持っておけば辞書にもなる。
0561デフォルトの名無しさん
2011/08/04(木) 21:12:31.67Webでもわかるよ
0562デフォルトの名無しさん
2011/08/04(木) 21:25:43.33入門書じゃ辞書にはならんだろ。
0563デフォルトの名無しさん
2011/08/04(木) 21:33:26.17あとは適当にwebで調べるなりどこかで聞くなり、どうにでもなるレベルに至るはず
0564デフォルトの名無しさん
2011/08/04(木) 22:59:25.23https://sites.google.com/site/scalajp/home
ここがそれを目指してるんだと思うけど、まだ途上だしなぁ。
「○○でも出来る」じゃなくて、「どちらがより容易か」が重要。
現状では、良書に当たった方が早い。
0565デフォルトの名無しさん
2011/08/04(木) 23:01:02.650566デフォルトの名無しさん
2011/08/04(木) 23:01:49.67オフィシャル見ればいいのに
0567デフォルトの名無しさん
2011/08/04(木) 23:04:31.57日本語縛りなら本のほうがいいかもね
日本語の情報が豊富なJavaとかならともかく、英語使えないのにScalaなんかに
手を出す奴ってなに考えてるの?
0568デフォルトの名無しさん
2011/08/04(木) 23:10:39.880569デフォルトの名無しさん
2011/08/05(金) 00:14:27.70> 本腰入れて覚えたいんだけど、今からやるならどの本が良い?
◆1冊目 〜 入門編
「Scalaで学ぶ関数脳入門」
CとかJavaは多少分かるけど関数型言語なんてさっぱり、という方はまずこれを見てみよう。
もしくは、ある程度知っている人でも復習として読むのにおすすめ。
大変読みやすく書かれているので、短い時間で読むことができます。
◆2冊目 〜 Scala文法やライブラリの詳細
「ボクらのScala 次世代Java徹底入門」 または
「Scala実践プログラミング―オープンソース徹底活用 」
日本人が書いた本なので読みやすい。
和訳本にありがちな変な言い回しなどないのでサクサク読める。
Scalaの文法やライブラリを一通りざっと知ることができる。
◆3冊目 〜 Scalaマニアック
Scalaをマニアックにマスターするなら、次の2冊は定番中の定番なので押さえておくこと。
ただし、本の厚さとか重さもヘビー級なので手が疲れるので要注意だ。
「Scalaスケーラブルプログラミング 」
日本語版は表紙の絵がコップなので通称「コップ本」と呼ばれている。
「プログラミングScala 」
最新の定番本。
バージョン2.8の情報もあるのでぜひ読もう。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
532に対してのベストアンサーは、オレ様で決まりだな。みんな不親切すぎるぜ!
0570デフォルトの名無しさん
2011/08/05(金) 00:19:49.590571デフォルトの名無しさん
2011/08/05(金) 00:22:57.457つの言語 7つの世界
http://www.amazon.co.jp/dp/4274068579/
のScalaの評価に対してはどう?
0572デフォルトの名無しさん
2011/08/05(金) 00:34:10.900573デフォルトの名無しさん
2011/08/05(金) 00:54:07.930574デフォルトの名無しさん
2011/08/05(金) 01:39:49.25FAQの回答ご苦労さまです。
>>570
いきなり3冊目からで済む人も少なくないのでしょうけれど、
関数型言語が初めてなら関数脳入門は外せないと思います。
0575デフォルトの名無しさん
2011/08/05(金) 02:13:16.950576デフォルトの名無しさん
2011/08/05(金) 05:43:51.450577デフォルトの名無しさん
2011/08/05(金) 08:21:46.09というところから来ているって中学生の息子がしどろもどろに言ってきて、
町内会の会合で父さんあんまり「本腰を入れて頑張りましょう」ばかり
言うのは恥ずかしいからって・・・・。そうか?そうなのか??
「褌をしめてかかる」「本腰を入れる」ともに古い日本では、特に重要な
子孫繁栄の辺縁から派生した言葉らしいのだが、そうか? そうなのか??
0578デフォルトの名無しさん
2011/08/05(金) 08:24:12.09短縮したい場合、最近はcheatCheet
っていって、まあアンチョコなんだけど
検索してみると結構分かりやすいのがたくさんある。
これをざっと、ながめるだけでも
この言語のポイントをおさえることができるのでみといて損はないと思う。ただし、いけてるものは英語です。
以上、参考まで。
0579デフォルトの名無しさん
2011/08/05(金) 09:27:18.91精を出す
0580デフォルトの名無しさん
2011/08/05(金) 10:21:05.39取り合えず今日は一冊目を買って帰ろう。
ありがとう!
0581デフォルトの名無しさん
2011/08/05(金) 10:46:06.89一冊で充分だろ。読むだけ君かよ。
0582デフォルトの名無しさん
2011/08/05(金) 11:36:30.300583デフォルトの名無しさん
2011/08/05(金) 12:43:14.77無駄にたくさん買う奴も必要なんだよ
出版社に、scalaは金になるって思わせないとw
俺はコップ本だけでいいけど
0584デフォルトの名無しさん
2011/08/05(金) 13:44:23.820585デフォルトの名無しさん
2011/08/05(金) 14:37:24.240586デフォルトの名無しさん
2011/08/05(金) 17:13:49.96コップ本のように
scala.io.Source.fromFile("test.txt").getLines
とやっても empty iterator しか帰ってこない…
結局JavaのFileReaderを使ってる。
0587デフォルトの名無しさん
2011/08/05(金) 17:23:06.080588デフォルトの名無しさん
2011/08/05(金) 17:30:00.40こちらはバージョン2.9.0.1です。
0589デフォルトの名無しさん
2011/08/05(金) 17:41:04.700590デフォルトの名無しさん
2011/08/05(金) 17:45:02.66conf setOutputKeyClass classOf[Text]
とかいうコードを見て吃驚したんだけど、これって
conf.setOutputKeyClass(classOf[Text])
と同じだよな?
0591デフォルトの名無しさん
2011/08/05(金) 17:59:35.05しかもPerlよりも酷い
0592デフォルトの名無しさん
2011/08/05(金) 18:19:06.730593デフォルトの名無しさん
2011/08/05(金) 18:59:00.24ほんとは不細工なのに、それなりに見える写真をがんばって選んだんだろうな、とか
何十回撮ったんだろうな、とかいろいろ考えてしまう
ていうか笑ってしまう
俺ゆろよろをフォローしてるけど、アイコン見ると気が散るから、ほんとはつぶやかないでほしいんだ
0594デフォルトの名無しさん
2011/08/05(金) 19:04:33.380595デフォルトの名無しさん
2011/08/05(金) 19:04:59.61マジで不思議だ……鏡のない国に住んでるのかも………
0596デフォルトの名無しさん
2011/08/05(金) 19:12:07.260597デフォルトの名無しさん
2011/08/05(金) 19:14:42.690598デフォルトの名無しさん
2011/08/05(金) 19:26:11.25おまいにええ方法を教えてやるわ。
https://si0.twimg.com/profile_images/340971668/yuroyoro_reasonably_small.png をアドブロックに登録しろ。
0599デフォルトの名無しさん
2011/08/05(金) 21:38:03.77スイーツ思考^^;
0600デフォルトの名無しさん
2011/08/05(金) 21:48:21.540601デフォルトの名無しさん
2011/08/05(金) 23:23:02.28> 横からだけど、もう本当に学習時間を
> 短縮したい場合、最近はcheatCheet
Cheat Sheet って、本来の意味は、カンニングペーパーのこと。
つまり、カンニングペーパーみたいに、箇条書きで要点をまとめたシートのこと。
個人的には、文法のCheat Sheet は要らねえから、
日常処理に使えるカンニングペーパーが欲しいなあ。
0602デフォルトの名無しさん
2011/08/05(金) 23:37:04.89「Scalaで学ぶ関数脳入門」は、Scala以外にも役立つから、お勧め。
何かを素早く学習したかったら、複数の本を速読で読んじゃうのが効果的と思うよ。
もしも、業務で必要ですぐにマスターしたいのなら、
最初から5冊かって平行して速読しちゃうという手もある。
大学教授がそういう本の読み方をやっていた。
大学教授が「高校生でもわかるxxxx」みたいな超入門本を買っているから何かと思ったら、
その方が理解のスピードが全然違う。
お金よりも、時間の方が貴重だからな。
0603デフォルトの名無しさん
2011/08/05(金) 23:44:01.37> 大学教授がそういう本の読み方をやっていた。
> 大学教授が「高校生でもわかるxxxx」みたいな超入門本を買っているから何かと思ったら、
> その方が理解のスピードが全然違う。
ごめん途中で送信しちゃったから追記するけど、
物事を速攻マスターしたければ、
厚くて詳細な本だけでなく、超簡単で平易に書かれた本も同時に買うのがおすすめってこと。
ただし、Scalaの場合、上述に上げた本よりも、ずっと超簡単な本が実はあるにはあるけど、
さすがにあれを買うのはおすすめしない。 あえてタイトルは伏せるけど。
0604デフォルトの名無しさん
2011/08/05(金) 23:44:52.110605デフォルトの名無しさん
2011/08/06(土) 00:00:54.810606デフォルトの名無しさん
2011/08/06(土) 00:05:46.380607デフォルトの名無しさん
2011/08/06(土) 00:07:05.670608デフォルトの名無しさん
2011/08/06(土) 01:13:06.820609デフォルトの名無しさん
2011/08/06(土) 18:17:37.32ttp://ja-jp.facebook.com/people/Kota-Mizushima/100001587175577
0610デフォルトの名無しさん
2011/08/06(土) 22:47:17.67ごめんな。
ここは2chだから、改行とか句点とか誤字とかはあんまり気にせず書くんだ。
ていうか、ここの連中、文句言う暇あったら、ちゃんと答えろよ。
>>590
への回答:
「そのとおり。省略するとそういう書き方もできる。
だが、省略しすぎは察しの通り可読性を下げるので、お勧めできない場面の方が多い。」
0611デフォルトの名無しさん
2011/08/07(日) 08:40:39.320612デフォルトの名無しさん
2011/08/07(日) 09:42:19.54読みやすいように「Javaっぽく」書いたらいいと思うよ^^
0613610,569
2011/08/07(日) 10:45:10.43じゃあ、>590の2つの書き方を比べたら、 上の方が良いって言っているわけね。
conf setOutputKeyClass classOf[Text]
conf.setOutputKeyClass(classOf[Text])
この2つの例で、ドット . と () の省略をしたがる人(>>612) ってどういう考え方してるか教えてほしいな。
先に予想してみるけど、612は、大して有益な情報を出せない。
少なくとも、これまでは、612よりもオレ様の方が、>590にとって有効な回答をしている。
0614デフォルトの名無しさん
2011/08/07(日) 10:58:30.60有効な回答(笑)
短縮表記のまとめとかってある?
↓
可読性が下がるので短縮しないほうがよい(キリッ
有効な回答ありがとうございます(笑)
0615デフォルトの名無しさん
2011/08/07(日) 11:00:36.17一つしか引数取らない場合は省略してることが多いよ
その程度で読みづらいと感じるのは慣れてないだけ
0616デフォルトの名無しさん
2011/08/07(日) 11:08:46.30品質が悪くなる
0617デフォルトの名無しさん
2011/08/07(日) 11:12:01.500618デフォルトの名無しさん
2011/08/07(日) 11:13:51.730619デフォルトの名無しさん
2011/08/07(日) 11:14:55.96まあそれは理解できる
0620デフォルトの名無しさん
2011/08/07(日) 11:24:11.350621611,569
2011/08/07(日) 11:25:05.68話そらすなよ?
614みたい話は誰も書いてない。 作り話を作って、逃げただけか。
お前の不親切な回答と、オレ様の回答とどっちが >590 にとって有効かどうかってことだ。
それは、>590が決めてくれればよい。
ただ、一点、オレ様も誤りがあった。 >612に謝罪したい。
「読みやすいように「Javaっぽく」書いたらいい」という 612の回答は褒めてやる。
590への回答としては、55点くらいの出来だ。
できればやれる子なんだから、 611より前に回答しろよ。やればできる子なんだから。
なお、 >532 へ最も有効な回答を示すことができたのは、オレ様である。
いっておくけど、 >569は、 >570 みたいな意見が出るのを知っていて、
でも敢えてあの行数でベストアンサーを出したのである。
(で、敢えて改行いっぱいつけたけど、これはスルーカを試してるんだからね!)
0622デフォルトの名無しさん
2011/08/07(日) 11:27:07.74いや、この頭の悪そうな文体のやつは明らかにScala初心者だから一緒にしないでくれ
0623デフォルトの名無しさん
2011/08/07(日) 11:40:28.54Scalaにも、 VBのOption Explicitみたいなのがあるとうれしいのだが。
個人的には、 行末の ; は、必須の方がうれしい場合がある。
たまに、改行を構文区切りと誤解されて、意図しない結果になることがあるので。
でも、; を省略して書きたいときもあるので、 VBのOption Explicitみたいなので切り替えれるとうれしい。
0624デフォルトの名無しさん
2011/08/07(日) 11:41:18.340625デフォルトの名無しさん
2011/08/07(日) 11:43:14.59はい
0626デフォルトの名無しさん
2011/08/07(日) 11:44:22.670627デフォルトの名無しさん
2011/08/07(日) 11:44:54.530628デフォルトの名無しさん
2011/08/07(日) 11:48:46.80はい
0629611,569
2011/08/07(日) 11:50:07.59>>615
> 一つしか引数取らない場合は省略
> その程度で読みづらいと感じるのは慣れてないだけ
確かに。この程度なら、慣れの問題かも。
いずれにせよ、省略を良しとするか悪いとするかは、時と場合によりますよね。
すみませんでした。殺伐としたふんいき(←なぜか漢字変換できない)になるくらいなら、スルーしてください。
0630デフォルトの名無しさん
2011/08/07(日) 11:51:49.78REPLでもF#みたく;;で評価、みたいにしてくれた方がありがたいと感じる事あるな。
まぁ無いならしゃーないと諦めるしかないけど。
0631デフォルトの名無しさん
2011/08/07(日) 13:11:13.610632デフォルトの名無しさん
2011/08/07(日) 14:07:56.58REPLで、ユーザが思った「ここからここまで」をひととおりまとめて評価して欲しい場合は、{で入力を始めるのが有効かと。
0633デフォルトの名無しさん
2011/08/07(日) 14:09:12.33Emacsとかにもあるけど、IDEとかでもそういうのをしたいときはあるので、お勧め。
0634デフォルトの名無しさん
2011/08/07(日) 14:53:00.50もう一息かな
0635デフォルトの名無しさん
2011/08/07(日) 15:23:36.130636デフォルトの名無しさん
2011/08/07(日) 15:36:42.81メソッドが二項演算子的に作用する時は、ドットを省略しても良いと思う。
それ以外の場合は、あまり意義を感じない。
0637590
2011/08/07(日) 16:11:34.34まとめ、っていうほどでもなく、
・「ソース読んで慣れろ」
・「もしくは省略すんな」
というスタンスなのかな?
関数適用の()の省略なら、
関数型言語と言えば当たり前かもしれないんですが、
"."まで省略するのはすごく抵抗が。
conf setOutputKeyClass classOf[Text]
だと、confっていう関数に順次適用してると、
パッと見、見えてしまいました。
(それに加えて"."が省略可能だというのも初見でした)
0638590
2011/08/07(日) 16:19:28.33Programming in Scala,2nd,p82(Sec5.8)
When you write "s.indexOf('o')", indexOf is not an operator.
But when you write "s indexOf 'o'", indexOf is an operator,
because you're using it in operation notation.
0639デフォルトの名無しさん
2011/08/07(日) 16:42:21.86可読性が下がると思えば省略しないけど、Java厨のためにわざわざ省略しないでおくってことはしないスタンス
0640デフォルトの名無しさん
2011/08/07(日) 16:53:37.41シンタックスシュガーなので、必要に応じて使い分ければいい。
0641デフォルトの名無しさん
2011/08/07(日) 17:05:36.53省略記法で書いてあることが多いから、
自分のコーディングルールはともかく、
普通に読めるようにしておいたほうがいい
0642デフォルトの名無しさん
2011/08/07(日) 17:56:32.44オレ様君が困ってるだろうが
もっとプログラマ初心者のように振る舞えよ
0643デフォルトの名無しさん
2011/08/07(日) 18:13:13.24メソッドを二項演算子のように記述できるのは素晴らしいのですが、
乱用されすぎですね。
http://twitter.com/#!/yukihiro_matz/status/25091480997
>@kmizu そういうことになりますね。
>ただ、私が一番懸念してるのは、右結合ではなくて、
>演算子としてのメソッドが多重に重なった場合だったりします。
>っていうか、Scalaのspecで x should not be zero とか言われても、
>(私の脳が)パーズしきれませんです。
http://twitter.com/#!/kmizu/status/25092278159
>@yukihiro_matz なるほど。
>ちなみに、これは、(x should not) be zeroとパーズされます。
>notとzeroが値でshouldとbeがメソッドですね。
http://twitter.com/#!/kmizu/status/25092498344
>@yukihiro_matz この例の場合、notとかzeroが値なので紛らわしいだけで、
>パーズそのものは文脈考慮しなくていいので、実はかなり楽なんです。
http://twitter.com/#!/yukihiro_matz/status/25098333248
>「実はかなり楽」といわれても、私には困難である事実は変わらないw
>RT @kmizu: (x should not) be zeroとパーズされます。
>notとzeroが値でshouldとbeがメソッドですね。
0644デフォルトの名無しさん
2011/08/07(日) 18:58:08.10トラブった時にデバッグが難しいのでは本末転倒だし。
浅海さんも、エラーメッセージが暗号になるのは良くない、みたいなことを言ってたな。
0645デフォルトの名無しさん
2011/08/07(日) 19:13:01.650646デフォルトの名無しさん
2011/08/07(日) 19:21:25.80Java7で我慢しろ
0647デフォルトの名無しさん
2011/08/07(日) 19:53:13.380648デフォルトの名無しさん
2011/08/08(月) 00:44:34.29matzはどうしてこう素人みたいなイチャモンをつけるかね
こんなものが困難なわけないでしょ
0649デフォルトの名無しさん
2011/08/08(月) 00:48:57.41Scalaの括弧省略は「困難」な記法なのかね
その基準なんなんでしょうね
0650デフォルトの名無しさん
2011/08/08(月) 00:52:38.01x should be zero になると should と zero がメソッドか
こんな書き方されたら嫌だな
0651デフォルトの名無しさん
2011/08/08(月) 00:53:47.990652デフォルトの名無しさん
2011/08/08(月) 00:59:36.49だな
0653デフォルトの名無しさん
2011/08/08(月) 01:18:11.19フラットすぎるという印象はあるなあ。英文を読んでるみたいだ
Rubyの場合はメソッド呼び出しのドットが区切りになるのと、
あとはちょっとした文法上の省略ができるってだけなので、
呼び出し関係は読み取りやすいように感じる
ただ、Scalaのルールであれば、
より自然言語に近い記述ができるかもしれない
0654デフォルトの名無しさん
2011/08/08(月) 01:28:06.44http://yanana.github.com/scala-style/method_invocation/index.html
IDEが"."入力したらメソッド補完するような感じでずっと行くなら
ScalaでIDEが普及していくにしたがって記号のみのメソッドやDSL以外で後置記法、中置記法はなくなっていくかもね
>>648
matzさんとは一応顔見知りではあるのですが、matzさんご自身が本当にイチャモンをつけているとは思っていないです。
今の自分の考えは、メンタルモデルの違いが、私とmatzさんのすれ違いの原因ではないかというものです。
私は、一応構文解析屋出身なので、パーズルールが明らかに簡単なScalaの方が、パーズするのも楽だと思って
しまうのですが、matzさんはパーズルールの複雑さとは別の観点で、「パーズの困難さ」を考えているのではないかと思います。
0656デフォルトの名無しさん
2011/08/08(月) 01:42:54.15うっとうしいようでしたら退散します。エヴァンジェリスト(笑)というのはその通りでしょうね。
まだまだ色々訓練が足りてないです。
0658デフォルトの名無しさん
2011/08/08(月) 06:27:21.120659デフォルトの名無しさん
2011/08/08(月) 06:28:14.74> それなりにやわらかい書き方も覚えてきたので、
どこがだよw
ってかなんか根本的に勘違いしてるよ、うん。
0660デフォルトの名無しさん
2011/08/08(月) 08:03:50.78Javaから来た俺にはScalaもRubyも異様に映った。ルールが簡単かどうかより慣れが重要だった。
つまり、この件ではmatzは自己否定を含んだ批判をしているように見える。
0661デフォルトの名無しさん
2011/08/08(月) 09:40:53.26こういうのはアメ公がよくやることで、matzの近視的な批判は全部ブーメランなんだよね
0662デフォルトの名無しさん
2011/08/08(月) 09:57:52.88もちろんLispのパーズルールは単純極まりないが、
凡人にはあの入れ子がパッと見でパーズし難いという感じ
0663デフォルトの名無しさん
2011/08/08(月) 11:26:29.59もちろんJavaとの類似性を重視したのだろうけど、中途半端だ。
0664デフォルトの名無しさん
2011/08/08(月) 12:29:56.69def myIf[T](b: Boolean)(block : => T): T = ...
この関数条件式のかっこ省略して呼びだしたりできないのでまあいいんじゃね?
0665デフォルトの名無しさん
2011/08/08(月) 12:56:22.010666デフォルトの名無しさん
2011/08/08(月) 14:55:44.23バグ報告窓口って言うのはあるけど、要望窓口とかいうのはないのかなあ?
上述のOptionExplicit 欲しい。
他には、逆引きScala みたいなまとめってないのかなあ?
0667デフォルトの名無しさん
2011/08/08(月) 15:07:04.002chのレスの80%は、たったの20%の人が何度も投稿した結果によるものです。
2chを見る人の80%はReadOnlyで、書き込みする人はたったの20%にすぎません。
これを2chにおける パレートの法則といいます。
荒らしの書き込みする人って、一匹見かけたら影に大量に隠れているかのような印象を持つかもしれないけど、
実際は、一匹がなんども出現しているだけ。
その一匹がまき散らした汚物のせいで、スレ全体が荒れて汚染されてしまうので、しっかり駆除することが重要だ。
0668デフォルトの名無しさん
2011/08/08(月) 18:32:05.52荒らすなよクズ
これだから自覚のない馬鹿は
0669デフォルトの名無しさん
2011/08/08(月) 18:37:31.610670デフォルトの名無しさん
2011/08/08(月) 18:43:28.892chで発散しないでロムってるだけの奴って現実で何するのか怖い
0671デフォルトの名無しさん
2011/08/08(月) 18:57:21.59俺はww発散すwるぞwwwデュクシwwwww
とか言ってれば、スレ違いが許されると思ってる馬鹿
関西人や韓国人と同レベル
こういう馬鹿にプログラミングは無理
0672デフォルトの名無しさん
2011/08/08(月) 18:59:06.500673デフォルトの名無しさん
2011/08/08(月) 23:05:41.660674デフォルトの名無しさん
2011/08/09(火) 00:10:07.43お前自身が、Twitterフォローするのやめればよいのでは?
いちいち他人に気にし過ぎなのでは?
あと、お前、わざわざ2chに書き込まなくて良いから。
バグ報告窓口がまだちゃんと出来ていないので、まずそこを設置する予定です。
これは、JIRAのライセンスを買ってあって、サーバも借りてあるので、今度の休みくらいに
やりたいところです。要望窓口も、設置したいところですが、どういう形式がいいでしょうか?
Scala日本語情報サイトは、多くが自分一人で更新していて、人手と時間が足りないので、要望
出してくれるだけでも助かります。特に、翻訳が稚拙な部分はなんとかしたいところ…
逆引きScalaみたいなのは、あちこちに散らばってる気がしますが、まとめたいですね…
個人的にWikiオンリーだと、あまりうまく行かない気がしてるので、日本語情報サイトの中に
Wikiを設置する、という事を考えています。もちろん、他の方が好きな場所でやってくださっても
構わないと思います。
0676デフォルトの名無しさん
2011/08/09(火) 00:29:17.99> val a = new DynamicVariable("a")
> val a.value = "b"
> val a.value
ってやると"a"が返ってきてしまうんだけど、これは何で?
0677デフォルトの名無しさん
2011/08/09(火) 00:43:36.57Eclipseは知らんけど、IntelliJのプラグインだとスペース入れたらメソッド補完してくれるよ
0678デフォルトの名無しさん
2011/08/09(火) 07:35:51.88どこにすればいいんでしょう? 本家?
---
scala 2.9.0.1で以下のようにgetLinesがうまく動きません。
環境はwindows XP, cygwinからです。
scala> val s = scala.io.Source.fromFile("t.txt")
s: scala.io.BufferedSource = non-empty iterator
scala> for(l <- s.getLines) print(l)
scala> for(c <- s) print(c)
abc
def
ghi
なおt.txtはShift_JISで改行コードはCRLFです。
0679デフォルトの名無しさん
2011/08/09(火) 07:55:22.73REPLじゃなけりゃ動く
あるいは
val s = scala.io.Source.fromFile("t.txt").getLines
でもOK
詳しい説明は任せた↓
0680デフォルトの名無しさん
2011/08/09(火) 08:36:11.66おお、確かに!
不思議ですね。
0681デフォルトの名無しさん
2011/08/09(火) 11:04:22.54scala> {val a = new util.DynamicVariable("a"); a.value = "b"; a.value}
res7: java.lang.String = b
0682デフォルトの名無しさん
2011/08/09(火) 13:05:04.00しかしpackage宣言くらい通らんものか。
0683デフォルトの名無しさん
2011/08/09(火) 19:44:41.15scala→無駄に複雑
0684デフォルトの名無しさん
2011/08/09(火) 20:00:20.450685デフォルトの名無しさん
2011/08/09(火) 20:12:53.38お前そんなんばっかだよね
0686デフォルトの名無しさん
2011/08/09(火) 21:08:40.620687デフォルトの名無しさん
2011/08/09(火) 21:45:01.310688デフォルトの名無しさん
2011/08/09(火) 22:00:30.68またお前か!
特定したぞ。
>>656
>>651
>>618
>>673
>>502
>>490
>>464
↑お前は、2chに来なくて良いよ。
Twitterでの話題をTwitter上でコメントできずに2chに来ているなんてチキン野郎だな。M君は。
0689デフォルトの名無しさん
2011/08/09(火) 22:11:42.520690デフォルトの名無しさん
2011/08/09(火) 23:15:00.45使えない特定厨だな(笑)
0691デフォルトの名無しさん
2011/08/10(水) 08:55:24.840692デフォルトの名無しさん
2011/08/10(水) 17:48:15.320693デフォルトの名無しさん
2011/08/10(水) 18:08:18.31しろってなんだよ
お前がすればいいだけでは?馬鹿?
0694デフォルトの名無しさん
2011/08/10(水) 18:33:35.220695デフォルトの名無しさん
2011/08/10(水) 19:28:52.120696デフォルトの名無しさん
2011/08/10(水) 19:35:30.790697デフォルトの名無しさん
2011/08/10(水) 19:47:49.91http://answer.pythonpath.jp/
0698デフォルトの名無しさん
2011/08/12(金) 17:31:27.790699デフォルトの名無しさん
2011/08/12(金) 17:35:07.000700デフォルトの名無しさん
2011/08/13(土) 10:54:41.760701デフォルトの名無しさん
2011/08/13(土) 21:03:59.91という夢をみた
0702デフォルトの名無しさん
2011/08/13(土) 21:08:30.330703デフォルトの名無しさん
2011/08/16(火) 06:39:59.16{
private def gcd(x:Int, y:Int): Int =
{
if (x==0) y
else if (x<0) gcd(-x, y)
else if (y<0) -gcd(x, -y)
else gcd(y%x, x)
}
private val g = gcd(n,d)
val numer:Int = n/g
val denom:Int = d/g
//略
}
本やWeb上で見かける例なんだけど、gは初期化の時しか使わないからフィールドである必要ないんだけど
プライマリコンストラクタで一時変数みたいのは定義できないのですか?
Rationalがgをフィールドに持つのは無駄なんですけど
0704デフォルトの名無しさん
2011/08/16(火) 06:55:27.28locally { } を使え。
0705デフォルトの名無しさん
2011/08/16(火) 12:16:29.71locallyというのがあるのですね。ありがとうございます。
しかしlocallyの中でgを定義しても
val numer:Int = n/g
の所ではgはスコープの外になって未定義になってしまいます。
numerをvarで宣言してlocally{}の中で値を設定すればできますけど。
0706デフォルトの名無しさん
2011/08/16(火) 15:31:47.56nもdもgも受け取るメインのコンストラクタにするかって解決策しか浮かばない
もっと良いやり方がのかもだけどそこまでscalaを使いこなせてない。
ありきたりだが、こんなのとか。
class Rational(n:Int, d:Int){
private def gcd(x:Int, y:Int): Int = {
if (x==0) y
else if (x<0) gcd(-x, y)
else if (y<0) -gcd(x, -y)
else gcd(y%x, x)
}
val (numer: Int, denom: Int) = {
val g = gcd(n, d)
(n / g, d / g)
}
}
0708デフォルトの名無しさん
2011/08/16(火) 20:13:18.14ありがとうございます。タプルにすればできました!707をそのまま打ち込みました。
こんなふうにできるとは知りませんでした。
0709デフォルトの名無しさん
2011/08/18(木) 02:52:58.65前からあんまり時間経ってないから買う気しないな
0710デフォルトの名無しさん
2011/08/18(木) 07:27:17.09Scalaスケーラブルプログラミング第2版
http://www.amazon.co.jp/dp/product/4844330845
『Scalaスケーラブルプログラミング第2版』 2011/09/27発売予定
http://d.hatena.ne.jp/kmizushima/20110817/1313584677
>私もほんの少しですが、Scala 2.9の新機能解説
>(原著第二版出版時には2.9がリリースされていなかった)という形で執筆に携わった
いまさらScala 2.8の本は辛いなと思ったらそうきましたか。
これで「最新版に対応したScala入門書」と名乗れますね。
0711デフォルトの名無しさん
2011/08/18(木) 10:49:51.63「言語設計者がその思想を解説」でいいんだが
コンセプト&コーディングじゃ掴みがわるいですかそうですか
編集「とりあえず入門って買いときゃ売れるんだよwwww」
みたいな出版はノーモア
0712デフォルトの名無しさん
2011/08/18(木) 11:32:04.41もっと具体的に
0713デフォルトの名無しさん
2011/08/18(木) 21:00:24.430714デフォルトの名無しさん
2011/08/18(木) 21:08:48.790715デフォルトの名無しさん
2011/08/18(木) 23:10:25.76最初から電子書籍だといいのだけどこの国は
0716デフォルトの名無しさん
2011/08/19(金) 01:46:25.660717デフォルトの名無しさん
2011/08/19(金) 02:10:00.680718デフォルトの名無しさん
2011/08/19(金) 02:11:16.330719デフォルトの名無しさん
2011/08/19(金) 10:16:23.10Scalaアンバサダーに任命してやろう
0720デフォルトの名無しさん
2011/08/19(金) 10:47:22.52毎回毎回Seq,Set,Mapでつくってかなきゃならないからボトムアップ的にならざるを得ないんだよ。
Javaのオブジェクトではなくて、代数データ型でもっと色々なライブラリを用意すべき、
そうでないとボトムアップ的なプログラミングしかできない。
そうでなくても関数型はボトムアップになりやすいのだから。
すべてのぼけどもへ
0721デフォルトの名無しさん
2011/08/19(金) 12:02:58.81私は Scala が好きです。Scala は私のお気に入りのプログラミング言語なのです。
これまで数多くの開発組織で,Scala に関する話をしてきました。
しかしその後の Scala の普及状況を見たとき,私はこの言語が Ruby や,
あるいは Python の採用レベルにさえも達しそうもないことに気付いたのです。
0722デフォルトの名無しさん
2011/08/19(金) 12:15:49.390723デフォルトの名無しさん
2011/08/20(土) 14:47:41.78もっとはっきり言えば、型とか知らない連中がわかった気になって型なんかいらないとか言ってるだけ。
もっともっといえば、「自由」でなくなるとかいってるやつは、本気の馬鹿?型があっても何も不自由になりませんし、
そんなところに[自由」とか持ち出す完成がまじ引きこもりの中2病
こんなところだな。
0724デフォルトの名無しさん
2011/08/20(土) 15:04:36.89例えば数字が記入されてるテキストファイルを読み込んで、合計を求めるとか使い捨てツールを作る時とか。
PHPとかならサーバの環境構築も楽チン。
もちろんしっかりした物を作る場合はバリデーションするから結局、型ありと同じになるからそれなら最初から...って話になるけどね。
0725デフォルトの名無しさん
2011/08/20(土) 15:06:54.000726デフォルトの名無しさん
2011/08/20(土) 15:10:17.98例えば、filterやmapcarみたいなリスト処理(中身の型は決めることが出来ない)とかね。
ジェネリクスとかで多少の対応は出来るが、型を考えてる時間が長くなるし。
それだったら本筋のロジックに集中したいよ。
0727デフォルトの名無しさん
2011/08/20(土) 15:37:12.32filter,map, リスト処理、型付きでもまったくがちがちになりませんwww
ジェネリクスとか型の世界で言えば風のヒューィレベルwwww
0728デフォルトの名無しさん
2011/08/20(土) 15:46:22.220729デフォルトの名無しさん
2011/08/20(土) 16:29:37.870730デフォルトの名無しさん
2011/08/20(土) 16:36:02.100731デフォルトの名無しさん
2011/08/20(土) 16:51:03.91どっちなのかなんて明らかなんだけど。型なしが良いとかいってるのは
そのほとんどが狭いコミュニティでなれあってる引きこもりプログラマw
0732デフォルトの名無しさん
2011/08/20(土) 17:07:17.64そうだその先に静的型付言語の世界があるのだ、あと一歩だ頑張れ、と目頭が熱くなります。
0733デフォルトの名無しさん
2011/08/20(土) 17:12:01.63いやどっちが良い悪いではなく、どちらにも長所短所があるという話よ
0734デフォルトの名無しさん
2011/08/20(土) 17:13:37.08そこがもうほとんどまちがっている。
どこからどう見ても、型があった方が良いという話なんだよ。
わかってないやつばっかw
0735デフォルトの名無しさん
2011/08/20(土) 17:15:44.50前から不思議に思ってたんだが、System Integratorの略がなんでSIerになるんだ?
0736デフォルトの名無しさん
2011/08/20(土) 17:17:57.030737デフォルトの名無しさん
2011/08/20(土) 17:17:56.72System Integrate をする人って意味
0738デフォルトの名無しさん
2011/08/20(土) 18:36:40.900739デフォルトの名無しさん
2011/08/20(土) 18:45:16.49Rubyとかそれ系のコミュニティで発言して来いよ
そもそもお前のいう使えない言語を作ってるのはどんな人間でどんな言語で作ってるのかってーの
0740デフォルトの名無しさん
2011/08/20(土) 19:22:44.81バカ故に自分たちが時代の最先端開発とか勘違いしてる奴が多すぎて萎える。
0741デフォルトの名無しさん
2011/08/20(土) 19:25:35.71すくいよーねーなw
0742デフォルトの名無しさん
2011/08/20(土) 19:30:32.98http://hibari.2ch.net/test/read.cgi/tech/1313314178/
0743デフォルトの名無しさん
2011/08/20(土) 19:49:10.120744デフォルトの名無しさん
2011/08/20(土) 19:51:25.720745デフォルトの名無しさん
2011/08/20(土) 20:29:57.920746デフォルトの名無しさん
2011/08/20(土) 20:43:44.92私たちは、JavaとCLRという優れたマネージド・ランタイムを持っているので、
よりよいツールを使ってそれらのプラットフォームを利用するべきです。
多言語プログラミングは、重要な仕事をする既存のすべてのコードを捨てることなしに、
解決策をミックスし適用する事を可能にしてくれます。これらの2つの実績あるプラットフォームで
爆発的に新しい言語が開発されています。開発者として、仕事により適したツールを使って、
より良いコードを書くことが出来るように、この正調を活用する方法を学ぶべきです。
[The ThoughtWorks Anthology 4章 多言語プログラミングより]
0747デフォルトの名無しさん
2011/08/20(土) 21:07:20.78Perl,Pythonはともかく、Rubyは興味深い所を持ってると思うし、簡潔で強力だと思うよ。
matzが多言語の良所を把握出来る言語オタで良かったと思う。
静的型付けが無いのは個人的にいただけないけど、そう馬鹿にしたもんでもないかと。
Perl,Pythonにしても、バッドノウハウの轍を踏まないようにその悪所を見る意味はあるかと思う。
んで、玄人様はどんな言語を使ってるんで?
素人のぼくちんに教えちくり
0748デフォルトの名無しさん
2011/08/20(土) 21:18:27.100749デフォルトの名無しさん
2011/08/20(土) 21:35:16.26この時代に言語単位レベルでよくもそこまで人を馬鹿にできるな
0750デフォルトの名無しさん
2011/08/20(土) 22:11:00.80これくらいで人を馬鹿にすることになるなら、どんな人だってどれだけの人を馬鹿にしていることになるか
かんがえたほうがいいよwwwwwwwwwwwwww
0751デフォルトの名無しさん
2011/08/20(土) 22:21:36.440752デフォルトの名無しさん
2011/08/20(土) 22:43:19.42むしろ無いほうがいいとかいってるやつの方が理由を書くべきだろ。あほかw
0753デフォルトの名無しさん
2011/08/20(土) 23:15:05.800754デフォルトの名無しさん
2011/08/20(土) 23:57:15.080755デフォルトの名無しさん
2011/08/21(日) 00:03:56.070756754
2011/08/21(日) 00:09:10.55使い分けたらいいんじゃないですか、って言ってるんですよ
ちょっとした使い捨てツール書くときでも型に縛られたいマゾヒストさんなんですか?
0757デフォルトの名無しさん
2011/08/21(日) 00:11:35.260758デフォルトの名無しさん
2011/08/21(日) 00:44:56.92そのうち静的型チェックとテストの話やリファクタリングの話になるのかな
0759デフォルトの名無しさん
2011/08/21(日) 01:27:51.400760デフォルトの名無しさん
2011/08/21(日) 01:29:17.770761デフォルトの名無しさん
2011/08/21(日) 01:37:14.720762デフォルトの名無しさん
2011/08/21(日) 01:43:21.24強い型づけというのは”強さ”が何を意味するのかわからん
0763デフォルトの名無しさん
2011/08/21(日) 01:48:35.620764デフォルトの名無しさん
2011/08/21(日) 02:02:25.92もう強い型づけと弱い型付けのちがいはあるにしても、明瞭なくべつはなくなっていくだろう。
int , float, string のリストをつくったとき
型システムA⇒タイプエラー
型システムB⇒int,float,stringのleast upper bound 型のリスト
…
全て静的な型づけだけど、その強さはちがう
0765デフォルトの名無しさん
2011/08/21(日) 02:32:24.80http://www.blue.sky.or.jp/grass/doc_ja.html
0766デフォルトの名無しさん
2011/08/21(日) 06:47:16.06型システムを黙らせるためにクラス等を持ちださなければならないので面倒。
def f(a:Int)(b:Int) = (a+b, f(a+b))
0767デフォルトの名無しさん
2011/08/21(日) 09:33:50.470768デフォルトの名無しさん
2011/08/21(日) 09:48:56.56これじゃ動的型言語で簡単に書けるケースをいくら挙げても無駄だわな。
ちなみに、こうすればScalaでも実行できるけど、わざわざこんな風に書き換えるのは面倒。
case class f(a:Int) { def apply(b:Int) = (a+b, f(a+b)) }
0769デフォルトの名無しさん
2011/08/21(日) 09:57:16.96アホすぎて突っ込む気にもならん
0770デフォルトの名無しさん
2011/08/21(日) 10:04:54.49このプログラムは、副作用を使わずに合計を保持する関数。
自分がPDFのラスタライザを作ったときに問題になった箇所のエッセンスを取り出したものだ。
PDFのラスタライザが役に立ちそうにないとでもいいたいのか?
0771デフォルトの名無しさん
2011/08/21(日) 10:23:38.47でも、Perl, Ruby, Pythonってそうだったっけ?
0772(1) ◆CgacaMDhSQ
2011/08/21(日) 10:27:24.55それがエッセンスかどうかは、PDFのラスタライザ作った事が無いので判断できませんが
静的型付けで型が付きにくそう、という点でうまいところをついていると思います。ただ、これが
静的型付け言語で実行できないか、というとそういうわけでもなく、equi-reqcursive-typeという
型システムがあれば、実行できます。Scalaはequi-recursive-typeそのものをサポートしてない
のですが、OCamlだと-rectypesを付ければ実行できます。たとえばこんな感じです。
>ocaml -rectypes
Objective Caml version 3.11.0
# let rec f a b = (a+b, (f (a+b)));;
val f : int -> (int -> int * 'a as 'a) = <fun>
# f 3 4 ;;
- : int * (int -> 'a) as 'a = (7, <fun>)
# fst (f 3 4);;
- : int = 7
# (snd (f 3 4)) 5;;
- : int * (int -> 'a) as 'a = (12, <fun>)
0773デフォルトの名無しさん
2011/08/21(日) 10:34:33.260774デフォルトの名無しさん
2011/08/21(日) 11:06:40.440775デフォルトの名無しさん
2011/08/21(日) 11:09:09.020776デフォルトの名無しさん
2011/08/21(日) 11:11:44.520777デフォルトの名無しさん
2011/08/21(日) 11:17:15.15-rectypesを使わなくても似た事は出来るしね
> ocaml
Objective Caml version 3.12.1
# let rec f x y = `F(x + y, f (x + y));;
val f : int -> (int -> [> `F of int * 'a ] as 'a) = <fun>
# let `F(a, g) = f 3 4;;
val a : int = 7
val g : int -> [ `F of int * 'a ] as 'a = <fun>
# let `F(b, h) = g 5;;
val b : int = 12
val h : int -> [ `F of int * 'a ] as 'a = <fun>
0778デフォルトの名無しさん
2011/08/21(日) 11:18:24.29複雑化するし有害
0779デフォルトの名無しさん
2011/08/21(日) 11:21:04.630780(2) ◆CgacaMDhSQ
2011/08/21(日) 11:38:11.20それやると型が複雑になるので、これくらいでとどめておくのが良いような気がします。
scala> case class FTuple[X](_1: X, _2: X => FTuple[X])
defined class FTuple
scala> def f(a: Int)(b: Int): FTuple[Int] = FTuple(a + b, f(a + b))
f: (a: Int)(b: Int)FTuple[Int]
scala> f(3)(4)
res0: FTuple[Int] = FTuple(7,<function1>)
scala> res0._1
res1: Int = 7
scala> res0._2(5)
res2: FTuple[Int] = FTuple(12,<function1>)
0781(2) ◆CgacaMDhSQ
2011/08/21(日) 11:45:27.45はい。Polymorphic Variantでエンコーディングはできるだろうなーとは思ってました。ただ、一応
直接的なサポートが静的型付けで可能ということで、-rectypes使ってみました。Scalaで同様の
エンコーディングをしようとすると、型推論が弱いせいで、型注釈が複雑になるのが欠点ですね…。
0782デフォルトの名無しさん
2011/08/21(日) 11:57:56.30なんか理由がある?
0783デフォルトの名無しさん
2011/08/21(日) 12:05:47.37言語やオプションによっても変わりうるのに
だた「型」としか言われない不思議
0784(3) ◆CgacaMDhSQ
2011/08/21(日) 12:12:35.10再帰型じゃなくて、再帰関数の返り値型を推論してくれるかどうか、ですよね?
理由としては、Scalaの型システム上で一般的に再帰関数の返り値型を推論する、
健全で完全な型推論アルゴリズムを作るのが困難(ひょっとしたら決定不能かも)だからかと。
再帰関数のテキトーなサブセットについて推論するアルゴリズムを構成するのは難しくないと思いますが、
中途半端に頑張られても帰ってややこしいので、今くらいの割り切りで丁度いい気もします。
おっしゃる通りですね。「静的型付け」 VS. 「動的型付け」論争がよくありますが、実際には、
一口に「静的型付け」と言っても様々なシステムがある、という事はもう少し知られても良い気がします。
0786766
2011/08/21(日) 12:23:28.12以前静的型言語でこの問題に引っかかって、>>768 の方法で回避したけど、
もっといい方法があるんじゃないかとずっと気になってた。
結論としては、OCamlなら可能 (Scalaだと作りこみが必要) ってことかな。
OCamlはやったことないけど、今度処理系を入れてみるわ。
0787デフォルトの名無しさん
2011/08/21(日) 12:25:58.17多分そうだと思うんだけど、むずむず気持ち悪いので証拠が欲しい。
推論できない反例とかある?
「この論文に書いてあるから嫁」でもいいよ。
反例はちょっと考えて見ます。
論文については、何らかの型システムを対象にして、完全で健全な型推論アルゴリズムを構成できる/できない
とかいう「全体的な」話が書いてあるものはよく見かけますが、「返り値型の型推論に限定」した場合の型推論アルゴリズムの
決定不能性についてはちょっと読んだことがありません。自分は型システム専門じゃないので、あるいはそういう論文が
あるかもしれませんが。
0789デフォルトの名無しさん
2011/08/21(日) 15:44:48.05スケーラビリティな方向への拡張性を活かせないんじゃないの
線形なリストにしてmap/reduceって作りにするのじゃだめなんですか?
0790デフォルトの名無しさん
2011/08/21(日) 16:07:57.87http://msdn.microsoft.com/ja-jp/magazine/gg598922.aspx
コンパイル時で決まらない型は、(動的言語含む)動的インターフェースとのやり取りにあるといいなという感じ?
一時的なtsvの読み込みにしろそういう例になるのかな?
0791766
2011/08/21(日) 17:38:01.08もしかして私へのレスでしょうか。
PDFは内部的にパス描画モードやテキスト描画モード等を切り替えで描画しており、
さらにモードごとに異なる内部状態を保持しなければなりません。
そのため、モード切替の命令が来たら、そのモードを専門に処理する関数を返すような設計にしようとしたのです。
できるだけ副作用に頼らないという方針だったのでこのような設計になりましたが、
副作用を使っても構わないのであれば、線形なリストにすることも可能だと思います。
でもそれだと、自分の当初の方針から外れてしまうのです。
0792デフォルトの名無しさん
2011/08/21(日) 17:39:15.29本題からそれてしまいますが、その話だけ聞くと、あえて>>766のような構造にしなくても良いように感じてしまいます。
>>772でレスした時点では、静的に型付けしづらいサンプルという意味で面白かったのと、>>766のようなコードの
実際の使用局面がよくわからなかったため、本当に必要かどうかは問いませんでしたが。
0794766
2011/08/21(日) 18:14:32.62まず、>>770 では実用コードで直面した問題だったと主張したかっただけで、
それがPDFを解釈する上で必ず必要になると言いたかったわけではありません。
あのような構造にしたのは私の趣味の部分が大きいです。
>>769 に反論するために誇張してしまいました。すみません。
実際の構造としては、ここの「なんでも再帰」にあるような相互末尾再帰的な作りにしようとしていました。
ttp://practical-scheme.net/docs/tailcall-j.html
しかし、一般的な言語だと、末尾再帰が必ず最適化されるとは限らないため、
スタックオーバーフローを防ぐために、
次に呼び出したい関数をいったん呼び出し元に戻り値として返し、
呼び出し元から呼び出すという作りにしています。
0795デフォルトの名無しさん
2011/08/21(日) 18:26:14.23Scalaでも
言語間インターフェースとかに使い道あるの?
動的言語側で実装すればいいの?
http://www.infoq.com/jp/news/2011/01/invokedynamic
0796デフォルトの名無しさん
2011/08/21(日) 18:44:27.03実装必要なのかメンドイな
0797デフォルトの名無しさん
2011/08/21(日) 18:58:28.430798デフォルトの名無しさん
2011/08/21(日) 20:01:44.410799デフォルトの名無しさん
2011/08/21(日) 21:14:00.50スカラ
なるほど。了解しました。それなら話は理解できます。>>766のような構造が本質的に
必要、という主張なのかと思っていました。すいません。
> 次に呼び出したい関数をいったん呼び出し元に戻り値として返し、
> 呼び出し元から呼び出すという作りにしています。
これは、Scalaだとscala.util.control.TailCallsで末尾呼び出しの最適化を
エミュレーションしてるのと同じようなテクニックと考えてOKですか?要は
トランポリンの一種ですが。
0801デフォルトの名無しさん
2011/08/21(日) 22:43:20.05Scalaではどう書いたら良いですか?
下のはPythonで書いたサンプルです。
def f(my_reduce):
g = lambda x,y: x + y
a = my_reduce(g, [1, 2, 3])
b = my_reduce(g, ['a', 'b', 'c'])
0802766
2011/08/21(日) 23:11:26.85>これは、Scalaだとscala.util.control.TailCallsで末尾呼び出しの最適化を
>エミュレーションしてるのと同じようなテクニックと考えてOKですか?要は
>トランポリンの一種ですが。
その通りです。
ただし、PDFの命令列を持ちまわるのが嫌だったので、単独の命令を毎回渡す仕様にしています。
正直、TailCallsの存在は忘れてました。
命令列を持ちまわるようにしてTailCallsを使えば、あのような構造は必要なかったでしょう。
まあ、このプログラムはScalaで作ったわけではないので関係ないのですが。
0803デフォルトの名無しさん
2011/08/21(日) 23:42:39.62型システムといっても色々あるってのをわかってないんだよ。
で、自分がわかってないのを棚に上げて、というか、わかってないからこそ、動的!動的!といってるだけw
ま、極論を言えば、型なんかいらないとかいってる本気の馬鹿は、syntaxなんていらないといってるのと同じだよw
どんな動的言語(なんだそれw)にでも制限はあるからね、その制限が何かしらのinvariantをさしていることがわかってないんだよw
0804[1] ◆CgacaMDhSQ
2011/08/21(日) 23:48:27.19ランク2多相をどうエンコードするかという問題(Scalaはランク2多相の言語レベルサポートが無いので)ですよね。
とりあえず、解いて見ました。
まず、加算だけできる型クラスがScalaには標準で無いので定義してやります(Numericは必要なメソッドが多過ぎるので×)
scala> trait AddT[X] { def plus(a: X, b: X): X }
defined trait AddT
型クラスのインスタンスも作ってあげます。
scala> implicit object IntAdd extends AddT[Int] { def plus(a: Int, b: Int) = a + b }
defined module IntAdd
scala> implicit object StringAdd extends AddT[String] { def plus(a: String, b: String) = a + b }
defined module StringAdd
0805[2] ◆CgacaMDhSQ
2011/08/21(日) 23:52:43.55これはScalaでもMLでもOCamlでもHaskellでも標準ではありません(Haskell(GHC)はpragmaでONにできますが)。
これをランク2多相が無い言語でやるのは少し骨が折れますが、書いてみました。
scala> def f(reduce: { def apply[A:AddT] : ((A, A) => A, List[A]) => A }) {
| def g[A:AddT](x: A, y: A) = implicitly[AddT[A]].plus(x, y)
| println(reduce.apply[Int].apply(g, List(1, 2, 3)))
| println(reduce.apply[String].apply(g, List("A", "B", "C")))
| }
f: (reduce: AnyRef{def apply[A](implicit evidence$1: AddT[A]): ((A, A) => A, List[A]) => A})Unit
scala> f(new { def apply[A:AddT] = (f: (A, A) => A, lst: List[A]) => lst.reduceLeft[A](f) })
6
ABC
このコードが何を意図してるのかは、説明すると長くなるので、ランクN多相とかでググってくださると助かります。
0806801
2011/08/22(月) 00:22:18.17丁寧な解説ありがとう。
直接書くとfの引数のところでmy_reduceの型がどれか一つに固定されてしまうのを
Scalaではこうやって避けるんですね。
0807デフォルトの名無しさん
2011/08/22(月) 00:46:33.34だからお前ら出入り禁止な
0808デフォルトの名無しさん
2011/08/22(月) 01:27:53.40キニシナサンナ
そうですね。実際の所、概念としてはランク2多相とか特に難しくはないと思います。
説明の手間を省くために、既存の用語を使っているだけの話なので。
0810デフォルトの名無しさん
2011/08/22(月) 03:56:33.51他のオライリー本と比べて特段どう、ということは無いと思うが
0811デフォルトの名無しさん
2011/08/23(火) 16:51:32.40ロジックに集中できると再認識できたw
0812デフォルトの名無しさん
2011/08/23(火) 17:51:19.50やっぱ動的型最強だな
0813デフォルトの名無しさん
2011/08/23(火) 17:53:14.640814デフォルトの名無しさん
2011/08/23(火) 18:05:05.66>>801の例もダックタイピングに近いけど
evalとか見ると死ねと思う
0815デフォルトの名無しさん
2011/08/23(火) 19:00:40.65evalはかなり抑制的に使われるのが普通だと思う
0816デフォルトの名無しさん
2011/08/23(火) 23:13:45.57実際、型こそロジックなんだよ。
型を考えるという部分のみがロジックであってあとはアルゴリズム。
0817デフォルトの名無しさん
2011/08/23(火) 23:31:18.39何れにしてもどちらも長短あるんだから
どっちか片方が優れてるとかは無い
0818デフォルトの名無しさん
2011/08/23(火) 23:48:15.54型システムはあったほうがいい、で、オプションでもっとも緩い型システムに変更できるようにすればよいだけ。
0819デフォルトの名無しさん
2011/08/23(火) 23:59:48.540820デフォルトの名無しさん
2011/08/24(水) 00:11:01.070821デフォルトの名無しさん
2011/08/24(水) 00:20:12.58近づけていくということなのでは?
0822デフォルトの名無しさん
2011/08/24(水) 00:28:17.65ところでscalaでオススメのWAF教えてください。
0823デフォルトの名無しさん
2011/08/24(水) 00:44:04.650824609
2011/08/24(水) 00:46:16.48http://ja.wikipedia.org/wiki/%E5%9E%8B%E4%BB%98%E3%81%8D%E3%83%A9%E3%83%A0%E3%83%80%E8%A8%88%E7%AE%97
http://ja.wikibooks.org/wiki/Haskell/Polymorphism#Polymorphism_.E9.AB.98.E9.9A.8E.E5.9E.8B
完全な型システム求めたら、決定不能に陥ることはあるんじゃないかな?
関係無いけどシークエント記法
http://www.lambdassociates.org/Studies/study01.htm
0825デフォルトの名無しさん
2011/08/24(水) 00:50:33.81(型システムが決定不能っていいかたは少しおかしいのかな??)
型推論は決定不能に陥ることがある。
0826デフォルトの名無しさん
2011/08/24(水) 01:12:40.50型を嫌ってる人はこのスレには居ないと思うが…
居るのは、両方に長所と短所あるって人と
型ありが絶対的に優れているって人だけでしょ
0827デフォルトの名無しさん
2011/08/24(水) 01:15:52.38動的型附言語でも変わらんな。
0828デフォルトの名無しさん
2011/08/24(水) 06:14:00.800829デフォルトの名無しさん
2011/08/24(水) 06:35:58.77煽りにマジレスもなんだが、Pythonは、"強い"動的型付言語だから、かなり型を意識しないとロジックを組めないんだが…。
WAFってWebApplicationFrameworkのことか?知名度からいえばLiftなんだが、俺はScalatraのが好きだな。
0830デフォルトの名無しさん
2011/08/25(木) 00:57:16.27がなぜかコンパイルできてしまうらしい。
https://groups.google.com/forum/#!topic/scala-user/k57U6jt8Za0
https://issues.scala-lang.org/browse/SI-4939
そこ、Paul Phillipsもコメントしてるけど、たぶん仕様の範疇内。val 1 = 2は単にパターンマッチで
失敗してMatchErrorが飛ぶだけ。REPLのトップレベルで val 1 = 2がコンパイルエラーになったりする
のはREPLのバグっぽい気がするけど。
0832デフォルトの名無しさん
2011/08/25(木) 17:07:54.86関数型言語から来た人はパターンが網羅的でないのに
コンパイル時に警告が出なくて驚く
0833デフォルトの名無しさん
2011/08/25(木) 17:35:59.530834デフォルトの名無しさん
2011/08/25(木) 17:56:06.20sealedを付ければチェックしてくれるがな
0835デフォルトの名無しさん
2011/08/25(木) 18:05:33.29一度びっくりしたら忘れないから
0836デフォルトの名無しさん
2011/08/25(木) 18:59:19.85お陰で好き嫌いがハッキリ出る言語だが。。。
一度嫌ったプログラマは2度と触ろうとしないんじゃないか?
0837デフォルトの名無しさん
2011/08/25(木) 19:26:10.24Haskellあたりなら極端な拒絶反応というのもわかるが
ScalaとかC#あたりはあまり極度に嫌いというやつは見ない気が
0838デフォルトの名無しさん
2011/08/25(木) 20:13:18.32むしろhaskellは嫌いになる前に挫折するか、壁を超えて好きになるかだと思う
(単純すぎて分からないとかかも。自分もそうだったし)
ScalaはjavaやC/C++に慣れた人にも、関数型言語に慣れた人にも中途半端で気持ち悪く映るんじゃないかと
(Cやjavaっぽい文法のScalaだった方が良かった気がする)
0839デフォルトの名無しさん
2011/08/25(木) 20:30:04.70Javaやってた人間が気持ち悪がる理由がわからない
0840デフォルトの名無しさん
2011/08/25(木) 21:23:19.570841デフォルトの名無しさん
2011/08/25(木) 21:33:31.870842デフォルトの名無しさん
2011/08/25(木) 21:36:44.48そうかなぁ
かなり筋が悪い設計だと思うけど
0843デフォルトの名無しさん
2011/08/25(木) 21:45:42.320844デフォルトの名無しさん
2011/08/25(木) 21:54:55.670845デフォルトの名無しさん
2011/08/25(木) 22:23:00.93TMTOWTDIを良しとするかどうかでしょ
0846デフォルトの名無しさん
2011/08/25(木) 22:23:09.000847デフォルトの名無しさん
2011/08/25(木) 22:26:28.14HaskellかScalaを勉強しようと思っているんですが、
Haskellと比べてScalaの気持ち良いところと、
逆にScalaと比べてHaskellの気持ち良いところを教えて頂けませんか?
0848847
2011/08/25(木) 22:27:08.260849デフォルトの名無しさん
2011/08/25(木) 22:55:21.15もういい、sbtなんて俺にはもういい・・・
0850デフォルトの名無しさん
2011/08/25(木) 23:20:29.30参照透明性とか遅延評価とか、型推論もHindley/Milner方式だしな
所詮Scalaは関数型の機能をオブジェクト指向言語の中で再現したものだからな
キモいっちゃキモい
0851デフォルトの名無しさん
2011/08/26(金) 08:29:41.97よう、一ヵ月前の俺
はやくこっちへきてSpecs2と格闘しようぜ
0852デフォルトの名無しさん
2011/08/26(金) 14:34:47.58そのへん気を付けないとハマるよね
Haskellの利点として、
>参照透明性とか遅延評価とか、型推論もHindley/Milner方式だしな
は賛成しますが、
>所詮Scalaは関数型の機能をオブジェクト指向言語の中で再現したものだからな
は、異論があります。これは、関数型とオブジェクト指向を対立軸としてとらえるから
出てくる気持ち悪さではないかと。私は、関数型とオブジェクト指向を直交した概念ととらえているので、二つの概念を
統合することは特に気持ち悪さは感じません。というか、関数型とオブジェクト指向の統合は古くからある研究でもありますし。
0854デフォルトの名無しさん
2011/08/27(土) 00:20:37.490855デフォルトの名無しさん
2011/08/27(土) 00:28:17.710856デフォルトの名無しさん
2011/08/27(土) 01:12:56.810857デフォルトの名無しさん
2011/08/27(土) 02:28:48.50そう思うんなら自説の開陳なり適切な論文の提示なりして自分で潰せよ
0858デフォルトの名無しさん
2011/08/27(土) 02:59:37.110859デフォルトの名無しさん
2011/08/27(土) 03:08:12.600860デフォルトの名無しさん
2011/08/27(土) 04:07:47.64このスレを上から眺めると分かるが、荒らしが1名はりついている。それだけの話。
凄く相性悪いと思います。たとえば、nominalなシステムで引数の型推論を簡単にやってみよう、ということで、
def foo(x) = x.setSize(200, 300)
とかやったとき、xに適合する型は無数にあって、その中でプログラマが意図しているであろう型を
適切に推論するのはほぼ無理です。しかも、コンパイル時のクラスパスによって型推論の結果が左右されてしまいますし。
また、nominalでなくとも、サブタイピングと型推論の相性自体が悪いという話があります。
strcutural subtypingでも、多相メソッドの推論とかしようとすると色々無理が出てきますし。
簡単な例でいうと、
def foldl(collection, init)(f) = collection.foldLeft(init)(f)
とか。このとき、collection, init, fの型+foldlの型パラメータ+foldlの返り値型を推論しようとすると、複数通りの結果が考えられますが、「最も一般的な
推論結果の型」が存在しないので、困ったことになります。
コテがうざいという方がもし多ければ、名無しになりますが、ことScalaに関しては、自分の言説には責任持ちたいので現在はコテやってるという話
ですね。
0862デフォルトの名無しさん
2011/08/27(土) 06:07:51.500863デフォルトの名無しさん
2011/08/27(土) 06:54:32.30(私は割と楽しく読ませて貰ってるが)気に入らない人がNGしやすいしね。
0864デフォルトの名無しさん
2011/08/27(土) 09:04:14.17ランク2多相の型推論が難しいのと同じ理由だよね?
0865デフォルトの名無しさん
2011/08/27(土) 11:19:08.57=> 関数型とオブジェクト指向は相性悪い(ただし静的型に限る)
静的型ではどこかでバランスを取る必要があるが
そのセンスが言語設計者と一致したときScalaが気持ちよくなる
0866デフォルトの名無しさん
2011/08/27(土) 12:30:50.95強引すぎるだろw
関数型とオブジェクト指向、
HaskellとScalaじゃ重心配分が全然違う。
重心配分が違う、というのはその通りかと。ただ、Scalaが目指している方向は「関数型オブジェクト指向言語」
(関数型にもオブジェクト指向にも書けるという意味ではなく、関数型(データがimmutable)かつオブジェクト指向(subtyping
polymorphism))であることはおそらく確かだと思います。これは、Odersky自身が何度も強調していることでもありますが、
関数型とオブジェクト指向は別に対立概念ではないです。
0868デフォルトの名無しさん
2011/08/27(土) 19:57:46.54それも内容がほぼ一貫してScalaの話題
そのエネルギーを見習いたいもんだよ・・・仕事はやってんのか?
仕事は普通にやっていますよ。Scalaとは縁が遠い仕事ですけど。
仕事から帰った後か土日で、主にブログ書いたりツイートしてます。
エネルギーというか、Scala関係の事書くのが日常化してしまった
というか娯楽化してしまったので、それ自体は特に苦痛でないですね。
0870デフォルトの名無しさん
2011/08/27(土) 20:51:01.79おける学習の優先度は
Scala関係(Twitter) >> その他プログラミング言語関係 > JVMとかの実装読み > 各種論文読み
とかなってて、それはそれで楽しいですが、色々いびつな生活な気がしますし、
持ってる技術スキルもおかげでかなり偏ってますし。
0872デフォルトの名無しさん
2011/08/27(土) 21:51:01.34関数型の特徴とか真髄みたいなのを手っ取り早く学ぶならばHaskell、
Java技術者が関数型で自分の仕事がどう変わるか知りたいならばScala、
.NET技術者が関数型で...ならばF#がいいと思う。
Haskellはコンパイラとして実用されている例は少ないが、その言語理論は幅広く
影響を与えていて、特にこれからの言語の行く末を知りたければ勉強しておくべき。
0873デフォルトの名無しさん
2011/08/27(土) 23:33:22.730874デフォルトの名無しさん
2011/08/28(日) 00:32:10.860875デフォルトの名無しさん
2011/08/28(日) 05:29:22.25関数型の視点からみると、
Scala は他の関数型言語に比べて、
記述のスマートさや簡潔性で見劣りするように感じられ、
その原因となっているのが、クラスベースOOを、
土台としているために、余計な複雑さが
生じているからじゃないかと思うんですが、
皆さんどう思われますか?
0876デフォルトの名無しさん
2011/08/28(日) 06:27:33.23データとそれに対する操作をクラスっていう形で
紐付けたことだと理解しているけど、それだけで複雑になるとは思えないなあ
データ型を木(やDAG)の形で整理するのは関数型でもやるわけだから……
シンタックスが中途半端にJavaに引っ張られてるのが
記述上の冗長さを生んでいるんじゃないかなと思うけど
0877デフォルトの名無しさん
2011/08/28(日) 07:04:16.200878デフォルトの名無しさん
2011/08/28(日) 08:44:36.82Scalaの文法は冗長なんだが
0879デフォルトの名無しさん
2011/08/28(日) 09:52:42.65たしかにScalaは他の関数型言語よりちょっとシンプルじゃない気がするけど
クラスベースOOだからというよりJavaとの接続をシームレスにするためじゃないかな
しかし、ScalaはHaskellやMLのような浮世離れした存在ではなく、汚いところも
きちんと面倒を見るような現実的に利用しやすい言語という位置づけになってるんじゃ
ないかな。
Haskellが今後爆発的に利用されることは現段階では考えられにくいけど、
Scalaは確実にシェアを伸ばしていくんじゃないかな。
0880デフォルトの名無しさん
2011/08/28(日) 10:34:49.44> 仕事は普通にやっていますよ。Scalaとは縁が遠い仕事ですけど。
scalaできる企業に転職しろよw
0881デフォルトの名無しさん
2011/08/28(日) 14:04:49.52まじでビックリなんだが
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
0882デフォルトの名無しさん
2011/08/28(日) 14:06:04.22具体的にどこがだよ
0883デフォルトの名無しさん
2011/08/28(日) 16:27:23.991. 文末がセミコロン2つ
2. メソッド呼び出しが「#」
3. 整数(+ - * /)と実数(+. -. *. /.)で演算子が違う
4. funとfunctionで分ける意味は?
5. 再帰するときはlet rec
6. なにこのトラップ
# [1, 2, 3];;
- : (int * int * int) list = [(1, 2, 3)]
0884デフォルトの名無しさん
2011/08/28(日) 18:02:50.14良く知らない言語をdisるのって滑稽だなwww
0885デフォルトの名無しさん
2011/08/28(日) 20:00:35.95>>772と>>780とか
多分>>805もOCamlの方が短く書ける
0886デフォルトの名無しさん
2011/08/28(日) 20:18:29.850887デフォルトの名無しさん
2011/08/28(日) 20:45:02.230888デフォルトの名無しさん
2011/08/28(日) 21:22:23.83つーかequi-recursive type使ってんの?
0889デフォルトの名無しさん
2011/08/28(日) 21:39:51.08>>777
0890デフォルトの名無しさん
2011/08/28(日) 22:49:26.870891デフォルトの名無しさん
2011/08/29(月) 07:58:39.740892デフォルトの名無しさん
2011/08/29(月) 12:22:23.701. 文末が明らかな場合はセミコロン二つを省略できるので、REPL以外では滅多に使わない
2. 型推論でレコードと区別するため
3. ad-hoc多相が無いから(ad-hoc多相を直接サポートするG'Camlという処理系がある)
ただし、Variantでad-hoc多相をエンコードすることは可能
4. functionは引数が一つしか取れないかわりに、引数にパターンマッチが書ける
5. let と let rec が分かれてると、既存の関数をデコレートしたいとき便利
(例:let foo = bar $ foo)
6. リストは[1; 2; 3]
0893デフォルトの名無しさん
2011/08/29(月) 13:15:38.94F#スレでもうざいって言われててやっぱそうなんだ、と思った
0894デフォルトの名無しさん
2011/08/29(月) 14:02:33.05理由を訊いてんじゃなくて、その設計がダサいって言ってんの
0895デフォルトの名無しさん
2011/08/29(月) 14:08:52.16SMLでもfnが必要だけどね
しかしfunとfunctionの二つがあるのはダサいでしょ
0896デフォルトの名無しさん
2011/08/29(月) 14:14:43.70たぶん何らかの記号は必要なんだろう
0897デフォルトの名無しさん
2011/08/29(月) 15:37:49.43TMTOWTDIだからダサいってことなら、Scalaは物凄くダサいってことに
0898デフォルトの名無しさん
2011/08/29(月) 15:50:05.36しかも名前がfunとfunctionってひどすぎる
まあもういいけどね
ちょっと煽ってみただけだから
0899デフォルトの名無しさん
2011/08/29(月) 15:56:10.14funとfunctionは機能が違うから
SMLにはfn一つしか無いけど、SMLのfnはOCamlのfunctionで、funに相当する構文は無い
だから引数が複数ある場合も fun x y z -> とは書けず
fn x => fn y => fn z => になる(別にこれはこれで良いけど)
0900デフォルトの名無しさん
2011/08/29(月) 16:10:32.27つまり、fn (x, y, z) => と書くことが多いから
0901デフォルトの名無しさん
2011/08/29(月) 17:35:14.200902デフォルトの名無しさん
2011/08/29(月) 19:11:08.28型を省略したらstructuralな部分型だと見なし、
nominalに型を指定したいときだけ型注釈を書く、という感じで
OCaml並みの型推論を得る事は出来なかったのかな?
0903デフォルトの名無しさん
2011/08/29(月) 21:15:12.78現実的に色々難しい。まず、現在のScalaのstrutural typeのシステムには、これをメインの型システム
として採用するには重要な欠点がある。たとえば、「+演算子を持ってる任意の型」とかいうのを書きたい
としよう。Scalaプログラマ的には、
type Additive[T] = { def +(other: T): T }
と書きたいところではあるんだが、残念ながら、これはScalaの型システム上許されない。これは、どちらかというと
JVMの上でstructural typeを実現する上での制約ではあるのだけど。あと、structural typeをメインのシステムに据えるの
は、パフォーマンス面とかでも問題がある。
あと、仮にstrcutural typeをメインに据えて、↑のような実装の制限が無かったとしても、それでも型推論は難しい。
mapとかflatMapの多相メソッドを呼び出しているオブジェクト(strctural)の型をどうやって推論するか、ってのを考えると
たぶんその面倒くささがわかると思う。結構簡単なプログラムでも、推論結果が一意に決まらない事がわかる。実際のところ、
OCamlでもオブジェクトシステム使ってそういう推論やろうと思うと、型注釈が結局必要になったりする。
0905デフォルトの名無しさん
2011/08/30(火) 06:28:29.68◆CgacaMDhSQさんは、誰かに読ませたい気があるのなら
Twitterに書いている長文をブログか何かにまとめて書いて欲しい。
文章の開始部分を見つけるのが面倒で読みにくいです。
0906デフォルトの名無しさん
2011/08/30(火) 07:28:50.75お前ごときが何言ってるの?
0907905
2011/08/30(火) 07:38:15.19うーん。確かに、Twitterで分散して書いちゃうと、開始部分がわかりにくて
読みにくいってのはありますね。誰かに読ませたいかというと、読んで
何か刺激を受けてくれたならありがたいけど、そこまで読ませたい、とは
思ってない、という微妙な感じです。どちらかというと、自分メモ的な
ものかもしれません。ともあれ、検討はしてみます。
# あと、書くコストの面からTwitterを安易に選んでしまう、というのが
# あって、これは問題かもしれないなあ、とは思っています。
>>906
たぶん私の事を慮っていただいたのだろうと思いますが、要望は要望
として、それを反映するかは自分で選択するので大丈夫です。
0910デフォルトの名無しさん
2011/08/30(火) 19:27:10.63はてなのTwitter記法かTogetterで良いのではないかと。
0911デフォルトの名無しさん
2011/08/30(火) 22:46:08.43使うの尻込みしてたけど
触ってみたら型付きPerlみたいな言語で
とっつきやすいね
0912デフォルトの名無しさん
2011/08/31(水) 00:17:17.99JavaはダメだったけどC#が良かったように
0913デフォルトの名無しさん
2011/08/31(水) 00:50:26.89使わないなら、普通の関数型言語でいい
0914デフォルトの名無しさん
2011/08/31(水) 01:04:48.350915デフォルトの名無しさん
2011/08/31(水) 01:28:44.87Haskell様に決まってんだろ平伏せよ
0916デフォルトの名無しさん
2011/08/31(水) 01:40:26.900917デフォルトの名無しさん
2011/08/31(水) 04:43:38.24Scala, Scala 騒いでるのは、
JavaとかC#上がりのやつばかりだろ?
元々、関数型やLispをやってたやつで、
Scala 最高ですね、なんて言うやつ聞いたことねえわ。
0918デフォルトの名無しさん
2011/08/31(水) 05:00:20.29研究室で関数型やってたから
仕事はCだけど
関数型は常用しようと思うとライブラリがなくてゲンナリするからScalaに逃げた感じ
スクリプトを書くときはGaucheを使う
0919デフォルトの名無しさん
2011/08/31(水) 12:40:28.290920デフォルトの名無しさん
2011/08/31(水) 12:58:05.51共倒れ
だが、プログラミング言語は惰性力がすごいからな
一度頂点に立ったものがぽしゃることはない
0921デフォルトの名無しさん
2011/08/31(水) 14:40:58.160922デフォルトの名無しさん
2011/08/31(水) 15:38:29.660923デフォルトの名無しさん
2011/08/31(水) 17:05:22.53あるとしたら、JVM自体が何らかの限界に直面するとか、くらいか。
0924デフォルトの名無しさん
2011/08/31(水) 21:11:16.810925デフォルトの名無しさん
2011/08/31(水) 21:57:53.48でも比較的まとまった機能をブラックボックス的に作るなら小回りの利く関数型の方がよい。
なのでそのどちらでも対応できるscalaはここちいい。
これってまさにおだのどうきそのままじゃね?おれって。
0926デフォルトの名無しさん
2011/08/31(水) 22:39:17.42変更点つかバグフィックスだけじゃね?
0927デフォルトの名無しさん
2011/08/31(水) 23:25:11.46継続が死んでたのの修正とか。
・REPLの起動速度が改善(環境にもよるだろうけど、自分の環境だと7秒→1秒になった)
・コンパイルも速くなってる(これも環境によるだろうけど、テキトーに色々なプログラム食わせてみた感じ、大体1.5倍くらい速くなってる。
・1.getClass()とかできるようになった
・バグフィックス色々
0929デフォルトの名無しさん
2011/08/31(水) 23:58:22.900930デフォルトの名無しさん
2011/09/01(木) 03:26:38.04スクリプト的にちょっと書いて試すような使い方するには辛い。
0931デフォルトの名無しさん
2011/09/01(木) 03:40:05.640932デフォルトの名無しさん
2011/09/01(木) 07:50:41.430933デフォルトの名無しさん
2011/09/01(木) 14:15:51.10前が遅すぎたのがあるけど
0934デフォルトの名無しさん
2011/09/01(木) 23:29:57.800935デフォルトの名無しさん
2011/09/01(木) 23:39:03.76つまりScalaの別名
0936デフォルトの名無しさん
2011/09/01(木) 23:41:49.76ErlangはともかくRubyが関数型言語からぱくりまくりだから
0937デフォルトの名無しさん
2011/09/02(金) 07:02:03.020938デフォルトの名無しさん
2011/09/02(金) 07:37:24.25Haskellより後発の言語なんだぞこれ
0939デフォルトの名無しさん
2011/09/02(金) 07:49:51.58別に新しい言語でも何でもない
0940デフォルトの名無しさん
2011/09/02(金) 07:56:06.060941デフォルトの名無しさん
2011/09/02(金) 07:58:10.720942デフォルトの名無しさん
2011/09/02(金) 08:01:02.52まあHaskellerはいつもそうだけど
0943デフォルトの名無しさん
2011/09/02(金) 08:07:59.21ふざけんなこのクソボケ
寝言は寝て言え
あの表記の簡潔さ、美しさ、その純粋性は現存言語の中でピカイチだろが。
いざとなれば言語の実装母体になっちゃえる実用性を備えてるのに役に立たないだと?
0944デフォルトの名無しさん
2011/09/02(金) 08:10:02.470945デフォルトの名無しさん
2011/09/02(金) 08:11:27.36こいつ絶対Haskell使ってないわ
0946デフォルトの名無しさん
2011/09/02(金) 08:21:32.94(loop (print (eval (read)))) という処理が走ってるものを言う。
0947デフォルトの名無しさん
2011/09/02(金) 09:48:24.97起動が遅いからクライアントサイドでは使い辛いんだけど
トイプログラム書いて遊んでるの?
0948デフォルトの名無しさん
2011/09/02(金) 12:18:44.18> (loop (print (eval (read))))
対話型やん
0949デフォルトの名無しさん
2011/09/02(金) 12:22:14.07言語仕様マニアになるのが目的だからプロダクトやツールなんてどうでもいい
0950デフォルトの名無しさん
2011/09/02(金) 12:34:21.660951デフォルトの名無しさん
2011/09/02(金) 12:53:20.630952デフォルトの名無しさん
2011/09/02(金) 12:58:15.84対象をその性質のままに記述出来るっていう、
関数型言語の思想的な部分が欠落してるように感じる。
結局OOの世界を介在して表現しなければならないから。
関数型と考えて記述しようとすると、いつもそこに不満を感じるんだよな。
なんで、関数型的なスタイルを利用しつつも、
あくまでOOの視点から考えるのが、
Scalaらしいやり方なのかな、と最近思う。
諦めがついたというか、なんというか。
0953デフォルトの名無しさん
2011/09/02(金) 14:03:10.56古い話を蒸し返して悪いが、
> def foldl(collection, init)(f) = collection.foldLeft(init)(f)
これって型推論できるよね?
0954デフォルトの名無しさん
2011/09/02(金) 15:17:46.380955デフォルトの名無しさん
2011/09/02(金) 17:47:52.39# let foldl collection init f = collection#foldLeft init f;;
val foldl : < foldLeft : 'a -> 'b -> 'c; .. > -> 'a -> 'b -> 'c = <fun>
一見、推論できているが、
class type ['a] hasfoldLeft =
object method foldLeft : 'b -> ('b -> 'a -> 'b) -> 'b end;;
class ['a] mylist (l : 'a list) =
object (self : 'a #hasfoldLeft)
method foldLeft init f = List.fold_left f init l
end;;
と定義して動かそうとするとタイプエラー
# foldl (new mylist [1;2;3]) 0 (+);;
(エラーは略)
キャストしてもタイプエラー
# (foldl :> int #hasfoldLeft -> int -> (int -> int -> int) -> int);;
(エラーは略)
0956デフォルトの名無しさん
2011/09/02(金) 17:49:00.62# let foldl : 'a #hasfoldLeft -> 'b -> ('b -> 'a -> 'b) -> 'b =
fun collection init f -> collection#foldLeft init f;;
val foldl : 'a #hasfoldLeft -> 'b -> ('b -> 'a -> 'b) -> 'b = <fun>
# foldl (new mylist [1;2;3]) 0 (+);;
- : int = 6
やっぱり最初の型はちゃんと推論できていないのだろう
俺が理解できてないだけなんだろうけど、
strcutural subtypingの型推論って
OCamlのせいで印象最悪なんだけど
0957デフォルトの名無しさん
2011/09/02(金) 17:58:48.66MS-BASICとかは典型的なreplじゃん
不細工なだけで
0958デフォルトの名無しさん
2011/09/02(金) 18:01:29.21> strcutural subtypingの型推論って
今時二者択一はない。
0959デフォルトの名無しさん
2011/09/02(金) 18:02:57.80どういう意味?
0960デフォルトの名無しさん
2011/09/02(金) 18:10:44.10どうせなら"Ruby to Erlang wo Pakkuta Language"にすればよかったのに。
0961デフォルトの名無しさん
2011/09/02(金) 18:13:57.53sbt + REPLが便利過ぎて生きるのが辛い。
0962デフォルトの名無しさん
2011/09/02(金) 18:41:19.77let foldl collection init f = collection#foldLeft init f
class type ['a, 'b] hasfoldLeft = object method foldLeft : 'b -> ('b -> 'a -> 'b) -> 'b end
class ['a, 'b] mylist (l : 'a list) =
object (self : ('a, 'b) #hasfoldLeft)
method foldLeft init f = List.fold_left f init l
end
let _ = foldl (new mylist [1; 2; 3]) 0 (+)
で動くわけだが
0963デフォルトの名無しさん
2011/09/02(金) 18:45:31.12ちょっと今、手が離せないんで後で確認する
やっぱり俺が間違ってたかw
0964デフォルトの名無しさん
2011/09/03(土) 00:15:48.85しかし、この方法はポリモーフィックタイプを全部パラメタライズしなきゃいけないのか
どうなってんのかよくわからない…
OCamlをリファレンスで考えていいのかという問題もあるが
でも、strcutural subtypingで型推論ができるのって、OCamlしか知らないんだよな
まあ、前座の雑魚は黙って、水島氏の登場を待ちますか
0965デフォルトの名無しさん
2011/09/03(土) 00:54:16.200966(1) ◆CgacaMDhSQ
2011/09/03(土) 01:38:48.60はい。型推論は「できます」。問題は、推論の結果が「適切な」ものか、どうかです。
まず、原理的な話を。Hindley/Milner 型推論(ML系言語の基礎となる型推論アルゴリズム。
OCamlとかHaskellとかはそれらに色々拡張が加わっているので、そのままではないですが)は、
与えられた「全ての」式に対して、最も一般的な型(principal typeと呼ばれます)を完全かつ健全に
推論できることが保証されています。この事実によって、型推論の結果の適切さを担保することが
できます。
しかし、structural subtyping(+ parametric method)が入ると、principal typeを完全かつ
健全に推論することができなくなります(というか、principal typeが存在しない、というのが正確でしょうか)。
ただ、この辺り、専門外なので、実はできる、という文献があれば示していただけるとありがたいです。
(続く)。で、OCamlは型推論をできるようにするために、メソッドは多相的になれない(単相的でなければいけない)
という制限が設けられています。
0967(2) ◆CgacaMDhSQ
2011/09/03(土) 01:39:50.82>>966
>>963
>>964
プログラマの意図した型としては、
class type ['a] hasfoldLeft =
object method foldLeft : 'b -> ('b -> 'a -> 'b) -> 'b end;;
class ['a] mylist (l : 'a list) =
object (self : 'a #hasfoldLeft)
method foldLeft init f = List.fold_left f init l
end;;
であったはずなので、おっしゃる事は正しくて、このケースでは、プログラマの意図した型をOCamlの型推論器が
適切に推論できていないように見えます。ただ、OCamlでは、メソッドが多相的になれないという制限を型システムに
設けているため(つまり、そもそもfoldLeft[A]というメソッドが作れない)、OCamlの型推論器としては正しく「型推論できて」
いることになります。
0968955
2011/09/03(土) 01:45:05.88OCamlの型システムについて勉強不足でした
0969(3) ◆CgacaMDhSQ
2011/09/03(土) 01:47:27.81はい。それで動きます。しかし、それでは、「foldLeftが」型パラメータを一つ持つ多相的なメソッドになっていませんよね。
これは無理も無くて、先ほど書いたように、OCamlでは、メソッドは多相的になれないという制限が設けられているからです(これは、
まさに型推論の問題を回避するためにそうなっています)。ともあれ、Scala的に書くと、
type HasFoldLeft[A] = {
def foldLeft[B](init: B)(f: (B, A) => B): B
}
という(これは、引数の位置に型エイリアスの型パラメータAが出てきているので、正しいScalaプログラムではありませんが)型は
推論できていないわけです。
とりあえず、説明が十分ではないかと思いますが、OCamlでは、Scalaのように多相的なメソッドがそもそも書けないので、この場合の
比較対象として持ってくるのは適切ではないです。
0970(4) ◆CgacaMDhSQ
2011/09/03(土) 01:51:51.91http://caml.inria.fr/pub/ml-archives/caml-list/2008/01/08787d6fa804461e8db9e3ccfece5ee7.en.html
が参考になるかと思います。ちなみに、Jacques Garrigue先生はOCamlのコア開発者です。ただ、その
スレッドで出てくるJon Harropという人は色々な意味で悪名高いので、あまり信用しない方がいいですが。
0971(4) ◆CgacaMDhSQ
2011/09/03(土) 02:26:10.11メソッドを多相的にすることができます。例としては、
# class ['a] newlist(src : 'a list) =
object
method foldLeft : 'b. ('b -> 'a -> 'b) -> 'b -> 'b = fun f a -> List.fold
_left f a src
end;;
class ['a] newlist :
'a list -> object method foldLeft : ('b -> 'a -> 'b) -> 'b -> 'b end
# (new newlist [1; 2; 3]);;
- : int newlist = <obj>
# (new newlist [1; 2; 3])#foldLeft (fun b a -> b + a) 0;;
- : int = 6
な感じになります。しかし、これだと、型注釈を書かない場合に推論される型と一致しないため、実質的にあまり使われる事は無いと思います
(OCamlに関しては素人なので、実はよく使われる、という事もありえなくもないですが)。
0972デフォルトの名無しさん
2011/09/03(土) 03:24:35.08JVM界のC++であり、
関数型言語界のPHPである。
0973デフォルトの名無しさん
2011/09/03(土) 03:32:44.390974デフォルトの名無しさん
2011/09/03(土) 03:33:30.310975デフォルトの名無しさん
2011/09/03(土) 04:00:59.91この番号を指定して実行することはできるのでしょうか?
http://labo.patentbureau.co.jp/blog/?p=291では、
> さらに履歴番号を入力することで、コマンドを再実行できます。
> scala>:history 499
とありましたが、これは履歴を499件出力するというもので
間違いのようです。
ちょっと確認のため、REPLで使えるコマンド(powerモード含む)調べてみましたが、
それに該当する機能はちょっと無いですね…。シェルの!<num> みたいなのがやりたい
事だと思うのですが、残念ながら現段階では無理、ということですね。
ただ、:replayが出来ているくらいなので、実現が難しい、ということは無いはずです。
あとは、sbtコンソールにはそういうヒストリ実行機能がありますが、sbtコンソールそれ
自体はREPLじゃないですし…。
0977デフォルトの名無しさん
2011/09/03(土) 09:29:45.20>>955のクラス定義は(本人の意図はどうあれ)foldLeftが多相メソッドになってしまってる一方で、
foldlの引数には型注釈が無い(無い場合は多相メソッドにならない)のがfoldlが通らない理由
だから、
let foldl (collection: 'a #hasfoldLeft) init f = collection#foldLeft init f
のように定義してやると>>955は通るし、また
class ['a] mylist2 (l : 'a list) =
object
method foldLeft : 'b. 'b -> ('b -> 'a -> 'b) -> 'b = fun init f -> List.fold_left f init l
end
と直接的に多相メソッドを定義した場合も通る(>>955のmylistとmylist2は同じ定義になる)
0978977
2011/09/03(土) 09:44:35.12class ['a] mylist (l : 'a list) =
object
method foldLeft init f = List.fold_left f init l
end
だと思うが、これはクラス定義の制限(より正確にはOCamlのlet多相性の制限)によって通らない
なので>>962のように定義してやる必要がある(そのかわりfoldLeftは多相的にならない)
一方で、こういったOCamlの型推論の制限に引っかからないように
オブジェクトを直接定義してやると多相的なfoldLeftを持つオブジェクトが得られる
let foldl collection init f = collection#foldLeft init f
let obj = object
val lst = [1; 2; 3]
method foldLeft init f = List.fold_left f init lst
end
let _ = foldl obj 0 (+)
let _ = foldl obj "0" (fun x y -> x ^ string_of_int y)
ま、何にしろOCamlの型推論は慣れるまで難しいな
0979デフォルトの名無しさん
2011/09/03(土) 09:59:53.03> な感じになります。しかし、これだと、型注釈を書かない場合に推論される型と一致しないため、実質的にあまり使われる事は無いと思います
実質的には、OCamlではオブジェクト自体あまり使わないな
モジュールとファンクタで良いじゃん、みたいな
0980デフォルトの名無しさん
2011/09/03(土) 10:00:40.48なるほど。ありがとうございます。生兵法は怪我の元というかなんというか。そういう風にすることで、型注釈無しに
多相的なfoldLeftを持つオブジェクトを作れる事は知りませんでした。勉強になります。ありがとうございます。ただ、
let foldl collection?init?f?=?collection#foldLeft init f
let obj = object
val lst = [1; 2; 3]
method foldLeft init f = List.fold_left f init lst
end
で得られるfoldLeftの型は
'_a -> ('_a -> int -> '_a) -> '_a
であって、確かにfoldLeft自体は多相的になっているのですが、反対にobjectをそのまま使っているせいで、単相的になってしまっていて、退化している
ような…。
>>979
>>実質的には、OCamlではオブジェクト自体あまり使わないな
>>モジュールとファンクタで良いじゃん、みたいな
それはOCamlな方々からよく聞きます。
0982デフォルトの名無しさん
2011/09/03(土) 19:59:32.22うざいって言っちゃうといろいろアレだから、オブラートに包んで「怖い」って
表現してるわけだけど、本人は気づいちゃいないのねw
なるほど。「怖い」は「うざい」のオブラートにくるんだ表現だったわけですね。自分は色々
空気読めない人なので、その辺り気づかなかったです。そういう直球の指摘をいただけるのはありがたいです。
0984デフォルトの名無しさん
2011/09/03(土) 20:42:09.51scala XXX
という形でプログラムを何度も実行すると思うんだけど、そのたびに数秒またされる。
たぶんVMを起動してクラスライブラリを読み込む時間なのだと思うけど、これ省略できないのかな?
つまり、コンパイル時のfscに相当するものが欲しいのだけど…
0985デフォルトの名無しさん
2011/09/03(土) 21:00:53.250986デフォルトの名無しさん
2011/09/03(土) 21:29:09.490987デフォルトの名無しさん
2011/09/04(日) 11:03:28.400988デフォルトの名無しさん
2011/09/04(日) 11:51:45.90Groovyから呼び出す価値も無い
0989デフォルトの名無しさん
2011/09/04(日) 12:02:45.39http://www.indeed.com/jobtrends?q=jython%2Cjruby%2Cgroovy%2Cscala%2Cclojure&l=
0990デフォルトの名無しさん
2011/09/04(日) 12:06:19.740991デフォルトの名無しさん
2011/09/04(日) 13:28:43.010992デフォルトの名無しさん
2011/09/04(日) 13:34:40.49でしょ
>>990
そうなんけ?
0993デフォルトの名無しさん
2011/09/04(日) 13:36:22.450994デフォルトの名無しさん
2011/09/04(日) 15:02:33.410995デフォルトの名無しさん
2011/09/04(日) 15:08:03.01ところで次スレ誰かよろ。私はムリでした
0996デフォルトの名無しさん
2011/09/04(日) 17:21:47.47確かに指摘の通り、obj#foldLeftは多相ではない
obj#foldLeftとobjの型を見比べてみると
# obj#foldLeft;;
- : '_a -> ('_a -> int -> '_a) -> '_a = <fun>
# obj;;
- : < foldLeft : 'a -> ('a -> int -> 'a) -> 'a > = <obj>
となっていて、これがfoldLeft自体は多相メソッドではないのに
objが多相的に振る舞える理由になってる
退化といえばその通りだが、この性質のおかげで型注釈無しのfoldlに渡せるわけだ
ま、正直言って複雑だよな
巷ではScalaが複雑だと噂らしいけど、OCamlの型推論も闇を抱えてるってことだな
0997デフォルトの名無しさん
2011/09/04(日) 17:33:50.57全部丸投げだとcons多用する言語はきついけどね。
0998デフォルトの名無しさん
2011/09/04(日) 18:58:52.72次スレいらないですか?
0999デフォルトの名無しさん
2011/09/04(日) 19:19:37.911000デフォルトの名無しさん
2011/09/04(日) 19:37:00.6810011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。