プログラミング言語 Scala 3冊目
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2009/12/26(土) 07:24:16ttp://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 2冊目
http://pc12.2ch.net/test/read.cgi/tech/1246289771/
0153デフォルトの名無しさん
2010/02/27(土) 12:19:59>シンプルな言語
つClojure
0154デフォルトの名無しさん
2010/02/27(土) 18:16:55Kojoはやけにロゴがしょぼいのがアレだけど、なかなかよくできている環境だと思う
入力補完にコマンドヒストリ、オブジェクトインスペクタ、タートルグラフィクスに関する
コマンドのUNDOなど機能は豊富だし、割と安定してる。
0155デフォルトの名無しさん
2010/03/01(月) 04:03:36良くある四則演算DSLとかではなく、変数宣言部があるようなやつが知りたい。どんな感じで作れば良いのか。
0156デフォルトの名無しさん
2010/03/01(月) 07:22:280157デフォルトの名無しさん
2010/03/01(月) 11:47:22変数宣言があっても基本は変わらないと思うよ。普通のパーザジェネレータ使って
オレオレ言語のパーザ書くのと本質的には同じ。また、変数宣言を持った言語の
パーザ書いたことが無いならパーザコンビネータかどうかというのは本質的な問題
じゃない。
0158デフォルトの名無しさん
2010/03/03(水) 23:01:460159デフォルトの名無しさん
2010/03/03(水) 23:20:550160デフォルトの名無しさん
2010/03/03(水) 23:52:17C++だとnullがありえる戻り値ならポインタを返すけど、それがScalaだとOptionになると。
Optionは便利な関数があるからnullのチェックのif文書くより楽チン
0161デフォルトの名無しさん
2010/03/04(木) 02:06:530162デフォルトの名無しさん
2010/03/04(木) 02:16:48nullチェックし忘れによる、ぬるぽを防ぐ
加えて、Listもどき(長さが0か1のリスト)と見なせる事により、for文やmapで便利
あと、パターンマッチ
でも、Option型使うより、その発展系のBox型の方がより便利で
いいとこが分かりやすい。
あ、Box型ってのは、Liftのライブラリね。
で、Liftの作者がBox型の布教文書を書いてたので、それを読むといい。
0163デフォルトの名無しさん
2010/03/06(土) 12:39:27ソース読んでみたらこんなんなってた。
def length = model.getSize
def iterator = new Iterator[A] {
var idx = 0
def next = { idx += 1; apply(idx-1) }
def hasNext = idx < length
}
Iteratorにlengthメソッドがあるのでそっちが使われちゃって、さらにその中でhasNextを呼んでるから無限ループになってるっぽい?
本家に報告するべきかなと思ったけど、注意書きに
「お前それほんとにバグかどうか確かめたの?お前の勘違いじゃないの?理解できてないだけじゃないの?死ぬの?
てめぇで判断つかないならMLで相談するなりしてからにしろよ^^;;;;」
って書かれてて心が折れたので誰かエロい人報告しといてくだしあ><
0164デフォルトの名無しさん
2010/03/06(土) 16:26:49Cloujerより需要があるのかなあ?
0165デフォルトの名無しさん
2010/03/07(日) 03:39:540166デフォルトの名無しさん
2010/03/08(月) 14:29:320167デフォルトの名無しさん
2010/03/09(火) 01:08:55注意書きに気にせず報告すると良いと思うよ。
がんばって。
0168デフォルトの名無しさん
2010/03/09(火) 02:20:56maven-scala-pluginを使っているのですが、
これって分割コンパイルする方法はないのでしょうか。
*.scala ファイルが25個で、1400行程ですが、
40秒近くかかっています。
mavenに限らずscala一般の話でもわかる方、
いましたらよろしくお願いします。
0169デフォルトの名無しさん
2010/03/09(火) 02:24:39追記です。
mvn scala:cc
は、やってみました。
レスポンス自体の改善にはならなかったです。
0170デフォルトの名無しさん
2010/03/09(火) 03:33:44maven-scala-plugin使ったこと無いけど、普通に考えて分割コンパイルされそうなもんだけど…
Liftも以前はmaven使ってたはずだけど、修正のたびに全部再コンパイルだったら使い物に
ならんかっただろうし。まあ、確実に修正差分だけコンパイルして欲しいならsbt(Simple Build Tool)
使うのが無難かなあ。sbtはコンパイラAPI叩いてファイル間の依存性解析とかしてるから、その辺は
割と正確。
0171デフォルトの名無しさん
2010/03/09(火) 05:01:40sbt 試してみました。
毎回コンパイラを起動しない設定だとかなりのスピードアップがあるようです。
(あわせて169の記述は取り下げます)
(1〜3回目というのは、ソースを1行だけ編集してコンパイルさせた結果の3回分です)
またsbtの効果は大ですが、この規模では真価は発揮できないようです。
mvn scala:compile
33s
sbt compile
17s
mvn scala:cc
28s (1回目)
7s (2回目)
5s (3回目)
sbt ~compile
19s (1回目)
8s (2回目)
4s (3回目)
0172デフォルトの名無しさん
2010/03/09(火) 05:35:56そんな遅さ。
0173デフォルトの名無しさん
2010/03/13(土) 04:20:23>>157
返答が遅くてすまんが、レスありがとう。
結局やりたいことはできますた。
結局、自分がパーサコンビネータの使い方が良く分かってなかっただけだった。良く分からないんで手っ取り早く参考となるものがみたかったと、こういうすんぽうです。
適当にいじくってたらだんだん理解してきてなんとかできた。
0174デフォルトの名無しさん
2010/03/13(土) 21:53:350175デフォルトの名無しさん
2010/03/13(土) 23:26:20見えてるので勘弁。clojureスレでやってくれ。
0176デフォルトの名無しさん
2010/03/13(土) 23:30:550177デフォルトの名無しさん
2010/03/14(日) 23:20:570178デフォルトの名無しさん
2010/03/15(月) 02:56:340179デフォルトの名無しさん
2010/03/16(火) 23:27:140180デフォルトの名無しさん
2010/03/17(水) 15:13:29ランタイムのサイズがつらくないか?
0181デフォルトの名無しさん
2010/03/17(水) 18:01:38ひょっとしたらそれでなんとかなるかもしれないけど、そこまでする価値があるかどうかだな。
0182デフォルトの名無しさん
2010/03/18(木) 01:59:39> Java使わずにScalaでiモードのアプリ作ったり出来ないだろうか
Androidは、Scalaでプログラムできるらしいぞ!
今どき、iモードなんて流行らないだろう。Androidで行こうぜ!
0183デフォルトの名無しさん
2010/03/18(木) 02:51:37そんなことはこのスレの住人なら誰でも知ってるわ。つか公式サイトに載ってることだろ。
大体、iアプリの質問に対してAndroidに話を換えてどうすんだよ。アホにもほどがある。
0184デフォルトの名無しさん
2010/03/18(木) 07:54:290185デフォルトの名無しさん
2010/03/19(金) 05:50:50def union(that: Seq[A]): Seq[A]
というメソッドが3つあったんだけど、おなじのが3つってどういうことだろ。
説明文は全部違うみたいだけど英語だからよくわからん。
0186デフォルトの名無しさん
2010/03/19(金) 18:04:19恐らく、新しいAPIドキュメントの生成器(scaladoc2)のバグだね
説明文をよく見るとわかるけど、最初の一つがintersect,その次がdiff,最後がunion
の説明になってる。MLかTracで報告してあげると良いのではないかと。
0187デフォルトの名無しさん
2010/03/19(金) 18:10:12その点に注意した方がいいと思う。なんか変な挙動があったらバグの可能性が高い。
0188デフォルトの名無しさん
2010/03/19(金) 18:12:070189デフォルトの名無しさん
2010/03/20(土) 03:29:24なるほど、バグか。
ScalaはJavaと比べて複雑だし、大変なんだろうな。
報告は・・・うん、ごめん、ムリぽ
英語ができるなら真っ先にあの検索の挙動について文句を(ry
0190デフォルトの名無しさん
2010/03/21(日) 22:34:01なんとかしてくれ
0191デフォルトの名無しさん
2010/03/22(月) 02:58:23とりあえずNetBeansをインストールしなおしてみれば?
0192デフォルトの名無しさん
2010/03/22(月) 06:01:16http://www.listware.net/201003/netbeans-platform-dev/67512.html
0193デフォルトの名無しさん
2010/03/22(月) 10:44:20ただ、プラグイン入れてもEmacsライクなSet Markが機能しない。。。
またEclipseに戻りそうだ。
0194デフォルトの名無しさん
2010/03/22(月) 23:18:14数年内にRubyとか淘汰すると思う
0195デフォルトの名無しさん
2010/03/22(月) 23:50:30Scalaいいよねぇ
Rubyのアホみたいにテスト工数が
ざっくり減るし。
ただ技術者なかなかいないよねぇ
0196デフォルトの名無しさん
2010/03/23(火) 21:22:300197デフォルトの名無しさん
2010/03/23(火) 21:56:000198デフォルトの名無しさん
2010/03/24(水) 23:35:27Scala言語を学ぶやさしいツール「Kojo」が無償公開
Publickey http://www.publickey1.jp/blog/10/scalakojo.html
0199デフォルトの名無しさん
2010/03/25(木) 00:14:10なぜこの関数は存在するのですか?
0200デフォルトの名無しさん
2010/03/25(木) 00:46:37理解しているけど使いどころがわからないってこと?
0201デフォルトの名無しさん
2010/03/25(木) 06:58:370202デフォルトの名無しさん
2010/03/27(土) 01:12:19Specsみたいな書き方のやり方なんだろうけど、
なにをやってるのかさっぱりわからん(;´Д`)
誰か解説プリーズ。
http://gist.github.com/344299
class Example(description: String) {
def in[T](expectations: =>T)(implicit def m: scala.reflect.Manifest[T]): Example = {
if (m.erasure == this.getClass)
hasSubExamples = true
// store expectations for later evaluation
}
}
/**
* This allow me to define in specs examples which know if they have nested examples
* without having to be evaluated
*/
"this example is simple" in { 1 must_== 1 }
"this example has a nested example but it doesn't have to be evaluated to know it!" in {
"I am nested" in { 1 must_== 1 }
}
0203デフォルトの名無しさん
2010/03/27(土) 05:27:10読んでみた。まず、このサンプルは、inの中にさらにネストしたテストがあるかどうかを
テストフレームワーク側で検知することができることを目的にしている。そのために、
implicit parameterとして渡されたscala.reflect.Manifest[T]からT型のクラスを表すClass
オブジェクトを取得して、this.getClass()、つまりExample classのClassオブジェクトと比較している。
もし、inに渡される引数の型=> Tが => Exampleだったら、ネストしたテストがあるということになり、
hasSubExamples = trueになる。そうでなければネストしたテストは無いということになる。
で、なんでscala.reflect.Manifestを使ってるのかだけど、これは、inに渡される引数の値がnullである場合
でも処理できるようにしているのではないかと思う。そうでなければ、単にexpectation.getClass = this.getClass
で比較すればいいだけだし。
0204デフォルトの名無しさん
2010/03/27(土) 08:15:34あと implicit def m: は implicit m: の間違い?
0205デフォルトの名無しさん
2010/03/27(土) 19:08:04あー、inがExampleを返すのはネストの判定のためなのか。
ネストならTがExampleになるのね。なるほどなぁ。
0208デフォルトの名無しさん
2010/04/02(金) 16:30:142回asInstanceOfやるしかないんですかね?
val a: AnyVal = 10L
a.asInstanceOf[Long].asInstanceOf[Int]
0209デフォルトの名無しさん
2010/04/02(金) 21:01:56val a: AnyRef = 10L.asInstanceOf[java.lang.Long]
a.asInstanceOf[Long].asInstanceOf[Int]
0210デフォルトの名無しさん
2010/04/05(月) 18:46:05val a: AnyRef = 10L.asInstanceOf[java.lang.Long]
a.asInstanceOf[Long].toInt
でOK
0211デフォルトの名無しさん
2010/04/05(月) 21:25:39処理系としてはどれくらい安定してる感じなの?
0212デフォルトの名無しさん
2010/04/06(火) 00:15:08何も知らずに言うが、処理系はJVMだから、Javaの10年以上の実績があって超安定。
だが、コンパイルが遅いのが難点ってところ。
コンパイラのバグは、致命的なのはないんじゃないの??
0213デフォルトの名無しさん
2010/04/06(火) 19:06:00なるほど。それならわりと使えそうな感じだね。
0214デフォルトの名無しさん
2010/04/06(火) 20:16:28こんなメソッド持ってるみたいなのはこんな感じで書けるみたいですが
def func[T <: {def hoge(s: String): Unit}](value: T, str: String) = {
value.hoge(str)
}
0215デフォルトの名無しさん
2010/04/07(水) 02:02:49直接的な方法は存在しない。2.7.Xで(実験的な機能として)入った
scala.reflect.Manifestを使えば次のような形で書くことが一応できる
import scala.reflect.Manifest
def fun[T](implicit m: Manifest[T]): T = m.erasure.newInstance.asInstanceOf[T]
fun[String] //String型のオブジェクトを生成
0216デフォルトの名無しさん
2010/04/08(木) 00:50:350217デフォルトの名無しさん
2010/04/08(木) 00:50:490218デフォルトの名無しさん
2010/04/10(土) 02:27:150219デフォルトの名無しさん
2010/04/13(火) 19:22:38http://days2010.scala-lang.org/program
どれ注目すればいいん?
Running in Browser?Data Parallel Programming?CCSTM?Automatic refactoring?
0220デフォルトの名無しさん
2010/04/15(木) 00:21:49ってどこまでが引数でどこまでが返り値でどこまでが
関数の実体なのでしょうか
0221136
2010/04/15(木) 13:15:050222デフォルトの名無しさん
2010/04/15(木) 13:15:130223デフォルトの名無しさん
2010/04/15(木) 16:58:57コップ本で1章使って概説してるよ
0224デフォルトの名無しさん
2010/04/15(木) 19:27:01ちょっと見たかんじだと、なんかあまり違いがないような
0225デフォルトの名無しさん
2010/04/17(土) 12:55:43メールでPhil Bagwellにグループの詳細を送ってくれ」
だって。
0226デフォルトの名無しさん
2010/04/17(土) 14:24:24・Scala 2.9 (late 2010)
parallel collections, more specialization, faster vector & hash tries
Dynamic type (?), Scala reflection (?), Scala IO (?), more libraries
・Scala 2.10 (2011)
Reactive programming, optional exception checking,
first parallel DSLs, Scala .NET, more libraries
・Scala 2.11/3.0? (2012-2015)
Optimizing parallel DSL framework, contracts (?),
generalized effect checking, type debugging
0227デフォルトの名無しさん
2010/04/17(土) 14:41:09Scala 3.0 could include:
unification of tuples + function args, better type inference, union types
Virtual classes still on the "research" roadmap, but has no owner
Multimethods: definitely a research project.
Unlikely to happen, unless someone implements it and nothing breaks.
あとScala Foundationを設立して企業からもサポートもらうよ、
次回のScalaDays2011はサンフランシスコでやるよ、とのこと。
0228デフォルトの名無しさん
2010/04/17(土) 14:49:09.NET版をまだ諦めてなかった事に驚いた。
あと、例外チェックも。
0229デフォルトの名無しさん
2010/04/17(土) 16:13:11.NETはMSが(VSの?)scalacモジュール出すらしい
0230デフォルトの名無しさん
2010/04/17(土) 19:59:01> .NETはMSが(VSの?)scalacモジュール出すらしい
Scala終了か?
MSがやると互換性の違うのがいっぱいできて、利用者側が混乱するんだよね。。
MSの作戦でやっているのだろうけど。
Java,Html, 他にも、MSが下手に乗り出すことで、進化が遅くなった言語がいろいろ。。
0231デフォルトの名無しさん
2010/04/17(土) 20:24:04わざと1980年代から意図的に同じ事くりかえして
自社の優位性を保とうとしているからなぁw
0232デフォルトの名無しさん
2010/04/17(土) 21:10:35似たケースとしてIronRubyを挙げるが、こっちは変な独自要素はないよ。
WPFなどの.NET API呼び出しが、独自要素だと言えばその通りだが、
それ言ったらJRubyやJythonのJava連携はどうなる、とかいった話になるし、
問題視している奴らはいないだろう。
というか、そんな余計なことに手を出す余裕がない。
ようやくRuby1.8準拠のIronRuby1.0がリリースできたところで、
次はRuby1.9準拠の1.1のリリースが待っている。
Scalaが、ブラウザや往時のJava並みの戦略的プラットフォームだとMSが判断したら、
大量の資金がつぎ込まれてMSの独自要素が作られるかもしれないが、
今の状況を見てそこまでScalaが流行ると思うなら、お前ら幸せすぎだろw
0233デフォルトの名無しさん
2010/04/17(土) 21:42:140234デフォルトの名無しさん
2010/04/17(土) 21:50:470235デフォルトの名無しさん
2010/04/17(土) 22:08:560236デフォルトの名無しさん
2010/04/17(土) 22:49:55同意見だなぁ
.netなんだし間口広げるだけだろうにな・・・
0237デフォルトの名無しさん
2010/04/17(土) 23:41:410238デフォルトの名無しさん
2010/04/18(日) 01:14:52それでもなお独自拡張を恐れるならともかく、古い情報に基づいての偏見はなぁ…
0239デフォルトの名無しさん
2010/04/18(日) 02:04:22悪いことはするなって事だよ
0240デフォルトの名無しさん
2010/04/18(日) 02:09:51結局、MS製品のある環境でしか動かないものしか作ってないからな。
建前は標準規格と言ってるが。
0241デフォルトの名無しさん
2010/04/18(日) 02:18:33標準規格にはこだわるにしても
0242デフォルトの名無しさん
2010/04/18(日) 02:31:03要は、ベンダーロックインされるリスクを負ってでも、その技術を使いたいかという話。
0243デフォルトの名無しさん
2010/04/18(日) 03:00:51MSの部分だけに反応するってことはscalaに興味ない人が荒らすためだけに巡回してるのかな・・
0244242
2010/04/18(日) 03:54:57歪んだ形の囲い込みを全く警戒しなくてもおk、というわけではないという当たり前の話。
0245デフォルトの名無しさん
2010/04/18(日) 03:58:32いやメジャーOSだとそんなことやってるのWindowsだけだよ…
0246デフォルトの名無しさん
2010/04/18(日) 09:29:46便利な技術ならOSSでコピッて本家に取り込まれるし、
使えない技術ならそもそも.NET版でも使われなくて、MSの優位性が無くなる。
JavaScriptのXHRなんか、ActiveXベースでMS独自実装の最たるものだが、
標準に取り込まれて、今じゃAjaxの最重要技術だ。
J++を念頭に言っているのなら、あれはSunが相手だからああいう裁判沙汰になっただけで、
もっと緩やかな相手なら、ああはならず、J/DirectやCOM連携が、
他の処理系への移植を考慮した形で取り込まれていたと思う。
実際、J++でやろうとしていたことの必要性は確かにあり、その後OSSベースで実装されている。
JNIが不便だからと言って作られたJNAはNetBeansが由来だし、
いくつかあるJava-COMブリッジとか、OSSで作られてるだろ?
0247デフォルトの名無しさん
2010/04/18(日) 10:10:09Win2000発売停止になったよな
じゃあScalaもきちんと監視しないと
改悪されるぞ
0248デフォルトの名無しさん
2010/04/18(日) 12:51:020249デフォルトの名無しさん
2010/04/18(日) 12:53:08> 便利な技術ならOSSでコピッて本家に取り込まれるし、
世の中には特許というものがあってだね。
0250デフォルトの名無しさん
2010/04/18(日) 16:19:28Ironなんちゃらシリーズだって.netでしか動かない仕様になるぜ
0251デフォルトの名無しさん
2010/04/18(日) 17:10:060252デフォルトの名無しさん
2010/04/20(火) 21:14:19>「Scala 2.8.0」がRC1に
>2010年04月16日 23:39
>プログラミング言語「Scala」の開発チームは4月14日、次期版「Scala 2.8.0」のリリース候補(RC)版を公開した
続きは、こちらでも、どこでも。。。
ttp://sourceforge.jp/magazine/10/04/16/1440244?from=rss
個人的には、Scala Swingライブラリに期待。
Visualな Swing開発環境が出てくれるとうれしいのだが。
■ このスレッドは過去ログ倉庫に格納されています