1 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 22:40:17 ] The Scala Programming Language ttp://www.scala-lang.org/ チュートリアル日本語訳 ttp://homepage.mac.com/takashi_miyamoto/scala/ScalaTutorial.pdf どう書く?org Scala ttp://ja.doukaku.org/lang/scala/
528 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 11:49:46 ] scala・・・この言語イマイチだねえ
529 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 11:50:38 ] とにかく中途半端な印象しかない
530 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 16:26:21 ] とにかくイマイチ絶対に例を挙げない
531 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 17:36:06 ] あくまで実用本位で言語オタク受けは眼中にないからな
532 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 17:46:01 ] えっ!?
533 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 19:06:39 ] rubyの気持ち悪さ異常
534 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 22:11:20 ] ruby や groovy は、いいときはミラクルなまでにサクサク進むけど バグるとプロでもさじを投げるぐらいデバッグが超絶困難なようだね
535 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 22:42:12 ] コミュニティの性格に似てるかもな。 好きなスタイルで気分良くモノを進めている時は非常に良い顔を見せるが、 好まないスタイルとの出会いや不機嫌に耐性が無く、そういう時は非常に排他的で非生産的になる。
536 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 23:54:23 ] >>534 普段、静的型付け言語とRubyつかっているけど、たまに頭のモード切替が不十分で 静的みたいに書いちゃって、なかなか気づかないバグ残したことがあるよ。 この前ハマったのは、クラスのプロパティをattr_accessorだかで定義して、 自クラス内でプロパティ名そのままでアクセスしようとして、上手くいってなくて、 1日悩んだ挙句、self.プロパティ名、でアクセスしないといけないことに気づいたことかなw アホか俺は、と思ったけどw
537 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 00:07:25 ] スレ違い
538 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 10:22:16 ] Actor の link って何に使うのか良くわからん・・・・
539 名前:デフォルトの名無しさん [2008/11/08(土) 12:25:48 ] 別のアクターが終了したのを検知する(あるいは一緒に死ぬ)ため。
540 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 15:06:14 ] ありがとうー。 Exit メッセージが来るってことですね。 てっきり、複数のアクタをグループ化して、メッセージのマルチキャストみたいなことができるのかと勘違いした。
541 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 15:08:13 ] あぁ、そうか。プロセスと同じように考えればいいのか。 親プロセスが死んだら、子プロセスも死なすって考えればいいのか。
542 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 15:51:32 ] メッセージのマルチキャストは、仲介役のアクタを用意して、自前でやるってことか・・・ www.nabble.com/Scala-actors-and-message-broadcasting-td19442504.html#a19442504
543 名前:デフォルトの名無しさん [2008/11/10(月) 12:20:05 ] Scala 2.7.2 final キタ!
544 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 21:13:27 ] 次は final2 がリリースされるんですね、わかります。
545 名前:デフォルトの名無しさん [2008/11/15(土) 08:39:33 ] Programming in Scalaって出版されましたか?
546 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 21:33:35 ] 11月25日前後を刮目して待て!
547 名前:デフォルトの名無しさん [2008/11/15(土) 22:09:54 ] 刮目して待ちます!
548 名前:デフォルトの名無しさん [2008/11/19(水) 00:11:34 ] Programming in Scala 出版age
549 名前:デフォルトの名無しさん [2008/11/19(水) 12:03:23 ] 紙の本はまだだな
550 名前:デフォルトの名無しさん [2008/11/20(木) 22:06:48 ] 紙のほうは日本で買えるんですか?
551 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 08:26:36 ] アマゾンで買えるようになんじゃね
552 名前:デフォルトの名無しさん [2008/11/25(火) 11:07:31 ] 下は公式サイト(確か・・)で取ったサンプルコードなんだが、 作成アクター数(nActors)が500くらいからエラー吐きまくり・・ 2.7.1の頃は、nActors = 1000でもちゃんと動いたんだが、 なんか知ってるエロい人いない? import scala.actors._ import scala.actors.Actor._ object Message { def main(args: Array[String]) { val n = try { Integer.parseInt(args(1)) } catch { case _ => println("Usage: examples.actors.Message <n-actors> <n-times>") Predef.exit } val nActors = 1000 val finalSum = n * nActors Scheduler.impl = new SingleThreadedScheduler
553 名前:デフォルトの名無しさん [2008/11/25(火) 11:08:50 ] // 続き1 def beh(next: Actor, sum: Int) { react { case value: Int => val j = value + 1; val nsum = sum + j if (next == null && nsum >= finalSum) { //println(sender) println(nsum) System.exit(0) } else { if (next != null) next ! j //println(sender) beh(next, nsum) }}}
554 名前:デフォルトの名無しさん [2008/11/25(火) 11:13:52 ] // 続き2 def actorChain(i: Int, a: Actor): Actor = if (i > 0) actorChain(i-1, actor(beh(a, 0))) else a val firstActor = actorChain(nActors, null) var i = n while (i > 0) { firstActor ! 0 //if (i % 100 == 0) println(i) i -= 1 }}}
555 名前:デフォルトの名無しさん [2008/11/25(火) 11:20:20 ] nActors >= 473 で 以下を延々吐くみたい at Message$$anonfun$beh$1$1.apply(message.scala:34) at Message$$anonfun$beh$1$1.apply(message.scala:25) at scala.actors.Reaction.run(Reaction.scala:78) at scala.actors.SingleThreadedScheduler.execute(Scheduler.scala:174) at scala.actors.Scheduler$.execute(Scheduler.scala:80) at scala.actors.Actor$class.send(Actor.scala:411) at scala.actors.Actor$$anon$1.send(Actor.scala:93) at scala.actors.Actor$class.$bang(Actor.scala:583) at scala.actors.Actor$$anon$1.$bang(Actor.scala:93)
556 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 17:50:27 ] StackOverflow が出てるんだけど、-Xmsをいくら増やしても改善しない。これはバグかもわからんね・・・
557 名前:デフォルトの名無しさん [2008/11/25(火) 18:51:51 ] Programing in Scala v6(PDFと紙で買える奴な) で、p73に val greetStrings = new Array[String](3) って言うコードがあるんだけどさ 2.7.2 final でインタプリタモード立ち上げて打ったら scala> val greetStrings = new Array[String](3) java.lang.NullPointerException at scala.runtime.BoxedArray._deepToString$1(BoxedArray.scala:134) at scala.runtime.BoxedArray.deepMkString(BoxedArray.scala:139) at scala.runtime.BoxedArray.deepToString(BoxedArray.scala:127) at scala.runtime.ScalaRunTime$.stringOf(ScalaRunTime.scala:163) at RequestResult$.<init>(<console>:4) at RequestResult$.<clinit>(<console>) at RequestResult$... だってさ \(^o^)/ 2.7.1は全く問題なし \(^o^)/ とってもBuggyです本当ny
558 名前:デフォルトの名無しさん [2008/11/25(火) 20:01:50 ] 何気にインタプリタでArrayを内容表示する方式が変わったんだな。 昔は [L 方式で、新しいのは中身も表示してあげようとして要素のtoString呼んじゃってるようだ。 ArrayのtoString自体には問題ないようなのでインタプリタ固有の表示ルーチン持ってるんかな。
559 名前:デフォルトの名無しさん [2008/11/25(火) 21:14:09 ] 昔は単純にオブジェクトのtoStringを呼んでたんだけど、 新し目の版ではScalaRuntime#stringOfってメソッドを追加してそっちを使っているようだ。 stringOfはval a = null みたいなのについて例外を出さなくしてくれるのだが、 ArrayについてはtoStringじゃなくdeepToStringを呼ぶようにしていて、 このdeepToStringは要素のnullには(たぶん昔から)対応していないんだな。
560 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 21:33:26 ] val greetStrings = Array.make[String](3, "") でとりあえず回避可
561 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 22:57:29 ] >>556 -Xss でかくするとか
562 名前:556 [2008/11/25(火) 23:29:14 ] >561 スマソ、556は-Xssのtypoでした。 Xmx,Xssとも増やしてもだめだった。>< ちょっとソース眺めてみたが、Actorまわりは結構手が入っている模様。 (スケジューラはインターフェースも変わっている) もしかしたら、SingleThreadedSchedulerはそれらに対応できていないのかもしれない。 lampsvn.epfl.ch/trac/scala/changeset?old_path=%2Fscala%2Ftrunk%2Fsrc%2Factors%2Fscala%2Factors%2FScheduler.scala&old=13978&new_path=%2Fscala%2Ftrunk%2Fsrc%2Factors%2Fscala%2Factors%2FScheduler.scala&new=16207 ちなみに、上記のソースも Scheduler.impl = new SingleThreadedScheduler をしなければ、動くはず。
563 名前:561 mailto:sage [2008/11/26(水) 12:57:09 ] java -Xss64M -cp scala-library.jarのパス:. Message 1000 1000 こちらではこれで動きますた
564 名前:561 mailto:sage [2008/11/26(水) 13:16:35 ] ちなみに Scheduler.impl = new SingleThreadedScheduler をしてる方 あと、デフォらしい -Xss512K では StackOverFlow しましたが -Xss1024K なら大丈夫でした
565 名前:556 mailto:sage [2008/11/26(水) 13:43:32 ] >563 むむっ・・・本当ですね・・・ 当方、環境変数JAVA_OPTSで設定していたつもりが、 なにか間違っていて設定が効いてなかったみたいです。orz 結局、単純に2.7.2でスタックの消費量が増えてたってことっすね・・・
566 名前:デフォルトの名無しさん [2008/11/27(木) 23:58:25 ] >>551 本当にアマゾンで買えるのかなあ? いまだに上がってない・・・ 3月発売予定の達人のほうは上がっているのに・・・
567 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 00:55:36 ] まだみたいだね www.amazon.com/dp/0981531601/
568 名前:デフォルトの名無しさん [2008/12/01(月) 10:45:13 ] 買えるようになったな
569 名前:デフォルトの名無しさん [2008/12/08(月) 07:09:25 ] 今日、やっと pattern matching の凄さを、下にある OCaml の 加減乗除算式を変形する コード例で理解できました。 www.ocaml-tutorial.org/ja/data_types_and_matching pattern matching だけならば python でも近いことが実装できそうな気がしますが、「 Warning: this pattern-matching is not exhaustive.」と警告を出すことは不可能とし か思えません。 でも OCaml ではライブラリの蓄積に限りがあります。本格的に OCaml をやるのは躊躇わ れます。Scala の pattern matching でも OCaml と同等の「this pattern-matching is not exhaustive.」警告を出してくれるのならば OCaml ではなく Scala に挑戦してみ たいと思います。 Scala の pattern matching でも 「this pattern-matching is not exhaustive.」警告 を出してくれるのでしょうか? 少し google しても、下のようなことも書かれています。 lampsvn.epfl.ch/trac/scala/ticket/335 Scala の 「pattern-matching is not exhaustive.」警告について教えてくださいませ。
570 名前:デフォルトの名無しさん [2008/12/08(月) 09:07:06 ] >>21 を読めばいい
571 名前:デフォルトの名無しさん [2008/12/08(月) 13:01:16 ] >>570 >>21 を読めばいい 御指摘、ありがとうございます。 若干のバギーな面があるにしても OCaml に近い pattern matching 処理を scala でも書 けそうですね。 Scala に喰らい尽きたくて涎が出ています。ただ、scala に移ってくる programmer の割 合が心配です。Java programmer の殆どは scala には移ってこないだろうと思っていま す。Python から scala に来る programmer の方が多そうに思えます。
572 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 22:57:13 ] >>571 誰がどこから移ってくるとかどうでもいい
573 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 09:15:41 ] どうでもいいと思ってるなら書かなきゃいいのに。 いちいち自分の興味ない話題に「どうでもいい」なんてレスしてたらキリないぞ。
574 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 09:44:20 ] 「どうでもいい」厨にレスしなくていいよ。 どこにでもいるから。 専用ブラウザのあぼーんに設定しておけばそれで済む話
575 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 17:12:50 ] 自意識が分相応なところに落ち着く前の年齢なんでしょ。 「この俺が、他ならぬこの俺が、どうでもいいと思った! この話題自体はどうでもいいことだが、この俺がどうでもいいと思ったことは なんとしても書き込まれねばならない重大ニュースだ!」
576 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 17:15:20 ] なんて中身の無いスレだ
577 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 21:27:15 ] Scalaでスカラ
578 名前:デフォルトの名無しさん mailto:sage [2008/12/10(水) 00:15:14 ] 珍しく書き込みが続いたと思ったらこれかよ
579 名前:デフォルトの名無しさん mailto:sage [2008/12/10(水) 01:05:02 ] 3っつもレスがつくなんて>>572 も書き込んだかいがあったな
580 名前:デフォルトの名無しさん [2008/12/11(木) 08:47:42 ] >>569 です。scala へ飛び込むための背中押しをお願いします。また Java は殆ど使って いないので誤解があったら指摘してやってください。 Java の generics は C++ generics/python duck typing とは別物だと思います。実質 的には、collection に対する cast を省略するために導入された構文だと極論しても許 されると思います。 本来の generics programming は、method 構造の共用を利用したプログラムの共用だと 思います。例えば __add__ method と __len__ method が共用されている全てのインスタ ンスについて、下のような平均ルーチンを共用できることが generics programming だと 思います T mean(listOfT): T tAt = 0 for elm in listOfT: # sum up loop tAt = elm.__add__(tAt) return tAt/len(listOfT) この意味で C++ template と python duck typing は似ています。必要があれば boost library をpython に移植できます。一方で boost library を Java に移植するなんて無 理だと思います。 ------------------------------ ここで質問です。 scala の generics は Java と同じ/別物どちらでしょうか。 boost library などの C++ template program を scala に移植することは可能でしょう か。 これが可能ならば scala に飛び込みます。よろしく教えてやってくださいませ。
581 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 09:49:16 ] Scalaやらないでいいよ。
582 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 11:30:04 ] >>580 書き方を見るに、C++ templateすらろくに理解してなさそうだけど (boostをpythonに移植できるなんて簡単に言う辺りがそう。boostはC++ templateのメタプログラミング機能を利用した部分も多くあって、duck typing があれば大丈夫程度の代物じゃないよ) あえて言うと、ScalaのgenericsはJavaのgenericsのシステムがベースに なっていて、かなり似てはいる。もちろん、Javaのgenericsには無い特徴も 多くあるけど。
583 名前:デフォルトの名無しさん [2008/12/11(木) 13:33:44 ] >>569 です。ご意見ありがとうございます。 >書き方を見るに、C++ templateすらろくに理解してなさそうだけど >(boostをpythonに移植できるなんて簡単に言う辺りがそう。boostはC++ >templateのメタプログラミング機能を利用した部分も多くあって、duck typing >があれば大丈夫程度の代物じゃないよ) 同意します。boost は必要に迫られた範囲でしか追っていません。私の環境では、 boost に積極的に関わったら、周囲から浮き上がってしまうだけだからです。 「C++ のSTLを使ったプログラムを scala に移植できますでしょうか?」と話を狭めます。 STL を使っただけのプログラムなら、大部分は duck typing で対応させられます。でも Java の generics では無理でしょう。 >もちろん、Javaのgenericsには無い特徴も多くあるけど 580 さんは、私よりずっと知っていそうです。できたら「Javaのgenericsには無い特徴」 で主要だと思われる数点をあげてもらえますでしょうか。
584 名前:582 mailto:sage [2008/12/11(木) 19:16:55 ] >>583 >>582 では、筆が滑って偉そうな書き方になってしまった。申し訳無い。 >「C++ のSTLを使ったプログラムを scala に移植できますでしょうか?」と話を狭めます。 >STL を使っただけのプログラムなら、大部分は duck typing で対応させられます。でも >Java の generics では無理でしょう。 現在のJavaの標準ライブラリだと苦しいと思いますが、JavaでもSTL風のライブラリを 組めば近いことはできると思います(実際、STLを意識した設計のJavaコレクション ライブラリがありました)。もちろん、STLの使われ方によっては難しい場合もあると 思いますが、一般的なケースでは十分可能ではないかと思います。 >580 さんは、私よりずっと知っていそうです。できたら「Javaのgenericsには無い特徴」 >で主要だと思われる数点をあげてもらえますでしょうか。 ・genericsの共変/反変 詳しい説明は省きますが、Genericな型T[A]とT[B]があったときに、 A <: B(AがBのサブタイプである、と読む)ならばT[A] <: T[B]であるとき、 genericな型Tは共変である、といいます。その逆に、A <: BならばT[A] >: T[B] であるとき、Tは反変である、といいます。具体例を出すと、ScalaのList型は 共変になっていて、List[Any]型の変数にList[String]やList[Int]を入れたり することができます。このような機能はJava(やC++)にはありません(C++なら templateを駆使した技巧によってあるいはできるかもしれないけど、素の 機能としては無いです)。
585 名前:582 mailto:sage [2008/12/11(木) 19:17:48 ] レスが長くなったので分割しました。 ・structural type いわば静的に型チェック可能なダックタイピングのようなもので、 例えば、 type A = { def hello: Unit } とすると、A型は、Unitを返すhelloメソッドを持つ全ての型に適合するようになります。 この機能自体はgenericsに直接関係するわけじゃないですが、genericな型の 制約として、structural typeを使うことができるため、型パラメータTがhelloメソッド を持っているべき、などの制約を表現することができます(いくつか実装上の 制約がありますが)。 ・型パラメータのlower bound指定 Javaのgenericsでは、型パラメータTがある型のサブタイプであるべき、という制約は 表現できますが、Tがある型のスーパータイプであるべき、という制約は表現できません。 これは、上で書いた共変/反変の機能とセットで使うことで威力を発揮します。 他にもありますが、とりあえずこの辺で。
586 名前:デフォルトの名無しさん [2008/12/11(木) 22:18:27 ] えー、Javaでも反変あるでしょ? Scala特有なのはvariance annotationで自動的に共変なり反変なりになるところだと思う。
587 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 23:17:31 ] $ scala helloWorld.scala /work/helloWorld.scala:1 error: not found: value println println("hello, world!") ^ one error found
588 名前:デフォルトの名無しさん [2008/12/11(木) 23:27:20 ] それからScalaのジェネリクスがC++とJavaのどちらと多くを共有しているかっていったら問答無用でJavaのほうだよ。 それでScalaやらないでC++やるっていうんだったら好きにすればいいと思う。 「C++にできてJavaにできない○○があるが、Scalaではどうか?」って聞いてくれればがんばって答えてみるかも。
589 名前:582 mailto:sage [2008/12/11(木) 23:38:37 ] >>586 ワイルドカードの下限境界の事言ってる?あれは「型を使う側」で明示的に指定しない といけないという点で違うし、制限も強い。ワイルドカードに相当するのは、Scalaだと Existential Typeだね。
590 名前:デフォルトの名無しさん [2008/12/11(木) 23:42:16 ] いや、だから反変がJavaにはないっていうのは違うでしょ?
591 名前:582 mailto:sage [2008/12/11(木) 23:54:19 ] いや、A <: B => T[A] <: T[B]であるような、厳密な意味での反変はやはり無いと 言って良いと思う。Javaの場合、A <: B => T[A] <: T[? extends B]なわけだし。 ただまあ、誤解を招く書き方ではあったかもしれんとは思うけど。
592 名前:582 mailto:sage [2008/12/11(木) 23:58:46 ] すまん。共変と反変が逆になっとる。正しくは、以下。 いや、A <: B => T[B] <: T[A]であるような、厳密な意味での反変はやはり無いと 言って良いと思う。Javaの場合、A <: B => T[B] <: T[? super A]なわけだし。 ただまあ、誤解を招く書き方ではあったかもしれんとは思うけど。
593 名前:デフォルトの名無しさん [2008/12/12(金) 08:35:32 ] >>569 です。582 さん、詳細に答えて下さり感謝します。 「Java の generics では、下のように extends を使う。デフォルトでは Object を継承 する」との説明を読んで、これは制限が強すぎると感じました。List, Vector, Map など の素直なコレクション・ライブラリを記述するには型チェックが有効に働くでしょう。で も使いもしないメソッドにまで型チェックが利いてしまうのでは、generic なライブラリ を作るほうが大変だろうと推測していました。 public static <T extends Comparable<T>> boolean greater(T t1, T t2) { return t1.compareTo(t2) > 0; } だからこそ、List(Any) と書けるようにしたのだと思います。 反変/共変は理解できていませんが、皆様の議論を見ていると scala では型チェックを 重視・活用しているように思えます。OCaml でのようにコンパイル段階でエラーを検出・ 指摘することに拘っているのだろうと推測します。 Python duck typing のように、実行時にエラーを吐き出していたのでは、ビジネス用途 で使い物にならないのだと思います。C++ template でのように、大量の意味を掴みにく いエラーメッセージを吐き出すことは、scala ではないのだと思います。 もうすこし調べてみます。ありがとうございました。
594 名前:デフォルトの名無しさん mailto:sage [2008/12/12(金) 18:54:30 ] 相対論スレかと思った
595 名前:デフォルトの名無しさん [2008/12/13(土) 00:12:24 ] scalaを使うと並列処理がとても上手く書けると聞いた そのメカニズムを教えてくれないか?
596 名前:デフォルトの名無しさん [2008/12/13(土) 00:15:40 ] 関数型だから??
597 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 00:19:00 ] つ www.scala-lang.org/node/50
598 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 12:45:16 ] >>587 あえて print1n にしてエラーメッセージ出させるとうちの 2.7.2 final では (fragment of HelloWorld.scala):1: error: not found: value print1n print1n("Hello, world!") ^ one error found !!! discarding <script preamble> となる エラーメッセージ冒頭が違うのは何故?
599 名前:デフォルトの名無しさん [2008/12/13(土) 15:09:29 ] なんか結局Java7にクロージャ入らないらしいので 結構本当にScalaの時代が到来するのではないか。
600 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 16:38:09 ] ないないw エッジな人達はとっくに関数型に行ってるし そうでない人にScalaは無理 下級兵士はこれからもJavaだよ
601 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 17:03:06 ] 俺もScalaの時代が来るかについては否定的だけど Javaな人に関数型の考え方を知ってもらう教材としてScalaは悪く無いと思う 適切なドキュメントさえあればScalaを学ぶのはそう難しいことではない
602 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 19:49:40 ] エッヂな人達って関数型に行ってもやっぱり実際に物作るのはC++とかスクリプトとかじゃないの?
603 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 20:37:13 ] エッチな人なので関数型言語でWEBクローラつくりました
604 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 22:32:32 ] >>599 RubyでいうRuby on Railsのようなキラーライブラリの爆発のようなもの必要だな Liftはあるが、採用実績はまだこれからだ Lift Web Framework: Home demo.liftweb.net/ ↓後はLiftのようなものを流行らせるなら、こういう記事がもっと増えて、 InfoQ: David Pollak氏 lift と Scala を語る www.infoq.com/jp/news/2008/03/liftweb さらにこういう本まで出版しないと Amazon.co.jp: JavaからRubyへ ―マネージャのための実践移行ガイド: Bruce A. Tate, 角谷 信太郎: 本 www.amazon.co.jp/dp/4873113202 images-jp.amazon.com/images/P/4873113202.09.MZZZZZZZZZ.jpg おれ自身はRuby好きだけど、静的の魅力も知っているとScalaにすごく期待したくなるわけだよ
605 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 22:38:38 ] liftよりWeb Flavorに期待してる。あと、WicketはJavaよりScalaの方が書き易そうな気がするんだ。
606 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 22:46:11 ] 昔はEJBが駄目すぎたけど今や 生産性なんて言語やフレームワークでそんなに違うかって思う それより絶対性能の高さや簡単に数十台規模のシステムを開発できる フレームワークでも作ってくれた方がありがたい
607 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 00:54:45 ] >>601 Javaな人に関数型を知ってもらうなら、Groovyでどうよ?
608 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 01:56:17 ] >>606 実際は大して違わないんですよ。 それよりも大事なのは 10分でブログが作れます、的なアトラクションや コードが少なくてすみます、的な表向きな利点(実際はテストコードてんこもりで大して変わらん) 他に・・・ 何がいると思いますか?
609 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 05:05:36 ] >>607 Groovyは関数型の要素が少な過ぎると思う。無名関数くらいじゃない? しかも、そのくらいなら今どきの言語のほとんどが持っている機能だし それにGroovyは関数型的な(immutableな)データ構造を作成するのを助けてくれないよね Scalaは関数型的なデータ構造を作りやすい構文になってるので、その点でもScalaの 方が良いと思う
610 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 09:48:57 ] 「関数型的なデータ構造」なんて曖昧な言葉は使わずに、 「代数的データ構造」と言いましょう。
611 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 11:17:44 ] >>610 代数的データ構造と言っちゃうとかなり範囲を限定しちゃうでしょ immutableなデータ構造全般を指すつもりで関数型的なデータ構造と書いた
612 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 11:29:23 ] コンストくらいしかないような
613 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 23:07:17 ] >>598 Ubuntuでsynapticから入れたんですけど、 エラーになるんです。 $ scala -version Scala code runner version unknown version -- (c) 2002-2006 LAMP/EPFL こんなになるんです。
614 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 00:37:57 ] 2.3.0 のようです ttp://ubuntuforums.org/showthread.php?t=662629 ちなみに Debian の Etch も 2.3.0 Java 系はプラットフォームを汚すことはめったにないので、 Scala ホームサイトから直落としでも良いかと Debian の Java は GNU 系に力を入れてるんで、 Sun 系の 方はまだまだです
615 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 20:28:40 ] >>614 アドバイスありがとうございます。 tar落としてきてやってみたらうまくいきました。
616 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 13:37:24 ] neopythonic.blogspot.com/2008/11/scala.html
617 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 21:15:12 ] >>616 最初の学習曲線が厳しいようだ 私は Odersky の文章のまずさ (英語ネイティブでないのでしかたないのだが) が最初にして最大の壁になるだろうな、と言語仕様を読んでて思ったが
618 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 23:58:38 ] >>617 俺は英語能力あまり無いのでOderskyの文章のどの辺がまずいのかあまり よくわからんかったのだが、たとえば言語仕様のどの辺の文章?
619 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 20:26:02 ] どの辺というか、全体的に大ざっぱすぎたり専門的すぎたり、てか 書きぶりなどからして文章書いてる時間的余裕がなさげな感じ 明白なミスはほとんどないんだけど (616 紹介中の文章で can learning と かあってわらたw)、肝心なところで何十回も読まないと何が言いたい のか的を得なかったり、もっと簡単に言えるところを妙にまわりくどく 表現したり まあさすがに数十回も読み直すうちに慣れましたが (だから、例の本も当人が書くと知ってちょっと不安に思いますた、買う 予定ないけど)
620 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 22:55:36 ] 私は、どうしてこういう機能や文法が必要なのか、 その説明が少ないんじゃないかなと思いました。 特に代数データタイプに通じてない人は 何が何やらさっぱり分からないんじゃないかと。 どうしてこういう形式を採用したのかが。
621 名前:デフォルトの名無しさん [2008/12/19(金) 07:48:40 ] 仕様書はどこでも大体そんなもんでしょう。By Exampleは読んだ?
622 名前:620 mailto:sage [2008/12/19(金) 11:19:41 ] www.scala-lang.org/node/143 も結構よんでいるから俺は全然問題ない。 ただこういうのを読まずに始めたい人、 代数データタイプの知識のない人、 そういう人への「解説」がない。
623 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 19:32:43 ] 英語に文句を言う前に 「的を得ない」という間違った日本語を使わないようにしようぜ。
624 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 20:04:29 ] scalaの公式サイトに雪が降ってるじゃないか!
625 名前:デフォルトの名無しさん [2008/12/19(金) 20:06:17 ] 凄い!!
626 名前:619 mailto:sage [2008/12/20(土) 12:41:14 ] >621 てか、英語日本語ともネット上で読めるものはすべて読みました、でも結局、 622 さんの言うように、OCaml、Haskell さらにジョイン計算理論まで目を通した 上で読み返してはじめて得心しました ちなみにそんな私の Scala 評価は、 増築しまくりな OCaml よりはすっきり 原理原則にこだわって常時遅延評価を意識する必要が (少なくとも使用初 期には) ある Haskell よりは気が楽 オブジェクト指向はジョイン計算の具現と知って納得 といった感じス
627 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 13:02:53 ] >>626 他の言語の仕様書(英語)は読んでみたことある? 俺はScalaの言語仕様の文章が特にわかりにくいとは感じなかったな。
628 名前:619 mailto:sage [2008/12/20(土) 13:05:01 ] >623 古来中国では「的を射ない」ことを「失鵠」とも表現していました (鵠 はこの場合的の 中心の黒丸のこと; 正鵠など) だから「失う = 得ない」で「漢字の用法」としては必ずしも間違っておらず、事実厳密 な議論では「どちらも可」となっているようです ただなるほど国語辞典などでは「的を射る」の方しか載ってないので、「普通の日本 語」としては「的を得ない」は非推奨、ということになるようです 実際には「的を得ない」の方がはるかに広く使われてるようですが