1 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 00:36:11 ] The Scala Programming Language ttp://www.scala-lang.org/ リンク集 ttp://sites.google.com/site/scalatohoku/%E5%8B%89%E5%BC%B7%E4%BC%9A%E8%B3%87%E6%96%99 前スレ プログラミング言語 Scala ttp://pc12.2ch.net/test/read.cgi/tech/1205156417/
2 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 01:05:50 ] ・Scalaの紹介文(さわり) Scalaは簡潔かつ優雅で型安全な方法でよくあるプログラミングパターンを表現できるように 設計された汎用プログラミング言語です。 Scalaはオブジェクト指向と関数型言語の特徴をスムーズに統合しておりJavaやその他の言語を扱う プログラマをより生産的にすることができます。(以下略) ttp://www.scala-lang.org/node/25 ・Scalaに関する書籍(英語) ttp://www.scala-lang.org/node/959 リファレンスマニュアルや草稿のPDFなども充実しているのでそちらも参照してください。 日本語の資料には、チュートリアルの訳やIBM dW、IT Proの連載記事、各々で開かれた勉強会の資料などがあります。
3 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 01:24:21 ] 乙。 前スレなんで落ちたの?
4 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 01:33:08 ] >3 少数派のScala民は迫害されているのです。
5 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 01:36:11 ] 980超えると24時間ぐらいでdat落ちだったかと
6 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 01:46:04 ] 実行可能な機械語の列を書く手法が だんだんと縮約されてきてるな いい傾向だ
7 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 02:13:14 ] 乙。
8 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 23:17:00 ] >>1 乙
9 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 08:31:13 ] 乙cala
10 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 20:14:49 ] >>1 乙
11 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 22:56:45 ] >>1 乙
12 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 23:24:33 ] 話題無さ過ぎだな、このスレ。
13 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 23:54:43 ] 質問でもニュースでも話題振ってくれさえすれば自分は反応するし、ほかにもそういう 住人は結構居るのではないかと。まあ、言うだけだとアレなので話題振ってみるか Scala 2.8でコレクションライブラリが全面的に書き直されるけど、どう思う? www.scala-lang.org/archives/downloads/distrib/files/nightly/docs/library/index.html 再利用性っていう点ではよく考えられてるなーと感心するんだけど、初学者に対する敷居が高くなりそうな気が してちょっと心配。たとえば、mapメソッドのシグネチャが def map [B, That](f : (A) => B)(implicit bf : BuilderFactory[B, That, This]) : That になってるけど、返り値がThatって何だよとか、ぱっと見で何が返ってくるかよくわからんようになってるのが どうなんだろうと。
14 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 00:01:08 ] >13 お尻に付いてるimplicit ...は読み飛ばす癖がついてるので……。 せっかくだから、今までの奴との使い方の違いを解説してくれ。
15 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 01:19:43 ] >>14 うい。じゃあ、せっかくなので解説してみる。 2.8のコレクションライブラリの面白い点の一つは、高階関数が引数の関数の型+レシーバの型によって返り値の静的な型が異なる事を 許容している点。これだけだとさっぱりだと思うので例を挙げて説明してみる。まず、Map[String, String]のインスタンスを作る。 scala> val m = Map("x" -> 10, "y" -> 20) m: scala.collection.immutable.Map[java.lang.String,Int] = Map(x -> 10, y -> 20) でもって、mapメソッドを使って、Mapの全valueに10足してみる。 scala> m.map{ case (k, v) => (k, v + 10) } res0: scala.collection.immutable.Map[java.lang.String,Int] = Map(x -> 20, y -> 30) mapした結果がMapになっている点に注目。次に、mapの中でkeyを捨ててみる。 scala> m.map { case (k, v) => v } res1: scala.collection.immutable.Iterable[Int] = List(10, 20) すると、mapした結果の型がIterableに変わる。 文字列を使った例。まず、filterしてみる。 scala> "Hello, World".filter{c => c != 'l'} res7: scala.runtime.RichString = Heo, Word 結果がRichStringになっている(2.7.XだとSeq[Char]が返ってきた)。文字列にmapしてみても、 scala> "Hello, World".map{c => (c + 1).toChar} res8: scala.runtime.RichString = Ifmmp-!Xpsme 無名関数の返り値の型がCharならRichStringが返ってくるが、そうでなければ scala> "Hello, World".map{c => (c + 1)} res9: scala.collection.immutable.Vector[Int] = Vector(73, 102, 109, 109, 112, 45 , 33, 88, 112, 115, 109, 101) Vector(2.8で新規導入された型)が返ってくる。こんな感じで、レシーバと引数に応じて適切な型の返り値を返してくれるように なってるわけだ。まとめると、2.7.Xだと必要以上に一般的な型(SeqとかIterableとか)が返ってきてたケースの多くで、ちゃんと 要求にあった特殊化された型(MapだとかStringだとかSetだとか)が返ってくるようになってる。長文ですまん。
16 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 02:10:58 ] >15 んー、なんか分かったような気もする。 ソース見ると、 def flatMap[B, That](f: A => Traversable[B])(implicit bf: BuilderFactory[B, That, This]): That = { val b = bf(thisCollection) for (x <- this) b ++= f(x) b.result } となってるから、BuilderFactory#applyの返値(最初の例だとMapBuilder)に +=で要素を足していって最後に変換して返してるんだな。 コンソールで試してみるか、ソースを丁寧に追えば一応分からん事もないけど、 APIドキュメント見た時に、返ってくる型が分かりにくすぎないか? これ。
17 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 20:18:10 ] >>16 >APIドキュメント見た時に、返ってくる型が分かりにくすぎないか? これ。 そうそう。まさにそこが懸念。mapだとAPIドキュメント見ただけだと、ThatというGenericな型が返ってくることしかわからん。 implicit parameterの仕様をちゃんと把握してないと返り値の型もわからないというのはどうなんだろうなあ。
18 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 22:15:39 ] つーかこれ、APIドキュメントのどこをどういう順番で見たら、 「ああ、この場合のThatは、Map[String, Int]のことね」と得心出来るわけ?
19 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 23:19:17 ] Prologの99問から翻訳した問題集が上陸しているようです。 ttp://www.google.co.jp/search?hl=ja&q=S-99%3A+Ninety-Nine+Scala+Problems&ie=UTF-8
20 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 04:14:17 ] >>18 implicit parameterに適合するobjectを見つけるために、implicit parameterに関連付けられた(associated)クラスの companion objectを探索しに行くというルールがある。関連付けられたクラスというのは、詳細はScala言語仕様の 7.2 implicit parametersを参照して欲しいんだけど、たとえば、 implicit bf :BuilderFactory[(String, Int), That, Map](Thatは不明な型) の場合(これは、(String, Int)を返す無名関数が渡された場合になる)、BuilderFactory、Tuple2、Map、それらのスーパークラス、が関連付けられた クラスになる。で、Mapのcompanion objectを見てみると、 implicit def builderFactory[A, B] : BuilderFactory[(A, B), Map[A, B], Map] となっており、A = String, B = Intとすると、bfに適合する型になるため、これが選択される。その結果、 That = Map[A, B] = Map[String, Int]となり、これが返り値の型になる。一方、 implicit bf :BuilderFactory[Int, That, Map](Thatは不明な型) の場合(Intを返す無名関数の場合)、Mapのcompanion object内のimplicit defにはマッチせず、そのスーパークラスであるIterableの companion object内のimplicit def implicit def builderFactory [A] : BuilderFactory[A, Iterable[A], Iterable] にマッチして(A = Int)、返り値の型That = Iterable[A] = Iterable[Int]になる。まあ、これでわかると思うけど、なかなかにややこしい。 APIドキュメントにThatがどういう風に選ばれるのかちゃんと書かれてないと、APIドキュメントだけから読み解くのは結構きついもの があると思う。
21 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 08:01:31 ] Scala Reference Manuals [ ttp://www.scala-lang.org/node/198 ] のページに 新機能の提案書兼概要みたいなのが用意されてたー ・ Scala Improvement Documents [ ttp://www.scala-lang.org/sids ] 2.8以降の追加機能みたい。 1. Named and Default Arguments (draft) 2. Scala Compiler Phase and Plug-In Initialization for Scala 2.8 (active) 3. New Collection Classes (draft) 4. Early Member Definitions (draft) 5. Internals of Scala Annotations (draft)
22 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 16:55:37 ] >>15 の m.map{ case (K, v) => (k, v + 10) } って、なんでcaseがついてるんだっけ? あと、タプルを返す関数を渡すとMapが返ってるけど、 型パラメータを明示すればタプルのIterableを返すようにもできるのかな
23 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 17:30:01 ] >>22 Scalaでは複数引数の関数とタプルを受け取る関数が区別されてて、タプルを受け取る関数をcase使わないで 書くことももちろんできるんだけど、m.map{t => (t._1, t._2 + 10)}みたいになってキモイので、case使って書いている。
24 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 17:37:49 ] >>22 >型パラメータを明示すればタプルのIterableを返すようにもできるのかな これはもちろんYES。 scala> m.map[(String, Int),Iterable[(String, Int)]]{case (k, v) => (k, v + 10)} res0: Iterable[(String, Int)] = Map(x -> 20, y -> 30)
25 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 17:42:45 ] OCamlからScalaってわかりやすい?
26 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 17:45:55 ] 2.8で継続入れるってどこかで読んだんだけど
27 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 18:49:02 ] これだった A Taste of 2.8: Continuations www.scala-lang.org/node/2096
28 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 19:25:28 ] 新しいコレクションライブラリも相変わらず、再帰なんて糞食らえってな感じで ループ使った実装ばかりだな。
29 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 21:33:10 ] >>20 mapメソッドの問題のひとつは、どのようなBuilderFactoryが用意されているかがわからないこと、という理解でいいのかね? BとThisの組み合わせでBuilderFactoryが決定されるけど、用意されているものを知ってないとどのようなBuilderFactoryが使用されるかがわからず、よってThatがどの型になるかが予測できない。 これって、インターフェースが実装?(どのようなBuildFactoryがあるか)に依存してしまってると言えない? 最悪、Mapなどに用意されているBuildFactoryの種類に追加があると挙動が変わってしまう場合もある、ということになる。
30 名前:デフォルトの名無しさん [2009/07/05(日) 02:16:02 ] >>28 Scalaさんて、末尾再起最適しなかったっけ?
31 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 04:44:18 ] >>29 >BとThisの組み合わせでBuilderFactoryが決定されるけど、用意されているものを知ってないとどのようなBuilderFactoryが使用されるかがわからず、 >よってThatがどの型になるかが予測できない。 ここはその通りだけど、 >これって、インターフェースが実装?(どのようなBuildFactoryがあるか)に依存してしまってると言えない? これはちょっと違う。implicit parameterをうまく使うことによって、型パラメータが適切に推論されるので、型パラメータを書くのを さぼれますよってだけのことで、型という観点からは、単にBuilderFactoryを余分な引数として取る普通のメソッドに過ぎ無い わけで、別に実装に依存するとかそういう大げさな話ではない。
32 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 21:41:04 ] Groovyの作者(今は関わってないかも)James Strachanがこんな事書いてるね。 macstrac.blogspot.com/2009/04/scala-as-long-term-replacement-for.html 注目すべきは、 "I can honestly say if someone had shown me the Programming Scala book by by Martin Odersky, Lex Spoon & Bill Venners back in 2003 I'd probably have never created Groovy." 2003年にProgramming Scala(たぶん、Programmin in Scalaの間違い)を読んでたら、Groovyなんて 作って無かっただろう、って。 個人的にはGroovyとScalaは適用領域がやや違う気がしてたので、Groovy作者からこういう言葉が 出てくるのは結構意外。
33 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 23:32:13 ] >32 それ使ってGroovyスレを荒らして来いって指令ですか?
34 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 03:08:34 ] >>33 別にそーいうつもりは無かった。ただ単にちょっと面白かったのでネタとして投下してみた。
35 名前:デフォルトの名無しさん [2009/07/16(木) 01:36:45 ] >>32 総まとめ:Javaの将来的な後継者としての Scala www.infoq.com/jp/news/2009/07/scala-replace-java >Java の創作者である James Gosling 氏や >JRuby の主要開発者である Charles Nutter氏に続いて, >Groovy の創作者である James Strachan氏もScalaへの賛意を表明している。
36 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 01:45:28 ] でも流行るとは思えないなあ
37 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 09:48:26 ] Scala - The Next Five Years ttp://www.scala-lang.org/node/143#talks Scala Lift Off ('09/06)で、発表したスライドがあるな。
38 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 09:52:00 ] 2.8の説明が中心で8割ぐらいあった。
39 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 15:51:24 ] RemoteActorで、1つのActorに複数のActorが高頻度でメッセージを投げると たまにメッセージロストするんだけど、仕様ですか?
40 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 00:30:45 ] ScalaはJavaとべったりなのが嫌だなー
41 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 04:01:48 ] Javaとべったりになるための諸々を排除した「きれいなScala」を見てみたかった という気はするけど、そうだったら今程注目を集めてなかっただろうなあと思う。
42 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 09:47:08 ] pizza, funnelがあってscalaらしいので、(JVMで動くけど)そっちがそういうのかな ttp://www.artima.com/scalazine/articles/origins_of_scala.html ttp://pizzacompiler.sourceforge.net/ ttp://lamp.epfl.ch/funnel/
43 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 18:35:49 ] ドキュメントざっと読んでみた pizzaはシンタックスはかなりJavaに近いけど、Generics,ファーストクラス関数,パターンマッチング等、Scalaの原型っぽい感じ funnelはシンタックスはよりScalaよりな感じ&並行処理のためのプリミティブが入ってるのが特徴? どちらにしても、Scalaの原型という感じで「きれいなScala」とはちょっとイメージが違うかなあ。
44 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 22:20:14 ] おすすめの入門コースを教えてくれ。 母語はJavaで、schemeとHaskellは少々分かる程度。 チュートリアルはぱっと見したが、基本的な文法概念がよくわからん。
45 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 22:52:45 ] Tutorialは和訳されてるけど、そっちの方読んだ?英語苦手なら和訳版読んだ方がいいかも www.scala-lang.org/sites/default/files/linuxsoft_archives/docu/files/ScalaTutorial-ja_JP.pdf 英語だがProgramming in Scala買うのが一番お勧め。英語としては極めて平易 なんで読みやすいし、かなり丁寧に解説してくれてる。あとは、わからんことあったらこのスレで聞けば 誰かwが答えてくれると思う。このスレ、話題に飢えてるから。
46 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 23:20:49 ] >44 JavaとHaskellが分かれば、あとは何とかなると思うけど。 本は、「Beginning Scala」の方がJavaしか知らん初心者が通読する為の本 って感じで、リファレンス本的な感じが無い。 で、俺はLiftを使ってWebアプリを書いてみるのがいいと思う。 Scalaならではっぽい機能をかなり使ってるから、Scalaの学習に向いてる 気がするので。
47 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 00:56:44 ] やっぱ本読まないとだめかw あのチュートリアルは面白そうというモチベーションは上げてくれるが俺の能力ではあれだけではコードは科研しな。 Liftは興味あるよ。つか、やりたい。 とりあえず金ないけどProgramming in Scalaの方をぽちった。パンの耳でもかじりながら読むよ。(要所を最後まで読了したことないんだけど…
48 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 01:19:43 ] つか、構文糖がいろいろあるっぽくて、釈然としないっつーか なるほどという実感が持てない。だまされ続けてる感というかなんというか。
49 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 08:22:12 ] うーん。それだけだと何が釈然としないのかよくわからんなー。
50 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 16:59:42 ] 「何でこれ、型が違うのにコンパイル通るんだよ! どこかに俺の知らない オーバーロードがあるのか?」 ↓ 「よく見たら、implicitな型変換が定義されてました」 ってのはありがちだが。
51 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 19:15:59 ] クラス定義があると?REPLがちゃんと動かない? シェルでscalacが通るコードが、C-c C-bだとエラー。 Haskellだと無意識にC-c C-rしまくりなんだけど、みんなコーディングはどんな感じにやってるの?
52 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 20:58:13 ] コンパニオンオブジェクトは、REPLで通らないね。 コンパイル単位が別になってるってことみたい。 この場合は、objectで包む事で一時的に回避してる。
53 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 04:01:19 ] なるほど。ライブラリのソース見たところ、 objectひとつで1ファイルにする物みたいね。 しかし、Scala by example よいね。もしかして、本(Programming in Scala)要らなかった?
54 名前:デフォルトの名無しさん [2009/07/26(日) 11:24:12 ] JavaとScalaの微妙な違い見つけた。 // Java class A { public int field = 123; } class B extends A { private int field = 456; } // Scala class A() { val field = 123 } class B() extends A { private val field = 456 } Java版はコンパイル通るけどScala版は通らない。 公開フィールドもサブタイピングにおける契約の一部とするとScalaが正しい。
55 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 16:09:50 ] >>54 それはちょっと違う。Javaが上記のコードでOKなのは、 サブクラスのフィールド定義がスーパークラスのフィールド定義を隠蔽(≠オーバーライド)しているから。 フィールドは静的な型だけに基づいて決まり、オーバーライドできない。 いっぽう、Scalaの場合、クラス定義におけるvalは一種のgetterのようなもので、オーバーライド 可能になってるので、public -> privateにするのは不可。
56 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 20:17:29 ] 「Scalaのアクターのための性能を犠牲にしないで競合安全性を確保する型システム 」 ttp://www.infoq.com/jp/news/2009/07/scala-actors-race-safe-system 難解すぎて、わけわかめ><
57 名前:デフォルトの名無しさん [2009/07/27(月) 23:20:22 ] >>55 その仕組みはわかってるつもりなんだけどJava版で使う段になってnew A().fieldがOKでnew B().fieldがNGなのは型的に正しいの? それともA a = new B(); a.fieldでAのインターフェイスでとにかく使えるんだからいいということかな? まあそんな気もしてきた。
58 名前:デフォルトの名無しさん [2009/07/28(火) 21:47:57 ] みんな開発環境にはなにを使ってる?Eclipse プラグインのやつ、どうにも不安定&イマイチで・・・ NetBeans がいいって聞くけど実際のところはどうなんだろ?
59 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 19:48:58 ] >>58 vim使ってるなあ。Odersky御大によれば、IntelliJ IDEAも良いらしい。
60 名前:デフォルトの名無しさん [2009/07/29(水) 21:53:04 ] 自分もvimですね。単にIDE使うほどにこだわりがないだけですけど。 ところでScala本の翻訳出るんだね。 www.amazon.co.jp/gp/product/4844327453
61 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 00:31:53 ] メソッドを関数として扱うにはどうすればいいの? いちいち{(xs, ys) => xs ::: ys}なんて書かずに、 たとえば(:::)に近いすっきりした書き方がしたい
62 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 01:14:07 ] _を使う。たとえば、 xs.::: _ みたいな感じ。ジェネリックなメソッドを関数として扱う場合、 xs.map[Int] _ みたいに明示的に型パラメータを指定してやらなければならないケースもある。
63 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 01:16:25 ] あ、レシーバも含めて関数にしたいのなら、 _ ::: _ とかかな。型推論が効かないケースだと、(_:List[Int]) ::: (_: List[Int])みたいに型注釈が必要な場合も。
64 名前:デフォルトの名無しさん [2009/08/06(木) 01:17:21 ] Scala=Javaな人でOK?
65 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 01:22:20 ] 100%がそうじゃないけど、Javaから乗り換えっていうケースが多いだろうね。 Javaの資産がそのまま使えるってのが大きなウリだから。ただ、外国で初期から Scalaやってる人たちはFPのバックグラウンド持ってる人が多い印象(Scalaの開発者もそうだし)
66 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 02:19:17 ] ライブラリと実行環境の揃ってるHaskellとして。
67 名前:デフォルトの名無しさん [2009/08/06(木) 08:05:25 ] ScalaやるようになったあとでJavaも勉強しだして結構Javaラーになってしまった。
68 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 08:27:12 ] Scalaから始めてよくJavaの煩雑さに耐えられるなあ。 自分はRubyに慣れてしまってるので、Scalaでもまだまだるっこしく 感じることが多々ある。
69 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 08:31:21 ] 初期のJavaからやってたら、Javaも随分楽になったなあと思うけどな
70 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 09:25:39 ] まあ糖衣構文は増量されたと思うけどね さすがにモダンな言語と比べるとコアの構文が弱すぎる 期待の星だったクロージャも……
71 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 18:59:06 ] 俺も正直、Javaを馬鹿にしていたが謝りたい 特にconcurrent関連。いやそれのみに対して。
72 名前:デフォルトの名無しさん [2009/08/15(土) 21:05:10 ] >70 期待の星だったクロージャも…… Clojureのことだとおもた・・
73 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 18:27:58 ] >>60 池袋ジュンクで先行販売していましたよ。
74 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 18:28:49 ] >>70 モダンな言語って?
75 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 18:31:37 ] HaskellとかRubyとか
76 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 18:33:23 ] Haskellはともかく、Rubyはどうだろ 便利に使わせてもらってるが、モダンとは何か違う気がする クラシックな言語の良さをそのままに、モダンな機能もちょっと取り入れた的な
77 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 18:46:03 ] Rubyでモダンじゃなかったら、それこそScalaくらいしかモダンじゃなくなる それにHaskellの方がJavaより古い言語だ
78 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 19:34:17 ] 年代的な新旧よりも仕様面ではどうなん? F#とかw
79 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 19:50:42 ] F#ってOCamlと言語的になにか違うのか?
80 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 20:08:59 ] >>73 なぬ!買わねばっ!
81 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 20:28:01 ] >>60 「JavaからRubyへの移行を考えている人も必読」とか紹介してるけど、 Scalaの後でRuby見たら、なにこの手抜き言語?としか思わんだろう
82 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 22:20:21 ] >>79 OCamlのサブセットです
83 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 22:41:53 ] 言語仕様の意味で包含関係って、Ocaml⊃F#でしたっけ?
84 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 01:03:00 ] サブセットじゃないだろ。Active PatternとかF#にあって、OCamlに無い機能も あるし、オブジェクト指向周りの仕様も別物のはず。
85 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 18:50:40 ] 「関数型=モダンかよ!」by Mercury,Oz,Gödel,...
86 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 19:21:25 ] ゲーデルなんて言語があったのか、知らんかった なんか随分前に開発止まってるみたいだけど 関数型そのものはモダンではないよね オブジェクト指向言語に関数型の機能を入れるのが最近の流行なだけで
87 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 19:44:40 ] モダンな関数型とかあるんじゃねーの、と適当に言ってみる
88 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 19:50:27 ] モダンでもレトロでも使われなきゃおじゃんだねw scalaはその点、出だしからいい位置に居るんじゃないかな
89 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 20:00:50 ] 関数型は並行プログラミングが流行なのかね Erlangとか、このScalaとか 個人的に今のところあまり必要としてないんだけど
90 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 20:04:19 ] マルチコア環境が普通になったからね
91 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 22:22:44 ] UGM系の携帯・WebサイトだとそこそこでもC10Kとかプッシュ型非同期処理とか考えないといけないけど 単価をいかに下げるかの世界だから、サーバの台数を減らしたり、楽に効率あげれそうなものに飛びついて 試してる面もある。Web+DBとかの執筆者の影響で始めてみようという人もいるんじゃないかな? 逆にHPCの世界の人は、大規模な問題を相手にしてるから、ベクトルの代わりにいかにGPU,CELLを並列にチューニングして 使うかの方向が多いよね。 Scalaスケーラブルプログラミング[コンセプト&コーディング] ttp://www.impressjapan.jp/books/2745 翻訳本の公式ページにエラッタも出てた。 監修者あとがきは気合いはいってるけど、訳はどうかな。
92 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 22:29:49 ] 600ページの本を電車内で読むのはつらい。 日本でもKindle売ってくれたらいいのに。
93 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 22:58:23 ] 文法上は並行プログラミングになってるけど、実際に必ず並列動作するコードが吐き出されているのだろうか?
94 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 23:50:19 ] >>92 ページ数の割には薄い。薄い紙を使ってるそーで、裏のページが透けて見えたw
95 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 23:58:37 ] 破れそうで怖いな
96 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 00:55:11 ] 洋書と殆ど値段変わらないじゃないか…
97 名前:デフォルトの名無しさん [2009/08/19(水) 02:05:56 ] >93 >文法上は並行プログラミングになってるけど、実際に必ず並列動作するコードが吐き出されているのだろうか? 文法上どこが並行かわからんけど、(どこのこと?) 並列動作は明示的にThreadをコントロールするコード書かないとダメ。 Actor使えば必ず並行かと言われるとそうでもない。Actorを1つしかNewしなければ、逐次動作と変わりない。 MailBox(と呼ばれているキュー)に突っ込まれたデータを、プログラムしたとおり、順々に処理するだけだからね。
98 名前:97 [2009/08/19(水) 02:52:52 ] >Actor使えば必ず並行かと言われるとそうでもない。Actorを1つしかNewしなければ、逐次動作と変わりない MainスレッドとActorのWorkerThreadが別々に動くから、並行っちゃ並行だったので訂正。 それだけだとなにが嬉しいのかわからないから、素直にErlang囓る事を勧めるよ。
99 名前:デフォルトの名無しさん [2009/08/19(水) 16:50:18 ] >>96 良いの?嫌なの?
100 名前:93 mailto:sage [2009/08/19(水) 20:00:29 ] >>98 もうかじったよw で、スレッドをコントロールするコードを書くと結局どうなるん? というかOSの仕組みを借りないと並列実行できないの? もしかしてかなり基本的な疑問か…orz
101 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 23:28:03 ] そんな質問がでるってことは基礎から足りないね なんか本とか読んでみたの?
102 名前:デフォルトの名無しさん [2009/08/20(木) 22:38:50 ] 本当にペラペラな紙だな 本自体も厚さの割りにふにゃふにゃだった 内容は知らん
103 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 23:46:08 ] さすが>>102 さん、知性あふれる書評ですね!クール! マジすごいよ君の脳は!
104 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 06:17:12 ] >>102 すごく参考になりました。やはり本は内容より紙質ですよね。
105 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 12:01:37 ] 俺も今Amazonから届いたよ 確かに薄いな、ジャンプより薄い 装幀も悪くないし、うん、これは良い本だ
106 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 12:52:51 ] 買ってみたくなった
107 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 19:34:22 ] 紙質にはこだわったと監修者が言ってたからな
108 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 19:47:45 ] 内容よりもまず紙質が評価されているだと……?
109 名前:デフォルトの名無しさん [2009/08/21(金) 20:15:13 ] 内容は既に保障済みだからな 今更語ることといえば、紙質ぐらいしかない
110 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 21:19:08 ] 紙質がいまいち
111 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 21:54:49 ] この紙って高いの?安いの?
112 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 22:09:56 ] 紙が薄いと、ScanSnapで重送してしまう。
113 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 22:18:00 ] 薄くても安心
114 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 22:45:28 ] ページが多い日も安心
115 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 22:54:52 ] モダンな言語って、生まれた時期もあるが、注目されてきた時期も関係するんじゃないの あと、仕様にミスが少ないとか
116 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 23:14:24 ] 紙がペラペラで薄かったりとか
117 名前:107 mailto:sage [2009/08/22(土) 10:03:40 ] 上質な薄い紙にしたので、コストが上がったらしい。出来るだけ薄くしたかったので譲れなかったと。
118 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 11:41:55 ] 紙に拘るより、PDFで売ってくれた方が嬉しいけどな。
119 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 12:12:46 ] PDF(笑)
120 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 12:37:44 ] Javaスクール卒業生向けの関数型言語ですね。わかります。
121 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 12:43:24 ] だんこがいが褒めてるのを見て実は駄目な言語じゃないかと思いはじめた
122 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 16:57:05 ] そこはせめて自分の感覚とも相談しろよ・・・・・
123 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 19:43:03 ] Scalaスケーラブルプログラミング これ詠む価値ないです 原著を読んでください
124 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 20:04:52 ] 訳が悪いとか?
125 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 20:11:07 ] 紙が撓んで読む気がなくなります。
126 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 20:14:31 ] やはり紙か
127 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 21:00:43 ] 今回の翻訳本の語彙は、別の人に少しはチェックしてもらったらしいが、 金取ってるなりに、情報系の対訳集ぐらい出版社なり業界なりでメンテナンスしてほしいな。 あと、clojureの話ってどこでやってるんだ。どうしようもない質問があるんだが・・・ 公式のjarだけだと *compile-path* 規定のclassesフォルダ作っても:gen-classのcompileが通らないが、どうすればいいんだ。 ちなみに、「Programming Clojure」で配布しているプログラミング環境のセットだと通る。 ttp://www.pragprog.com/titles/shcloj/source_code
128 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 21:11:59 ] そもそもJVMで動くっていうのがきもい JVMがないと何にもできない糞言語ってことだろ?
129 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 21:40:38 ] >>128 .NET版なかったっけ
130 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 21:53:21 ] >>128 そんなの言い出したら、処理系がVMで実装されてる言語がほとんど当てはまるがな。 ○○はVMがないと何もできない糞言語、ってね。
131 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 22:08:07 ] Javaはいかんだろ
132 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 22:14:53 ] JVMがないと何も出来ない⇒糞言語 て理論がまず分からんわ なので、今のところ>>128 が糞。これなら分かるw
133 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 22:25:15 ] 俺もJVMとXMLリテラルは言語の普及には貢献するだろうが、寿命は縮めると思うね
134 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 22:26:52 ] どうせドカタ言語になるだろw
135 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 22:46:32 ] >>133 時期が近いGroovyも埋め込みマークアップをサポートしてるのを見ると 流行りなんじゃないのかなあ 個人的には、XMLリテラルは好きでない 言語が依存するほどXMLが絶対的だとは思えないので JVMはまあ、設計上の選択ということで何も言わないことにする 膨大な資産が投下されてるものを利用したくなるのは分かる
136 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 22:52:42 ] >>128 言語と処理系を切り離して考える程度の知恵もないのか?
137 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 23:59:31 ] for( hoge -> list ) の->はなんなのでしょうか?
138 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 00:05:45 ] >>137 矢印逆じゃね?
139 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 16:04:37 ] ∈
140 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 19:27:05 ] 矢印逆だった
141 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 00:49:33 ] JVM使うのは基本的に正解だろ。 銀行などシビアなユーザーを含む膨大なユーザベースに叩かれていて、 長年の投資が蓄積されていて、今後も当面投資される見込みの物があるのに、 いまさら車輪の再発明を推すのはアホだろ。選択と集中。 ほかのソフトに依存するのが駄目って奴は、OSのない時代に帰ったら?
142 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 07:27:03 ] 誰か答えてあげて pc12.2ch.net/test/read.cgi/tech/1247926906/l50
143 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 07:35:01 ] >>141 途中までまともなこと言ってるんだから、 最後の一行でただの極論馬鹿に落ちぶれなくてもいいのに。
144 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 08:58:08 ] JVM上での言語実装が流行っているのって、 枯らすのに手間暇かかるインターフェース周りの ライブラリをいちいち作りたくないから。 JVM上に実装するにしろ、.netにするにしろ そのような面倒などころは先行している実用言語にお任せ。 そうでもしないと、なかなか実用レベルに到達しないだろ。
145 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 10:45:00 ] >>141 デブ元理事?
146 名前:デフォルトの名無しさん [2009/08/25(火) 11:50:45 ] >>141 うざい
147 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 12:23:42 ] 馬鹿丸出しの>>141 を論うスレになりました。 Windowsネイティブexeにならない言語なんて意味ねぇんだよ、バーカw
148 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 14:50:06 ] ここにもネイティブ厨が
149 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 23:24:33 ] >>141 賛同します。
150 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 23:36:38 ] そんなシビアな環境なのに 今仕事がまったく無いJVMなのでした チャンチャン
151 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 01:47:03 ] 嘘ついてチャンチャンとか締めてもなぁ。
152 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 04:56:44 ] そいやFlightCasterというサービスがClojure使ってるらしいが LispやSchemeでないのはやっぱJavaの資産の利用が重要だからなのかな。 JVM上の言語はイレージャなどJVMに縛られる部分がどうしてもでてくるからなぁ。
153 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 23:52:24 ] JVM上のlispは、どれぐらいの速度が出るのか調べようとおもったけど、上手くいかなかった。 どのバージョンか見てないけど、ネイティブのsbcl/scalaで、これぐらい ttp://shootout.alioth.debian.org/u64/benchmark.php?test=all&lang=sbcl&lang2=scala&box=1 ttp://shootout.alioth.debian.org/u64q/benchmark.php?test=all&lang=sbcl&lang2=scala&box=1 lisp-2からlisp-1に変換する知識無いので、clojureとkawa(scheme)の計測はできてないし、 そのまま動くはずのabcl(cl)とかもwin環境でいまいち上手く設定できずに出来なかった。orz 全然関係ないけど、on lispとPractical common lispのサンプルをclojure用に一部変換したやつがあった。 ttp://github.com/stuarthalloway/onlisp-clojure/tree/master ttp://github.com/stuarthalloway/practical-cl-clojure/tree/master
154 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 00:12:44 ] ttp://codemonkeyism.com/clojure-scala-part-2/ Clojure Scalaでググるとこれが一番上にきてた。バランス取りすぎと思える内容だ
155 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 23:33:52 ] スケーラブルプログラミングより 言語仕様詳細に説明してある資料ってどれですか?
156 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 00:01:36 ] 公式落ちてる?それともDNS関係?
157 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 00:05:16 ] >>155 Documentation > Manuals www.scala-lang.org/node/198 # Scala Language Specification # The SID Library Language Research www.scala-lang.org/node/143 * Papers のあたり
158 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 00:26:04 ] 関数リテラルがよくわからない 困った
159 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 01:08:37 ] >>158 それは別にScala特有の話じゃないでしょ Rubyのブロックも同じようなもんだし 無名関数とも呼ばれるから調べるならその辺も
160 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 01:10:29 ] 内部状態を保存するから、一時変数を外に持たなくていいとか(レキシカルスコープ?局所変数?) 適用した時点で評価されるとか(遅延束縛) とかになるとかのところかな? Y(X(x)) |x=2 = Y * X(x) |x=2とか 実行中に、結果だけじゃなくて、構造を残してるからみたいなことだよね。 参考資料は、 多忙な Java 開発者のための Scala ガイド: オブジェクト指向のための関数型プログラミング www.ibm.com/developerworks/jp/java/library/j-scala01228.html ほかの言語だとこんな説明があるけどどうだろう。 JavaScriptにおける高階プログラミング ttp://d.hatena.ne.jp/brazil/20051004/1128435079 on lisp 2. 関数 ttp://www.komaba.utmc.or.jp/~flatline/onlispjhtml/functions.html ・・・実は全然分からんので、とりあえず知ったかしてみた。
161 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 01:27:29 ] Scalaの関数リテラルはscala.FunctionXXを実装している。 関数の呼び出しは、Function#applyの呼び出しに変換される。 finalじゃないローカルスコープ変数を触れることを除けば、 Javaの匿名クラスと変わらないよ。
162 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 07:22:37 ] じゃあhaskellの 無名関数より機能劣るんだな
163 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 08:40:58 ] >>162 何故そうなる。Haskellの無名関数とほぼ同じ程度の機能はあると思うが 具体的に劣ってる部分挙げてみてよ
164 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 08:43:22 ] >>161 >finalじゃないローカルスコープ変数を触れることを除けば、 >Javaの匿名クラスと変わらないよ。 これは話が逆で、Javaの匿名クラスは ・記述が冗長である ・外側のスコープのローカル変数についてはfinalなものしか触れない という点を除けば無名関数と同じようなものだ、という方が適切だと思う。歴史的には 無名関数の方が古い機能だし
165 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 12:28:02 ] Scalaを弄り始めて関数リテラルが良くわからないってことは、 Java経験者である確率が高い。 だから、Javaならこうなるという説明をしたんだよ。
166 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 20:21:35 ] それが余計意味を解らなくするからやめて欲しい javascriptで比較するのならまだ許されるけど
167 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 20:50:01 ] def w(file File, op: PrintWriter => Unit ) { val sriter = new PrintWriter(file) try{ op(writer) } finally { writer.close() } } op(writer)を実行するとPrintWriter => Unitはどう利用されるの?
168 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 21:17:05 ] つーか、まず動く例にしろよ 変数の綴りとか間違ってるぞ import java.io.File import java.io.PrintWriter def w(file: File, op: PrintWriter => Unit ) { val writer = new PrintWriter(file) try{ op(writer) } finally { writer.close() } } w(new File("hello.txt"), _.println("hello")) こんなんか? で、質問の意味がわからん 「PrintWriter => Unit」って型だぞ opという変数に関数オブジェクトが代入されて実行されるだけだ
169 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 21:30:05 ] PrintWriter => Unitってどんな型なのかよくわらかん 引数も取らん関数がなぜUnitを返せるんだ?
170 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 21:44:12 ] >>169 Scalaには引数を取らない関数なんてないぞ PrintWriter => Unitって言うのは、「PrintWriterオブジェクトを引数にとって、Unitを返す関数」の型だ
171 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 21:53:25 ] >>170 えーとそうすると op(writer)ってところは何が実行されるの?
172 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 22:00:25 ] >>171 opに代入された関数オブジェクトが、writeを引数にとって関数として実行される 上の例で言えばwの呼び出し引数の「_.println("hello")」という関数リテラルが実行される
173 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 22:39:51 ] >>172 無名関数 != 関数リテラル なんですよね?この関数リテラルってなんなんですかね?
174 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 22:45:28 ] 関数リテラルはカリー化ができない。
175 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 22:55:17 ] 無名関数、関数リテラル、匿名関数、みんな同じものだよ 一般的に○○リテラルというのは、オブジェクトを直接生成する表現のこと 例えば、プログラム中の「1」はIntリテラルで、 val a = 1 と書けば、1の値のIntオブジェクトが生成されて変数aに代入される 同じように関数リテラルの場合は、 val f = (a: Int) => println(a) と書けば、Int型の引数aを取ってプリントする関数が生成されて変数fに代入される その後でf(1)と関数を呼び出せば、1がプリントされる
176 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 22:58:48 ] つーか、そもそもオブジェクトを生成っておかしくないか。 最初から全部オブジェクトな言語はどうなるんだと。
177 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 23:04:29 ] >>176 最初から全部オブジェクトな言語って具体的に何のことだ?
178 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 23:11:48 ] >>176 横からだが、もう少し詳しく書いてくれんか
179 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 23:18:04 ] まあ、リテラルは定数だから必ずしもオブジェクトを生成するわけではないか
180 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 23:20:48 ] なんつーか、Java関係の業界って難しそうな用語勝手に作ってるけど、 他の用語よりも内容はショボいってこと多くない?
181 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 23:30:48 ] >>179 Scala言語的には一貫して生成と解釈したほうがスムーズでない? 実装上、そうならない可能性もあるにせよ (そもそも定数畳み込みとかで消えるかも分からん)
182 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 23:32:06 ] >>180 具体的になんのことだ 関数型のリファレンシャル・トランスペアレンシーとか ポリモーフィック・タイプ・インファレンスの方が難しそうだろ? このスレでも躓いてるやつは関数型系の用語の方だと思うが
183 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 23:32:53 ] >>179 リテラルが定数って理解も間違ってるでしょ C/C++のconstで定義した定数はリテラルではない リテラルは「文字通りの」って意味で字面がそのままオブジェクト/値として解釈される 文字列リテラルとかMapリテラルとか正規表現リテラルとかXMLリテラルとか 解釈された結果のオブジェクト/値が必ずしも定数である必要はない
184 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 23:36:06 ] でも定数じゃないリテラルってあるのか? 昔のCは定数の文字列を書き換えられたと聞いたことはあるけど
185 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 23:39:31 ] >>184 リテラルそのものとそれが解釈された結果の値やオブジェクトを区別してる?
186 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 23:41:28 ] うーむ後もう1つ解らないのですが def f (x: Int) (y: Int) = x - y これって引数は2個あるのですか?この意味がよくわかりません
187 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 23:41:45 ] >>185 細かく言えば、リテラルというのはプログラム上の表現であって実態は持たないのだが、 そういう話をしたいのではなくて、生成された(あえてそう言うけど)オブジェクトが 定数じゃないことってあるのか?という意味
188 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 23:53:01 ] >>186 これはカリー化された関数だね 存在意義をこの短いレスで説明するのはちょっと難しい とりあえず def f (x: Int) (y: Int) = x - y は、f(1)(2)みたいに呼び出して、 def f (x: Int, y: Int) = x - y は、f(1,2)みたいに呼び出すと覚えて、詳しくはいずれ学ぶといいよ この二つの関数の動作自体は同じ、呼び出し方が違うだけ
189 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 00:11:54 ] >>188 カリー化の書き方なのですか。難しい書き方ですねぇ カリー化って多変数関数 f(x,y,z)を (λx.(λy.(λz.M))) と表現できるってやつであってますか? あとScalaでは、不動点演算子ってどれなのでしょうか?
190 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 00:17:31 ] >>187 ある。Rubyの文字列リテラルによって生成されたオブジェクトは定数じゃないし、 配列リテラルやMapリテラルによって生成されたオブジェクトが定数の言語って知らないし
191 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 00:22:56 ] うわ、ほんとだ、Rubyで "abc".sub!("a", "1") と書いたら動くわ、気持ち悪っ というわけで、一般的にリテラルが定数というのは訂正させていただきます
192 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 00:32:30 ] >>189 いや、まあ、それであってると言えばあってるけど、 理解するには関数型言語のどれかをちょっと触ってみた方がいいと思う 不動点演算子ってYコンビネータとかのこと? それってあるものじゃないでしょ 作ろうと思えば作れるけど どこで調べてきたんだ
193 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 00:42:17 ] >>190 ScalaのMapリテラルはimmutableだよ。何もしなければ。
194 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 06:44:39 ] 関数型言語の中でscalaに一番似てそうなのってなにかな OCaml? オブジェクト指向と関数指向をどこでどう使えばいいか 参考にできそうかしらん?
195 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 10:55:21 ] HaskellよりはOCamlの方が似てるかな オブジェクト指向と関数型の融合という点では参考にならんと思うけど
196 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 11:12:23 ] 盛り上がってるな。やっぱ本の影響か?
197 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 20:06:28 ] >>194 >オブジェクト指向と関数指向をどこでどう使えばいいか これ、参考例がほしいなあ 最近CTMCPを読んでるが、方法論の選択は「問題に合うものを使え」とのこと 例えば、宣言的モデルで解こうとすると、表現力が足りなかったり逆に複雑になるような問題には 明示的な状態操作で対応しろと 理屈は分かる気がするが……どうすりゃいいのよw 結局は経験則しかないのかね
198 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 20:55:20 ] Common-LispのletってどうやってScalaで書けばいいのですか?
199 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 21:04:54 ] >>197 設計はオブジェクト指向でやって、あとはなるべく参照透明性があるように書けばいいんじゃないの
200 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 21:13:20 ] >>198 letってローカルスコープ決めるだけじゃないの? なにがしたいの?
201 名前:デフォルトの名無しさん [2009/08/29(土) 22:48:08 ] >>199 まあImmutableパターンをつかったJavaみたいな感じだよね。 >>198 >>200 あえてCommon Lispのっていうところをみると動的スコープのletかなあ。だったらDynamicVariableを使うんだけど。
202 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 23:37:07 ] Scalaの入門ドキュメントや本を見るとvalとimmutableマンセー状態なのに、 クラスライブラリのソース見るとvarとmutableだらけな件は、 どう解釈したらいいの? 速度が問題にならないところだけimmutableにしろと?
203 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 23:57:39 ] 基本ライブラリは効率優先に実装せざるをえないからなあ
204 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 00:19:23 ] >>202 コレクションライブラリは一番基盤になる部分で、実行効率最優先だからvar使いまくり なのは仕方無い。ユーザが自分で作るプログラムの部分でvar使うかどうかは、目的によるけど 普通のアプリケーションならほとんどはimmutableで大丈夫じゃないかなあ。ベンチマーク取ってみれば わかるけど、immutableしたからといってそれほど劇的に遅くなるわけじゃないし。
205 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 00:21:33 ] あと、内部がvar使いまくりであっても、ユーザからはちゃんとimmutableに見える使い方(scalaListとか) なら問題が少ないってのもあるな。つまり、副作用がローカルに閉じてれば問題ないってこと。
206 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 00:43:41 ] その辺は、 private[パッケージ名] var のアクセス制限が うまく作用してる点ではある。
207 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 19:23:33 ] 引数に Int => Int (Int => Int, Int) => Int の2つの関数を取りIntを返すって式はどうやって書けばいいの? def f((Int => Int, (Int => Int, Int) => Int) => Int じゃないような気がするけど、うーん
208 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 20:18:53 ] >>207 関数を定義するだけなら、例えばこうだけど def f(f1: Int => Int, f2: (Int => Int, Int) => Int): Int = 1 君は根本的にプログラミングを理解できてないと思うね まずJavaあたりをしっかり勉強した方がいい
209 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 20:22:24 ] まずJavaあたりをしっかり勉強した方がいい(キリッ
210 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 20:41:02 ] >>208 そうなんですかぁ うっせーぞボケ リアルでやるぞコラ
211 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 21:02:53 ] 例えば、 def f((Int => Int, (Int => Int, Int) => Int) => Int と書いたときに仮引数の名前がないじゃない タイプ・シグネチャと混同したのかもしれないと思ったけど、 ScalaもJavaもタイプ・シグネチャは定義できないと つまり、Javaレベルの知識もないまま、 Scalaを勉強しようとしてるみたいだから、 Javaから勉強しないと意味がないよと
212 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 21:42:50 ] >>210 「君は根本的にプログラミングを理解できてないと思うね まずJavaあたりをしっかり勉強した方がいい」 この部分は要らないゴミコメントだから気にするなw
213 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 22:04:43 ] 最近ずれた質問してる人は全部この人でしょ? だからそろそろはっきり言ってあげた方がいいと思ったんだよ プログラミング初心者が学ぶには不適当な言語だよ、Scalaは とりあえずJavaをちゃんと覚えてからでいいじゃない どうせライブラリで使わざるをえないんだから
214 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 22:13:52 ] バカでもScalaに触る時代がきたんだなぁ
215 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 22:17:09 ] >>214 Scala本の影響が大きいんだろうね 基本的にはいいことなんだけど
216 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 22:18:30 ] まぁなんでもいいや 解らんことここで聞けるし
217 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 22:26:48 ] >>214 どうして、こういう人を見下す言動が耐えないんだろうね。屑人間が増えたのかね
218 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 23:20:37 ] 屋根上屋根ではあるんで、 プログラミング自体はRubyやPythonで、静的型付けはJavaがいいかもな。
219 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 00:04:09 ] 計算可能性とラムダ計算とSICP見ながら、こんなの作ったんだけどあってるかな? もっと正しい方法あったら教えてください object TestScala { def main(args: Array[String]) { println("TEST1") println(zero(_ + 1, 0)) println(one(_ + 1, 0)) println(two(_ + 1, 0)) println(three(_ + 1, 0)) println(four(_ + 1, 0)) println(five(_ + 1, 0)) println(plus(two, five, _ + 1, 0)) println(multi(five, five, _ + 1, 0)) } def zero (op: Int => Int, x: Int) = x def one (op: Int => Int, x: Int) = op(x) def two (op: Int => Int, x: Int) = op(op(x)) def three (op: Int => Int, x: Int) = op(op(op(x))) def four (op: Int => Int, x: Int) = op(op(op(op(x)))) def five (op: Int => Int, x: Int) = op(op(op(op(op(x))))) def plus (m: (Int => Int, Int) => Int, n: (Int => Int, Int) => Int, s: Int => Int, x: Int) = { m(s, n(s, x))} def multi (m: (Int => Int, Int) => Int, n: (Int => Int, Int) => Int, s: Int => Int,x: Int) = { def N1(n0: (Int => Int, Int) => Int, s0: Int => Int) ={ (x: Int) => n(s, x) } m(N1(n, s), x) } }
220 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 01:03:43 ] チャーチ数の実装か、かけ算のところって、 def multi(m: (Int => Int, Int) => Int, n: (Int => Int, Int) => Int, s: Int => Int, x: Int) = m(n(s, _:Int), x) でいいんじゃないの?つーか、N1って何をやってるんだ?
221 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 06:42:01 ] >>217 一足早く先進的(笑)な言語を触ったことだけが自慢の、 ろくなもん作れてない低脳だから。 最初にScalaを触った年月日の古さを呟くだけで射精できるらしいよ。
222 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 10:46:06 ] バカと言われただけでそんなに煽られてると感じるなら その先進的(笑)な機能の話をすればいいじゃない それ以前の話ばっかじゃないか Scalaの大部分の機能は他の言語の素養があればすぐ使えるようになるよ それもないのにいきなりScalaを触ろうとして躓くのが問題 もっと解説が多くて基本的な言語はいっぱいある
223 名前:デフォルトの名無しさん [2009/08/31(月) 10:53:45 ] いいぞいいぞ! もっと言いあえ!
224 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 20:02:25 ] 低能相手に慣れ合いするのが楽しいの 低能に付き合ってあげているやさしい自分が自慢なの
225 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 23:05:08 ] >>220 なるほど、なるほど m(n(s, _:Int), x)とかけばいいのですか ところまたまた質問しますが n(s, _:Int)と記述したときの、_:Intは関数を渡したことなるのですか?
226 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 23:31:21 ] いや、関数の部分適用だよ Scalaの関数はカリー化されてなくても部分適用ができる n(s, _:Int) は (x: Int) => n(s, x) と書くのと同じ
227 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 23:38:29 ] >>225 えーとN1は>>226 殿によると 部分適用するのと等価な書き方のようです。 >>226 なるほど、書き方が冗長なのが解りました。
228 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 00:41:31 ] >226 そんな書き方有ったのか。 Scalaは部分適用が不得意なイメージが有ったが、そうでもないんだな。
229 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 13:24:57 ] 本がでてたのみつけて少しずつ読み始めたけどなんか書き方が気持ち悪く感じる 部分適用とかも val f = sum _ みたいな _ つけるのとか 理由はちゃんと書いてあるけどそれってJavaの仕様から言語仕様を決めてる? g(args : String*) を Array に適用するにも g(arr: _*) みたいなのとか
230 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 15:26:06 ] カリー化は別にあるけど、そういうことじゃなくて?
231 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 22:32:33 ] 過疎が酷いな 消えるの早すぎw
232 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 22:58:23 ] まだ9章途中だからやっとカリー化 カリー化可能関数とふつうの関数の書き方が違うのか でもやっぱり val onePls = curriedSum(1)_ とか最後の _ がかっこわるい println(hoge) を println { hoge } でもいいとかううーん
233 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 00:02:11 ] >>232 関数オブジェクトを作るために_を付けるという構文は、 Scalaがフィールドとメソッドの名前空間を区別してないからってのもあるだろうな 間違ってメソッドをフィールドみたいに使っちゃって関数渡しになっちゃうのを防ぐみたいな そういうのはほとんど型チェックで引っ掛かりそうな気もするけど {}が使えるのはDSLのためでしょ あと、微妙に「カリー化」という言葉の使い方が間違っているような
234 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 09:35:02 ] ちがってた f()() とか定義した時点でカリー化関数っていうんだ もとの関数を引数を別々に固定できるように変換するのをカリー化というと思ったので誤解 () とか {} はオペレータとして定義できればいいのじゃんと思ったけどそうでないよね
235 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 19:25:05 ] >>232 > println(hoge) を println { hoge } でもいい これって中括弧でもよい、という話だったのか・・・ 右側のはてっきり小括弧が省略されているのだと勘違いしてた。 println( {hoge} ) やっぱ本読むかなんかしないと、間違ってる知識がいろいろありそうな
236 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 20:45:52 ] Scalaで括弧が省略できるのはレシーバを書いたときだけだからね Console println "abc" みたいに
237 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 23:34:41 ] def f : hoge = のhogeって引数になるのですかね?
238 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 00:49:21 ] 引数?それだと、hogeは戻り値の型だよ。
239 名前:デフォルトの名無しさん [2009/09/10(木) 02:24:58 ] NetBeansのプラグインを使った環境でプロジェクトに外部のjarを参照させ、 importすると、認識されず型に関する表示が全部errorになってしまうのですが、 なにか使い方が間違ってるんでしょうか? jdkのsrc.zipに入っているjarのみ認識しているようですが、 import文を書いた瞬間errorになります。
240 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 02:59:52 ] >239 IntelliJってのを買うといいらしいよ。
241 名前:デフォルトの名無しさん [2009/09/10(木) 13:32:10 ] ちゃんと動いている人は普通にプロジェクトの設定画面でjarを 指定しているだけなんでしょうか? だとしたらこちらの環境か設定の問題と切り分けられるんですが・・・。 scalaは外部にあるものを使っていて、SCALA_HOMEとPATHは設定済みです。
242 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 13:42:01 ] >241 夕食に納豆食べれば解決策がひらめくらしいよ。
243 名前:デフォルトの名無しさん [2009/09/10(木) 22:23:18 ]
244 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 22:56:52 ] なんか書けよ
245 名前:デフォルトの名無しさん [2009/09/10(木) 23:42:50 ] NetBeansのプラグインを使った環境で・・・ ちゃんと動いている人は普通に・・・
246 名前:デフォルトの名無しさん [2009/09/11(金) 00:23:25 ] うーむ動かすことができるのか・・・。 うらやましい。NetBeansもScalaもクリーンインストールだし、 もはやなんの対策も思いつかない。
247 名前:デフォルトの名無しさん mailto:sage [2009/09/11(金) 00:37:51 ] プラグインをインストールできないといいたいのか、 自作JARを外部参照するプログラムをコンパイルできないといいたいのか、 よく分からない質問だ
248 名前:デフォルトの名無しさん [2009/09/11(金) 00:51:57 ] JARを外部参照するプログラムを、 コンパイルはできるけども、なぜか型の情報が出てこない。 全ての型情報が<error>になる。コード補完もめちゃくちゃ。 import文を消すと復元する。 プラグインは入る。jarは外からとってきた奴だけど、 javaプロジェクトでは普通に参照できるし、いろんなファイルで試しても同じ。 そんな感じです。
249 名前:デフォルトの名無しさん [2009/09/11(金) 05:41:24 ] 候補が表示されたりされなかったりするからバグッてると思う
250 名前:デフォルトの名無しさん mailto:sage [2009/09/11(金) 10:23:33 ] ttp://wiki.netbeans.org/ScalaIssues
251 名前:デフォルトの名無しさん mailto:sage [2009/09/11(金) 19:19:18 ] Scala 2.7.6 final | The Scala Programming Language ttp://www.scala-lang.org/node/3250
252 名前:デフォルトの名無しさん mailto:sage [2009/09/12(土) 23:35:38 ] >>250 つ最終更新日時 つか、NetBeans 6.7.1のを使っているとかいう落ちでは?
253 名前:デフォルトの名無しさん [2009/09/15(火) 18:33:38 ] >>252 当たりでした。6.7.1に、プラグイン6.7v1を入れ直したら、動きました。 お騒がせしました。
254 名前:デフォルトの名無しさん mailto:sage [2009/09/15(火) 20:27:44 ] 読みが当たったか
255 名前:デフォルトの名無しさん mailto:sage [2009/09/15(火) 22:14:06 ] エスパーいくない
256 名前:デフォルトの名無しさん [2009/09/16(水) 23:15:44 ] ひょっとして3項演算子ってない?
257 名前:デフォルトの名無しさん mailto:sage [2009/09/16(水) 23:28:42 ] いらんと思うけど val a = if (true) 1 else 2 こんなんでいいんでしょ?
258 名前:デフォルトの名無しさん [2009/09/16(水) 23:37:40 ] ifが代わりになるから、要らないって言えば要らないけど ちょっとだけ面倒と思ってしまっただけです ifは1行でも中括弧付ける癖があるし
259 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 00:07:40 ] パーサーコンビネーター使ってるとき def xxx:Parser[]って記述と case classって記述はどうやって 使い分ければいいの?
260 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 00:11:04 ] 使い分けはできない
261 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 00:11:38 ] >>260 じゃあ何のために2つ使うの?
262 名前:デフォルトの名無しさん [2009/09/17(木) 01:39:01 ] >>261 じゃあ何のために使い分けたいの?
263 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 01:40:47 ] ScalaによるWebアプリケーションフレームワーク「Lift」とは Scala+Liftによる実践Webアプリケーション開発(1) codezine.jp/article/detail/4310
264 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 01:47:36 ] >>259 基本的には>>260 で終了だが、 不毛なやり取りが続いてるみたいだから、一応もうちょい説明すると def xxx: Parser[T] ... はParser[T]型を返すメソッドの宣言 case classはパターンマッチに使える新しい型の宣言 そもそも全く意味が違うので、使い分けるとか意味がわからんです。 つか、この二つの区別がつかないってパーザコンビネータ使うとか以前の レベルで、クラスとかメソッドとは何?ってところから勉強し直した方がいい。
265 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 14:40:56 ] scala本、解説は丁寧でわかりやすいけど、演習問題が少なすぎる希ガス 理解はしても身についてる感が全くない
266 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 15:31:41 ] 演習問題なんていちいちやったことないわw
267 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 15:44:34 ] ある程度身についたら、いきなりLiftとか使っちゃっていいんじゃないの
268 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 17:15:51 ] 勉強では手を動かさず、いきなり実践訓練か。みんなすげぇなぁ。 俺もトライしてみるか。
269 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 18:31:05 ] 使わないコードは極力書きたくないから演習問題なんてしない・・・
270 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 18:33:17 ] もっとパラダイムが面白い言語だったら演習もいいけどね、HaskellとかPrologとか Scalaは実践向きでしょ
271 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 21:44:39 ] 俺はScalaでproject-eulerやってる。 問題の性質上、関数型っぽい書き方になる。 あまり実用的じゃないけどね。
272 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 21:46:27 ] なんか実用的なScalaプログラミング教えてよ お前ら頭いいしなんでも知ってるだろ?
273 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 22:48:04 ] 普通にjavaみたいなコードを書けばいいだけなんじゃ。。
274 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 00:43:03 ] >>270 パラダイムだったらOCamlあたりに引けをとらない面白さだけどな Haskellより進んだ機能も多いし 確かにPrologのような斬新さはないが
275 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 01:22:59 ] Programming in scalaは project-eulerで練習するような変態向けじゃなくて一般向け書籍だろ。 なら、特徴的な言語機能毎に練習問題があった方が本の目的には合ってると思うがな。
276 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 01:26:11 ] liftのgetting startedっていまいちだよね
277 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 01:39:39 ] >>274 OOとの融合や暗黙型変換を除いてどのあたり?
278 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 22:09:28 ] XML埋め込めるってのはあるな
279 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 23:14:02 ] JavaScriptのE4Xより先?
280 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 23:51:08 ] 少なくともHaskellよりは先
281 名前:デフォルトの名無しさん mailto:sage [2009/09/21(月) 02:58:06 ] Scalaは実用言語なんだから、オンリーワンな新機能より、 メジャー言語では取り入れられてない程度の物を うまく使いやすくまとめ上げるところに意味があるんじゃないか
282 名前:デフォルトの名無しさん mailto:sage [2009/09/21(月) 03:59:47 ] 普通に暗黙の型変換とかオンリーワンな新機能じゃね?
283 名前:デフォルトの名無しさん mailto:sage [2009/09/21(月) 17:24:50 ] 暗黙型変換は、うまくまとめ上げるために無理矢理突っ込んだ感があるなぁ。 アドホックでプリプロセッサ的な強引さが、あまり美しいとは思えない。 キャストのオーバーロードは元からあるし、そこまでなら素直だと思うんだけど。
284 名前:デフォルトの名無しさん mailto:sage [2009/09/21(月) 17:29:17 ] 暗黙型変換なんて厨仕様もいいとこだろw
285 名前:デフォルトの名無しさん mailto:sage [2009/09/21(月) 18:46:02 ] 暗黙の型変換がどうプリブロセッサ的なのかさっぱりわからん
286 名前:デフォルトの名無しさん [2009/09/21(月) 19:18:15 ] アドホックじゃないでしょ?Javaでアドホック仕様だった部分を一般化したらついでに強力な何かがついてきただけじゃん?
287 名前:デフォルトの名無しさん [2009/09/21(月) 19:26:14 ] アドホックじゃないでしょ?Javaでアドホック仕様だった部分を一般化したらついでに強力な何かがついてきただけじゃん?
288 名前:デフォルトの名無しさん [2009/09/21(月) 19:30:52 ] アドホックじゃないでしょ?Javaでアドホック仕様だった部分を一般化したらついでに強力な何かがついてきただけじゃん?
289 名前:デフォルトの名無しさん [2009/09/21(月) 22:34:18 ] >>265 そもそも演習問題なんかあった?
290 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 01:22:22 ] 0個あったんじゃね? 演習問題の個数は負値をとれないから、 0個を少ないと言わなければ、少ない物はなくなる
291 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 01:37:42 ] いずれ、 「暗黙の型変換もない言語ってダサいよなw」 みたいに言われる日が来るだろうな Haskellが他の言語に対して 「型推論もない言語ってダサいよなw」 みたいに言ってたように
292 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 01:42:19 ] 型変換についてよりリッチな方法は出てくるかもしれないけど、それは もう少しパワーを落として安全かつ洗練された物になるんじゃ無かろうか。
293 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 01:44:38 ] 暗黙の型変換? ああ、Lispのマクロより非力な劣化版のことね
294 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 02:19:47 ] つか、暗黙の型変換って昔からなかった?
295 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 02:35:14 ] Scalaの場合は自分が作った新しい型へ、既存の型を変換するっていう仕組み これは今までなかった Lispのマクロとか、別の機能で同等の機能を実現できるというものを除けばね
296 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 03:24:05 ] Scalaの型推論って、何か弱くね?
297 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 03:28:14 ] Lispよく知らないんだけど、マクロでどうやるの? 関数じゃなくて、値側もしくは関数適用全般を乗っ取る必要があると思うんだが。 マクロにニセ関数的な形をイメージしてるのが間違い?関数適用全般自体を置き換えちゃうの? あと、新しいのは暗黙ってとこだろ。型変換自体は単なる関数な訳で。 で、自明な場合以外に暗黙にやるのは怖いってのが一般常識だったんではないか?
298 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 03:39:06 ] Lispは関数が値として扱えるので、簡単に乗っ取ることができるよ 値を変えたり、対比したりする感覚で簡単にね 暗黙の型変換のようなことをやるには、引数を判別するだけ
299 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 03:43:28 ] いや、特定の関数にトラップを掛けるのは想像がつくけど、 暗黙型変換自体はすべての関数の適用に有効だろ? そう言うのをどうするのかなと。
300 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 03:51:07 ] 全ての関数適用に有効なわけないだろ Scalaは変換先の型を引数にとる演算子とか、そこに属するメソッドに 対してのみ変換を行えるわけだから その分にだけトラップをかければいいことになる
301 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 03:52:34 ] >>299 好きなものを選びな。 ・関数定義を乗っ取る。 ・構文解析を乗っ取る。 ・評価器を乗っ取る。
302 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 04:12:49 ] >>300 >その分にだけトラップをかければいい その通りだけど、「その分」ってのは静的に決まらないだろ。 >>301 それもマクロっていうの?
303 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 08:20:54 ] 暗黙の型変換ってそれが有効な範囲をスコープで制御出来る所がイイね このアイディアはscalaオリジナル?
304 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 08:41:48 ] >>302 マクロだけどなんで?
305 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 10:19:24 ] >>302 いや、静的に決まるけど?
306 名前:デフォルトの名無しさん [2009/09/22(火) 11:35:30 ] まあ実例を出したほうが説得力があるだろうね。
307 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 11:40:12 ] >>300 >>301 実例をどうぞ
308 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 11:45:59 ] 暗黙の型変換のせいで、クラスのドキュメントが超見づらい。
309 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 11:51:07 ] 暗黙の型変換は悪魔だな なんでこんな仕様入れてるんだろ 開発者はアホだよな
310 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 11:52:30 ] Scalaの標準ライブラリってそんなに暗黙の型変換使ってたっけ?
311 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 11:53:50 ] 暗黙の型変換を受け入れるscala信者もアホだよな
312 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 12:08:48 ] プリプロセッサとかLispのマクロとかなんでそういう的外れなたとえが多いのだろうか 新技術を無闇に恐れているというのは伝わってくるが
313 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 12:17:56 ] 暗黙の型変換は危険だろ 言語関係の学会でも笑い話にしかならいのに
314 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 12:23:40 ] >>313 学会ってひどい煽りだな なんでそこまでScalaに粘着してるの?
315 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 12:34:22 ] そもそもこれ実践で使ってる奴いんの?
316 名前:デフォルトの名無しさん [2009/09/22(火) 12:42:59 ] 何をそんなにがんばってるのー。
317 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 12:46:56 ] >>307 すまない、「その分」の実例は用意出来ない
318 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 12:49:44 ] Scalaの作者ってプログラミング言語の研究者だなw
319 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 12:51:22 ] >310 Liftで結構使ってる。
320 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 12:52:34 ] >>315 Liftのソースでimplicitをgrepしたら184個ひっかかった
321 名前:デフォルトの名無しさん [2009/09/22(火) 12:56:07 ] 分母を何にするか決まらないと何の比較にもならんよ。
322 名前:デフォルトの名無しさん [2009/09/22(火) 12:57:22 ] それはそうと暗黙の型変換をマクロでやるのってイメージわかないので説明してほしいんだけど、 素人考えで思うのはマクロってシンタクスレベルの情報を使ってやるものだから まだコンパイラが認識するようなレベルでの型の情報は取りだせないよね? Lispのマクロだと(例えばCamlp4とかとは)その辺違うの?
323 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 12:59:15 ] Lispに静的型なんてあったっけ?
324 名前:デフォルトの名無しさん [2009/09/22(火) 12:59:16 ] scala最悪だな
325 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 13:02:09 ] 暗黙型変換があるから、 a.multiply(b).add(c)とかかかずに、a * b + cとわかりやすくかけるんだろ
326 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 13:03:14 ] >>325 言ってることがよくわかんない
327 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 13:13:17 ] >>326 これがわからなければ暗黙の型変換について何も わかってないことになる Scalaの本の最初のほうに書いてあるよ
328 名前:デフォルトの名無しさん [2009/09/22(火) 13:16:11 ] それって演算子のオーバーロードの話では。。
329 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 13:25:36 ] この例だけ見ればそれと同じ働きをするというだけのこと
330 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 13:29:39 ] >>327 Scala本は手元にあるけど何を言ってるのかわからない どの辺が暗黙の型変換関係あるわけ? その式じゃ型が書いてないからわからん
331 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 13:33:07 ] >>328-330 済まない。出直して来る。
332 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 13:35:36 ] 27ページと28ページ、それから398ページを呼んでもわからなければ死んでください
333 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 13:42:49 ] >>332 読んでもわかんないんだけど、 multiply と書こうが * と書こうが同じことでしょ? そこに型変換関係あるの?
334 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 13:59:37 ] ┐(´д`)┌ヤレヤレ
335 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 14:22:11 ] なんか急に頭の悪いレスが増えたな 学会がどうとか死んでくださいとか 大して難解な言語じゃないのに知ったかする奴も多くなったし まあそれだけメジャーになったということかね
336 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 15:31:09 ] でも、最新(っぽい)技術で俺SUGEEしてる奴は三流だよw C++とかの時代にいっぱいいたw 一言で言うと中二病。
337 名前:デフォルトの名無しさん [2009/09/22(火) 16:18:39 ] >>304 では、Unkoburiburi型から、Int型への暗黙の型変換に相当する事を、 お前の言うlispのマクロで関数側にトラップを掛ける方法で実現したい場合、 トラップを掛ける必要がある関数の範囲は? 引数にIntをとる関数すべてにトラップが必要じゃないの? そんなの毎秒毎秒新しく生まれてるでしょ? コンパイル時点でトラップが必要な範囲の関数すべてをカバーするのは原理的に無理。 闇雲にLispスゲーって言っとけばいいってもんじゃないんだよ。
338 名前:デフォルトの名無しさん [2009/09/22(火) 16:29:50 ] blog.objectmentor.com/articles/2009/09/21/programming-scala-is-now-available これってアリクイ?
339 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 16:55:37 ] >>323 Commonだと宣言型で (declare (fixnum x)) とか効率化やエラーチェックのために宣言する事はできる。 >>322 304じゃないけど、推察のとおりマクロ展開時には型情報とかは利用できないのが普通。 元Lisp使いの俺が想像すると↓みたいになるんじゃないかな。 1.Unkoburiburi型からInt型への変換を定義しておく => Unkoburiburi型からintへの変換はunkoburiburi-to-intとか 2.関数と引数の型もマクロ展開時に利用できるように用意しておく => (succ ([Int型 引数x]) ... ) とか 3.マクロ展開時に使えるように変数unkoの型を宣言する構文をつくる => (define test ([Unkoburiburi型 引数x]) ...) とか とすることでマクロ展開時に型を照合して変換とかで実現かなぁ。 でも、型推論とか暗黙の変換も自作しなきゃいけないし、個人的にはスルーしていい話だと思うよ。 Camlp4は知らないが、プリプロセッサだとすると1. 2. の情報を展開時に利用するのがだるいかもしれない。
340 名前:デフォルトの名無しさん [2009/09/22(火) 22:22:39 ] >>338 マレーバクです。 マレーバク ja.wikipedia.org/wiki/%E3%83%9E%E3%83%AC%E3%83%BC%E3%83%90%E3%82%AF
341 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 23:47:19 ] 暗黙の型変換がダメっていうのは、AOPがだめっていっていた風潮ににているな。 どこに何がはいってくるのかが分からない・・・っていう。でも、AOPも使いどころさえ間違わなければ、みんなありがたく使ってるでしょ?それと同じじゃない?
342 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 00:04:54 ] >>341 AOPは最適化、マルチスレッド化の邪魔 意味無い
343 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 00:06:32 ] まだ作られて間もない概念だから、みんなどんな時にありがたいのかが わかってなくて、別の似た古い概念のイメージで 批判してるだけだと思う
344 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 00:07:45 ] このスレに関して言えば、一人の粘着が執拗に叩いてるだけだと思う
345 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 00:13:48 ] そもそも、全員が全員賛成するようなことじゃないだろ。 一般的に言って、メリットデメリットを言うのはいいが、 メリットしか言わないでマンセーしてる奴はカルトだよw
346 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 00:15:39 ] 今はその以前の段階だろう なんかわからんうちから先入観で批判してる印象
347 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 00:21:28 ] 新しいものは何でも批判して旧弊に固執するような人が居るからこそ、 新しいものを学ぶ人間に儲けの目が出てくる。 頭が悪い人を見て批判するより、そこから儲けを出すほうが賢いと思う。
348 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 00:22:22 ] 暗黙の型変換はAOPほど恐れる必要はない スコープで制限されてるから暴発しづらいし、既存のメソッドの上書きなんかもできない 既存のクラスにメソッドを足すか、明示的に変換しなきゃいけないところを省略できるだけ ただ、importは慎重にやらないといけなくなる importすることで暗黙の型変換のメソッドも動くようになるから importする前にどんなimplicit関数があるかチェックする必要がある
349 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 00:25:57 ] なんでexplicit見たいに暗黙の型を 禁止するキーワード無いの?バカなの?
350 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 00:31:07 ] >>349 そんなものを追加しても誰も使わないのでは?
351 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 00:34:34 ] こうゆう危険な機能があると流行らないね C++も危険な機能満載だったから流行らなかったし
352 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 00:35:18 ] 非明示的な型変換はケースによって必要ではあるし、変換規則を言語仕様に組み込んだ言語もいくつかあるが プログラマにとって予想外の挙動がトラブルの元凶にもなっていた そこで変換規則のスコープを制限すれば適度に使いやすくなるだろうと・・・・・? 発想は分かるが、うまくいくかはよく分からん 他言語での実験例はあるんだろうか?
353 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 00:36:35 ] >>352 言語オタの基地外しか思いつかないと思う
354 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 00:37:11 ] >>352 いくつもあるって、たとえばどんな言語?
355 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 00:39:23 ] そもそも暗黙の型変換で実現された機能がScala自身にたくさんあるという事実と、 Liftに大量に存在するという事実から、客観的にもう結論は出てるようなもんだと思う
356 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 00:40:26 ] 結論解ってるやつ以外使えない 解りたければソースを読め
357 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 00:40:30 ] >>351 普通にScalaがC++以上に流行ることはないと思うけど?
358 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 00:41:42 ] >>356 解っているやつ以外使えないって当たり前だろ むしろ解ってないやつは使うなよ
359 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 00:42:21 ] ttp://stackoverflow.com/questions/171489/explicit-type-conversion-in-scala ケースクラスの場合?
360 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 00:43:27 ] C++が流行らなかったって・・・ さすがにそこまで無知なのはどうかと
361 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 00:48:47 ] >>351 またお前か・・・
362 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 00:49:41 ] >>359 ケースクラスじゃなくてもできると思うけど Scala本に書いてある範疇 パターンマッチング推奨で、asInstanceOfはわざと長くしてるらしい
363 名前:デフォルトの名無しさん [2009/09/23(水) 01:20:13 ] まじキチ…ユダヤが人工地震を起こすぞ 【緊急情報カクサンよろしく】 ついに来ました。 大きい動きです。250nT超えてきました。ほぼ間違いありません。もう一度言います。 友人、知人、親類縁者、あらゆるつながりを駆使して巨大地震がくることを教えて下さい。 四川地震より大きいのが来る可能性があります。 g ★olde★ntam★atama.b★lo★g84.fc2.c★om/ ★★★★★危険度MAX★★★★★ ★★★★★★★★★★★★★★★★ ★千葉、静岡、東京、関東で大地震が起きる可能性が非常に高くなっています★★★ ★千葉、静岡、東京、関東で大地震が起きる可能性が非常に高くなっています★★★ ★千葉、静岡、東京、関東で大地震が起きる可能性が非常に高くなっています★★★ ★千葉、静岡、東京、関東で大地震が起きる可能性が非常に高くなっています★★★ ★★★★★★★★★★★★★★★★ ★★★★★危険度MAX★★★★★ 警告!連休中の21、22、23日が危ない!かも2 live24.2ch.net/test/read.cgi/eq/1 ★253494015/ 【大気イオン】e-PISCO Part11【また延長】 live24.2ch.net/test/read.cgi/eq/1 ★252991726/ 本当に地震が来たら、犯人は特権階級全員だということ2
364 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 21:46:53 ] イミュータブルでいつも同じ値を返す無引数メソッドは、valにすべきではない/defとすべき、なの? Scala本に、 def tail = new Queue(いつも同じ値,いつも同じ値2) みたいのが載ってて、Queueはイミュータブルなクラスなんだけど、これは val tail = new Queue(いつも同じ値,いつも同じ値2) の方がいいじゃん、て思ったんだけどなんでdefなの?
365 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 22:10:43 ] >>364 tail変数に別のQueueを代入したかったからじゃない?
366 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 22:14:10 ] >>364 valだとオブジェクト生成時点で評価されちゃう。tail欲しくないのに必ず new Queue(いつも同じ値, いつも同じ値2) とされちゃうのは嫌だよね。計算コストが無視できるくらい小さいならそれでも良いかもしれんけど。 lazy valなら最初にアクセスされた1回だけで済むから、lazy valにするなら良いと思うけど。
367 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 22:25:46 ] なるほど、そういうことか、サンキュー
368 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 00:01:20 ] ということは、valよりdefがよいという一般慣習ではないって事ね。 このtailは同一オブジェクトに対してあまり何度も呼ばれなさそうだというだけで、 ほぼ必ず呼ばれてかつ大量な回数呼ばれそうな場合はvalにして問題ないって事ね。 ちなみに、lazy valでないのは、単に本の構成上(このコードはlazyの説明より前に載ってた)の問題と思ってよい?
369 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 02:17:04 ] valをdefでoverrideとか出来るよね、確か。 valかdefかは効率の問題って感じ?
370 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 07:47:43 ] overrideできる時点でvalであってもバイトコード上ではinvokevirtual使っているのかも。 そうなると、評価にかかるオーバーヘッドも差はないのだろうな。 あとは、値の束縛タイミングで使い分ければいい感じかな・・・?
371 名前:デフォルトの名無しさん [2009/09/24(木) 11:05:53 ] valもdefも同じシンボルテーブルで管理されるらしいから相互にオーバーライド可能。 scalaでは値(シンボルテーブルとしてはフィールド、メソッド、パッケージ、シングルトンオブジェクト)と型(クラス、トレイト)の2種類しかないって本に書いてあったですよ。
372 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 11:30:37 ] val は変数を定義式の値に設定 def は変数を定義式自体に設定 tail の場合、def だと参照するたびにコンストラクタが評価されることになるはず つまり、初期化引数は同じでも生成されるオブジェクト自体は別物になる
373 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 16:12:36 ] valで定義すると、変数自体が外から見えるように思えるけど、 実際は、変数を返すだけのgettterが自動で生成されてる。 関数呼び出しコストはvalでも掛かる。 >>372 値が同じイミュータブルなオブジェクトを、呼ばれるたびに毎回作る意味は?
374 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 19:20:04 ] >373 valがgettter経由なのは、そのクラス内から参照した時もそうなの? privateだと違うのかな?
375 名前:デフォルトの名無しさん [2009/09/24(木) 19:28:43 ] 試してみればいいんじゃないの。オーバーライドして違いを観察できるっしょ。
376 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 20:58:03 ] >>373 基本的にはそうだけど、private[this]なvalやvarはgetter/setter生成する必要が無いので、 内部的には直接フィールド参照するコードが生成されてる。
377 名前:372 mailto:sage [2009/09/24(木) 23:07:45 ] >>373 ミュータブル版の Queue を使うときにもプログラムを書き換えずに済むから? 正確な「意味」は当のプログラム自体を見ないと答えようがないけど (ちなみに私は Scala 本未購入)
378 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 23:41:24 ] >>377 手元のScala本のコード確認してみたけど、関数型言語では一般的な、(immutableな)ListのペアでQueueを表現 するやつだな。日本語版(p.352)から関係のある箇所だけ抜粋するとこんな感じ。tailから呼ばれるmirrorはtrailingの 長さによっては、コストがかかり得るので、valでなくdefにするのは理にかなってる。lazy valだともっと良いけど。 class Queue[T] ( private val leading: List[T], private val trailing: List[T] ) { private def mirror = if (leading.isEmpty) new Queue(trailing.reverse, Nil) else this .... def tail = { val q = mirror new Queue(q.leading.tail, q.trailing) } ... }
379 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 00:32:43 ] イミュータブルなデータからの部分範囲の取得は常に新しいオブジェクトとして生成されるべき だから、この tail は引数なしのメソッドです、フィールドではなくて
380 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 00:42:03 ] >379 何でそうなるべきなのか、理由を書いてくれ。
381 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 04:11:35 ] abstract typeってなんでこんなのあるの?一度上位型扱いされたら使えなくならない? abstract class 親型 {type Hoge; def fuga(Hoge)} class 子型 extends 親型 {type Hoge=Foo; def fuga(Hoge){}} として、 new 子型 fuga new Foo は動く(コンパイル通る)けど、 val a:親型 = new 子型 a fuga new Foo は駄目。わざわざ危険なキャストが必要になる。 a fuga (new Foo).asInstanceOf[a.Hoge] こんなの、ちゃんと安全な型パラメタがあるんだから要らないじゃん?とか思うんだけど。
382 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 09:45:57 ] >>202 亀レスだが、val/immutable、var/mutableの絶対的な量を問題にするよりも、 val/immutableでいいところが、var/mutableになってないかという視点で、 クラスライブラリのソース見るといいと思う。 出来ないものをval/immutableにしようとしても、 それは無理な相談なのだから。
383 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 09:46:06 ] イミュータブルなときにdefとvalのどっちを使うかについては、 Scala本にはフィールドはメソッドに比べて速度が速いけどメモリを食うと書いてあるな 結局getter経由なのにフィールドの方が速いのだろうか
384 名前:デフォルトの名無しさん [2009/09/25(金) 10:26:51 ] >>379-380 >イミュータブルなデータからの部分範囲の取得は常に新しいオブジェクトとして生成されるべき べきっていうかそれしか不可能でしょ。理由はimmutableだから。
385 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 17:25:20 ] >>381 それは使い方間違っとるがな。正しくはこう。 class Foo abstract class 親型 { type Hoge; def fuga(hoge: Hoge) } class 子型 extends 親型 { type Hoge = Foo; def fuga(hoge: Hoge){} } val a: 親型 { type Hoge = Foo } = new 子型 // { type Hoge = Foo }の部分が必要 a fuga new Foo// コンパイル通る というのはともかく、理論的にはabstract typeはGenericsと機能的には少なくとも同等(のはず)。 ただ、多数の型パラメータ引き連れてる型を継承したいとか、型パラメータを介して複数の型が相互依存関係にある場合とか、 型パラメータの一部だけインスタンス化して他のはabstractなままにしときたいとか、abstract typeの方が便利なことも ときどきある。たとえば、パーザコンビネータライブラリのParsersでもabstract typeが使われてるね。これは、型パラメータが あちこちに引き回されることを考慮してのことだと思う。
386 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 17:28:28 ] >>383 valは値を再計算しないけど、defは呼ばれるたびに本体評価するんだから、valの方が通常は 速いのはある意味当たり前かと(呼ばれる場合の話ね。defはメソッドだから実際に呼ばれるまで 評価されないので)。
387 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 21:05:19 ] >>384 キャッシュがあったらミュータブルじゃんて言いたいの? 外部から見えなくても?というか、遅延初期化もミュータブル? つうか、空間効率無視すれば、初期化を遅延させなくてキャッシュもなしでイミュータブルな部分範囲に固定オブジェクトを返すのは可能でしょ。
388 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 21:13:08 ] 補足 >初期化を遅延させなくてキャッシュもなしでイミュータブルな部分範囲に固定オブジェクトを返すのは可能でしょ。 遅延させずに、初期化時に、必要な部分範囲オブジェクトを全部作っちゃうことを言ってる。
389 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 22:52:52 ] >>385 // { type Hoge = Foo }の部分が必要 おおなるほど。って、これ型パラメタそのまんまやん。 カギ括弧が嫌いな人以外にどううれしいのかよくわからんけど、普通はあんま気にしなくていいのかな。 Parsers使う機会があった時に感じられれば。
390 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 23:47:13 ] scalaのparser combinatorで 長さが1から8のdigitだけをacceptするような 定義を記述する場合 repN(8,digit)って感じで書けばいいのですか?
391 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 00:55:22 ] (x :: y) mkString "" の””って何しているのでしょうか?
392 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 01:09:57 ] >>391 セパレータを指定してる。mkStringメソッドは、コレクションの各要素について 最初の要素.toString + セパレータ + 次の要素.toString + セパレータ .... みたいな文字列を返すので、""を指定すると、単にコレクションの全要素をtoStringしたのを つなぎあわせたのが返ってくる。
393 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 01:54:16 ] わかりました。ありがとうございました。
394 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 09:46:29 ] >>357 C++だと、templete、一引数コンストラクタ、ADLで、 暗黙の型変換が可能。典型的なのが_1 + _2。
395 名前:デフォルトの名無しさん [2009/09/29(火) 20:21:19 ] scala のコレクション、ミュータブル系の操作が += とかで紛らわしいな。
396 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 20:23:41 ] そう思うなら使わなくていいんだよ
397 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 21:26:54 ] 実際万人向けじゃないなと思った なんかBoostを思い出す
398 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 21:52:45 ] 万人向けじゃないってどこを指してるのかわからんけど、 他の言語もScalaみたいになっていくと思うよ
399 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 01:46:10 ] 2445.544Dを解析すろとき =>の続きってどうやってかけばいいのでしょうか 全部繋げたStringにしたいのですが def test = rep(digit) ~ '.' ~ rep(digit) ~ 'D' ^^ { case a ~ b ~ c ~ d => } a::: b :: c ::dじゃエラーになる難しい
400 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 22:57:03 ] List(5,4)とSome(A)を合成して List(5,4,A)を作るにはどうすればいいのですか?
401 名前:デフォルトの名無しさん [2009/09/30(水) 23:27:02 ] そのAっていう値の型は何よ。
402 名前:デフォルトの名無しさん [2009/10/01(木) 00:32:40 ] >>364 携帯から浅はかな考えがらレスするが、 QueueがQueueを返すvalを定義すると場合によっちゃ無限ループじゃね? 最も、既存ライブラリがそんなバカな作りしてるわけないだろうけど 自身が自身の型をvalで定義するのはマズそうってのが俺なりのイディオム
403 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 00:45:48 ] >>399 def test = rep(digit) ~ '.' ~ rep(digit) ~ 'D' ^^ { case a ~ b ~ c ~ d => a.mkString + b + c.mkString + d } とかでどうよ。
404 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 00:54:57 ] >>400 Aが何型かようわからんが、とりあえず Some(A) が型Option[A]の変数sに入ってるとして、 scala> List(5, 4) ::: (s match { case Some(a) => List(a) case None => Nil }) res4: List[Any] = List(5, 4, A)
405 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 01:35:29 ] >>402 この場合(っていうか通常)は、無限って事はなくて要素すべての分だけ作られちゃうわな。 でもそのためにlazyってあるんじゃなくて? lazyってあんま使っちゃいかん物?
406 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 14:52:17 ] >>405 >lazyってあんま使っちゃいかん物? んなこたーない。がんがん使っておけ。生成されたコード見てみればわかるけど、オーバーヘッドもさほど 大きくないし。
407 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 19:49:50 ] ちょっとParser Combinatorの書き方が解らないので助けてください。 def test = '\'' ~ rep(digit) | '\'' ^^ { case a ~ b ~ c => a + b.mkString + c} この結果が > 4のとき成功するという長さを判別するにはどうしたらいいのでしょうか? '1234'はOKで '1'はNGにしたいです
408 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 03:23:33 ] レシーバの暗黙型変換っつうか新しいオブジェクトを作る暗黙型変換て、 最内ループで使われてると知らぬ間に無駄に大量のオブジェクト作って遅くなりそう。 new自体はまだよくてもGCコストが上がりそう。 >>407 知らないで適当に言うけど、パーサーひとつのみ引数に撮るrepじゃなくて、 ほかに回数指定できるコンビネーターがあるでしょ、多分。
409 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 03:28:49 ] マニュアル読め。 www.scala-lang.org/docu/files/api/scala/util/parsing/combinator/Parsers.html
410 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 12:26:59 ] repN(4,digit) ~ rep(digit) で良いんじゃない?
411 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 12:28:03 ] >>407 repN使うべし。>>409 も書いてるけど、ライブラリの使い方でわからんとこあったら、 まずAPIドキュメント読むくせつけた方がいいよ。
412 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 12:29:15 ] うお。>>410 とちょうどかぶった。
413 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 20:18:00 ] なんでJavaTokenParsersって "test" ~ "test2"みたいな記述ができるの? StdLexicalだとエラーになるのに
414 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 21:26:26 ] ちゃんとAPIドキュメントは調べたん?すでに複数人に指摘されているようだが。 www.scala-lang.org/docu/files/api/scala/util/parsing/combinator/RegexParsers.html#literal%28String%29 暗黙の型変換(implicit)を知らんのだったら、ちゃんと調べておかないとこの先もはまりまくりかと。
415 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 21:56:17 ] >>414 ということは、scalaを使う場合全部ソースコード 実装を把握しないと使えないと考えたほうがいいのでしょうか?
416 名前:デフォルトの名無しさん [2009/10/04(日) 21:58:54 ] なんでAPIドキュメントが実装を把握するうちに入るんだ。
417 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 22:07:35 ] >>415 APIドキュメントは辞書だよ。判らない語彙に出くわしたら調べるのは当たり前。 ただし、Scalaには暗黙の型変換という、ソースに陽に現れない語彙があるので、 暗黙の型変換はちゃんと勉強しておくべき。 暗黙の型変換が罠っぽいという話は、このスレにも何度も出ている。
418 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 06:06:39 ] ドキュメントを読まない奴はプログラミングやめろ
419 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 22:21:22 ] どっちかつーとドキュメント書かない奴にやめてほしい
420 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 22:30:30 ] ドキュメントめんどくせーよ ソース読む方が早い だから綺麗に書け
421 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 02:41:44 ] 綺麗なソースはドキュメントなくても読めるな 意図が分かる書き方されているのはすごく読み易い きたなくてドキュメントないのが最悪
422 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 07:19:19 ] Liftって関数は何をしているの?
423 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 09:22:11 ] 丸ごとの持ち上げ。
424 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 22:31:24 ] 2.7.7 RC1
425 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 22:47:18 ] もう2.7系はバグフィックスだけでしょ? 2.8はいつ出るの?
426 名前:デフォルトの名無しさん [2009/10/07(水) 09:48:22 ] scalaのWebフレームワーク Liftを使ったサイトはどんなのがありますか? できればそれが載っている一覧とかが欲しいんですが。。。
427 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 11:49:15 ] ttp://groups.google.com/group/liftweb/browse_thread/thread/9009e6a030a32718 前に探したときも見つからなかったな。 オフィシャルで利用サイトの情報整理してないのかもしれないね。
428 名前:デフォルトの名無しさん [2009/10/09(金) 10:47:13 ] >>426 >>427 ビジネスSNSのLinkedInはScalaを使っているようだけど、 Liftを使っているのか!?
429 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 19:19:41 ] 質問です。 コンパイル時に大きなファイルをコンパイルしようとすると、「Exception in thread "main" java.lang.StackOverflowError」、となってしまうのですが、何かいい手はないですかね? 同様のものを、サイズを小さくするとうまくいくので、ヒープ領域が足りないためと予想されるのですが。 Javaとかだったらコンパイル時に-Xmsとか使えばいいのでしょうけど。
430 名前:デフォルトの名無しさん [2009/10/14(水) 20:45:11 ] >Javaとかだったら Javaだぜ!
431 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 21:58:16 ] >>429 環境変数JAVA_OPTSで、JVMに渡すオプション指定できるので それ使うべし。
432 名前:429 mailto:sage [2009/10/14(水) 22:35:39 ] >>430 確かにほぼJavaですけどw 使い方がわからないです。 >>431 ! それは初めて知りました。ありがとうございます。 しかし非常に申し訳ないのですが、エラーの原因は何か違うものだったようでした。 本当にすみません。ですが、返信ありがとうございました。
433 名前:429 mailto:sage [2009/10/14(水) 22:45:09 ] ちなみに自分でつっこみますが、足りない(かと思った)のはヒープ領域でなくてスタック領域です。 なぜ間違えたのか...StackOverflowなのに...
434 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 01:15:40 ] scala以外にオブジェクト指向+関数型の言語って他にあるの? scalaに触発されて、似たような言語を作りたいって人はいるのかもしれないが、 そもそもそんな気持ちも起こらないぐらい、scalaの完成度は高い?
435 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 01:19:10 ] >>433 java -X (前後省略) > -Xss<size> set java thread stack size
436 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 01:24:18 ] >>434 OCaml……。
437 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 01:58:43 ] >>434 F#
438 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 07:05:38 ] >>434 Scalaは理論の分かる人の作った言語だから、 分からない人には似たような言語を作るのは無理。 型システムだけ取り出してもも理解できないのではないか。
439 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 07:32:44 ] アクター使うと ネットワーク間で関数を受け渡せますか?
440 名前:デフォルトの名無しさん [2009/10/15(木) 07:52:02 ] それアクター関係なくて関数をシリアライズできるかどうかってことでしょ。 一般的にはできないとおもうよ。
441 名前:デフォルトの名無しさん [2009/10/15(木) 10:30:38 ] >>438 Scalaは難しすぎるから結局一部のお宅をを除いて普及しないでしょう。 Web開発で言えば、中小規模はPHP、大規模はJavaのまま当分行くんじゃないの。 Scalaは今が頂点でしょう。
442 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 11:54:06 ] MicrosoftはScalaに関してどう思ってるんだろう F#でいいやって考えてるんだろうか
443 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 12:07:56 ] >>442 特に気にも留めてないんじゃない?一応.NETでも動作するとはいえ、ScalaのメインターゲットはJVM上だし。 MSが開発協力してくれたら最新の.NETに対応するのも楽かもなーとは思うけど、MSにとって そうするメリットも無いし。
444 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 12:09:07 ] >>441 普及に関してはまあ今の時点では何とも言えんが難しすぎるというのは同意しかねるなあ。 Scala触る前は自分はJava使いだったが、結構すんなり理解できたぞ?
445 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 00:00:35 ] 昨日からScala本買ってきて読んでるんだけど、List[Any]とタプルを言語的に分ける必要性がよくわからなかったんだけど、どこにあるんだろう?
446 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 00:16:33 ] 関数をシリアライズできないって糞言語だろw
447 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 00:18:55 ] >>444 それはお前の頭が良すぎるせいだろ馬鹿が
448 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 01:21:52 ] Javaの知識を要求され、しかも関数型に慣れないといけないというのは 初心者にはハードルが高いと思う。 今の盛り上がりはJavaプログラマが流れてるだけで、 それ以外の人に振り向いてもらうのは難しいのでは。 それが逆に、Scalaが、Javaのある程度以上のレベルのプログラマにとっての 楽園になる所以なんだろうけど。
449 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 01:26:26 ] ゴスリングもお気に入りだからな
450 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 01:30:44 ] マーチンファウラーが出てくると その言語は糞化するからヤバいけどな
451 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 08:08:07 ] >>445 どうしても必要なところ以外にAny使うのは馬鹿。
452 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 08:24:00 ] タプルはちゃんと型チェックできるじゃない AnyはAnyのチェックしかできない
453 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 11:48:00 ] 動的型付け言語で育つと>>445 みたいな発想ができるんだな… List[Any]は任意の型の要素。要素を取り出したときもAnyなんで 使いたい型に変換するときはキャストしなきゃならなくて安全じゃない。 タプルは(String, Int)みたいに自分で好きな型の組み合わせを指定できて 要素を取り出すときはちゃんとその型で取り出されるからキャスト不要で安全
454 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 11:53:34 ] Scalaは八方塞状態になっているJava使いの人達が、新天地を求めて期待しているだけだね。
455 名前:デフォルトの名無しさん [2009/10/16(金) 16:13:49 ] 八方塞状態になっているJava使いの人達が新天地を求めてScalaに期待している、 その通りかもね。
456 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 18:00:22 ] 八方塞状態になっているJava使いの人達が新天地を求めてScalaに期待している、 その通りかもね。 その通りだべ
457 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 20:13:36 ] 次の案件はJavaの代わりにScalaでよろ、 って上司が言ったら七月六日はサラダ記念日
458 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 20:19:38 ] ( ;∀;)イイジョウシダナー
459 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 20:26:34 ] 辞めていいよ
460 名前:デフォルトの名無しさん [2009/10/17(土) 18:29:05 ] 翻訳の本かたよ。 まだ一章の途中だけどw読みやすい気がするよ。気がするだけじゃないと良いんだけど。 あと紙質が気に入ったね。 高校の時とか、問題集買う時はまず紙質をチェックしてたのを思い出した。
461 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 15:24:54 ] ゴスリングも 内心Java捨てて Scalaに移りたいって思っているよ
462 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 16:40:13 ] 自身でもないのに何でゴスリングの内心がわかるんだよ
463 名前:460 mailto:sage [2009/10/19(月) 04:38:50 ] 四章の途中くらいまで読んだ。 まだ難しいのは出てきてない。だいたい1日一章として1ヶ月で全部読めるかなァ? みんなはどれくらいの期間で読めた?
464 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 08:14:08 ] 休みの日二日だから延べ20数時間くらいだったと思う。
465 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 10:10:01 ] >>463 仕事の合間にコードをほぼ全部写経しながらで 一か月くらいだったかなー。もうちょっとかな。 翻訳読みやすいですね。 関数型言語初心者なので、ループから再帰へ、 varからvalへ置き換えていくのが関数型言語的考え方というのが とても面白かったです。
466 名前:デフォルトの名無しさん [2009/10/20(火) 00:47:19 ] 関数型言語で仕事やってる人いる?
467 名前:460 mailto:sage [2009/10/20(火) 09:09:26 ] 返信ありがとう。 >>464 はやっ…。 速いと言うより、集中力があるってことっすね。 >>465 それで1ヶ月というのも速いですね。 職場に持ってこうかなぁ…。 自分も関数型言語は大学時代にちょっと触れたぐらいなので読んでて楽しいですよ。
468 名前:465 mailto:sage [2009/10/20(火) 11:01:39 ] >>467 仕事の合間と書きましたが嘘をつきました。 写経の合間に仕事してました。 フルタイムやってた日もありましたよ。 暇でねぇ・・・もうSIだめだねwww はあ・・・