プログラミング言語 Scala 5冊目

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
2デフォルトの名無しさん:2011/01/08(土) 20:46:00
・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デフォルトの名無しさん:2011/01/09(日) 14:02:46
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。

アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。

                  京都大学霊長類研究所
4デフォルトの名無しさん:2011/01/09(日) 18:09:18
スクルト!
5デフォルトの名無しさん:2011/01/09(日) 18:17:38
次のバージョンアップで、C#のTPL (Task Parallel Library)っぽい並列コレクションが
入るんだっけ?

後、欲しいのは、IO周りだな。Javaのクラス使う事が多すぎる。

XML周りはもうちょっと拡張して欲しいかな。操作によってはめんどい事もある。
バイナリXMLとか、HTML5とかもサポートされるといいかも。

あ、あとは、もうちょっとソースにjavadoc書いて欲しい。
6デフォルトの名無しさん:2011/01/09(日) 20:41:22
Parallels Collectionsの使い方とか↓
http://d.hatena.ne.jp/kiyoshihosoda/20101230/p1

残念ながら2.9でもIOは追加されないっぽい。まぁそこまで困らないし、変に使いづらいものが入るよりまし。
HTML5とか仕様完全に決まってないから、まだ無理だと思う。

ユーザーがつかうライブラリ部分のソースにはjavadoc(っていうかscaladoc)まあまあ書いてあると思うが?
7デフォルトの名無しさん:2011/01/09(日) 21:00:21
8デフォルトの名無しさん:2011/01/09(日) 22:34:28
scalaの勉強会とかあるんだね
http://partake.in/events/2919d1c2-8f43-49a4-ab0b-1b2de9c74771
9デフォルトの名無しさん:2011/01/09(日) 22:36:51
まだしょうがないとは言え、イベントも入門ばかり、出る本も入門ばかり
なぜか数だけは多い
10デフォルトの名無しさん:2011/01/09(日) 22:45:57
まぁ、とりあえず裾野を広げないことには、な。。
11デフォルトの名無しさん:2011/01/09(日) 23:18:08
Rubyのほうが優れているのにこの言語を勉強する意味がわからん
12デフォルトの名無しさん:2011/01/09(日) 23:59:20
セグメントが違うだろ……一部で被ってる程度
13デフォルトの名無しさん:2011/01/10(月) 01:51:50
Ruby の対抗馬は Groovy。片付けとけ。
14デフォルトの名無しさん:2011/01/10(月) 02:36:07
Ruby厨はどこにでも現れるな。
信者を騙ったアンチかと思う位だ
15デフォルトの名無しさん:2011/01/10(月) 08:47:56
信者を騙ったアンチだからだよw
16デフォルトの名無しさん:2011/01/10(月) 10:35:00
暗黙の型変換の定義をコンパニオンオブジェクトに書いているのに
参照してくれないのはなぜでしょうか?

class C(val i:Int) { def m1(c:C) = 1 }
object C { implicit def string2C(s:String) : C = { new C(0) } }

scala> "abc" m1 (new C(3))
<console>:7: error: value m1 is not a member of java.lang.String
"abc" m1 (new C(3))

ちなみに
import C._
とすればうまくいきます。
17デフォルトの名無しさん:2011/01/10(月) 12:30:08
"abc" m1 (new C(3))
これじゃあ型Cのインスタンスを引数に取るm1っていう名前のメソッドっていうだけで
文字列を型Cに変換するべきとまではコンパイラに伝わらないから
Cのコンパニオンオブジェクトの中まで探索されない

val c: C = "abc"
c m1 (new C(3))
ならおk
18デフォルトの名無しさん:2011/01/10(月) 12:35:49
JavaできないやつはScalaはじめんの幾分抵抗あるだろな
19デフォルトの名無しさん:2011/01/10(月) 13:36:49
>>17
ありがとうございます。
なるほど。
C型のコンパニオンオブジェクトの中を探しにいくのは
「C型から別の型への変換が必要なときに限る」
ということですね。
今関連しているすべての型のコンパニオンオブジェクトが
検索対象に入ると勘違いしてました。
20デフォルトの名無しさん:2011/01/11(火) 22:41:57
Scalaって普及しますかね?

Javaを使っていると
どうしても冗長性が気になるんですよね。

Scala使ってみたいな。
21デフォルトの名無しさん:2011/01/11(火) 23:27:02
scalaはいいよ。
コンパイルは爆速。
ソースに型エラーがあるくらいでコンパイラがスタックトレース吐いて落ちることもない。
ドキュメントも充実。
強力な型推論があるので、高階関数でも型注釈まみれになることがない。
eclipseが重すぎて気が狂うなんてことも勿論ない。
22デフォルトの名無しさん:2011/01/11(火) 23:43:12
>>21
おいそれ全部弱点じゃないのか
23デフォルトの名無しさん:2011/01/11(火) 23:46:24
ScalaをEclipse上で書こうとしたら気が狂いそうになったw
なんかオススメのエディタとかIDEとかありませんかね?
24デフォルトの名無しさん:2011/01/12(水) 00:14:47
IntelliJ IDEAオススメ
25デフォルトの名無しさん:2011/01/12(水) 20:42:21
scalaに関する最強の本ってなんですか?
別に英語でもいいんですが。
26odersky:2011/01/12(水) 23:18:11
27デフォルトの名無しさん:2011/01/12(水) 23:30:05
言語仕様書が最強なんじゃね?読んだことないけどな
28odersky:2011/01/12(水) 23:34:11
言語仕様書と実装が、すごく微妙に食い違ってるとこあるから、だめ
29デフォルトの名無しさん:2011/01/12(水) 23:58:22
標準ライブラリのソースを3回写経しろ。
30デフォルトの名無しさん:2011/01/13(木) 08:11:05
それで理解できる言語じゃないでしょう
31デフォルトの名無しさん:2011/01/13(木) 22:13:11
>25

Scalaで学ぶ関数脳入門 がお勧め。

関数型プログラミングの解説をしつつ、Scalaでの書き方を解説と言う感じ。
基礎がしっかりつく。


Scala言語自身をしっかり学びたいならば、ボクらのScala が良いかと思う。


この2冊呼んで、あとは通称コップ本を手元においておけば良かろう。
32デフォルトの名無しさん:2011/01/14(金) 00:24:30
俺も一般プログラマにはそれがいいと思う
コップ本は意味不明すぎた
33デフォルトの名無しさん:2011/01/14(金) 00:28:35
英語でもいいから最強っていうのなら>>26のOdersky先生の言うとおりだと思うけど
きっとある程度の自信はあるんでしょ
34デフォルトの名無しさん:2011/01/14(金) 02:56:04
>>20
俺は絶対普及しないと思う。Java程バックというか後ろ盾がないし、Haskellには美しさやオールイミュータブルじゃないことによるデメリットが大きすぎるし、Ruby並に動的な機能を使えるようにするために言語仕様を拡大しすぎた。

まあ、それでも一部の人にはウケるだろうね。言語にこだわりがあるなら勉強すればいいと思う。
35デフォルトの名無しさん:2011/01/14(金) 02:58:56
Scalaの後ろ盾はJavaじゃん
なにいってんの
3634:2011/01/14(金) 02:59:10
× Haskellには美しさや
○ Haskellには美しさで劣り、
3734:2011/01/14(金) 03:02:29
>>35
ライブラリだけじゃ全く足りないと思うよ。初心者用の本とか運用ノウハウとか教育とか、もういろいろ足りないよ。VMなにそれみたいな、初心者でもやってみようかなと思わせるぐらいじゃないと。Javaと比べるならね。
38デフォルトの名無しさん:2011/01/14(金) 03:16:09
なんかおまえの言ってることはズレてて捉えどころがないから適切に突っ込めない
39デフォルトの名無しさん:2011/01/14(金) 07:48:18
Rubyもそんなにとっつきやすい言語じゃないけど、RoRのおかげで普及したようなもんだし云々。
40デフォルトの名無しさん:2011/01/14(金) 09:46:44
RoRって別にbaseがRubyでなくてもよかったよな
41デフォルトの名無しさん:2011/01/14(金) 13:58:30
>>23
eclipseはSSD使わないとモッサリかも
42デフォルトの名無しさん:2011/01/14(金) 15:00:25
問題はjavaがこれからどうなるかだな。
43デフォルトの名無しさん:2011/01/14(金) 20:46:24
>>34
>Ruby並に動的な機能を使えるようにするために言語仕様を拡大しすぎた。
の一文見ただけで、まともにScala触ったことがあるのかきわめて疑わしく思える…
基本的にScalaの組み込み構文で動的に処理されるものなんてほとんど無いがな
44デフォルトの名無しさん:2011/01/14(金) 21:11:52
仕事でつかってるぜ
45デフォルトの名無しさん:2011/01/14(金) 21:43:49
むしろリフレクションなんかはScalaの弱点だと思っていたけど、
どの辺がRuby並に動的なんだろう
46デフォルトの名無しさん:2011/01/15(土) 01:53:26
適当なこというけどリフレクションないとWebフレームワーク作れないんじゃねーの
47デフォルトの名無しさん:2011/01/15(土) 03:35:08
>>46
お前は馬鹿なのか?大丈夫か?

と釣られてみるテスト
48デフォルトの名無しさん:2011/01/15(土) 04:29:55
implicit defとかのこといってんじゃね?
49デフォルトの名無しさん:2011/01/15(土) 09:20:09
Webフレームワーク=RoRじゃないだろ
50デフォルトの名無しさん:2011/01/15(土) 10:02:13
静的にできることでも動的にやっているのか
それともポリモーフィズムなんかは全部動的だと思っているのか
どちらにしても怖いな
51デフォルトの名無しさん:2011/01/15(土) 11:02:24
>>46
うんだからRubyとPHP以外まともな
Webフレームワークが存在しないわけで
52デフォルトの名無しさん:2011/01/15(土) 11:27:53
必要なのはメタプログラミングの手段であって、リフレクションは道具に過ぎないんじゃ?
53デフォルトの名無しさん:2011/01/15(土) 13:54:52
54デフォルトの名無しさん:2011/01/15(土) 14:20:06
リフレクションもそうだけど、個人的にはFFIを強化して欲しいな。
すべてJNI経由というのはつらい。
Haskellのccallみたいなのがあればいいのに。
55デフォルトの名無しさん:2011/01/15(土) 16:52:01
Scalaに興味を持ちつつある。
Liftってどうなんだろう?
Google App Engineで使ってみようかな。
56デフォルトの名無しさん:2011/01/15(土) 17:07:04
57デフォルトの名無しさん:2011/01/15(土) 17:37:11
Liftもいいが、Play!もいいらしい。
よりScala的なのは前者。
58デフォルトの名無しさん:2011/01/15(土) 22:38:38
>>55
App EngineでLiftは、App Engineの制限に引っかかりやすい(裏でActorつかってたり)から、あまりおすすめできない。

個人的にはscalatraとかが、シンプルでおすすめ
59デフォルトの名無しさん:2011/01/15(土) 22:51:22
JavaでWebフレームっていう時点で
無理があったからRubyが成長したわけで

Javaをベースにした言語だとその無理が
改善されるわけではない
60デフォルトの名無しさん:2011/01/16(日) 01:10:00
>>77
Roo
61デフォルトの名無しさん:2011/01/16(日) 01:38:22
JavaでWebフレームワークで無理があるって意味がわからない
そことRoRの飛躍もさっぱり関連性がわからない

なにを言っているのだ?
62デフォルトの名無しさん:2011/01/16(日) 17:50:29
あほが一人混じっています
63デフォルトの名無しさん:2011/01/16(日) 18:14:11
具体的な説明できないやつが一番アホ
64デフォルトの名無しさん:2011/01/16(日) 22:18:59
>>59
HTML や SQL 周辺のシステム境界は Java でもリフレクション使いまくりになるから
動的型付け言語が楽だが、そこに挟まるアプリ層が厚くなれば動的型付け言語なんて
危なくて使っていられなくなるよ。
あんた DB 舐めて表示する程度の Web アプリしか作ったこと無いんじゃね。
65デフォルトの名無しさん:2011/01/17(月) 20:41:00
危ないって変な表現だな
デバッグやリファクタリングが面倒とか言うなら理解出来るが
66デフォルトの名無しさん:2011/01/17(月) 22:04:00
デスマはあなたの健康を損ねます。
67デフォルトの名無しさん:2011/01/18(火) 19:11:47
def x = 1
とか書けることに気づいた。
ひょっとしてdefってvalのシンタックスシュガーなのかな?
関数定義のときだけちょっと変換してくれるだけの。

68デフォルトの名無しさん:2011/01/18(火) 23:44:19
>>67
違う。def x = 1は、呼ばれるたびに1を返すメソッドの定義。
69デフォルトの名無しさん:2011/01/19(水) 00:15:09
>>67
> def x = 1

これは、関数定義で
def x: Int = { return 1; }
の省略されたもの。


> ひょっとしてdefってvalのシンタックスシュガーなのかな?

ちょっと違う。

だけど、あるクラスのフィールド値を参照したい場合、
・フィールド値の参照として書いても、
・getterメソッドを定義して、メソッド呼び出ししても
同じような書式で出来るっていうのはあるよ!

----------
class MyClass( arg1: Int){
var y1 : Int = arg1
def y2 : Int = y1
}

val p = new MyClass( 2 )
println(p.y1) //<-- フィールドの参照
println(p.y2) //<-- getterメソッドで呼び出し
----------
70デフォルトの名無しさん:2011/01/19(水) 01:42:53
71デフォルトの名無しさん:2011/01/19(水) 01:58:27
Scala本3冊もってるけどまだ全然身に付いてない
72デフォルトの名無しさん:2011/01/19(水) 02:13:43
>>69
それだと p.y1 はフィールド参照じゃなくてgetterだし p.y1 = 0 はsetter呼び出しになるよ
private[this]以外のvarは自動でsetter/getter定義される
73デフォルトの名無しさん:2011/01/20(木) 00:04:59
RegexParserで

@から開始する行をコメント行
\nで始まる行はスキップするような以下の例はどうやって
パースするのがいいの?

@
\n
@ test
74デフォルトの名無しさん:2011/01/27(木) 15:17:02
Dean Wampler、Alex Payne著『プログラミングScala』 オライリー・ジャパン
http://www.oreilly.co.jp/books/9784873114811/
2011年01月 発行

誰か買ったか?
とりあえず、コップ本読者が買う必要あるかどうかレポートしてくれ。

75デフォルトの名無しさん:2011/01/29(土) 12:36:18
実践的なノウハウについてもかなりページを割いてるから、買ってもいいんじゃない。
76デフォルトの名無しさん:2011/01/29(土) 14:55:46
Haskellとこれとどっちがつおいの?
77デフォルトの名無しさん:2011/01/29(土) 16:06:08
Haskellがバッハだとすれば、scalaはベートーベンかな。
78デフォルトの名無しさん:2011/01/29(土) 17:24:44
さては、うまいこと言ったつもりだなw
79デフォルトの名無しさん:2011/01/29(土) 17:41:40
Haskellに例えられたのは、どのバッハなのかが……
80デフォルトの名無しさん:2011/01/29(土) 23:31:51
3月の日経ソフトウェアでScalaが紹介されているね。
浅海さんによる紹介で分かりやすくてGood。
でも、見開き4ページ分だけ、、。
連載でやってほしいなあ。。
81デフォルトの名無しさん:2011/01/30(日) 14:13:32
var は variable
val は ?
82デフォルトの名無しさん:2011/01/30(日) 14:16:29
日本人は、rとlの区別が付かない。
83デフォルトの名無しさん:2011/01/30(日) 14:44:58
value
84デフォルトの名無しさん:2011/01/30(日) 14:47:17
>>81
http://dictionary.goo.ne.jp/leaf/je2/68739/m0u/%E5%A4%89%E6%95%B0/
>へんすう【変数】
> 〔数学で〕a variable

http://dictionary.goo.ne.jp/leaf/je2/1064/m0u/%E5%80%A4/
>あたい【値・価】
> 3 〔数学で〕a value
85デフォルトの名無しさん:2011/01/30(日) 15:51:21
代入不可の定数が value なのか
数学的な意味合いとしてはそういうもんなの
86デフォルトの名無しさん:2011/01/30(日) 16:33:58
数学的というよりコンピュータサイエンス的
87デフォルトの名無しさん:2011/01/30(日) 17:35:01
コップ本ゲットしました!!!!!!
88デフォルトの名無しさん:2011/01/30(日) 17:41:01
みなさん開発環境何使ってます?

89デフォルトの名無しさん:2011/01/30(日) 17:42:08
秀丸
90デフォルトの名無しさん:2011/01/30(日) 17:45:23
はげ・・まる・・・?
91デフォルトの名無しさん:2011/01/30(日) 18:25:50
つるぴか
92デフォルトの名無しさん:2011/01/30(日) 18:51:05
オライリーのプログラミングScalaは、わりとおすすめ。
93デフォルトの名無しさん:2011/01/30(日) 19:07:15
コップ本はすごく丁寧に書いてるけど、
プログラミング上級者には冗長だな
94デフォルトの名無しさん:2011/01/31(月) 01:35:11
>>93
後半を読んでもその台詞を吐ける奴って1%以下な気がするが。
95デフォルトの名無しさん:2011/01/31(月) 13:07:13
>>93-94
まさに俺。
あ、99%の方な。
96デフォルトの名無しさん:2011/01/31(月) 17:14:21
これって既知のバグかしら?
locally -> identity にしてもだめで
scala-2.8.0-finalから2.8.1-finalにしたけどやっぱりだめだった

% scalac -version
Scala compiler version 2.8.1.final -- Copyright 2002-2010, LAMP/EPFL
% cat Test.scala
object Test {
{
class Foo(v: Int = 1)
locally { new Foo }
locally { } /* この行を削除するとコンパイルエラーは発生しない. */
}
}
% scalac Test.scala
Exception in thread "main" java.lang.Error: symbol variable Foo$module$1 does not exist in Test.<init>
at scala.tools.nsc.symtab.SymbolTable.abort(SymbolTable.scala:33)
at scala.tools.nsc.backend.icode.GenICode$ICodePhase.scala$tools$nsc$backend$icode$GenICode$ICodePhase$$genLoad(GenICode.scala:843)
at scala.tools.nsc.backend.icode.GenICode$ICodePhase.genLoadArguments(GenICode.scala:1030)
at scala.tools.nsc.backend.icode.GenICode$ICodePhase.scala$tools$nsc$backend$icode$GenICode$ICodePhase$$genLoad(GenICode.scala:742)
...
97デフォルトの名無しさん:2011/02/03(木) 17:32:40
前はsbt使ってwindowsで開発してたんだけど、
OSをlinuxに変更したのでフォルダ毎もってきてsbt上でコンパイルすると
java.io.FileNotFoundExceptionが発生してしまいます。
コンパイル成功させるにはどうしたら良いかどなたか教えて頂けませんでしょうか。

尚sbt-appengine-pluginを使用しています。
sbt自体は立ち上がり、updateも成功しています。
9897:2011/02/03(木) 18:29:57
すみません。解決しました。
ただsbt-appengine-pluginの方をpublishし忘れてただけでした。
99デフォルトの名無しさん:2011/02/03(木) 19:09:23
おめでとう
100デフォルトの名無しさん:2011/02/04(金) 21:59:37
>27
言語仕様書にはあまり大したこと書いてないみたい。
http://www29.atwiki.jp/tmiya/pages/94.html
101デフォルトの名無しさん:2011/02/04(金) 22:27:06
なぜソースに型エラーがあったくらいで、コンパイラ自体が
スタックトレース吐いて落ちるんだ…納得いかん。
102デフォルトの名無しさん:2011/02/04(金) 23:44:49
オライリーのプログラミングScala買った
103デフォルトの名無しさん:2011/02/05(土) 00:00:00
日記じゃないんだから、役に立つレビュー書けよ。
104デフォルトの名無しさん:2011/02/05(土) 00:41:32
まだ3ページしか読んでないからちょっと待てよ
105デフォルトの名無しさん:2011/02/05(土) 00:48:08
>>102
1章しか読んでないけど、日本語は問題ないっぽい
106デフォルトの名無しさん:2011/02/05(土) 08:28:45
case classを継承するとdeprecatedだと言われるんだけど、何が駄目なのかな?

case class C()
case class D() extends D

warning: there were deprecation warnings; re-run with -deprecation for details
defined class D
107デフォルトの名無しさん:2011/02/05(土) 20:08:19
代数データ型が欲しいときは、case classの継承でなく
extractorを使えということらしい。
108デフォルトの名無しさん:2011/02/08(火) 02:13:11
Lift と JRuby の統合 - Ruby と Scala 間を橋渡し
http://www.infoq.com/jp/news/2011/02/lift-jruby
109デフォルトの名無しさん:2011/02/09(水) 01:22:24
JじゃないRuby(Rails)はプラットフォームがどれもクソすぎて使う気にならない。
110デフォルトの名無しさん:2011/02/09(水) 15:09:52
プラットフォームってなにさ。
111デフォルトの名無しさん:2011/02/09(水) 21:34:50
112デフォルトの名無しさん:2011/02/10(木) 02:15:44
>>109
おまえ意味わかってねえだろ。ゴミが
113デフォルトの名無しさん:2011/02/10(木) 23:24:37
implicitって何て発音するんですか?
114デフォルトの名無しさん:2011/02/11(金) 00:16:15
いんぷりしっと
115デフォルトの名無しさん:2011/02/11(金) 00:21:13
116デフォルトの名無しさん:2011/02/11(金) 00:35:15
>>108

これって、Scalaにとっては逆風だなあ、、、。

これって、、、
これまで David Pollak氏は、WebフレームワークであるLiftを
Lift in Scala で作ってきた。
David氏いわく”Liftは現在入手可能な最高の Web フレームワーク”で
あるにもかかわらず、Scalaがプログラマの間での普及度がいまいちなことから
メジャーな言語であるRubyで開発することに切り替えたってこと?
しかも、すでに、Liftの大部分はJRuby上で動作するまで来ている?
つまり、今後は、Lift in JRuby をメインに開発していくってこと?


Liftは、Scalaのキラーアプリになると思っていたんだがなあ、、、。
117116:2011/02/11(金) 01:01:36
>>116

でも、David氏は完全にScalaを捨てたってわけでもないんだな。
今はとにかくLift自体を普及させることに尽力をつくすってことか。

JRubyが拡大すれば、いずれ、ScalaへのBridgeとなるってことか。
118デフォルトの名無しさん:2011/02/11(金) 03:47:05
どっかのインタビューでRubyは結局テストコード書きまくるハメになって糞だと気づいたっていってたし
119デフォルトの名無しさん:2011/02/11(金) 05:43:29
テストコード書かないといけないのはどの言語でも同じだ
120デフォルトの名無しさん:2011/02/11(金) 05:48:32
必要なテストの数が多いか少ないかは大いに問題なんじゃないの
121デフォルトの名無しさん:2011/02/11(金) 08:35:09
>>118
http://www.infoq.com/jp/news/2008/03/liftweb
>わたしはこれまで Rails による開発を 18 カ月、Java による開発を 10 年経験してきました。
>Rails はウェブ開発に新しい風を吹き込みました。よく使うタスクはコマンド一発で実行することができます。
>実にすばらしい。しかし、私は気が付いてしまいました。Ruby の動的型付けは多くのエラーを引きおこすことに。
>そして、安心してデプロイするためには 95% ものテストカバレッジを達成しなければいけないことに。
>95% のテストカバレッジを得ることの代償として、私の書いたコードは(テストコードも含めて) Java で書いたものと
>同等のサイズにまでふくれあがってしまいました。
122デフォルトの名無しさん:2011/02/11(金) 08:43:22
Rubyで型チェックとか悪夢だからな
Scalaはコンパイル通すたびにもっと美しい型制約がないか試したくなる
sbtを裏で走らせておけば脳汁出まくり状態だよ〜
123デフォルトの名無しさん:2011/02/11(金) 12:45:17
静的型付け言語は後でやらなきゃいけないことを先付けで強制する。
動的型付け言語はそれをすべて後回しにする。
テストやメンテを無視して良いなら、とりあえず動く物を作るには動的型付け言語が速くて当たり前。
だがそれを持って生産性が高いなどと言ってる奴を見るとアホかと思う。
124デフォルトの名無しさん:2011/02/11(金) 13:04:35
JVM使っている時点で将来性が皆無だよなぁ
Clayみたいにllvm使わないと今後は生き残れないねぇ
125デフォルトの名無しさん:2011/02/11(金) 13:34:56
今のところ中間言語の仮想マシンは JVM 一択。安定性もデバッグも
プロファイリングも、大手各社が金を投入しまくっただけはある。
将来的に載せ替えの必要があるならコンパイラレベルで開発すれば
よいだけの話だな。
126デフォルトの名無しさん:2011/02/11(金) 17:41:32
>>106
ソースコード間違っているぞ(w

case classの継承は、2.8でdeprecatedになった。詳細は、プログラミングScalaにあったはず。
127デフォルトの名無しさん:2011/02/11(金) 19:37:33
ScalaはJVMだからダメっていうやつはJavaの知識がないから手だしにくいってだけだろ
128デフォルトの名無しさん:2011/02/11(金) 19:44:21
この言語は今どういうところで使われているです?
129デフォルトの名無しさん:2011/02/11(金) 19:52:02
ヒゥイッヒヒー
130デフォルトの名無しさん:2011/02/11(金) 20:04:11
TwitterのバックエンドがRubyからScalaに置き換えられたり、
位置情報系サービスのForsqueareは全面Liftで作られてたり
日本だとGMOの求人に書いてたけど、バックエンド担当に2人Scalaエンジニアがいるらしい
131デフォルトの名無しさん:2011/02/11(金) 20:29:47
Liftのサイトを訳してるとこが有ったので驚いた。
http://oss.infoscience.co.jp/scala/liftweb.net/index.html
132デフォルトの名無しさん:2011/02/11(金) 20:35:12
やっぱコップ本はダメだな。
あれは1冊目には向かない。
Scalaの書き方がなんとなくわかっていて、
より深い理解をするための本だね。

1冊目はオライリーがよさげ。
133デフォルトの名無しさん:2011/02/11(金) 21:20:34
一冊目としては、「Scalaで学ぶ関数脳入門」がお勧め。
とにかく、最初に、関数型言語とかScalaの特徴をつかむのに良い。

1.5冊目として、「ボクらのScala」 も読みやすいのでお勧め。


個人的には、海外製の本は、言い回しがあんまり好きじゃない。
なんというか、章のはじめのあいさつ文みたいな書き出し、とか、
いまいち的を得ていない例題とか、、、読んでいてテンポが狂う。

134デフォルトの名無しさん:2011/02/11(金) 22:39:52
お勧め本に関しては同意見だが、海外本はああいうもんなんだから仕方ないw
135デフォルトの名無しさん:2011/02/11(金) 23:07:51
向こうの人はなぜがみんなダグラス・アダムス好きだよねw
136デフォルトの名無しさん:2011/02/12(土) 06:41:34
>>131
なんか聞いたことあるなとおもったら、OpenSSLやrsyncなどの翻訳を提供してた会社だった。

http://www.google.co.jp/search?hl=ja&q=site%3Awww.infoscience.co.jp%2Ftechnical%2F
http://oss.infoscience.co.jp/
137デフォルトの名無しさん:2011/02/12(土) 07:38:40
もっと簡単な入門書が必要なのかもね。
138デフォルトの名無しさん:2011/02/12(土) 10:46:34
コップ本すら解らない連中なんて
勉強する資格ないだろ

139613:2011/02/12(土) 12:37:17
>>138
140デフォルトの名無しさん:2011/02/12(土) 21:47:54
確かに将来的にはともかく

現段階では、コップ本で理解できないようでは
環境構築やライブラリ周りで挫折すると思う
仕様もまだ安定していないし……
141デフォルトの名無しさん:2011/02/12(土) 22:07:07
もう2.9の話が結構出てるからな
付いてこれないやつはどんどん置いてかれるぞ
142デフォルトの名無しさん:2011/02/12(土) 22:19:23
早く枯れろ
143デフォルトの名無しさん:2011/02/12(土) 23:14:37
何か手頃な練習問題のページないですかね。回答例も見られると良いのですが
144デフォルトの名無しさん:2011/02/13(日) 01:22:29
>143
S-99 Scala Problemsでググれ
145デフォルトの名無しさん:2011/02/13(日) 02:01:02
Thanks.

S-99: Ninety-Nine Scala Problems
ttp://aperiodic.net/phil/scala/s-99/
146デフォルトの名無しさん:2011/02/13(日) 02:56:00
すげえなscala、宣伝文句がやたらと興味を刺激してくる
147デフォルトの名無しさん:2011/02/13(日) 03:38:12
148デフォルトの名無しさん:2011/02/13(日) 03:46:57
日本人はクレイジーだな
149デフォルトの名無しさん:2011/02/13(日) 03:54:36
>>147
いいね
150デフォルトの名無しさん:2011/02/13(日) 04:11:34
version2.9は、2月にはもうRCがでるらしい
151デフォルトの名無しさん:2011/02/13(日) 04:20:59
Scala 2.9の変更点について、2.9行でまとめてくれ。
152デフォルトの名無しさん:2011/02/13(日) 04:59:19
153デフォルトの名無しさん:2011/02/13(日) 05:01:37
Parallel Collectionsがメインかなぁ
154デフォルトの名無しさん:2011/02/13(日) 10:21:27
scala.collection.mutable.SynchronizedMapとどう違うの?
Lock-free/Wait-freeなのかな?
155デフォルトの名無しさん:2011/02/13(日) 11:19:57
果てしなくメソッドが増え続けるコレクションクラスだが、順列・組合せが入るのは
便利だな。
156デフォルトの名無しさん:2011/02/13(日) 13:30:37
>>154
for(i <- (1 to 10).par) process(i)

これでprocess(i)が並列実行される
157デフォルトの名無しさん:2011/02/13(日) 14:11:38
サンクス
なるほどActorつくらなくても手軽に並列化できるんですね
関数型の本領発揮ってかんじ
158デフォルトの名無しさん:2011/02/13(日) 17:13:10
いや、C#で既に導入済だし。
159デフォルトの名無しさん:2011/02/13(日) 17:38:15
scala-clもこんな感じだったな
160デフォルトの名無しさん:2011/02/13(日) 19:21:41
これってモジュールimportしたらスレッドプールが作成されるのかな?
>>158
自分はErlangをイメージしました
161デフォルトの名無しさん:2011/02/13(日) 19:24:59
MPIのパクリだろ
162デフォルトの名無しさん:2011/02/13(日) 19:31:56
Clojureじゃないの?
163デフォルトの名無しさん:2011/02/13(日) 21:24:13
Parallel Collection自体はどの言語がオリジナルとかはなかったはずだが。
Java7のラムダ導入でもParallel Collectionの実現が課題になって記憶がある。


それはさておきオダタンの論文ドゾー

http://infoscience.epfl.ch/record/150220/files/pc.pdf
164デフォルトの名無しさん:2011/02/13(日) 21:36:42
>>160
5分くらいソース読んだ感じだと、importしただけどはおそらくスレッドプールは作られないと思う。

src/library/scala/collection/parallel/Tasks.scala あたりを見てみたが、Parallel Collectionでforeachなどの
高階関数が評価されるタイミングでobject ThreadPoolTasksが評価されてシングルトンインスタンスが
生成され、ここで初めてスレッドプールが出来ると予想される。

間違ってたらゴメンナ
165デフォルトの名無しさん:2011/02/13(日) 21:46:30
Scalaの型関係の詳細ってどこ読むのがベスト?
166デフォルトの名無しさん:2011/02/13(日) 21:52:04
>164
え、じゃあ、初回は遅いじゃん。
167デフォルトの名無しさん:2011/02/13(日) 21:56:59
>165
コップ本かバク本
168デフォルトの名無しさん:2011/02/13(日) 22:08:35
>>166
ただの想像に過ぎないけど、

・import した時点で幾つスレッドプールが必要になるかは分からない
・import が重いのと初回が重いのとどちらが良いとも言えない
・初回が重くとも loop の回数が大きければ全体として pay する
・初回が重くとも一回の loop 毎の処理が重ければ全体として pay する
・当たり前だけど、損益分岐点を越えられない場合は使わないでね

みたいな感じなんじゃないかなあ
169デフォルトの名無しさん:2011/02/13(日) 22:19:37
>>164
まぁ初回にThreadPool生成のコストを払う戦略になってるのは確かだな。eagerではなくlazyに
やってるんだろう。

それがイヤで事前にThreadPool用意したいなら、scala.collection.parallel.ThreadPoolTasksを
自分で先にどこかで評価しておけば、先にThreadPool生成のコストを支払っておくことができる。

170デフォルトの名無しさん:2011/02/13(日) 22:21:03
importってJavaと同じで、単にコンパイル時の名前の解決じゃないの?
それとも違う意味で言ってる?
なんか他の言語の似たような機能と勘違いしてる人がいるきがする
171デフォルトの名無しさん:2011/02/13(日) 22:24:12
>>170
Java でも class がロードされる時の処理を記述出来なかったっけ?
172デフォルトの名無しさん:2011/02/13(日) 22:33:36
>>171
sttic initializerのことだな。だがアレはあくまでクラスがクラスローダでロードされた時点で
実行される処理。

import文自体は、171の言うとおり単なる名前解決でしかないはず。

Parallel Collectionなクラスをimportしてるクラスがロードされたとして、
そこでimport先のクラスも一緒にロードされるとは限らない、んじゃなかったっけ?
173デフォルトの名無しさん:2011/02/13(日) 22:40:47
import したクラスがロードされなかったら、インスタンスを作ったり
クラス変数やクラスメソッドを利用する時に困るんじゃない?

自分はそういう理解だったけど、間違ってたらご免。
174デフォルトの名無しさん:2011/02/13(日) 22:52:57
importせずに使ってるクラスはロードされない、って理解なん?
175デフォルトの名無しさん:2011/02/13(日) 22:54:59
継承してる先のクラスとは一緒にロードされるけど、それ以外のクラスは必要に応じて
(そのクラスを必要とする式の評価のタイミングで)Lazyに行われる、はず。

Java仮想マシン仕様のこの辺に書いてある。
http://java.sun.com/docs/books/jvms/second_edition/html/Concepts.doc.html#19175

そういうわけで、static fieldなどに書いてあるクラスは(ほぼ)同時にロードされるが、
インスタンスメソッド内からしか参照されないクラスは、あとでロードされる。
176デフォルトの名無しさん:2011/02/13(日) 22:59:21
なるほど、サンクス
177デフォルトの名無しさん:2011/02/14(月) 22:05:58
http://www.infoq.com/jp/news/2011/02/lift-jruby

私は Scala が好きです。Scala は私のお気に入りのプログラミング言語なのです。
これまで数多くの開発組織で,Scala に関する話をしてきました。
しかしその後の Scala の普及状況を見たとき,私はこの言語が Ruby や,
あるいは Python の採用レベルにさえも達しそうもないことに気付いたのです。
178デフォルトの名無しさん:2011/02/14(月) 23:25:12
>>177
http://www.infoq.com/news/2011/02/lift-jruby
>I love Scala and it's my favorite programming language.
>After talking to a lot of development organizations and watching Scala's adoption rate,
>I've realized that Scala is unlikely to have Ruby or even Python-level adoption
>in the next few years.

原文の"in the next few years"が翻訳されていません。
Lift作者はScalaが普及しない事に気付いたとは言っていません。
Scalaが普及するのに時間がかかる事に気付いたと言っています。
179デフォルトの名無しさん:2011/02/14(月) 23:31:16
時間を掛ければ採用されるとも書いていない
180デフォルトの名無しさん:2011/02/14(月) 23:39:34
Scalaを実際に使ってみて、どんな点が良かったです?
181デフォルトの名無しさん:2011/02/15(火) 00:15:34
Javaのスタックトレースを読み慣れるようになった点
182デフォルトの名無しさん:2011/02/15(火) 02:20:27
転職出来た点
183デフォルトの名無しさん:2011/02/15(火) 07:30:43
こりゃLiftはRubyに降伏宣言したのと
同義だよねー

Scalaに未来がないから見切りつけたのか
184デフォルトの名無しさん:2011/02/15(火) 09:17:14
>>183
Scalaの未来については下記記事をどうぞ。
Lift作者も当然これを知っているでしょう。

プログラミング言語Scalaの開発チーム、EUより230万ユーロの研究開発費を獲得
http://sourceforge.jp/magazine/11/01/18/0523203
185デフォルトの名無しさん:2011/02/15(火) 14:31:29
JVM汎用では無く、JRuby専用APIってなんだろうとおもったら、
Javaに、ScalaのobjectなどJavaと整合性が取れない部分についてJRuby拡張して合わせるのか。

JRubyで作ったScala依存プログラムがどれだけふえるんかね?
186デフォルトの名無しさん:2011/02/15(火) 19:56:34
しょうもないことだけど、fewやlittleは冠詞を付ける付けないで
意味が変わるって中学の頃習ったけど、
冠詞を付けないfew yearsって結構用例でてくるよな。
この場合もaを付けないと、意味が変わってるんだろうか。
187デフォルトの名無しさん:2011/02/15(火) 22:09:53
ちょっとしたものを作る時や開発段階ではコンパイルしないで実行
リリースする時はコンパイルしたものを配備
ってことをコード等を変更せずに出来るです?
188デフォルトの名無しさん:2011/02/15(火) 22:55:05
Scalaは基本的にコンパイル言語なんで無理
189デフォルトの名無しさん:2011/02/15(火) 23:03:26
>>184
EUじゃこれ受託するところって
未踏(笑)と同じ扱いだからな

190デフォルトの名無しさん:2011/02/15(火) 23:09:53
Scalaインタープリタってやつ使えないんです?
191デフォルトの名無しさん:2011/02/15(火) 23:31:27
>>189
未踏で2億円も出ねーよw
192デフォルトの名無しさん:2011/02/15(火) 23:42:19
コンパイルして実行してるだけじゃないの
193デフォルトの名無しさん:2011/02/16(水) 00:03:36
言語系の開発で2億もらっても大したことないよね
Javaは2000億円以上つぎ込んでるし
llvmだって100億ぐらいつぎ込んでる
194デフォルトの名無しさん:2011/02/16(水) 00:06:12
VMから作るプロジェクトとは比較にならんだろ
195デフォルトの名無しさん:2011/02/16(水) 01:52:40
型を書くのってそんなに大変なことなんだろうか
196デフォルトの名無しさん:2011/02/16(水) 04:05:02
>>187
意図と違うかもしれないが、

Getting Started with Scala
http://www.scala-lang.org/node/166

「Script it !」のように、REPLに打ち込むのとおなじように、ファイル読み込みして実行出来る。

-- HelloWorld.scala --
object HelloWorld {
def main(args: Array[String]) {
println("Hello, world! " + args.toList)
}
}
HelloWorld.main(args)

$ scala HelloWorld.scala foo bar
コンパイルするとき一番下の行が邪魔でコンパイル出来ないし、
スクリプトなら、「println("Hello, world! " + args.toList)」だけでも実行できるから
なんともアンバランスだけど。
197デフォルトの名無しさん:2011/02/16(水) 04:52:52
最後の一行抜けば、
scala -i HelloWorld.scala -e "HelloWorld.main(args)" a b
で実行できるし、コンパイル後
scala HelloWorld a b
で実行できるけど、カッコ悪いな。
198デフォルトの名無しさん:2011/02/16(水) 19:59:38
>>196
あしゃしゃす
コード変更しないといけないのは厳しいですね

まあコンパイルなんてそんな面倒じゃないか
199デフォルトの名無しさん:2011/02/17(木) 01:32:49
scalaコマンドに-i付けるとプリロードになる。
この時、コンパイルしてtmpディレクトリにクラスファイル出来るから、結局コンパイルしてるREPLに移行する。
そして、-eは、文字列をevalしてREPL終了する

単に、scalaソースだけ引数にする場合はREPLで解釈して終了する。
200デフォルトの名無しさん:2011/02/17(木) 01:37:08
>結局コンパイルしてるREPLに移行する。
コンパイルして、読み込んで、REPLに移行する

うはー
201デフォルトの名無しさん:2011/02/17(木) 01:49:43
オライリー本いいね
↓こういう素朴な疑問が1章に書かれてあーなるほどなーって思った

なんで左が変数名で右が型なのか
⇒コンパイラが構文解析しやすいから

ジェネリクスみたいな型指定でなんで <> ではなく [] になったのか
⇒ < とかは不等号としてメソッド名にそのままつけることがよくあるため(角カッコはメソッド名として使えない)
202デフォルトの名無しさん:2011/02/17(木) 21:04:36
そうそう、コンパイラが…て説明あるね
203デフォルトの名無しさん:2011/02/17(木) 22:33:40
コンパイラの都合でできてる言語ってのは
糞の塊
204デフォルトの名無しさん:2011/02/17(木) 22:35:03
Scalaは、Javaの都合でできすぎ。
205デフォルトの名無しさん:2011/02/17(木) 22:37:37
それでむしろ利便性が増してるんだからいいことずくめ。
206デフォルトの名無しさん:2011/02/17(木) 23:09:31
いや、LLVM版Scalaを目指すべき。
207デフォルトの名無しさん:2011/02/17(木) 23:16:21
Delphiはコンパイラよりだったとおもうが、明快だったのでは?
208デフォルトの名無しさん:2011/02/17(木) 23:21:45
C言語とかがコンパイラの都合だらけでかつ使いにくい言語なのは事実だが、
これでも時代は下って、技術と学問は進歩してるんだし。
209デフォルトの名無しさん:2011/02/17(木) 23:42:55
コンパイラ寄りっていったらLispが最強だよな
エディタでAST書いてるもんだもんな
210デフォルトの名無しさん:2011/02/17(木) 23:57:47
有名なのはLL(1)で構文解析できるようにしたというPascalだよな
ああいうのは無駄だと思うけど、C++のテンプレートの入れ子で出る
「>>」がシフトと区別つかないってのも有名な話で、
それをわかってていつまでも引きずる必要もないわな
211デフォルトの名無しさん:2011/02/18(金) 00:04:37
仮に左に型右に変数名をおいたらvalとかvarの場所はどこになるん?
val Int i = 10
みたいになっちゃうの?
212デフォルトの名無しさん:2011/02/18(金) 01:37:56
Javaと変わらんだろ
final int i = 0
213デフォルトの名無しさん:2011/02/18(金) 01:52:20
2.8で入った、@specializedだけど、普通に
val m = new mutable.HashMap[Int, Int]()
みたいに使った時は、specializedなHashMapが使われるの?
それとも、この宣言のどっかに@specializedを埋め込まないとダメ?
214デフォルトの名無しさん:2011/02/18(金) 06:14:20
Scala2.8では、タプルや一部の関数にしか@specializedは対応していなくて、HashMapは未対応。
215デフォルトの名無しさん:2011/02/18(金) 08:28:40
>>212
ってことはval相当のを書くほうがfinal付ける分タイプ数多くなるんか、それはやだな(var相当のほうがタイプ数多くなるって言うなら別にいいけど)
javaと同じだと括弧なし関数どうやって書くのかワカンネーし、書き比べるとscalaのほうがまとまってる感じするわー
scala
val i: Int = 10
var i: Int = 10
def i: Int = 10
def twice(i: Int): Int = i * 2

java
final int i = 10
int i = 10
?
int twice(int i) = i * 2

型推論させると
scala
val i = 10
var i = 10
def i = 10
def twice(i: Int) = i * 2

java
final i = 10
i = 10
?
twice(int i) = i * 2
216デフォルトの名無しさん:2011/02/18(金) 09:30:32
このスレで誰かが進めてくれた
「ボクらのScala」買ってみたよ。
初学にはコップ本よりこっちの方が断然いいね。
(コップ本はscalaの言語仕様を一通り知ってから読む本だと思う)

まあ、説明の順番とか、どうでもいいことにページ数割いてあったりとかは
不満は残るが。
あとはページ数を1.5倍にして、もう少し詳細に突っ込んで欲しい気もした。

まあ、まだ2時間しか読んでないけど、こんな感想でした。
217デフォルトの名無しさん:2011/02/18(金) 15:49:13
>214
あー、そうなんだ。自分で定義するクラスしか駄目なのかな。
218デフォルトの名無しさん:2011/02/19(土) 02:42:15
型推論が不思議で寝不足になりそうです;;

val randomVariables = for (i <- 1 to 100) yield {
if (i < 10) {
r.nextInt(10000)
} else {
r.nextDouble()
}
}
219デフォルトの名無しさん:2011/02/19(土) 03:37:16
>>217

Javaのプリミティブをちゃんと勉強したほうがいいと思う
220デフォルトの名無しさん:2011/02/19(土) 12:28:56
Akkaって何なの?
教えて?
221デフォルトの名無しさん:2011/02/19(土) 17:15:53
>>220

actorとかSTMとかその他いろいろ入ってるライブラリ
222デフォルトの名無しさん:2011/02/19(土) 18:42:21
Scala IO 0.1 releasedなわけだが、何か感想ないの?
223デフォルトの名無しさん:2011/02/19(土) 20:19:28.35
>>218
自分が思ったのと違う結果だった
if(true) 1 else 1.0
の型がDoubleになるんだなAnyValになるのかと思った
224デフォルトの名無しさん:2011/02/19(土) 20:38:46.01
暗黙の型変換定義の見え方で変わってくるのかな
225デフォルトの名無しさん:2011/02/19(土) 23:10:28.73
>>220
乱雑に、書いてみる。
元々は、ErlangのOTPをscalaに、移植しようとしたことから始まった。
ErlangのOTPは耐障害性フレームワークとその他のユーティリティで構成されている。
http://erlang.shibu.jp/design_principles/overview.htmlScala
下記のScala OTPを中心に色々ユーティリティが元になって、Akkaが出来ている。
http://jonasboner.com/2008/12/11/real-world-scala-fault-tolerant-concurrent-asynchronous-components.html
ちなみに、Akka作ってるひとは、JavaのTeracottaを作った人。

OHPに機能がまとめてあるので、Erlangなどで同じ機能の日本語資料をあたれば、なんの機能があるかわかると思う。
http://akka.io/
226デフォルトの名無しさん:2011/02/19(土) 23:24:23.48
一個目のリンクがおかしい
http://erlang.shibu.jp/design_principles/overview.html
227デフォルトの名無しさん:2011/02/20(日) 01:25:47.81
>>225
そうなんですか。
OTPはErlang本見ればわかるのでちょっとあとで舐めてみます。

ちなみに、Akkaの耐障害性ってどうやって実現してるんですかね?
TeracottaとEhcacheを内部で利用してゴニョゴニョ
してるのかなぁ。商用サポート前提のコードじゃなければいいんだけど


228デフォルトの名無しさん:2011/02/20(日) 21:29:38.05
Scalaで、ストリーム操作する時ってやっぱJavaの使うんですかね?
229デフォルトの名無しさん:2011/02/21(月) 10:32:44.25
おれも気になる
230デフォルトの名無しさん:2011/02/21(月) 18:48:00.61
>>227
OTPはたしかにPragmatic/オーム社ので結構分かりやすく書いてあった。(別件だが、bpstudyでMnesiaの部分はオライリーで本来のアクセス方法が載るはずと言ってた)

Akka 1.1以降で、TeracottaやEhcacheみたいに数百GBクラスの単一オブジェクト?に関するクラスタリングの商用プラグインを出して、そちらのサポートで作者は仕事するつもりらしい。あとは差別化でおなじみな監視や分析系のGUIもそうなるかも。

ただし、通常の耐障害性のある分散はOTPと同じ仕組みなので問題ないと思う。
監視担当のアクターと実行担当のアクターで耐障害性上げる仕組みや、起動中の変更反映など。STMは1.1で作り直しみたいだ。

日本語版来てた
http://www.infoq.com/jp/news/2011/02/akka10
231デフォルトの名無しさん:2011/02/21(月) 18:49:55.76
訂正: infoqの記事の日本語翻訳
232デフォルトの名無しさん:2011/02/21(月) 20:48:16.17
>228
Scala IO 0.01を使うんじゃないの?
233デフォルトの名無しさん:2011/02/21(月) 21:10:01.04
0.01とかそんなおっかないもの使いたくない
234デフォルトの名無しさん:2011/02/21(月) 21:17:21.51
Scalaz にはIO入ってないんだっけ?
標準ライブラリを補完しよう的なプロジェクトは幾つか有るが、
誰かまとめて欲しい。
235デフォルトの名無しさん:2011/02/22(火) 03:13:35.26
https://github.com/scala-incubator/scala-io

IOについては、これがそのうち標準に入る予定らしい
だから逆に既存のIOのAPIは開発止まってるという感じ
236デフォルトの名無しさん:2011/02/22(火) 11:01:44.50
先週のscala-tohokuがそのネタでしたね
237デフォルトの名無しさん:2011/02/22(火) 22:32:52.65
>>230
Teracotta商法かぁ最悪な展開になりそうだな。

細かいバグ以外オープン阪はサポートしない
ってスタンス継承されちゃうのか。
Teracotta高い割にバグ対応とか全然してくれないし
238デフォルトの名無しさん:2011/02/22(火) 22:42:48.55
Stringをパターンマッチして

"abcde" match {
 case "ab" :: s :: "e" => println(s)
 case _ =>
}

的なことがしたいんだけど、素直に正規表現使え?
239デフォルトの名無しさん:2011/02/23(水) 00:40:01.88
まあそのためにあるんだし
240デフォルトの名無しさん:2011/02/23(水) 01:42:25.03
正規表現のパターンマッチは一回変数に入れなきゃいけないのがダサいのよね
241デフォルトの名無しさん:2011/02/23(水) 01:51:16.98
自作のExtractor書けば?
242デフォルトの名無しさん:2011/02/24(木) 23:01:39.41
IDE使いづらいからscalaからJavaに戻したってblog書く
そしたら小田好先生が直接コメントして、2.9リーリスと同時にeclipseで対応させたやつ出すから、今作ってるから
的な話になってるらしい。面白い
http://alarmingdevelopment.org/?p=562
243デフォルトの名無しさん:2011/02/24(木) 23:11:17.00
Scala使うなら、IntelliJ IDEAかせめてNetBeans使えよ。
244デフォルトの名無しさん:2011/02/25(金) 00:44:18.99
確かにeclipse pluginのもっさり感はひどいね。
コンパイルも遅いの?
245デフォルトの名無しさん:2011/02/25(金) 08:27:22.18
俺のPCだとそんなリッチな統合開発環境、起動するだけで5分はかかるな
246デフォルトの名無しさん:2011/02/25(金) 12:44:04.51
ensimeで
247デフォルトの名無しさん:2011/02/25(金) 13:01:18.70
今そこ
248デフォルトの名無しさん:2011/02/25(金) 20:50:20.42
>>242

小田好先生って誰だ?って思ったら、Martin Odersky教授のことか、、。


今時の言語は、開発のスピードが早さも重要だが、
Scalaの本体とか周辺ライブラリの開発者のコミュニティーってどれくらいの規模なんだろう。

まさか、ScalaってOdersky先生一人で開発している???わけないか。
249デフォルトの名無しさん:2011/02/25(金) 21:37:31.08
EUから潤沢な資金を得ているし、フルタイムで学生や優秀な人を雇って開発してるし、会社も作ったし
すでにBertrand Mayer(Eiffel開発者)を追い越した感がある(俺調べ)
250デフォルトの名無しさん:2011/02/25(金) 22:20:46.93
その優秀な人材を処理系の品質向上に避けないものか。
せめて、型エラーで落ちない程度でも。
251デフォルトの名無しさん:2011/02/25(金) 23:49:07.66
周辺ライブラリは、Javaのものですごく完成度高いものがあると、一から作り直そうとしないから、なんかまぁ・・・
twitterがgithubで公開してるものはいっぱいあるけど
https://github.com/twitter
細かいものが多数あるから、コードリーディングにはいいかもしれない
あまり変態的なことしてないし

252デフォルトの名無しさん:2011/02/25(金) 23:51:33.15
>251
たくさんありすぎて、よく分からんから、何か紹介してくれ。
253デフォルトの名無しさん:2011/02/25(金) 23:53:55.20
>>249
学生とかいるの?
odersky先生の大学の生徒とか?
254デフォルトの名無しさん:2011/02/25(金) 23:58:51.35
255デフォルトの名無しさん:2011/02/26(土) 00:11:32.83
ライブラリじゃないけど、 Scalalab に期待。

http://code.google.com/p/scalalab/

Scalalabは、名前のとおり、Matlabを意識しているが、
Scalaの文法で、行列とか信号処理とかグラフ表示とかが出来るもの。

今流行りの 集合知プログラミングとか認識とかのアルゴリズムの確認に
良いかも。

ちょっと試した感じは、結構気合を入れて作られている様子。
かなり頻繁にアップデートされているみたいなので期待大。
256デフォルトの名無しさん:2011/02/26(土) 08:59:52.80
おおーScalaLabこりゃあ目が離せませんな

一方でR言語ラッパーいまひとつもりあがらねー

https://github.com/hughleat/scala2R
R と Java R Interface を使ったthinラッパー

https://github.com/ScalaR/ScalaR
Rのコンソール実行環境をScalaで実装しましたよってものらしい

とにかく R って検索しづれーのはなんとかならんか
257デフォルトの名無しさん:2011/02/26(土) 16:44:06.76
Scalaにはnamed letみたいなのはないの?
258デフォルトの名無しさん:2011/02/26(土) 20:26:01.99
誰かエロい人、教えてください。

scalaの型推論のうち単純なもの
例えば
val str="aaa"
みたいなのは、あまり意味を感じない。
例えば、java ならeclipseを使っていれば、ctrl 1
で勝手に型推論される。

逆に
val tmp=list.get(1);
みたいなってしまうと、可読性が落ちる気がするんだけど、
そこら辺って、どういう風に考えられてるんですか?

あと、varとvalを使い分ける意味は宣言的(ヒューマンエラーを防ぐ)
意味しかないのかな?
例えば、valを使うと高速化ができるとか
valを使った時にだけ、使える機能があるとか。

わかる人いたら教えてください。
259デフォルトの名無しさん:2011/02/26(土) 21:26:20.49
IDE使って補完できても、

HogeFugaPiyo obj = new HogeFugaPiyo()

って書いてたら、"コードを読むときに"冗長・・・と感じるようになる。
人間が一度に視界に入れることの可能な情報量って限界があるだろうから。
まぁscalaに慣れれば。
その"慣れる"までの期間に個人差はあるだろうが
260デフォルトの名無しさん:2011/02/26(土) 21:37:41.39
list.get(1)を一時変数に入れるって時点でダサイ
可読性を落としている原因はlistという変数名だと考えるね
261デフォルトの名無しさん:2011/02/26(土) 21:40:13.57
Scalaはクラスもメソッドも変数も1文字が
規約だったような?
262デフォルトの名無しさん:2011/02/26(土) 21:42:57.09
>>259
確かにそうだね。

>>260
>可読性を落としている原因はlistという変数名だと考えるね
変数名に型名入れるくらいなら、型宣言した方がよくないか?
263デフォルトの名無しさん:2011/02/26(土) 21:57:07.86
変数名にはその変数が必要とされている意味を名前にしている。
単数/複数に気を付けるくらいだなー

case class Person(name: String)
val customers = List(Person("Tanaka"), Person("Yamada"))
val firstUser = customers(0)
264デフォルトの名無しさん:2011/02/26(土) 21:58:13.09
まあ可読性高いと思うやり方でいいんじゃないかな
scalaには選べる自由があるよ
265デフォルトの名無しさん:2011/02/26(土) 22:33:52.19
>>264
そうだとすると、varをデフォルトにして、valの時だけ
finalってつける方が良い気がしちゃう。
266デフォルトの名無しさん:2011/02/26(土) 23:07:19.27
var使うとコンパイルエラーにしてくれるコンパイラプラグインあるよ( ̄▽ ̄)
267デフォルトの名無しさん:2011/02/26(土) 23:10:57.14
世間ではできるだけval使ってvarは最期まで使うなよみたいに言われてるけど
俺的にvalとvarはタイプ数おんなじでどっちが書きやすいということもなくなんていうか対等な感じがしていいわ
scalaっていう言語の性格が出てると思う
268デフォルトの名無しさん:2011/02/26(土) 23:30:06.56
>267
あんた、scala向いてないわ。
269デフォルトの名無しさん:2011/02/27(日) 00:21:26.06
新しい概念とそれを実現する方法の説明が分離していないのが学習の枷になる。
一つ覚えた事を、次に覚える事の足がかりに出来ない。
結局の所、学習者は学習する前にまず学習の仕方を(自力で)修得しなければならない。
以前から類似の物を使っていれば簡単だろうが、初学者には厳しい学習曲線にならざるを得ない。
まあ草の根で開発されたようなソフトウェアにはよくあることだが。
270デフォルトの名無しさん:2011/02/27(日) 01:20:13.85
>>267
関数型言語
271デフォルトの名無しさん:2011/02/27(日) 02:36:02.39
はやく2.9でないかなぁ
272デフォルトの名無しさん:2011/02/27(日) 03:21:27.76
>>242
eclipseプラグインも一緒に出すって言ってるけど、そっちはベータ版だからな
273デフォルトの名無しさん:2011/02/27(日) 09:51:21.39
2.9は、下位互換性は保たれるのかねえ。バージョンアップが激しすぎるのもどうかと思うけど・・・。
274デフォルトの名無しさん:2011/02/27(日) 11:08:59.38
Scala 2.9が、Scala 9になりますだったら、それ以降安定しそう。
275デフォルトの名無しさん:2011/02/27(日) 14:39:25.48
2.7.7から2.8.0のときよりは、互換性たもたれそう
276毛の生えたブリーフ:2011/02/27(日) 15:28:32.50
私の股間のオブジェクトはあらゆる問題に対してスケーラビリティ
なんだけど、Scala勉強しようかな。

「Scalaで学ぶ関数脳入門」おもしろいです。いま、5章め読書中。
277デフォルトの名無しさん:2011/02/27(日) 18:12:35.79
Scala 2.9は、追加だけじゃなくて変更も有るのか?
278デフォルトの名無しさん:2011/02/27(日) 22:52:07.74
>>277

2.7→2.9 のときも、変更によって、動かないコードが出てきたりしたからなあ。

だけど、>>275 の言うように、2.8→2.9はあまり変更はないのじゃないかと予想。


>276

あの本はお勧めだよね。
279デフォルトの名無しさん:2011/02/27(日) 23:31:32.07
↓みたいなコードを書くと、コンパイラに「末尾再帰になってない」と怒られるんだけど、
try〜catch使ってると末尾再帰にできなかったりする?

@tailrec def func(): Int = {
 try {
  func()
 } catch {
  case e: Exception => ...; func()
 } finally {
  ...(何か後始末)
 }
}
280デフォルトの名無しさん:2011/02/28(月) 00:42:43.18
末尾再帰ってのは再帰呼び出し後に戻ってこないことが保証できるものだ
その例は戻ってこないように見えるのか?
281デフォルトの名無しさん:2011/02/28(月) 01:02:09.95
>>280
確かに、finallyを処理しに戻ってくるように見えますね。。なるほど。
282デフォルトの名無しさん:2011/03/05(土) 14:27:47.81
過疎ってんな
もうダメか
283デフォルトの名無しさん:2011/03/05(土) 15:27:26.65
ボクの頭髪も過疎りそうです。
284正義の下着:コスモパンティー:2011/03/05(土) 19:22:03.31
ハゲ散らかした頭って漢らしいとおもいます。応援します。

ところで、scalaでgtk+をいじりたいのですが、scalaでGUIを解説している
サイト知りませんか?
285デフォルトの名無しさん:2011/03/05(土) 21:14:06.33
>>284
まぁ日本語ではないだろうから、英語のサイトか、javaでGUI解説したサイト探したほうがいいと思われ
なんか答えになってないけど
286デフォルトの名無しさん:2011/03/05(土) 21:17:59.32
http://twitpic.com/43mzap
誰かこのコード解説してください
287デフォルトの名無しさん:2011/03/05(土) 21:53:26.74
侵略の手がこんなところまでw
288デフォルトの名無しさん:2011/03/05(土) 22:47:41.24
>>286
いやです
289デフォルトの名無しさん:2011/03/06(日) 03:34:18.47
Javaの配列をJavaのListに変換するために、

val list: java.util.List[String] = Arrays.asList[String](Array("hello", "scala"))

とかやろうとすると、asListのところで「引数の型がArray[String]だ」って怒られるんですけど、
どうすればいいんでしょう。
290デフォルトの名無しさん:2011/03/06(日) 03:42:39.88
あ、自己解決しました。

val list: java.util.List[String] = Arrays.asList[String](Array("hello", "scala"): _*)

とやれば、可変長引数の一番目の引数ではなく、配列としてみてくれるんですね。
291デフォルトの名無しさん:2011/03/06(日) 22:49:00.32
ScalaでOSとか作ろうと思ったらできるものなん?VM上のものだから難しい?
292デフォルトの名無しさん:2011/03/07(月) 00:21:47.36
JavaのOSがあるくらいだからいけるんじゃね?
293デフォルトの名無しさん:2011/03/07(月) 00:23:08.57
いみわからんのだけどそれってOSの上にOSのってるの?
294デフォルトの名無しさん:2011/03/07(月) 00:51:50.94
ちょっとだけアセンブラのカーネルがあって、VM起動してその上にOSを走らせるみたい
295デフォルトの名無しさん:2011/03/07(月) 01:04:56.31
ちょっとまて、メモリー保護や管理、IO割り込みやバス転送どうしてるんだよ!
全部アセンブラか?
296デフォルトの名無しさん:2011/03/07(月) 01:15:46.31
Java VM じゃカーネル空間で動作できないから現実的ではないかな。
エミュレータのようなものになりそう。
297デフォルトの名無しさん:2011/03/07(月) 03:01:01.18
オライリの本、java知らなくても読める?
298デフォルトの名無しさん:2011/03/07(月) 03:05:30.39
Javaだったらのたとえ話おおいけど、Java知らないくても読める

それよりJVMの上に作ってるんだからJavaの話でるのは当然で、
そこに無駄にストレス感じてるルビリストやらパールモンジャーとかピチパーが多い印象
299デフォルトの名無しさん:2011/03/07(月) 05:19:02.40
>>297
もし、知らなければ読めないって言ったら、先にJavaを勉強するつもりなのか?
それともscala自体を諦めるのか?
なんにせよ、scalaやっていく上である程度のJavaというかJVMの知識は必要だが、
何も知らないとしてもわざわざ先にJava勉強しても遠回りだし、scala勉強したいならとにかくO'Reilly本買って勉強すればいいんじゃないか?
300デフォルトの名無しさん:2011/03/07(月) 09:33:29.81
>>295,296
ちったあ調べてからもの言えばいいのに
クソJava使いの想像力欠如っぷりはさすがだな
メモリー管理もIOもJavaカーネルだとよ
http://www.jnode.org/
301デフォルトの名無しさん:2011/03/07(月) 15:45:00.01
ツンデレか
302デフォルトの名無しさん:2011/03/07(月) 21:33:58.92
奥さん、特集ですよ。
http://www.amazon.co.jp/dp/4774145440
303デフォルトの名無しさん:2011/03/07(月) 22:22:40.54
>>302
ちょっと読んだけど、ほんとに何も知らない人向けの、単なる紹介記事なので、
わざわざ買って読むものではないと思う。
304デフォルトの名無しさん:2011/03/08(火) 01:13:03.68
>>298-299

レスどうもです。
今はちょっと興味がある程度なので、javaの知識が大前提であればjavaをやる気になるまで様子見のつもりでした。

本職がハードなので、用途としては回路シミュレーションのデバッグデータ生成ぐらいです。
だから、scalaのメリットを生かしきる!みたいな使い方はできなさそうですが、
なんとなく面白そうなのでscalaをつかってみたいなぐらいの意気込みでした。

とりあえず読んでみる事にします。
アドバイス、ありがとうございました。
305デフォルトの名無しさん:2011/03/09(水) 21:19:12.39
いやJavaを覚えた方が良いって。
306デフォルトの名無しさん:2011/03/09(水) 23:07:22.87
Scalaはミーハーうけも良い
307デフォルトの名無しさん:2011/03/09(水) 23:28:20.30
パーフェクトjavaなり、まとまった本を眺めてみると良いかも
308デフォルトの名無しさん:2011/03/10(木) 00:15:13.41
>>297>>304 が同一人物だとしたら、、、

ちょっと使ってみたいな、というために、Scalaを知りたいのだったら、
いきなり、オライリの本 みたいな気合い入ったのを買う必要ないと思う。

おすすめは、「Scalaで学ぶ関数脳入門」。

Java知らなくても読めるし、この本で得た知識は、どんな言語にも応用できる。
日本でこんな良い本が出ているのに、日本人が書いたってだけで無視しているとしたら
もったいない。

これ読んでから、次の本買ってみれば?


ちなみに、、ScalaとかJavaは、ハード屋にはうけが悪いと思う。
素直に、C か sh か perl で書かないと拒否られると思う。
本当は、オレも、VerilogやSystemCと、Scala/Java(JVM)を連携させたいのだが、、。
309デフォルトの名無しさん:2011/03/10(木) 00:22:57.56
Java使ってる人間の10%でもScala使うようになれば、
それだけで相当ポピュラーな言語になるんだけどなぁ
310デフォルトの名無しさん:2011/03/10(木) 01:42:19.72
このスレもすっかり、関数脳派に乗っ取られたな。
コップ派の栄光は短かった。
311デフォルトの名無しさん:2011/03/10(木) 09:30:46.66
>>309
仮に 0.1% だとしても実現不可能な数字に見える
312デフォルトの名無しさん:2011/03/10(木) 14:15:12.18
>>310
関数型に慣れてない人が多かっただけでしょ
関数になれたらコップを読みたくなるんじゃないか
313デフォルトの名無しさん:2011/03/10(木) 18:32:15.70
関数脳 > コップ
FP入門度
314デフォルトの名無しさん:2011/03/10(木) 19:57:22.46
「Scalaで学ぶ関数脳入門」

は、たしかに面白い視点から書かれてて、いいんけど
scalaを深く学ぶということに関しては、versionが2.7と2.8がぐちゃぐちゃに分かりづらくまざってるし、
ところどころ間違いあるし、注意したほうがいいと思う

共著だから、章によって書いてる人違って、
章によって、完成度がバラバラ・・・いい章もあるけど、
なんかひどい章もある・・・コード例がすげぇscalaっぽくないやつが・・・
315デフォルトの名無しさん:2011/03/10(木) 23:33:01.13
>>310
> このスレもすっかり、関数脳派に乗っ取られたな。

このスレで、関数脳本を推薦しているのは、ほとんどが同一人物だよ。

なぜならば、ほとんどはオレが書いたから。(笑)



2chに書かれる事って、大多数の人間の意見とは限らない。
どっちかというと、同じ人が大量にカキコしているケースの方が多いかもな。

>>314

と、これまで、関数脳本を薦めてきたオレだが、
確かに、Scalaの記述については注意した方が良いかも。

この本は、関数型言語の最初の一歩としてはおすすめだが、
Scalaについては、これ一冊で習得は難しい。
かなり説明が省かれている所もあって、そういうところは、概略だけ見て、
詳細は別の本を開いた方がよさそうだ。

Caseクラスの説明とか、、この本だけでは、さっぱりわからん。
316デフォルトの名無しさん:2011/03/11(金) 07:51:42.65
あれ表紙が気に入らないからスルーだわ。
317デフォルトの名無しさん:2011/03/11(金) 14:18:02.92
言語仕様として、varを省略可能にすることってできなかったんだろうか?

あとvalってjavaのfinalと同じ機能?
scalaだと、プラスアルファのメリットがあったりする?
318デフォルトの名無しさん:2011/03/11(金) 17:00:24.79
varを省略可能にしてどんなメリットがあるんだ……
valはjavaのfinalと一緒で再代入が不可。それとlazy valで遅延評価ができるよ。
319デフォルトの名無しさん:2011/03/11(金) 19:46:10.60
scalaの需要って増えると思う?
320デフォルトの名無しさん:2011/03/11(金) 22:29:09.65
>>319

良くも悪くも、JVM上の言語って点が問題かと。
確かに既存のLibraryを使えるって点は大きなメリットなのだが、
JVMってだけで毛嫌いする人は多いだろうね。

.netコードも一応吐き出せるのだから、
ちょっとがんばればNativeコードも出力できそうに思うが。

まあ、現時点では、開発陣には、言語自体を進化させるのに注力していると
思われるので、そっちの発展に期待。


>>316

表紙が普通だったら、もっと売れていただろうね。
日本の出版社って、なぜ、表紙絵とかタイトル名のセンスがないのだろうか?
あれって、出版社の意向で決まるんだよね。著者にはいい迷惑。
321デフォルトの名無しさん:2011/03/11(金) 23:50:18.45
covariant
nonvariant
contravariant
とかって何て発音しますか?
322デフォルトの名無しさん:2011/03/12(土) 02:29:26.75
val, varはJavaScriptといっしょで型指定なしの変数宣言の意味でもあるから
なしとかコンパイルできんだろ
323デフォルトの名無しさん:2011/03/12(土) 03:21:20.22
>>321
こばりあんと
のんばりあんと
こんとらばりあんと じゃないの
324デフォルトの名無しさん:2011/03/12(土) 04:10:01.90
いやいや

コヴァリェィント
ノンヴァリェィント
コントルゥァヴヮルゥィウェイント

だろ
325デフォルトの名無しさん:2011/03/12(土) 05:44:57.21
若本っぽい
326デフォルトの名無しさん:2011/03/12(土) 19:43:00.58
>>322
なんか勘違いしてない?型指定なしって…?
327デフォルトの名無しさん:2011/03/12(土) 23:03:36.72
>>322
「言語仕様」の話をしてるんだから、コンパイルできるできないは関係ない。
そういう「言語仕様」がナンセンスだと言うならそのとおり。
328デフォルトの名無しさん:2011/03/12(土) 23:05:46.58
関数型も目指してるから要るんでしょ。マルチパラダイスだっけ?
329デフォルトの名無しさん:2011/03/12(土) 23:28:44.18
valはHaskellのトップレベル宣言のように省略可能にして欲しかったとは思う。
ただ、構文解析が面倒になるのと、varとの対称性が崩れるデメリットのに見合うかというと微妙。
330デフォルトの名無しさん:2011/03/13(日) 01:04:15.71
頻度が高く、使い手が楽できるなら省略も許容できる
ただScalaは、varとvalどちらかをよく使う言語ではないし、
どちらかをより使わせたい言語でもないのだろう
331デフォルトの名無しさん:2011/03/13(日) 07:20:26.51
Java との整合性を前提にすると、ネストのときの挙動が微妙だよな。

a = 1

{
// 「宣言&初期化」か「代入」どっち?
a = 3
}
332デフォルトの名無しさん:2011/03/13(日) 08:16:43.79
代入は := を使うことになるんじゃないかな
333デフォルトの名無しさん:2011/03/13(日) 09:17:51.50
インクリメントはこうなんの?
i +:= 1
334デフォルトの名無しさん:2011/03/13(日) 14:36:26.28
代入以外は現状のままでOK
335デフォルトの名無しさん:2011/03/13(日) 22:04:24.17
まぁそんなこと議論してもどうせ今さら変わらないわけだし。
こういう話が意味がないとは言わないが。
336デフォルトの名無しさん:2011/03/13(日) 22:20:01.07
まあお遊びですな。
ところで
>331
省略するのがvalの場合、初期化しかないんじゃない?
337デフォルトの名無しさん:2011/03/14(月) 23:22:10.59
structural subtypingってどうゆう時に使うものなんですか?
338デフォルトの名無しさん:2011/03/15(火) 08:30:31.56
アヒルのように歩き、アヒルのように鳴くとき
339デフォルトの名無しさん:2011/03/15(火) 08:44:11.76
それはアヒルですか?いいえDuck Typingです。
ttp://itpro.nikkeibp.co.jp/article/COLUMN/20050926/221633/
340デフォルトの名無しさん:2011/03/15(火) 21:10:32.97
>>337
基本的にはつかうな
341デフォルトの名無しさん:2011/03/16(水) 00:37:27.69
>>337
使うときに使わず、使わないときに使う
342デフォルトの名無しさん:2011/03/16(水) 01:17:10.92
JVMレベルでは、型チェックとか無いの?
343デフォルトの名無しさん:2011/03/16(水) 01:28:16.34
ない
344デフォルトの名無しさん:2011/03/16(水) 09:19:13.89
ClassCastExceptionとかだすからあるんじゃね。
345デフォルトの名無しさん:2011/03/16(水) 09:37:12.59
Google [Java erasure]検索
346デフォルトの名無しさん:2011/03/16(水) 10:08:44.77
ErasureはGenericsの話。
そんなこともわかってないのか。
347デフォルトの名無しさん:2011/03/16(水) 10:50:45.58
そもそも342の質問が大雑把すぎて何がききたいのかわからない
348デフォルトの名無しさん:2011/03/16(水) 15:46:59.98
342のは、コンパイラは厳しいけど、一度コンパイラのチェックを通ったら、
あとは野放しなのかって質問。
349デフォルトの名無しさん:2011/03/16(水) 16:07:54.07
実行時型情報って言えカス
350デフォルトの名無しさん:2011/03/16(水) 19:29:40.83
>>340
分かりました。基本的には使いません。
351デフォルトの名無しさん:2011/03/16(水) 21:53:23.60
戻り値を返さない関数を記述するとき

def action {
 println("hello")
}

def action: Unit = {
 println("hello")
}
どちらの書き方をScalaでは推奨しているんですか?
352デフォルトの名無しさん:2011/03/16(水) 22:08:20.20
素早いコーディングを重視するなら前者、後から見た時の分かりやすさを重視するなら後者。
353デフォルトの名無しさん:2011/03/16(水) 22:17:12.54
そういうの見てふと疑問に思うんだけど、例えば

def action {
 foo.bar("hello")
}

こんなコードみたときに、果たしてこれは戻り値があるのだろうか・・・?
と常にストレス感じるハメになるけど、素早いコーディングを重視する人たちは
その辺どう考えてんの?
354デフォルトの名無しさん:2011/03/16(水) 22:36:11.06
>353
戻り値の有無では悩まないだろう。暗黙的にUnit型になるんだから。
悩むとしたら=の書き忘れの可能性じゃないか。
355デフォルトの名無しさん:2011/03/16(水) 22:44:00.48
それは言われるまでもなくて、可読性の話

わざわざ fooクラス の barメソッドを見に行かないと、戻り値の有無を確認できないじゃん
コードの挙動以前に、戻り値の有無すらわからない


356デフォルトの名無しさん:2011/03/16(水) 23:16:40.44
大抵は書かなくても問題ないよね
自明なことが多いし、コレクションなら下手に書くより推論させたほうが適切な型を吐くし
IDE支援があればますますそうなんだけど、Java上がりの連中は絶対書けってやつが多そうだな
357デフォルトの名無しさん:2011/03/16(水) 23:57:57.05
>>356
自分にとって自明でも、他人や「明日の自分」にとっては自明ではなかったりするからねぇ。
358デフォルトの名無しさん:2011/03/17(木) 00:14:23.65
355以降話がおかしいぞ。353は誰にでも自明でしょ、354の言うとおり。

def action: Unit = {
def action {

ならはっきり言って下のほうが、
Unit を読まなくて良い分可読性が高いとさえ感じる

def action: String = {
 foo.bar("hello")
}

def action = {
 foo.bar("hello")
}

なら当然上のほうが高いけどね
359デフォルトの名無しさん:2011/03/17(木) 00:33:15.79
Haskellなんかも必ず型書くけど、意味あんのかなと思ってしまう
みんな推論させてからコピペするわけでしょ
360デフォルトの名無しさん:2011/03/17(木) 00:47:05.58
いやいや358全然わかってねーよ
型推論の話をしてるわけでもないし、記述する文字数の話をしてるわけでもない

foo.barメソッドを見に行かないと戻り値がわからないから、actionメソッドの戻り値の有無もわからない
ましてやそのメソッドに複数のif文が合ったら尚更戻り値が意味不明になる
361デフォルトの名無しさん:2011/03/17(木) 00:48:22.83
>>359
・一見で何を出力する関数なのか分かりやすい。
・コピペで意味が変わる場合がある。
362デフォルトの名無しさん:2011/03/17(木) 00:52:12.82
358は十分わかっていると思うが、他の人は元の質問の意図を汲んで話しているだけだと思う
363デフォルトの名無しさん:2011/03/17(木) 00:58:08.08
戻り値かかないと100%必ずUnitってことか
364デフォルトの名無しさん:2011/03/17(木) 09:28:25.40
{の前の=を省略するとその関数の返り値は強制的にUnitになるのよ
scala > def two() { 2 }
two: ()Unit
scala > def two() = { 2 }
two: ()Int
365デフォルトの名無しさん:2011/03/17(木) 10:16:18.90
スレ伸びてるからすわ何事かとおもったら
初心者いじって遊んでるだけだったってオチ
366デフォルトの名無しさん:2011/03/17(木) 10:36:24.76
水が無くてすっからかん

米原子力委員長「4号機プールに水ないと思う」

  【ワシントン=山田哲朗】米原子力規制委員会(NRC)のグレゴリー・ヤツコ委員長は16日、
  米下院エネルギー・商業委員会で証言し、福島第一原発4号機について
  「使用済み燃料プールの水はすべて沸騰し、なくなっていると思う」との見解を明らかにした。

  使用済み燃料棒が露出した結果、「放射線レベルは極めて高く、復旧作業に影響する可能性がある」
  とも指摘した。具体的な人体への影響については、「かなり短い時間で致命的になるレベルだ」と述べた。

  ヤツコ委員長の発言は、東京に派遣した米国の専門家チームからの情報を基にしているとみられる。
  米当局が、日本政府や東京電力よりも、原子炉の状況について悲観的な見方をしていることを示した。

(2011年3月17日10時04分 読売新聞)
http://www.yomiuri.co.jp/science/news/20110317-OYT1T00277.htm
367デフォルトの名無しさん:2011/03/17(木) 12:01:02.30
実際のメソッド名はbarじゃなくて名詞なり動詞なりが来るから
なにが戻り値かだいたい解るっしょ
さらにコンパイラも確かめてくれるし
368デフォルトの名無しさん:2011/03/17(木) 18:38:45.42
2.7系の処理系で、

val p = getClass.getTypeParameters
def func(vars: Array[TypeVariables[Class[_]]]) = ...
func(p)

ってやるとtype mismatchって怒られるんだけど、これは処理系のバグ?
それとも、私がヘマやってるだけ?
369デフォルトの名無しさん:2011/03/17(木) 19:00:46.55
2.9.0が来週でる?
http://bit.ly/einLS9
370デフォルトの名無しさん:2011/03/17(木) 20:56:33.14
なるほどね
たしかにメソッド名は同士を使うな
371デフォルトの名無しさん:2011/03/18(金) 00:43:00.49
日本が被災しているのに2.9
出すなんて不謹慎にも程がある
372デフォルトの名無しさん:2011/03/18(金) 01:53:12.05
Oderskyとスイスは日本に対する配慮が足りないかもしれないな
ちょっとScalaの公開を自粛するように抗議してくるわ
373デフォルトの名無しさん:2011/03/18(金) 04:21:25.48
>>372
抗議した結果のレポートよろしく
374デフォルトの名無しさん:2011/03/18(金) 07:31:23.55
あほかw
375デフォルトの名無しさん:2011/03/18(金) 13:26:58.84
>>368
バグではないな

def func(vars: Array[TypeVariables[Class[_]]])

def func[A](vars: Array[TypeVariables[Class[A]]])
にしたらコンパイル通るんじゃね?
376368:2011/03/18(金) 18:00:44.44
>>375
自己解決しました。なぜか、

def func(vars: Array[TypeVariables[Class[T]]] forSome { type T })

にしたらコンパイルを通りました。
コップ本には、Hoge[_] は Hoge[T] forSome { type T } と同じだと書いてあるのになぁ。。
377デフォルトの名無しさん:2011/03/18(金) 20:45:51.04
>>376
言語仕様を読んでないから推測だけど、_は
それを含む一番外側の[]の型変数とみなされているんじゃない?
378デフォルトの名無しさん:2011/03/18(金) 22:26:51.43
>>377
ふむふむ。
参考までに、REPL(というかSimply Scalaサイト)に投げてみた結果を張ってみます。

> import java.lang.reflect.TypeVariable

> val cls = classOf[Array[String]]
cls: java.lang.Class[Array[String]] = class [Ljava.lang.String;

> def func(cls: Class[_]) = cls.getTypeParameters
func: (cls: Class[_])Array[java.lang.reflect.TypeVariable[java.lang.Class[_$1]]] forSome { type _$1 }

> def func2(vars: Array[TypeVariable[Class[_]]]) = null
func2: (vars: Array[java.lang.reflect.TypeVariable[Class[_]]])Null

> def func3(vars: Array[TypeVariable[Class[T]]] forSome { type T }) = null
func3: (vars: Array[java.lang.reflect.TypeVariable[Class[T]]] forSome { type T })Null
379デフォルトの名無しさん:2011/03/18(金) 22:27:56.38
んで結果。
言語仕様も少しあたってみます。

> func2(cls.getTypeParameters)
error: type mismatch;
 found  : Array[java.lang.reflect.TypeVariable[java.lang.Class[Array[String]]]]
 required: Array[java.lang.reflect.TypeVariable[Class[_]]]
   func2(cls.getTypeParameters)

> func2(func(cls))
error: type mismatch;
 found  : Array[java.lang.reflect.TypeVariable[java.lang.Class[_$1(in value res3)]]] where type _$1(in value res3)
 required: Array[java.lang.reflect.TypeVariable[Class[_]]]
   func2(func(cls))

> func3(cls.getTypeParameters)
res0: Null = null

> func3(func(cls))
res1: Null = null
380デフォルトの名無しさん:2011/03/18(金) 22:47:46.63
> それを含む一番外側の[]の型変数とみなされているんじゃない?
ごめん、一番内側の間違い。

つまり
A[_] = A[T] forSome {type T}
ということは
A[B[_]] = A[B[T] forSome {type T}]
となる。
つまり仮引数の型がA[B[_]]である関数に渡す実引数は
存在型A[B[T] forSome {type T}]でなければならないので
>368は型エラーになる。

言語仕様の3.2参照。
381デフォルトの名無しさん:2011/03/18(金) 23:43:24.86
>>380
確かに、こういう例が載ってますね。
ワイルドカードが直接くっついてる型として展開するわけか。

Example 3.2.7
The type List[List[_]] is equivalent to the existential type List[List[t] forSome { type t } ]

List[List[_]]は、『List[List[t]] forSome { type t }という存在型』ではなく、
『「List[t] forSome { type t }」という存在型を型パラメータとするList型』になるから、
そういう意図ならforSomeで明示的に宣言を書かないとダメということですね。
382381:2011/03/18(金) 23:49:12.41
正直、JVM言語ではあるけどJavaとの混ぜ書きは色々と罠があるなぁ、と感じていたり。
Java資産のScala版を作っていくのはやっぱ重要だと思いましたとさ。
383デフォルトの名無しさん:2011/03/19(土) 02:35:57.83
頑張って作ってくれ
384デフォルトの名無しさん:2011/03/19(土) 11:10:29.10
言語仕様書の日本語訳ないの?
385デフォルトの名無しさん:2011/03/19(土) 11:15:09.21
386384:2011/03/19(土) 14:34:31.72
お、あるのか、ありがとう
387デフォルトの名無しさん:2011/03/19(土) 22:51:52.66
>>385
日本語で読んでも何が書いてあるのかさっぱりだお。。
388デフォルトの名無しさん:2011/03/19(土) 23:06:31.20
まだドラフト未満だから仕方ない。
例から推測したり、実装の振る舞いから補完しながらでないと
正確な仕様はわからないと思う。

いっそformal semanticsでも定義すればいいのに。
389デフォルトの名無しさん:2011/03/22(火) 20:36:52.46
>>318
>それとlazy valで遅延評価ができるよ。
レス、サンクスです。

遅延評価の価値がいまいちわからないんだけど、
誰かエロい人、教えてくれないか。

俺の理解:
・lazyは単なる実行時の効率化に過ぎない
・副作用が無ければ、全部lazy valでOK。(Haskellがそう?)
・副作用を許容しているので、lazyを付けたり付けなかったり
390デフォルトの名無しさん:2011/03/22(火) 20:40:27.75
scalaのjavaに対するわかりやすいアドバンテージがわからない。

コンストラクタ省略可能とか、そういう細かい点はわかる。
あと、yield forが便利だとは思う。

でも、なんかもっと魅力が欲しい。
391デフォルトの名無しさん:2011/03/22(火) 21:37:27.39
>>390
魅力感じないなら、ずっとJava使ってればいいんじゃないの?
392デフォルトの名無しさん:2011/03/22(火) 23:15:20.58
いやほら流行りモノには乗っかりたいじゃないか
393デフォルトの名無しさん:2011/03/22(火) 23:53:30.94
"省略可能とか、そういう細かい点"
っていうのがなにをさしてるのかって話だよな。
「◯◯ができます」っていう大きな特徴(を数点)教えてくれというか、
そういう回答を期待してるのかもしれないけど、
すごく細かいけれど、いいところが大量にあるから便利って捉え方もできるし。

おまえ本当に、scalaの細かい便利な点全部知ってるの?
お前がいう細かい点ってなに?
っていう
394デフォルトの名無しさん:2011/03/23(水) 00:13:25.82
Javaに比べて利点はたくさんあると思うけど
そのなかで特にいいの1個あげてよってScalaプログラマに聞いたらかなりバラバラになりそうな気がする
395デフォルトの名無しさん:2011/03/23(水) 00:38:36.71
まず、関数型言語だってことでしょ
そこに価値を見出せない人にはBetter Javaにしか見えないと思う
396デフォルトの名無しさん:2011/03/23(水) 03:52:30.86
Better Java で十分じゃん。
あと Lift
397デフォルトの名無しさん:2011/03/23(水) 09:35:26.99
>>391
単なる技術論
言語仕様としてScalaは本当に進歩してるのか?ってこと、
進歩してるとしたら、それはどこか?ってことに興味がある。

実務的な話になれば、仕事の本流はこの先もずっとJavaだろうし。
どうでもいいところならScalaを使うことはできる。趣味レベルで。

>>395
>そこに価値を見出せない人には
その価値を他人に説明できないなら、盲信に過ぎないのでは?
398デフォルトの名無しさん:2011/03/23(水) 09:43:16.38
関数型言語だってのを除いてオブジェクト指向のところだけを見てもtraitとかあるしBetter Javaにとどまらないんじゃね?
399デフォルトの名無しさん:2011/03/23(水) 09:44:38.85
ScalaやるとJavaでノタノタとforループやifで無駄な行数稼いでる奴
見るとヘドがでそうになるデメリットしかないよ
400デフォルトの名無しさん:2011/03/23(水) 09:49:23.11
いいからお前らscalaで色々作って、githubとかにどんどん上げろ
401デフォルトの名無しさん:2011/03/23(水) 10:17:27.78
はーい
402デフォルトの名無しさん:2011/03/23(水) 12:08:22.54
>>397
関数型言語の何がいいかはMLスレで訊いてくるといいよ
間違ってHaskellスレで訊かないようにね!
403デフォルトの名無しさん:2011/03/23(水) 12:22:12.93
>>399
forとifのためにscala使ってるなら、
scala辞めた方がいいと思う。
君にはまだ早い。
404デフォルトの名無しさん:2011/03/23(水) 16:04:33.75
>>403
どこをどう読んだらそんな解釈ができるんだ?
405デフォルトの名無しさん:2011/03/23(水) 16:16:08.06
>>404
それ以外にどんな解釈があるんだよwww
なんちゃってscala厨にはrubyがお似合い。
406デフォルトの名無しさん:2011/03/23(水) 19:05:48.95
どうも、なんちゃってscala厨にされちゃったみたいですが、
ちょっと、scala.io.BytePickle についてお知恵を拝借したいのです。

http://research.microsoft.com/en-us/um/people/akenn/fun/picklercombinators.pdf
↑に記述の有る maybePickler をOption[T]でやりたくてホゲってるんですが、
Haskellまだよくわかってないから果たしてこれで合ってるのやら...

/* maybe pickler
* http://research.microsoft.com/en-us/um/people/akenn/fun/picklercombinators.pdf
* pMaybe :: PU a -> PU (Maybe a)
* pMaybe pa = alt tag [lift Nothing, wrap (Just, fromJust) pa]
* where tag Nothing = 0; tag (Just x) = 1
*/
implicit def optPickler[T: SPU]: SPU[Option[T]] =
data(
(t: Option[T]) => t match {
case None => 0
case Some(_) => 1
},
List(() => nonePickler[T], () => somePickler[T])
)
def nonePickler[T]: SPU[Option[T]] = lift(None)
def somePickler[T: SPU]: SPU[Option[T]] =
wrap[T, Option[T]]((x: T) => Option(x), x => x.get, implicitly[SPU[T]])
407デフォルトの名無しさん:2011/03/23(水) 20:48:16.72
関数プログラミングするなら、やはりHaskellの方がいいな。
ただ、型適用を明示的にかけるのはscalaの強みか?
408デフォルトの名無しさん:2011/03/23(水) 21:21:48.71
PDFを見るのが面倒過ぎるから三行で説明してくれたら
考えなくもない。
409デフォルトの名無しさん:2011/03/23(水) 22:36:56.72
さすがにmonadを3行で説明するのは無理だww
かわりにサンプルコード用意したので勘弁してくれ
いっぱしのscala厨ならTestSpecとsbtぐらいはもってて当然だよな!
https://github.com/nancyatte-scala/scala-maybe-byte-pickler
410デフォルトの名無しさん:2011/03/24(木) 01:39:19.31
みんなscalaで何作るの?
411デフォルトの名無しさん:2011/03/24(木) 09:09:01.70
コンパイラプラグインってなに?
412デフォルトの名無しさん:2011/03/24(木) 09:37:43.01
>>409
Scalaコンパイラが独自で使っているscala.tools.nsc.io.Picklerを参照してみてはいかが?

implicit def optionPickler[T: Pickler]: Pickler[Option[T]] = nonePickler | somePickler[T]
implicit val nonePickler = singletonPickler(None)

* '|'演算子はCondPicklerにて定義されていて実体はeitherPickler。

* CondPicklerはPicklerをextendsした抽象クラス。

* seqが'~'演算子で記述できる。

など、DSLがBNFのように見やすくなる工夫がなされているみたい。
413デフォルトの名無しさん:2011/03/24(木) 11:06:23.59
TNX
演算子採用したい
あとStatePicklerいいですね
BytePicklerではエラー状態を封じ込めてないからリカバーできない
414デフォルトの名無しさん:2011/03/24(木) 12:34:28.03
>>410

ちょっとした、GUIアプリとか。


で、そのアプリを配布するとき、どうしようかと迷っている。

JVMは、割と普通のPCには入っているだろうから無問題だけど、
ScalaのライブラリのJarも一緒に配布するのは、サイズがでかくなるなあ。。
415デフォルトの名無しさん:2011/03/24(木) 21:04:50.20
>>414
ちょっとしたGUIアプリならC#がいいと思う。
ScalaでGUIはないわ。

Scala使う場面って、Lift使ってアプリ作るくらいしか思い浮かばない。
しかも、Liftは実績がないから、仕事で使うのは難しいな。

今のところScalaはちょこっといじるくらいしか、意味がないんじゃないか?
現段階で、実用的なアプリをScalaで作ろうと思う人はある意味すごいよ。
416デフォルトの名無しさん:2011/03/24(木) 21:14:11.01
マジで!?俺すげぇ!!
417デフォルトの名無しさん:2011/03/24(木) 21:20:05.15
【速報】俺たちすごかった
418デフォルトの名無しさん:2011/03/24(木) 21:34:43.01
Twitterは英雄だな。
419デフォルトの名無しさん:2011/03/24(木) 23:07:47.63
>>418
本格的には使ってないよ
420デフォルトの名無しさん:2011/03/24(木) 23:26:09.84
>>419
これだけあるのに?
https://github.com/twitter
419が言う本格的ってなんだろう・・・
421デフォルトの名無しさん:2011/03/24(木) 23:29:24.94
422デフォルトの名無しさん:2011/03/25(金) 00:36:39.97
Lift実績ないってFoursquare知らんのか
423デフォルトの名無しさん:2011/03/25(金) 01:12:58.91
implicit conversionって、クラスファイルではどう表現されてるの?
諸般の事情で、Javaで書いたコードにimplicitのマークを付けられないかと思ってるんだけど。
424デフォルトの名無しさん:2011/03/25(金) 02:25:47.93
>>423
コンパイル時にすべて解決されてる。

>Javaで書いたコードにimplicitのマーク
というのがなにをやりたいのかが、いまいちわからないが・・・?

仕組みというか、コンパイル後にどうなってるかしりたいなら、
scalacでコンパイルしてjadとかで、デコンパイルすることおすすめ
425デフォルトの名無しさん:2011/03/25(金) 02:27:55.86
'|'演算子って論理和?
426デフォルトの名無しさん:2011/03/25(金) 07:45:48.29
>>424
scalacは、クラスファイルになってる変数なりメソッドがimplicitで宣言されてることを
どうやって知るのかな、と思って。

つまり、

public static Hoge hoge = ...

となっているJavaコードを、Scalaで言うところの

implicit val hoge: Hoge = ...

に見せかけたいわけです。
427デフォルトの名無しさん:2011/03/25(金) 10:09:49.48
それScalaのスレで質問する内容じゃないよな?
Java厨なんですけどScalaの機能をJavaで実現したいんです!なんて
頭の悪い質問してると人生無駄にするよ
428デフォルトの名無しさん:2011/03/26(土) 00:02:55.57
javaのほうが以下のようになってるとして

public JavaClass{
public static Hoge foo(){ ... }
}

使う側のscalaのコードのどこかで、以下のように一行加えればいいんじゃないの?

ScalaClass{
implicit val bar = JavaClass.foo()

}
429デフォルトの名無しさん:2011/03/26(土) 00:28:46.55
>>427
REPLの補完でREST APIのJavaラッパを叩いて快適生活を送ろうとしたところ、
どうもobjectに入ってるメンバやimplicit conversionを補完してくれないみたいなので(バグ?)、
仕方なくJavaでstaticメソッドを実装して補完候補に出すという大変頭の悪いことをしているわけです。

既に、APIをリフレクションで走査してScalaラッパを自動生成するところまでやっているので、
ここでダメだとけっこうきつい。。W
430デフォルトの名無しさん:2011/03/26(土) 00:31:23.01
>>428
なるほど、とりあえずそれで乗り切ります。
431デフォルトの名無しさん:2011/03/26(土) 01:41:54.42
432デフォルトの名無しさん:2011/03/26(土) 01:51:25.89
自分に都合悪いとたいして調べずにバグとか言いだすやつなんなんだろうな
433デフォルトの名無しさん:2011/03/26(土) 02:34:15.39
>>431
再三の注意にもかかわらず2.9出すとは日本への宣戦布告ということか
434デフォルトの名無しさん:2011/03/26(土) 02:39:54.46
スイスって永世中立国じゃなかったのか・・・?
435デフォルトの名無しさん:2011/03/26(土) 14:52:38.93
>>432
確かに追試してないなぁと思って、新規のsbt環境でやってみたら正常に動作した。。
色々設定いじってるのがいけないのかな。よく分からん。


ちなみに、sbt 0.7.4でscala 2.9.1.RC1を指定した上でconsoleを動かすとフリーズする。
こちらはWindows環境とMac環境の両方で試したので確か。
436デフォルトの名無しさん:2011/03/26(土) 16:35:49.88
既にscala 2.9.1.RC1が出ていたとは
437デフォルトの名無しさん:2011/03/27(日) 22:44:05.88
Akka 1.1でpersistence亡くなったんだけど
これから先、NoSQL使えないAkkaに意味あるのか?
438デフォルトの名無しさん:2011/03/28(月) 09:38:52.06
>>433
何それ?
439デフォルトの名無しさん:2011/03/28(月) 10:11:51.98
>>371-374
のネタの続きだろ
440デフォルトの名無しさん:2011/03/28(月) 10:19:12.03
あまりにくだらなさ過ぎて脱力した・・・
441デフォルトの名無しさん:2011/03/28(月) 11:17:27.08
RC1って実質β位かな。
狼少年っぽいし。
442デフォルトの名無しさん:2011/03/29(火) 08:32:21.66
狼少年は肉食系男子だからがんがんいこうじぇ
443デフォルトの名無しさん:2011/03/29(火) 12:26:05.33
>>411
海外の人が同じようなこと言っててワロタ
http://twitter.com/#!/jamesiry/status/52384075041865728
444デフォルトの名無しさん:2011/03/29(火) 17:59:46.27
共変宣言されているクラスに、共変を満たすように下界限界を設定した関数リ
テラルを後から注入するにはどのように記述すれば良いのでしょう?

HogeImp3がやりたいことなのですが、クラスの下界限界設定とメソッドのそれ
とがうまく協調してくれないんです。

// covariant trait with func
trait Hoge[+T] {
def twice[U >: T](x: U): List[U]
}
// OK
class HogeImp[+T] extends Hoge[T] {
def f[U >: T](x: U): List[U] = List(x, x)
def twice[U >: T](x: U): List[U] = f(x)
}
case class HogeImp3[T, U >: T](f: U => List[U]) extends Hoge[T] {
def twice(x: U): List[U] = f(x)
/* ここでコンパイルエラー
* type mismatch;
* found : U(in method twice)
* required: U(in class HogeImp3)
* def twice[U >: T](x: U): List[U] = f(x)
* ^
*/
}
val x3 = new HogeImp3[Int, AnyVal]((x: AnyVal) => List[AnyVal](x, x))

関数リテラルは諦めてトレイトにするべきなのでしょうか?
445444:2011/03/29(火) 18:22:31.46
すいません。上のコンパイルエラーの箇所に誤りがありました。

上記のHogeImp3だとtwiceに下界限界が無いのでoverrideしてないので
abstract必要ですというエラーになります。
def twice(x: U): List[U] = f(x)
/* error: class HogeImp3 needs to be abstract, since method twice in
* trait Hoge of type [U >: T](x: U)List[U] is not defined
*/

それならtwiceに下界限界を指定したらどうなるか、クラスの下界限界設定と
メソッドのそれとがうまく協調してくれないのでやっぱりエラーになります。
def twice[U >: T](x: U): List[U] = f(x)
/* error: type mismatch;
* found : U(in method twice)
* required: U(in class HogeImp3)
* def twice[U >: T](x: U): List[U] = f(x)
* ^
*/
446デフォルトの名無しさん:2011/03/29(火) 22:08:57.02
どうなんだろ、関数オブジェクトは型パラメータを取る関数とか記述出来ないから
ジェネリックメソッドの代わりは無理なんじゃないかな、という気はする。
本当に出来ないかはしらね
447444:2011/03/30(水) 10:05:25.87
やっぱりTraitにしてミックスインするしかなさそうですね。

// covariant trait with func
trait Hoge[+T] {
def twice[U >: T](x: U): List[U]
}
// OK
trait HogeInject[+T] {
def f[U >: T](x: U): List[U] = List(x, x)
}
class HogeImp2[+T] extends HogeInject[T] with Hoge[T] {
def twice[U >: T](x: U): List[U] = f[U](x)
}
assert((new HogeImp2[Int]).twice(2.asInstanceOf[AnyVal]) == List[AnyVal](2, 2))
448デフォルトの名無しさん:2011/03/30(水) 11:39:05.90
もしくは総称型関数を包むクラスを定義するとか。

abstract class F[+T] {
def f[U >: T](x:U) : List[U]
}
case class HogeImp3[+T](F:F[T]) extends Hoge[T] {
def twice[U >: T](x: U): List[U] = F.f(x)
}
val x3 = new HogeImp3[Int](new F[Int] { def f[U >: Int](x:U) = List(x,x) })
449444:2011/03/30(水) 11:55:55.88
>>448
ありがとうございます、提案頂いたやり方のが描いてたイメージに近いです。
採用の方向で検討させて頂きます。m(_ _)m
450デフォルトの名無しさん:2011/03/30(水) 23:02:42.20
Scala IDE for Eclipse - New Version
http://www.scala-lang.org/node/8990
451デフォルトの名無しさん:2011/03/30(水) 23:53:30.44
>>450
前よりゴミになったから紹介するなよ
452デフォルトの名無しさん:2011/03/30(水) 23:56:48.35
えっ、ダメなの?期待してたのに
453デフォルトの名無しさん:2011/03/31(木) 10:40:34.89
まだ作り途中じゃないの?eclipse
454444:2011/03/31(木) 13:32:24.87
共変宣言されているクラスに、共変を満たすように型パラメータ境界を設定した
関数リテラルを後から注入する方法について判明しましたので御報告。

trait Covariant[+T <: U, U] {
def twice[V >: T <: U](x: V): List[U]
}
case class CovariantImp[+T <: U, U](f: U => List[U]) extends Covariant[T, U] {
def twice[V >: T <: U](x: V): List[U] = f(x)
}

val x = new CovariantImp[Int, AnyVal]((x: AnyVal) => List[AnyVal](x, x))
assert(x.twice(2) == List[AnyVal](2, 2))

それにしても境界パラメータ宣言の『>: T <:』の部分が
「こうですか!?わかりません><」って言ってるように見えて困る...
455 忍法帖【Lv=10,xxxPT】 :2011/03/31(木) 20:30:38.47
>454
おおすごい。
でも、それってもとの問題
> 共変宣言されているクラスに、共変を満たすように下界限界を設定した関数リ
> テラルを後から注入するにはどのように記述すれば良いのでしょう?
の解とはちょっと違わない?
それだと下界だけでなく上界も設定しないといけない。
456444:2011/03/31(木) 21:45:35.64
ごめんなさい、使い勝手を考えると上界が欲しいかなと思ってよくばりすぎました。
下界だけだとこうですね。
case class CovariantImp[+T <: U, U](f: U => List[U]) {
def twice(x: U): List[U] = f(x)
}
val x = new CovariantImp[Int, AnyVal]((x: AnyVal) => List[AnyVal](x, x))
assert(x.twice(2) == List[AnyVal](2, 2))
457444:2011/03/31(木) 22:17:34.86
ちょっとCovariant/Contravariantを汎化して書き取り練習してた
下界と上界、共変と反変の型パラメータについて推奨の書き方(順序/変数名)ってあるんでしょうか?
みなさんどうやって書かれてます?

case class V[+T <: I, -U >: O, I, O](fl: I => O) { def f = fl(_) }

new V[Int, Int, Int, Int](x => x.hashCode)
new V[Int, Int, AnyVal, Int](x => x.hashCode)
new V[Int, Int, Any, Int](x => x.hashCode)
new V[Int, AnyVal, Int, Int](x => x.hashCode)
new V[Int, AnyVal, Int, AnyVal](x => x.hashCode)
new V[Int, AnyVal, AnyVal, Int](x => x.hashCode)
new V[Int, AnyVal, AnyVal, AnyVal](x => x.hashCode)
new V[Int, AnyVal, Any, Int](x => x.hashCode)
new V[Int, AnyVal, Any, AnyVal](x => x.hashCode)
new V[Int, Any, Int, Int](x => x.hashCode)
new V[Int, Any, Int, AnyVal](x => x.hashCode)
new V[Int, Any, Int, Any](x => x.hashCode)
new V[Int, Any, AnyVal, Int](x => x.hashCode)
new V[Int, Any, AnyVal, AnyVal](x => x.hashCode)
new V[Int, Any, AnyVal, Any](x => x.hashCode)
new V[Int, Any, Any, Int](x => x.hashCode)
new V[Int, Any, Any, AnyVal](x => x.hashCode)
new V[Int, Any, Any, Any](x => x.hashCode)
new V[AnyVal, AnyVal, AnyVal, Int](x => x.hashCode)
:

上界設定がAnyValなのに、入力にAnyをとることができるのは
やっぱりわかったようなわからないような不思議な感じがする...
new V[AnyVal, Any, AnyVal, Any]((x: Any) => x.hashCode.asInstanceOf[Any])
458デフォルトの名無しさん:2011/04/03(日) 17:28:13.70
STMが入るって聞いたけど、どうなってるの?
459デフォルトの名無しさん:2011/04/06(水) 04:40:43.52
>>458
http://jetbrains.dzone.com/articles/talking-about-akka-scala-and
akkaの作者が、2.10で入るんじゃねえの?的なこと言ってるけどまだはっきり決まってないっぽい
460デフォルトの名無しさん:2011/04/06(水) 10:40:52.19
並列とSTMは同時にいれてくれないと困るじゃん
461デフォルトの名無しさん:2011/04/06(水) 11:32:22.70
Scala STM expert groupってなんぞ
http://groups.google.com/group/scala-stm-expert-group
462デフォルトの名無しさん:2011/04/06(水) 12:33:47.11
eclipseのscalaプラグインがゴミ過ぎて使えないんだけど、
みんな何使ってるの?

463デフォルトの名無しさん:2011/04/06(水) 12:39:41.80
vi
464デフォルトの名無しさん:2011/04/06(水) 12:43:00.76
>>463
ワロタwwww

さすがにviとemacsよりは、eclipseの方がましだわ。
465デフォルトの名無しさん:2011/04/06(水) 12:47:09.56
宗教戦争のお時間がやってまいりました
466デフォルトの名無しさん:2011/04/06(水) 15:34:02.21
vimかIntelliJ IDEA
467デフォルトの名無しさん:2011/04/06(水) 15:40:40.99
ENSIME最強
468デフォルトの名無しさん:2011/04/06(水) 16:15:29.85
だってScalaには標準でvim用のsyntaxファイルが添付されてるもん!
469デフォルトの名無しさん:2011/04/06(水) 21:29:48.56
emacs用もあるがな
470デフォルトの名無しさん:2011/04/07(木) 03:27:09.06
xyzzy 用もつくってくれ
471デフォルトの名無しさん:2011/04/07(木) 09:12:30.95
http://www.infoq.com/jp/news/2011/04/erlang-copied-jvm-and-scala

Erlang を共同で開発した Joe Armstrong と Robert Virding 両氏が,Erlang が Java から多大な着想を得たことを認めている。

ErlangFactory 2011 SF で行われたインタビューで両氏は,Erlang では「プロセス」と呼んでいるものを作る上で,
Scala の Actor が大きな影響を与えているという,以前からあった噂をついに
肯定したのだ。さらに Erlang の VM が,かの有名な Java 仮想マシン (Java Virtual
Machine,JVM) のクローン同然のものであることも告白した。
472デフォルトの名無しさん:2011/04/07(木) 09:29:15.28
>>471
元記事のURLを載せないとフェアじゃない。

http://www.infoq.com/news/2011/04/erlang-copied-jvm-and-scala

Erlang Copied Scala's Actors & Erlang's VM is almost a Clone of the JVM
Posted by Sadek Drobi on Apr 01, 2011
473デフォルトの名無しさん:2011/04/07(木) 10:08:11.74
ErlangってJavaより古いんだ
474デフォルトの名無しさん:2011/04/07(木) 11:09:11.27
翻訳で4/6に延期されるとか、新しいのか?
475デフォルトの名無しさん:2011/04/07(木) 11:17:58.85
1986年に社内公開で、一般公開は1998だと?
javaの一般公開が1995で、開発開始が1990
JVMの件は、直接関係ないんじゃないかな
476デフォルトの名無しさん:2011/04/07(木) 11:36:55.18
ScalaがErlangの影響があるのは明らかだけど、JavaはErlangの影響あんの?
なかったとしたらあまりいい趣味のネタとは思えないな
477デフォルトの名無しさん:2011/04/07(木) 12:45:11.82
>>465
宗教戦争つーより、用途による。

本当に複雑なプログラムを書くなら、高機能なIDEに100万円出せる。
WEB系みたいに割とシンプルならemacsでいい。

言語の型有りか型無しかってのと同じ。
シンプルならperlでもOK。
でも割と難解なものをperlで書くと、指数的に作業がつらくなる。

perlをemacsで置き換えても、意味が変わらない。
478デフォルトの名無しさん:2011/04/07(木) 19:42:56.98
コップ本に「トレイトのメンバを変更すると、そのトレイトを継承したクラスを
利用する側のコードをコンパイルしなおす必要がある」ってあるけど、これは何で?
Javaのインタフェースでは、そんなことは起きなかったと思うけど。
479デフォルトの名無しさん:2011/04/07(木) 20:36:42.16
プラグインがゴミっていうゆとり世代は、自分でプラグイン書けばいいじゃん。お前の能力が低いだけだろ
480デフォルトの名無しさん:2011/04/07(木) 21:07:13.27
>>479
プラグイン書くくらいならJava使った方がいい。

プラグインがゴミなうちは、rubyと同程度の扱いで、
Java未満なのは仕方が無い。
481デフォルトの名無しさん:2011/04/07(木) 21:51:21.01
JavaとRubyを同列で比べるあたりが無知まるだしだな
482デフォルトの名無しさん:2011/04/07(木) 22:04:58.14
Java使ったほうがいいって思うなら黙ってJava使ってればいいよ
483デフォルトの名無しさん:2011/04/07(木) 22:30:16.85
>>482
まともなディベロッパーはscala使ってないから安心しろ
みんな言われなくても仕事ではJava使ってる
484デフォルトの名無しさん:2011/04/07(木) 22:52:27.92
×まともな
○低レベルな
485デフォルトの名無しさん:2011/04/07(木) 23:24:15.56
マイナーな言語を使うことで低レベルなマを排除出来るとかどこかのブログで見た覚えがある
けど実際にscala使ってるサービスってtwitter意外に何があるかしらない
486デフォルトの名無しさん:2011/04/07(木) 23:30:55.36
確かにRubyは人が増えて低レベルなマも増えた
487デフォルトの名無しさん:2011/04/07(木) 23:36:53.83
RubyやScalaでハード寄りのプログラムってかけるの?
488デフォルトの名無しさん:2011/04/07(木) 23:53:26.89
っ『Android』
489デフォルトの名無しさん:2011/04/07(木) 23:58:47.00
>>487
また低レベルな質問がw
490デフォルトの名無しさん:2011/04/08(金) 01:39:42.17
testSubClassをnewするとNullPointerExceptionが出てしまうのはなぜ・・
抽象valが1個しかなかったり、lazyを消すと出ないのですが・・

abstract class testClass {
val test:Int
val test2:Int
lazy val f:Int => Double = t => 1
}

class testSubClass extends testClass{
val test:Int= 1
val test2:Int = 1
println(f(0)) //ここでNullPointerが出る
}

491デフォルトの名無しさん:2011/04/08(金) 02:42:20.46
492デフォルトの名無しさん:2011/04/08(金) 02:58:49.33
Rubyオワコンだったか
493デフォルトの名無しさん:2011/04/08(金) 03:40:17.43
仕事でscala使ってる俺勝ち組
494デフォルトの名無しさん:2011/04/08(金) 03:46:20.35
HaskellとかML系の言語と比べても、implicitパラメータ使ったりすればかなり型に関する柔軟で高度な操作ができるのに、
Rubyがどうとかいってるようじゃ、まだまだレベルが低いな
495デフォルトの名無しさん:2011/04/08(金) 03:47:02.01
>>493
俺も雇ってくれ
496デフォルトの名無しさん:2011/04/08(金) 03:50:33.16
RubyからJavaってScala関係ないじゃん、ここScalaスレ
497デフォルトの名無しさん:2011/04/08(金) 04:04:32.10
>>490
とりあえず2.8.1のREPLで試したら再現しないけど。versionと環境は?
498デフォルトの名無しさん:2011/04/08(金) 04:10:11.59
>>478
ScalaはJavaじゃないから当たり前
499デフォルトの名無しさん:2011/04/08(金) 23:01:44.63
Javaは、NextStepのObj-Cもろにパクッただけよ
Obj-Cの洗練された言語仕様は全く理解できず
コボルのようなコーディングができることに心血を
注いだ結果

糞言語Javaが完成しましたー
500デフォルトの名無しさん:2011/04/08(金) 23:14:25.78
>>499
Objective-Cみたいなうんこ言語にならなくて本当に良かったな
501デフォルトの名無しさん:2011/04/08(金) 23:39:21.52
>>490
scalaのバージョンは2.8.1で、
NetBeans6.9.1+nb-scala-6.9v1.1.0で作業しています。

-Xcheckinit を付けていたのが原因のようで、
それを付けるとREPLでもエラーが出ました。
が、何故なんでしょう。。
502デフォルトの名無しさん:2011/04/09(土) 01:10:26.66
JavaってObj-Cより後発なのか?Obj-Cは洗練された言語だという噂だったな
NextStep使ってたことあるけど軽くて使いやすいいいOSだった
503デフォルトの名無しさん:2011/04/09(土) 01:34:22.85
洗練、洗練か、、、うーん。
504デフォルトの名無しさん:2011/04/09(土) 02:14:45.32
>>499
Objective-CはSmalltalkもろにパクッただけよ
Cと混ぜることに心血を注いだ糞言語
505デフォルトの名無しさん:2011/04/09(土) 02:14:53.35
ちなみにNextStep知ってる人どれぐらいいるんだろ?
506デフォルトの名無しさん:2011/04/09(土) 02:33:05.78
知識としてはみんな知ってんじゃないの
使ったことがあるやつはほとんどいないだろうけど
507デフォルトの名無しさん:2011/04/09(土) 11:24:31.30
Rubyなんて使うのはperlくらいしか使ったことがないWeb系の人達だけだろうに。
508デフォルトの名無しさん:2011/04/09(土) 11:58:43.61
Ruby()笑
509デフォルトの名無しさん:2011/04/09(土) 12:26:04.28
>>506
ハードウェアの現物を見たことはあるよ!w
510デフォルトの名無しさん:2011/04/09(土) 21:24:25.14
おれもおれも、研究室ではSunOSとNEWSのほうが人気だった
511デフォルトの名無しさん:2011/04/09(土) 21:59:39.22
個人でNeXT(ピザでなくキューブのヤツな)を買った人もSunのサーバ(E450とかな)を買った人も
NEWSを買った人もSGIを買った人もDEC Alphaを買った人も昔の職場にいたな
512デフォルトの名無しさん:2011/04/10(日) 04:56:37.99
おじさんたちの話についていけない
そしてscala関係ねぇ
513デフォルトの名無しさん:2011/04/13(水) 08:14:26.99
やっぱscalaっておっさんばっかなの?
514デフォルトの名無しさん:2011/04/13(水) 20:09:38.33
やっぱってなに?w
515デフォルトの名無しさん:2011/04/13(水) 20:11:17.42
中高生プログラマにScalaを布教フラグか。
516デフォルトの名無しさん:2011/04/14(木) 02:04:15.85
小田好先生曰く、
Avoid mutable state but don't demonize it.
517デフォルトの名無しさん:2011/04/14(木) 19:59:26.47
Programming in Scala, First Edition, Now in HTML
http://www.artima.com/forums/flat.jsp?forum=270&thread=324660

わっしょいわっしょい
最近出た原書2版かじり始めようかと思ってたのだけどこれで済ませちゃおう
518デフォルトの名無しさん:2011/04/14(木) 21:52:24.09
PlayframeworkのScala専用サイトができたよ。
http://scala.playframework.org/
519デフォルトの名無しさん:2011/04/16(土) 00:27:52.20
The Scala IDE for Eclipse beta 2 available now!
http://www.scala-lang.org/node/9222
520デフォルトの名無しさん:2011/04/16(土) 09:20:01.09
なんでこのスレ、「Nothingさん」とか「Noneさん」じゃなくて「デフォルトの名無しさん」なの?
521デフォルトの名無しさん:2011/04/16(土) 13:13:52.45
スレ単位で名無しが変わると思ってるの?
522Emptyさん:2011/04/16(土) 14:05:17.59
俺はBox派だから、
523デフォルトの名無しさん:2011/04/16(土) 14:22:41.86
さんを付けるなデコスケ
524デフォルトの名無しさん:2011/04/16(土) 21:27:01.73
Boxってなに?
525デフォルトの名無しさん:2011/04/17(日) 08:48:21.16
箱男さん。
526デフォルトの名無しさん:2011/04/17(日) 16:12:46.87
527デフォルトの名無しさん:2011/04/17(日) 18:15:04.33
528デフォルトの名無しさん:2011/04/17(日) 19:35:28.18
>>527
こんなwikiあるんだ
いいものを知った
529デフォルトの名無しさん:2011/04/17(日) 19:39:10.73
http://www.assembla.com/wiki/show/liftweb/Box
これの日本語訳ですじゃ
530デフォルトの名無しさん:2011/04/20(水) 23:12:58.58
まだちょっと触り始めただけだけど、synchronized みたいに自分定義の機能を
ブロックの前に記述したりできる?

def foo(x:Int) = transaction {
  ...
}

言いたいこと分かるかな?
こんな感じで書けたらアスペクト指向っぽいことができるかなと思ったんで。
531デフォルトの名無しさん:2011/04/21(木) 00:27:25.46
def transaction[A](func: => A):A っていう関数定義して使うとかそういうこと?
532デフォルトの名無しさん:2011/04/21(木) 00:29:09.09
また本が出るって噂聞いたんだけど本当?でるの?
533デフォルトの名無しさん:2011/04/21(木) 00:32:49.44
そもそもscalaではsynchronizedも単なるメソッドなんだから、それのシグネチャみて真似すれば
534デフォルトの名無しさん:2011/04/21(木) 00:52:34.20
>>532
yuroyoro氏と水島氏が書いてるとTwitterで言っていた気がするが、それらとは別のものだろうか
535デフォルトの名無しさん:2011/04/21(木) 22:33:18.30
2.9いつでるんだよ、RC1がでてから1ヶ月以上経ってないか?
536デフォルトの名無しさん:2011/04/21(木) 23:49:39.07
2.8は3ヶ月
537デフォルトの名無しさん:2011/04/21(木) 23:51:57.20
scala news archiveだと2.9rc1が3/25付けの記事
538デフォルトの名無しさん:2011/04/22(金) 00:23:50.70
>>531,533
ありがとう。脳からカウパー液出たわ。
539デフォルトの名無しさん:2011/04/22(金) 07:50:28.22
英語でも良いけど Lift でいい本はないかな。
540デフォルトの名無しさん:2011/04/22(金) 08:10:13.64
昨日からScalaの勉強始めたんだけど、
なんだかPerlと同じにおいがする...
後からソース見直した時分かりにくくない?
まだScalaの流儀に慣れてないからだろうけど
541デフォルトの名無しさん:2011/04/22(金) 10:37:16.50
>>540
pythonでもやってなさい
542デフォルトの名無しさん:2011/04/22(金) 11:03:27.49
>>540
Javaでもやってなさい
543デフォルトの名無しさん:2011/04/22(金) 13:22:35.79
>>540
> まだScalaの流儀に慣れてないからだろうけど

根本的に何も理解してないから。よりによってPerlとは…
544デフォルトの名無しさん:2011/04/22(金) 14:29:41.25
PerlとPHPとJavaしか知らんのだろう
だから一回Haskellやってから来いと
545デフォルトの名無しさん:2011/04/22(金) 15:07:33.63
どうせScalaもHaskellもメジャーになれない言語で終わるから慣れようとする必要はない
546デフォルトの名無しさん:2011/04/22(金) 19:55:57.58
どんな言語だって慣れなきゃわかりにくいだろ
547デフォルトの名無しさん:2011/04/22(金) 21:36:38.45
理解すればいい
548デフォルトの名無しさん:2011/04/22(金) 22:24:15.39
省略記法の多さ、言語拡張系、表現の自由度の高さが、レベルにばらつきがあり、
その差か解消できないチームとかだとカオスになりそうな感じはあるな。
でもそれでも手を出したくなる良いとこ取り言語なんだよな.
549デフォルトの名無しさん:2011/04/22(金) 22:30:24.96
マ板の話題はマ板でしてくれ
550デフォルトの名無しさん:2011/04/22(金) 23:05:54.70
これがscalaの真の力

def main(ゲソ: Array[String]) {
val イ = (1 + 1) の 計算 を しなイカ
val カ = 3 を 倍 に しなイカ
val 娘 = "スイカ" の 料理 を 作らなイカ
println(イ)
println(カ)
println(娘)
}
551デフォルトの名無しさん:2011/04/23(土) 00:21:30.27
パーサの常識を軽く超えてるな
552デフォルトの名無しさん:2011/04/23(土) 02:29:17.19
553デフォルトの名無しさん:2011/04/23(土) 12:48:10.61
メジャーにならない=覚えなくていい
ってちょっと違くね?scalaに限らずあまりメジャーじゃなくてもその言語でのいい条件の仕事が転がってるなら
覚えた方がいいじゃん。向上心のないやつは一生Javaで安い仕事やってればいいんじゃねぇの?
554デフォルトの名無しさん:2011/04/23(土) 13:00:38.45
Scalaの高い仕事紹介してくれよ
555デフォルトの名無しさん:2011/04/23(土) 13:31:00.85
給料とか関係なく、JavaかPHPしかできません、他の言語覚える気ありませんっていう人より
Scalaとかある程度できますって人と一緒に仕事したいよな
556デフォルトの名無しさん:2011/04/23(土) 13:52:44.48
海外だとScalaはどうなんだろうね?
557デフォルトの名無しさん:2011/04/23(土) 14:06:07.55
開発者がrubyにはしるくらい普及してない
558デフォルトの名無しさん:2011/04/23(土) 14:10:01.09
要は使いようやねん
559デフォルトの名無しさん:2011/04/23(土) 18:25:06.93
>>555
激しく同意
560デフォルトの名無しさん:2011/04/23(土) 19:09:56.16
CeylonあるからScala不要になっちゃったね
561デフォルトの名無しさん:2011/04/23(土) 19:11:28.18
562デフォルトの名無しさん:2011/04/23(土) 19:28:36.96
まだコンパイラもできてないんじゃないか…
563デフォルトの名無しさん:2011/04/23(土) 19:33:48.56
Ceylonの仕様は神過ぎる
564デフォルトの名無しさん:2011/04/23(土) 19:42:15.59
>>563
詳しく知らないんだが、ceylonの仕様の神具合を書いてみてくれ
565デフォルトの名無しさん:2011/04/23(土) 19:49:35.49
次から次へとJavaの派生が出ておっさんついて行かれへんわ
566デフォルトの名無しさん:2011/04/23(土) 19:56:55.92
>>552
printlnでは何が出てくるの?
567デフォルトの名無しさん:2011/04/23(土) 19:57:18.36
http://www.infoq.com/jp/news/2011/02/lift-jruby

私は Scala が好きです。Scala は私のお気に入りのプログラミング言語なのです。
これまで数多くの開発組織で,Scala に関する話をしてきました。
しかしその後の Scala の普及状況を見たとき,私はこの言語が Ruby や,
あるいは Python の採用レベルにさえも達しそうもないことに気付いたのです。
568デフォルトの名無しさん:2011/04/23(土) 22:34:17.17
はいはい>>178>>178
569デフォルトの名無しさん:2011/04/24(日) 00:00:02.86
http://itpro.nikkeibp.co.jp/article/MAG/20110420/359601/
特集5:3時間で次世代言語がわかる!?
JavaユーザーのためのScala早わかり
570デフォルトの名無しさん:2011/04/24(日) 00:21:11.74
早わかりとかいいよもう
571デフォルトの名無しさん:2011/04/24(日) 00:38:20.81
これからはScalaの時代なのでしょうか?
窓際プログラマーである私の救世主となってくれるのでしょうか?
572デフォルトの名無しさん:2011/04/24(日) 00:46:28.53
諸君らの愛したClojureは死んだ!なぜだ!
573デフォルトの名無しさん:2011/04/24(日) 01:00:10.90
死んだの?
574デフォルトの名無しさん:2011/04/24(日) 01:46:09.14
clojure急にでてきてワロタ
572 はなにがしたいんだ?
575デフォルトの名無しさん:2011/04/24(日) 04:06:25.24
言語って単なる道具だから、救世主とかじゃなしに使いこなすかどうかっていう話じゃないの
576デフォルトの名無しさん:2011/04/24(日) 13:01:20.63
http://www.google.co.jp/search?q=scala+ceylon&ie=UTF-8&oe=UTF-8&hl=ja
http://www.infoq.com/jp/news/2011/04/ceylon

scalaが複雑と思ったので作ったようなので、
scalaあればいらないんじゃないか?みたいな反応
577デフォルトの名無しさん:2011/04/24(日) 14:10:48.59
一番の目的は、mavenやosgiの要らないモジュール管理みたいだねぇ
javaとの相互運用性は落ちそうってのがどういう目的なんだろう。
redhatなので投入先は、管理ツールやJBOSSのライブラリとツールなんだろうか?
578デフォルトの名無しさん:2011/04/24(日) 23:06:25.12
clojureに関しては、Lisp系独特のとっつき難さがあっても、
STMが組み込みとかいろいろScalaより機能的に優れてる点はあるからわかるんだけど、
ceylonは、「Scalaは複雑すぎるから、もうちょっとシンプルにJavaを拡張しました」程度の印象で、
「Scalaより明らかに優れた機能」とかが見当たらないんだけど・・・どうなの?
この解釈間違ってる?
579デフォルトの名無しさん:2011/04/24(日) 23:09:21.95
型安全なリフレクションなど新しいアイデアが入っているらしい
580デフォルトの名無しさん:2011/04/24(日) 23:46:16.39
そいつは…scalaでも取り込めるような。
というかなんかceylonってvb.netくさい…ような…。
.net意識してるよね、明らかに。
けどその中で駄目っ子のvb.netを最も意識してるように見える。
しかし赤帽もなんでこんな事するかな…。
581デフォルトの名無しさん:2011/04/24(日) 23:47:15.09
底辺プログラマが使えるものを提供しないとw
582デフォルトの名無しさん:2011/04/24(日) 23:52:25.90
底辺はずっとJava使ってりゃいいんじゃね?
583デフォルトの名無しさん:2011/04/25(月) 00:09:48.32
ライブラリレベルで取り込めるような新機能だと存在意義が怪しくなるぞ
Clojureが失速したのも他の言語が真似できるような機能しかなかったからだろ
584デフォルトの名無しさん:2011/04/25(月) 00:13:29.02
Clojure事情詳しくないんだけど、失速してるの?
でも例えば、STMってScalaの場合副作用ある操作が原理的にできちゃうけど、
Clojureの場合組み込みだから原理的に副作用ある操作が禁止できてHaapyとかじゃなくて?
585デフォルトの名無しさん:2011/04/25(月) 00:17:32.57
新機能よりもバランスなんじゃないの?scalaの美点って。
586デフォルトの名無しさん:2011/04/25(月) 05:04:33.47
Clojure はそもそもメインストリームレベルの人気を獲得するのはむずかしいと思うよ。命令型言語の延長として書き始められる Scala と違って完全にパラダイムの転換を要求するから。
587デフォルトの名無しさん:2011/04/25(月) 07:23:41.97
赤帽って今でもクラス図作るよりも
フローチャートで設計する旧型世代ばっかり
だったからなぁその文化で言語作ったんだろう
588デフォルトの名無しさん:2011/04/25(月) 12:17:03.49
>>580
> そいつは…scalaでも取り込めるような。

それ言い出したら多くの言語が同じになってしまう。
589デフォルトの名無しさん:2011/04/25(月) 21:17:21.85
何でもできる言語より、限定された目的のための機能が制限された言語の方が使いやすい、
という考え方だってあるわけだしな。
590デフォルトの名無しさん:2011/04/25(月) 22:43:17.39
つか、DSLってそういうもんだよね。
591デフォルトの名無しさん:2011/04/26(火) 01:35:57.66
Logging API や Log4j を使ってクラス単位のログ出力先の定義ってどうしてる?
ログ出力のためだけにコンパニオンオブジェクトとか定義するのはアホらしいし、
かといってログ出力ごときがインスタンス変数になるのもアホらしいし。
592デフォルトの名無しさん:2011/04/26(火) 02:00:10.92
>>591
mixinするか、もしくはpackage objectに定義するとかが1番コード量は少ないかと。
この辺はもう好みの問題じゃね?
593デフォルトの名無しさん:2011/04/26(火) 02:02:08.88
http://www.infoq.com/jp/news/2011/04/new-jvm-lang
今私は,この件で私を無知と呼んだすべての人々に対して,多大な謝罪を求めます。特に Scala ファン,あなた方に,ね ;-)
594デフォルトの名無しさん:2011/04/26(火) 02:10:35.72
どういう意図を持つ発言なのか考えもせず
単にそれっぽい発言だからということで貼る俺って素敵、まで読んだ
595デフォルトの名無しさん:2011/04/26(火) 02:22:21.65
ガビーンさんの言っていることがよくわからない
596デフォルトの名無しさん:2011/04/26(火) 07:39:06.51
>>594
どういう意図なのか説明頼む
597デフォルトの名無しさん:2011/04/26(火) 08:10:26.39
DSLって言葉が流行ってるからって、DSLと汎用言語を一緒に議論するのはちょっと違う気がするが
598デフォルトの名無しさん:2011/04/26(火) 08:54:38.26
「XMLカコイイ! Beanや構造体は時代遅れ!」 とか騒いでた時代を思い出します
599デフォルトの名無しさん:2011/04/26(火) 09:07:49.60
まあ、Scalaが最強のDSL言語なのは間違いないでしょ
Ceylonはメソッド名にASCIIしか認めてないらしいけど、なんでそんな制限をしているのかさっぱりわからない
600デフォルトの名無しさん:2011/04/26(火) 10:27:48.97
DSLって「事務計算に特化したCOBOL最高!」とかそういうことだっけ
601デフォルトの名無しさん:2011/04/26(火) 11:13:07.79
ScalaはDSLじゃない。
602デフォルトの名無しさん:2011/04/26(火) 22:18:04.45
まぁceylonなんてもう少ししたら話題にもならなくなるんじゃ
603デフォルトの名無しさん:2011/04/26(火) 22:33:49.17
ceylon(笑)

こうですか?`
604デフォルトの名無しさん:2011/04/26(火) 23:06:16.11
Noopとはなんだったのか
605デフォルトの名無しさん:2011/04/26(火) 23:07:51.37
>>602

JavaTeaに対して、CeylonTeaという名前をつけたくらいしか、笑えるところない言語だもんな。

まだ、仕様をきめただけで、実装もまだ、開発環境もまだ、、だよ。
5年くらい開発が進まないと、話にもならない。


Scalaはようやく開発環境もそろってきて、いろんな話できる段階に来た。
606デフォルトの名無しさん:2011/04/27(水) 00:03:10.11
http://www.scala-lang.org/node/9314
2.9.0RC2のお知らせ
607デフォルトの名無しさん:2011/04/27(水) 00:22:10.88
オダチャンまた俺にだまって
RC2公開かよ

608デフォルトの名無しさん:2011/04/27(水) 00:23:30.78
驚かせたくて…ゴメンね
609デフォルトの名無しさん:2011/04/28(木) 00:47:39.18
誰とは言わないけど、少し自重しろ。
他のコミュニティに喧嘩売りまくっても、どんどん雰囲気が悪くなるだけだ。

自分がScala界の発展を背負うんだ、くらいの気負いがあるのかもしれないが、
ムーブメントはみんなで作り上げていくものだ。君だけのものじゃない。
610デフォルトの名無しさん:2011/04/28(木) 07:30:49.27
>>609

そんな奴はいない
611デフォルトの名無しさん:2011/04/28(木) 10:08:07.39
Ceylonにコミュニティあるの?
612デフォルトの名無しさん:2011/04/28(木) 18:58:30.76
>>609
ノイローゼじゃね?
613デフォルトの名無しさん:2011/04/29(金) 04:25:51.37
>>609
TwitterでよくScalaの事書いてる某氏のこと?
614デフォルトの名無しさん:2011/04/29(金) 04:27:19.87
>>609
自分、不器用でScala。
615デフォルトの名無しさん:2011/04/29(金) 04:38:40.41
>>613
誰だよ
616デフォルトの名無しさん:2011/04/29(金) 06:47:00.21
オレだよ、オレ!
617デフォルトの名無しさん:2011/04/29(金) 13:21:18.94
あるディレクト内にあるCSVファイルを全部読み込んで、
指定した複数種類のキーワードごとに、出現回数をカウントしたいだが、どうすれば?

Scalaだと簡潔にかけるかなあ?
618デフォルトの名無しさん:2011/04/29(金) 13:37:00.30
>>617
なにその宿題
619デフォルトの名無しさん:2011/04/29(金) 14:03:25.74
>>617
質問が大雑把すぎないか?
620デフォルトの名無しさん:2011/04/29(金) 14:09:28.02
>>609
2chなんて所詮そんな場所だろ?
それとも2ch以外での活動を批判したいのかわからないけど、
直接名前だすか、もっと具体的にどこが悪いのか指摘したほうがいいんじゃねぇの?
仮に、そういう人が存在するなら本人のためにも。
あいまい過ぎて何が言いたいのかわからない。
621デフォルトの名無しさん:2011/04/29(金) 15:18:51.26
>>618

ごめん。
Ceylonとかの話するよりかは建設的と思ったので。

Ceylonとかって、OSの設定とかいじったりするスクリプトを狙っているのだろう?
Scalaでもスクリプト書くのは十分容易なはず。
622デフォルトの名無しさん:2011/04/29(金) 16:03:33.99
JVM系の言語でスクリプトなんて苦痛
短いのはGaucheで書いてるわ
623デフォルトの名無しさん:2011/04/29(金) 17:57:47.61
>>617
import scala.io.Source

val file = "foo.csv"
var keyword = "hoge"
val csv : Array[Array[String]] =
Source.fromFile(file).getLines.map(_.split(",")).toArray
val n = csv.flatten.filter(_ == keyword).length
println(n)

これでどうだ!
624デフォルトの名無しさん:2011/04/29(金) 18:18:31.36
>>617
確かに建設的な議論をすべきだな。ちなみに>>623は自前でCSVをパースしているが
ちゃんとやるにはopencsvなどライブラリを使うべき。

import au.com.bytecode.opencsv.CSVReader

val file = "foo.csv"
val keyword = "hoge"
val csv = new CSVReader(new FileReader(file)).readAll();
val n = csv.flatten.filter(_ == keyword).length
625デフォルトの名無しさん:2011/04/29(金) 21:06:50.61
SourceとFileの混在はしばらく続くのかな…面倒だ
626デフォルトの名無しさん:2011/04/29(金) 21:27:42.48
混在?混じってなんかないぞ。
627デフォルトの名無しさん:2011/04/29(金) 22:08:24.39
Sourceって、ファイル閉じない奴だっけ?
628デフォルトの名無しさん:2011/04/29(金) 22:14:31.95
IOライブラリはいつ入るの
629デフォルトの名無しさん:2011/04/29(金) 22:22:30.29
>>623, >>624

Thanks!

だけども、いまだに、こういうやりかたに慣れないなあ。
2つとも、ファイルの全内容を、Array変数 csv に格納したあとでflatten.filter しているけど、
もしも
・1ファイルが大きい場合は、Array変数あふれるのでは?
・Keywordが複数ある場合は、flatten.filter を複数回やるの?
とか考えちゃう。


単純に、
Foreach F ∈ {指定ディレクトリ内の全.csvファイル}
__ Foreach L ∈ {ファイルFから一行づつ取り出し} begin
___ ___ if (Lはword1を含む) count1 = count1 +1
___ ___ if (Lはword2を含む) count2 = count2 +1
___ end

みたいに、やりたいのだが、、。 逐次処理的だけど。
630デフォルトの名無しさん:2011/04/29(金) 22:41:56.89
>>629
そういう書き方をするなら、scalaで書いても他の言語と大差ないと思うよ。

var count1 = 0
var count2 = 0
for(F <- ...) {
 for(L <- ...) {
  if(L contains word1) count1 += 1
  if(L contains word2) count2 += 1
 }
}
631デフォルトの名無しさん:2011/04/29(金) 22:46:34.29
>>624
問題文には複数のキーワードってあるから結果はMapにすべきなんジャマイカ。
import au.com.bytecode.opencsv.CSVReader

val file = "foo.csv"
val keyword = "hoge"
val csv = new CSVReader(new FileReader(file)).readAll();
val result: Map[String, Int] = keywordList.map {
keyword => (keyword -> csv.flatten.filter(_ == keyword).length)
}.toMap
632デフォルトの名無しさん:2011/04/29(金) 22:58:35.98
一度にファイルの内容がメモリに読まれる事を懸念するなら遅延リスト(Stream)を使えばおk。
flattenが複数呼ばれるのがいやなら、先に束縛しておけばおk。

val file = "foo.csv"
val keywordList = List("hoge", "piyo")
val csv : Stream[Array[String]] = Source.fromFile(file).getLines.map(_.split(",")).toStream
val words = csv.flatten
val result: Map[String, Int] = keywordList.map {
keyword => (keyword -> words.filter(_ == keyword).length)
}.toMap
633デフォルトの名無しさん:2011/04/29(金) 23:03:29.47
>>Array変数あふれる
ってどういうことだろう。配列の最大長を超えるってこと?どんなCSVやねん。
634デフォルトの名無しさん:2011/04/29(金) 23:09:42.79
>>632
> val words = csv.flatten

ここで一気に読まれないの?
635デフォルトの名無しさん:2011/04/29(金) 23:19:52.20
>>634
遅延リストのflattenは Haskellでは一気に評価されないのでScalaでも同様だと
思ったけど、よく考えたら違うかも。
636デフォルトの名無しさん:2011/04/29(金) 23:29:08.64
>>634, 635
ScalaでもHaskellと同様に遅延される。評価は必要なときまで行われない。
https://lampsvn.epfl.ch/trac/scala/browser/scala/tags/R_2_8_1_final/src//library/scala/collection/immutable/Stream.scala
450 override def flatten[B](implicit asTraversable: A => /*<:<!!!*/ Traversable[B]): Stream[B] = {
451 def flatten1(t: Traversable[B]): Stream[B] =
452 if (!t.isEmpty)
453 new Stream.Cons(t.head, flatten1(t.tail))
454 else
455 tail.flatten
456
457 if (isEmpty)
458 Stream.empty
459 else
460 flatten1(asTraversable(head))
461 }
637デフォルトの名無しさん:2011/04/29(金) 23:40:58.53
あるディレクト内にあるCSVファイルを全部読み込んでのところを考慮するとどうなる?
俺が考えるとmutableなマップを用意して+1するようなやり方になっちゃう


import java.io.File
import au.com.bytecode.opencsv.CSVReader
import collection.{mutable, breakOut}

val path = """c:\fizz\buzz"""
val keywords = List("hoge", "fuga")
val result: mutable.Map[String,Int] = keywords.map(_ -> 0)(breakOut)
for {
 csv <- new File(path).list.filter(_.endsWith(".csv"))
 word <- new CSVReader(new FileReader(csv)).readAll().flatten
 if result.contains(word)
} result(word) += 1
638デフォルトの名無しさん:2011/04/29(金) 23:47:27.32
http://stackoverflow.com/questions/4255021/how-do-i-read-a-large-csv-file-with-scala-stream-class
検索したら見つけた

要約すると Source.fromFile(...).getLines は遅延されてるから問題ない
逆に collection.immutable.Stream を使うと処理は遅延されるけど、
結局メモリに読み込まれるから駄目
639デフォルトの名無しさん:2011/04/29(金) 23:59:45.59
>>638
なるほど。確かに今回は遅延リスト(Stream)ではなくIteratorのようなTraversableOnceを使うべきか。
val file = "foo.csv"
val keywordList = List("hoge", "piyo")
val csv : Iterator[Iterator[String]] = Source.fromFile(file).getLines.map(_.split(",").toIterator)
val result = csv.flatten.foldLeft(Map[String,Int]()) {
case (store, item) if keywordList.contains(item) =>
store.updated(item, store.get(item).getOrElse(0) + 1)
case (store, _) => store
}
640デフォルトの名無しさん:2011/04/30(土) 05:03:01.65
Iteratorは、本当に一度しか使用しない場合。
Strameは2回以上使う予定がある場合。

という違いだよな?

Iteratorは一度使いきってしまったら、もう一度Iterator自体を生成しないと同じことができない、使いきりのもの。
そのかわり一度走査した要素を保持しないからメモリは消費しない。

Streamは、初回の評価は遅延されるけど、2回目以降はメモ化されているというか。
(この場合メモ化っていう言い方があってるのかわからないけど)

SourceのgetLinesが返すのはIteratorだから、そのIteratorを何度も使う場合は、
toListやtoStreamなどして違うcollectionに変換する必要がある。
逆に1回きりしか使わないのであればIteratorのまま使ったほうがよい。
641デフォルトの名無しさん:2011/04/30(土) 05:43:59.96
なんども使いたいなら、その数だけIteratorを作ればいいんじゃない?
642デフォルトの名無しさん:2011/04/30(土) 06:11:21.01
対象とするファイルがでかすぎるとか、
メモリに余裕がないとか、
次読み込むときには内容が変わってる可能性がある

という場合以外は、メモリに保持しておいたほうが、2回目以降のアクセスがはやくできて便利じゃないの?
643デフォルトの名無しさん:2011/04/30(土) 09:16:03.11
>>642
同意。最近のコンピュータはメモリたくさん積んでるから、数万行あるCSVファイルを
メモリに展開してもけっこう問題なかったりする。>>617の例だと読むのは一度でよいが、
より複雑な場合だとメモリに保持して置いた方がよいね。
開発の早い段階での効率化は悪だっていう説もあるから、あとで実際に問題になってから
考えるのでもよさそう。
644デフォルトの名無しさん:2011/04/30(土) 12:03:33.66
csvとか頭悪そうで嫌いです
645デフォルトの名無しさん:2011/04/30(土) 12:38:47.66
関係無いけどPHPなんかはcsv専用の関数がバグってるのにもう何年も修正してないな
646デフォルトの名無しさん:2011/04/30(土) 21:21:26.17
fgetcsv?
海外製のソフトは日本語対応がいい加減だよね
647デフォルトの名無しさん:2011/04/30(土) 21:58:41.40
Shift_JISみたいなクソ文字コード対応させられるのはたまらんだろ。
2byte目にバックスラッシュとか…
648デフォルトの名無しさん:2011/04/30(土) 23:53:19.70
データがCSV -> opencsv で読む -> Iterator[String]
データがExcel -> poi で読む -> Iterator[String]
データをデータベースから -> Iterator[String]
メモリ上の配列 -> Array#toIteratorで変換 -> Iterator[String]

いずれにせよ、あとはIterator[String]をmapやfilterやfoldで処理して終わり。
ひょっとしてScala最強なんじゃないか。
649デフォルトの名無しさん:2011/05/01(日) 00:16:38.25
んなこといったらLinqのあるC#が最強になってしまう
650デフォルトの名無しさん:2011/05/01(日) 04:16:11.32
>>648
べつにどんな言語でもある程度似たようなことできるんじゃね?
あと、ArrayをわざわざIteratorにする意味がわからんが?
651デフォルトの名無しさん:2011/05/01(日) 08:34:57.26
>>650
JavaやC#はmap, filterができないお。
あと、こういう作りだと単体テストが楽だお。
モックとかいちいち用意しなくても引数を切り替えるだけだお。
Array#toIteratorは確かにいらなかったお。
652デフォルトの名無しさん:2011/05/01(日) 11:10:23.95
最近のC#にはmapやfilterに該当する高階関数は一通りあるだろ
653デフォルトの名無しさん:2011/05/01(日) 11:40:55.19
.NETだと
Aggregate - foldl
Select - map
Where - filter
という感じだね
LazyなリストはIEnumerableで表現する

>>651はLINQでぐぐるといいよ(福岡のアイドルグループじゃないほうな)
654デフォルトの名無しさん:2011/05/01(日) 11:57:09.01
for love in qshu
655デフォルトの名無しさん:2011/05/01(日) 13:01:23.22
>>652 >>653
C#って中途半端に関数型だから使いにくいんだよね。例えば列の直積を取りたいとき、

// C# 4.0
IEnumerable<Tuple<A,B>> prod<A,B>(IEnumerable<A> xs, IEnumerable<B> ys) {
return xs.SelectMany(x => ys.Select(y => new Tuple<A,B>(x, y)));
}

// Scala 2.8
def prod[A,B](xs: Seq[A], ys: Seq[B]) =
xs.flatMap(x => ys.map((x,_)))

俺はScalaの方がいいな。
656デフォルトの名無しさん:2011/05/01(日) 14:42:45.03
>655
ほぼ同じじゃん。
657デフォルトの名無しさん:2011/05/01(日) 14:44:21.24
>>655
んー
まあ関数型と思って見れば足りないものがいろいろ多いのは同意だけど
その「中途半端に関数型」な部分がなんも無いよりは、あったほうが俺は便利だと思うな
Javaと比較しての話
658デフォルトの名無しさん:2011/05/01(日) 16:57:19.28
使用される最大メモリを低減するのを、遅延評価に頼って書くのは間違いだろう
素直にループ/イテレーションさせて書くのが正解だと思うが
標準のコレクションのmap,filterとかの高階メソッドじゃなくシーケンス内包
javaには無いって話だけど、標準にはないけどCommons Collectionsにはあるし
659デフォルトの名無しさん:2011/05/01(日) 18:01:37.33
>>658
日本語おかしくて何が言いたいのかわからん
660デフォルトの名無しさん:2011/05/01(日) 20:14:11.42
>>659
別にそこまでおかしくないだろ。
でも具体的なソース無しにCommons Collections だとできるとか言われても
よくわからんな。ホントかどうかも怪しい。
661デフォルトの名無しさん:2011/05/01(日) 21:18:03.42
「中途半端に関数型」ってのは、まさにscalaに対して常々感じていた
ことだなあ。

1. 高階関数を使うと、型宣言の嵐になる。
2. メソッド呼び出しが後置形式なので、関数適用が順に並ばない
  たとえば filter g . map f xがfilter(g, x.map(f))みたいになる。

まあOOPとFPを共存させる上でやむを得ないとはわかっているんだけどね。
662デフォルトの名無しさん:2011/05/01(日) 21:42:38.50
>>661
確かに。関数型言語度で並べるならこんな感じか。
Java < C# <<< Scala < F# < Haskell
663デフォルトの名無しさん:2011/05/01(日) 21:52:31.03
OOPとFPの融合というのが、単なる幻想でもっと純粋なHaskellのような関数型が主流になるのか、
それともScalaみたいな言語が使われるのか、
それとも、両方残って使い分けられるのか?

少なくとも、「純粋なオブジェクト指向だけ」っていうのは流行らなくなるんだろうな。
Javaもクロージャとか取り込むわけだし
664デフォルトの名無しさん:2011/05/01(日) 21:56:16.33
「OOPとFPの融合」
という点だけ考えたら、べつにJVM上でなくてもよかったわけで、
Javaとの互換性とか考えずにネイティブで動く言語を一から作ったら、
もうちょっと綺麗な言語仕様になるんだろうな。
まぁ流行るかどうかはべつにして
665デフォルトの名無しさん:2011/05/02(月) 01:47:15.86
>662
Java < C# <<< Scala
ではなく
Java <<< C# < Scala
だと思うけど。
C#は何かと新しい。
666デフォルトの名無しさん:2011/05/02(月) 11:10:07.87
>>663
Haskellのtype classはうまいことFPにOOPを組み合わせてる。
type alias, associateid type access, implicit argument dedection,
multi-type traitsあたりをちゃんと機能させて、既存のclassを使って、
新規にclass定義せずに型安全にOOP出来るのはHaskellくらい。
他の言語はtraits/concept辺りの機能が弱すぎ。

667デフォルトの名無しさん:2011/05/02(月) 11:53:10.15
しかしオブジェクトが状態をもてないOOPというのは
OOPといえるのだろうか
668デフォルトの名無しさん:2011/05/02(月) 12:26:49.26
Haskell知らないでしょw
669デフォルトの名無しさん:2011/05/02(月) 12:36:09.70
>668
Mark Jonesがtype classを提案した頃からHaskellとは
付き合ってきているつもりだが…ICFPにまだ出てないような
最新動向は確かに知らない。

元の話題について。
OOPとFPとの統合で難しい点のひとつはパラメトリック多相と
部分型多相の共存で、scalaもMLもそれで苦労しているね。
もちろん、破壊代入がなければ問題は生じないけれど。
670デフォルトの名無しさん:2011/05/02(月) 13:27:39.07
>>655
こういう勘違いが本当に悲しい。
C#は確かに進化しているけど、型推論は永遠に中途半端、パターンマッチできない、lazy評価ができない、
nullぽが普通に起きる、対話環境ない、LINQによってやっとmap,filterができる、でもペアすらない。

C# <<< Scala は明らか。
671デフォルトの名無しさん:2011/05/02(月) 13:49:52.60
構文の柔軟性は、
IDEの支援とどっちを取るかだね。
672デフォルトの名無しさん:2011/05/02(月) 13:52:29.22
その辺って単に便利ってだけじゃなくて関数型志向と関係あんの?(たとえば型推論がより賢ければより関数型なの?)
自分的にはC#より関数型だなあって思うのはなるたけ副作用を嫌うとこ(valとかimmutableコレクションとか)と
文じゃなくて式なのが多いとこかなぁって思ってたけど
673デフォルトの名無しさん:2011/05/02(月) 14:07:16.71
>>670
ペアってTupleのこと?
TupleならC#4.0から、使いづらいけど一応あるよ
674デフォルトの名無しさん:2011/05/02(月) 15:18:30.56
>>670
つ CsharpRepl

LINQによってmap,filter云々てのもなんかおかしくね
ジェネリックなシークエンスと
ラムダ式やファーストクラスの関数がサポートされていることが本質的で
その辺があるのなら、(もし)なくても作ればいいだけ、簡単だし…
ML族に比べたらScalaの型推論も十分半端

まあ結論には特に異は唱えないけど
ゼロイチじゃなくてただの程度問題に見える
675デフォルトの名無しさん:2011/05/02(月) 16:30:45.17
型推論は、Scalaの一番痛いとこだろ。
676デフォルトの名無しさん:2011/05/02(月) 17:23:00.23
なんで痛いところなのかわからない
677デフォルトの名無しさん:2011/05/02(月) 17:54:18.57
>>671
構文とIDEの支援とどっちを取るかって構文に決まってるだろJK。
ソースコードは書くことと読むことどちらも大事なのはプログラマの常識だろう。
あとIDEの支援はあとから良くなることもあるしな。

>>673
//Scala 2.8
val (name, age) = getNameAndAge()
println(name+"さんは"+age+"歳です。")

//C# 4.0 (笑)
var nameAndAge = getNameAndAge();
System.out.println(nameAndAge.Item1+"さんは"+nameAndAge.Item2+"歳です。");
678デフォルトの名無しさん:2011/05/02(月) 18:01:00.92
>677
それはペアっつーか、Extractorだろ。
679デフォルトの名無しさん:2011/05/02(月) 18:33:11.60
クロージャがあれば関数型ができるというのは暴論だろ
その言語のライブラリとか文化的に関数型パラダイムがなくて、
一人だけ関数型プログラミングやってたら単に痛いやつになっちゃう
680デフォルトの名無しさん:2011/05/02(月) 18:42:53.47
タプルのアンパック代入はmonoでそういう拡張があったような気がするな、まあどうでもいいけど
681デフォルトの名無しさん:2011/05/02(月) 21:19:20.82
scalaもいつか、無名関数の引数のところに

(x,y) => x + y

みたいなパターンマッチ式を書けるようになると嬉しい。
682デフォルトの名無しさん:2011/05/02(月) 21:20:02.56
あ、ペアを分解するパターンマッチという意味ね
683デフォルトの名無しさん:2011/05/02(月) 22:09:01.91
いちいち、caseって書きたくないという話?
684デフォルトの名無しさん:2011/05/02(月) 22:12:29.65
俺も最近考えた言語なのにパターンマッチ渡しを採用しない理由がわからん
685デフォルトの名無しさん:2011/05/02(月) 22:22:17.89
>>681
できるよ。
List((1,2), (3,4)).map {case (x, y) => x+y}
686デフォルトの名無しさん:2011/05/02(月) 23:23:35.45
OCamlの型システムの駄目なところ

1. 型推論の邪魔になるからオーバーロードがない

2. 単純なアップキャストですら明示的におこなわないと駄目

class a =
object
method a = 1
end;;

class b =
object
inherit a
method b = 2
end;;

[new a; new b];;
Error: This expression has type b but an expression was expected of type a
The second object type has no method b

こう書かなきゃ駄目
[new a; (new b :> a)];;
687デフォルトの名無しさん:2011/05/02(月) 23:23:58.19
3. 継承してもサブタイプにならないことがある

class a =
object (self : 'a)
method value = 1
method calc (o: 'a) = self#value + o#value
end;;

class b =
object
inherit a
method value2 = 2
end;;

(new b :> a);;
Error: Type b = < calc : b -> int; value : int; value2 : int >
is not a subtype of a = < calc : a -> int; value : int >
Type a = < calc : a -> int; value : int > is not a subtype of
b = < calc : b -> int; value : int; value2 : int >


で、どの言語が中途半端だって?
688デフォルトの名無しさん:2011/05/02(月) 23:27:39.54
関数型言語オイルレスリングスレでどうぞ
689デフォルトの名無しさん:2011/05/03(火) 01:51:03.15
C#って関数内関数ってできないよね。
例えばScalaでいう
def hogehoge() = {
def calc(x: Int) = {
if (x > 0) x+1
else x-1
}
Array(1,2,3).map(calc)
}
みたいなことをC#でやろうとすると
private int calcHogehoge(int x) {
if (x > 0) return x + 1;
else return x - 1;
}
public Array<int> hogehoge() {
return [1,2,3].map(calcHogehoge);
}
みたいになってとっても残念な気持ちになる。
690デフォルトの名無しさん:2011/05/03(火) 01:56:26.35
>>689
ラムダでいいじゃん
691デフォルトの名無しさん:2011/05/03(火) 01:58:23.38
>>690 kwsk
692デフォルトの名無しさん:2011/05/03(火) 02:18:50.02
>>689
>>671
そのものズバリ、ラムダ式、匿名メソッドでぐぐればいいと思う

その例だと単に
new []{1, 2, 3}.Select(x => x > 0 ? x + 1 : x - 1)
とでも書くか、
Func<int, int> calc = delegate(int x) { .... };
とでも書く

別にC#のスレじゃないからC#知らなくてもいいと思うけど
ロクに知らないことまで無理して貶すのは如何なもんだろうか
693デフォルトの名無しさん:2011/05/03(火) 03:02:44.36
HTTPでテキストデータをダウンロードするときは、Source.fromURLで簡単に出来ますが、
画像などのバイナリデータを簡単にダウンロードする方法はないのでしょうか?
694デフォルトの名無しさん:2011/05/03(火) 03:15:23.49
つ getByteStream()
695デフォルトの名無しさん:2011/05/03(火) 03:17:44.09
>>692
確かに細かな構文が違っていたのは謝る。でもラムダ式、匿名メソッドを知らない
わけじゃないよ。言いたかったのは、クロージャの式がある程度複雑になったときに
無名関数は適さないし、delegateは構文が重すぎだろ。
さらに構文だけじゃなくて、Genericsができないから実用上はとても使えない。

C#で内部関数を定義するためにdelegateをわざわざ使うのはあまり見ないけど
Scalaだと標準ライブラリ内でもよくあるってのは事実だろう。
696デフォルトの名無しさん:2011/05/03(火) 06:51:07.75
List(1,2,"1",2.4).filter(_.isInstanceOf[Int]).map(_.asInstanceOf[Int])
のようなことを総称つかってやれないでしょうか?
単純に[T]をつけてIntをTに置き換えただけだとfilterが働いていないようです
697デフォルトの名無しさん:2011/05/03(火) 07:18:56.07
>>696
素直な方法では無理じゃない?
JVMベースなので、コンパイル後に型情報を捨ててしまうため
実行時に参照できない。
698デフォルトの名無しさん:2011/05/03(火) 07:33:11.93
>>696
classmanifest使えばできると思う
699デフォルトの名無しさん:2011/05/03(火) 07:38:49.44
>>692
確かにScalaに直接関係ない部分での知識不足というか、説明不足というか下手というか、
言いたいことよくわからない人がでてきてて、それに突っ込む返信も多くなってしまって
微妙になってるな。
他の言語と比べること自体はありだとは思うが、話それてScalaに関係なくなってるのは…
700デフォルトの名無しさん:2011/05/03(火) 08:03:34.17
>689
> C#って関数内関数ってできないよね。
できる。

>695
> 言いたかったのは、クロージャの式がある程度複雑になったときに
> 無名関数は適さないし、delegateは構文が重すぎだろ。
これは主観だからノーコメント。

> さらに構文だけじゃなくて、Genericsができないから実用上はとても使えない。
できる。
701デフォルトの名無しさん:2011/05/03(火) 09:16:06.55
>>700
匿名関数でGenericsできないだろ。できるのか?ぜひ教えてくれ。
構文が重いかどうかは確かに主観的だったな。
しかし、匿名関数以外でローカル関数定義はC#で見ないよな。これは事実じゃね?
702デフォルトの名無しさん:2011/05/03(火) 09:40:13.34
>>696,697
def f[T](l: Seq[Any])(implicit c:reflect.ClassManifest[T]): Seq[T] =
l.filter(c.erasure.isInstance _).map(_.asInstanceOf[T])
でプリミティブ以外はいけました。
erasure経由してるからかIntじゃなくてIntegerになってる。
703デフォルトの名無しさん:2011/05/03(火) 09:48:34.11
>>700
匿名関数でGenericsできないだろ。できるのか?ぜひ教えてくれ。
構文が重いかどうかは確かに主観的だったな。
しかし、匿名関数以外でローカル関数定義はC#で見ないよな。これは事実じゃね?
704デフォルトの名無しさん:2011/05/03(火) 11:39:07.41
C#の話はC#板でしろ。もしくはググれ
705デフォルトの名無しさん:2011/05/03(火) 13:35:36.72
inputStreamを簡単にファイルに書き出す方法はありますか?
706デフォルトの名無しさん:2011/05/03(火) 13:57:08.86
>>705
ぼくの考えたさいきょうのこーど
def fwrite(filename: String, in: InputStream) = {
val out = new FileOutputStream(filename)
for (b <- Source.fromInputStream(in)) {
out.write(b)
}
}
707デフォルトの名無しさん:2011/05/03(火) 14:01:40.74
InputStreamはSerializableでないので、ファイルに書き出すことはできません
708デフォルトの名無しさん:2011/05/03(火) 15:33:11.84
>>706
それはバイト単位の読み書きになりませんか?
709デフォルトの名無しさん:2011/05/03(火) 17:27:14.20
>>700
匿名関数でGenericsできないだろ。できるのか?ぜひ教えてくれ。
710デフォルトの名無しさん:2011/05/03(火) 18:33:26.15
匿名関数でGenericsできないってのは、要はScalaでいう

def hoge() {
 def foo[T](x: T) = ...
 ...
}

のfoo(ジェネリックなメソッド内メソッド)がC#では定義できないってことだよね?それならあってる。
この点はC#がScalaに比べて不利な点かもね。
711sage:2011/05/03(火) 19:44:44.34
>>709 age て 3度も繰り返すって (>>701 >>703 >>709)
712デフォルトの名無しさん:2011/05/03(火) 20:28:49.34
>>711
C#に追い付かれると困る人もいるんだよ
優越感のためにScalaを使ってる人とかさ
713デフォルトの名無しさん:2011/05/03(火) 21:19:40.53
はいはいC#はすごいすごい
だから巣に帰ってね
714デフォルトの名無しさん:2011/05/03(火) 21:37:09.38
いや、初撃に撃ちすぎだろwwww
715デフォルトの名無しさん:2011/05/03(火) 21:38:42.98
誤爆・・・
716デフォルトの名無しさん:2011/05/03(火) 21:46:46.09
これからC#スレに特攻して、scalaの凄さを売り込んでくる ノシ
717デフォルトの名無しさん:2011/05/03(火) 21:51:00.25
>>716
ネタだとは思うが、そういうイタいことはやめれ
718デフォルトの名無しさん:2011/05/03(火) 21:56:10.45
C#に触れちゃいけないということは良くわかった
719デフォルトの名無しさん:2011/05/03(火) 22:03:02.17
scala >>> C#

という事実を認めない奴が多すぎる
720デフォルトの名無しさん:2011/05/03(火) 22:05:19.16
C#の話になると途端に話のレベルが低くなるな
言語の優劣はともかく使ってるやつは間違いなく低能
721デフォルトの名無しさん:2011/05/03(火) 22:33:00.45
C#の話はおいといて、Scalaの標準ライブラリにLoanパターンを実装したの取り込んでくれないかねえ
要はこういうの

def using[A <: { def close(): Unit }, B](resource: A)(body: A => B): B = try {
 body(resource)
} finally {
 resource.close()
}
722デフォルトの名無しさん:2011/05/03(火) 22:40:28.36
>>721
Predefにおいてほしいな
723デフォルトの名無しさん:2011/05/03(火) 22:57:48.33
Scala厨はC#に脅威を感じている
724デフォルトの名無しさん:2011/05/03(火) 22:59:45.12
Java7
Scala動かないだろうし
725デフォルトの名無しさん:2011/05/03(火) 22:59:53.30
Scala難しいよぉぉぉぉ!
726デフォルトの名無しさん:2011/05/03(火) 23:10:33.06
2.9.0RC3のおしらせ
http://www.scala-lang.org/node/9385
727デフォルトの名無しさん:2011/05/03(火) 23:11:47.67
AutoCloseableか
Scalaでもそれに合わせて何か入るでしょう
728デフォルトの名無しさん:2011/05/03(火) 23:13:58.07
> A large number of bugfixes

が気になるなあ。
どこにどんだけバグがあったんだろ。
729デフォルトの名無しさん:2011/05/03(火) 23:18:42.51
>>728
https://lampsvn.epfl.ch/trac/scala/browser/scala
tracで管理されてて全部公開されてるから、気になるならいくらでもみれるぞ
730デフォルトの名無しさん:2011/05/03(火) 23:25:08.01
tracに登録されてここ1週間で更新のあったclosedなのが20個くらいだな。
731デフォルトの名無しさん:2011/05/03(火) 23:48:34.62
作りながら仕様を決めてる感じがするな
732デフォルトの名無しさん:2011/05/03(火) 23:51:42.83
>>731
具体的にどのあたりが?
733デフォルトの名無しさん:2011/05/03(火) 23:52:55.55
C#は良い言語だろ(使ったことないけど)
ただ、そのC#で何つくるのって話になると(笑)になるだけのこと
734デフォルトの名無しさん:2011/05/03(火) 23:56:01.69
2.9.1finalはいつ出るの?
735デフォルトの名無しさん:2011/05/03(火) 23:57:41.56
RCだすタイミングってどういう基準なんだろ。RC2からRC3が結構はやかったな
736デフォルトの名無しさん:2011/05/04(水) 00:07:41.34
RCの意味的に考えると重大で対処可能なバグが全部つぶれたタイミング
737デフォルトの名無しさん:2011/05/04(水) 06:49:09.78
>>734
多分年末くらいじゃないかな
2.8.0が出たのが2010年7月で、2.8.1が出たのが2010年11月だから
738デフォルトの名無しさん:2011/05/04(水) 10:36:19.10
>>708
バイト単位の書き込みに何か問題あったっけ?
739デフォルトの名無しさん:2011/05/04(水) 19:46:07.86
>>708,738
Source使うとバイト単位じゃなくてChar(2バイト)単位での読み書きになってしまうんじゃないかな
(で、それがむしろ問題なんじゃないかと)
740739:2011/05/04(水) 19:49:57.49
あー、この表現も正しくないな。読み取りがChar(2バイト)単位になってるのに、それを1バイトとして書き込んでるのが、
(FileInputStream#write(byte))問題なのではないかと。
741708:2011/05/04(水) 20:37:02.88
FileOutputStreamへの書き込みがBufferedじゃないんで1byteごとに
アクセス発生して遅いんじゃないかと思った。
742デフォルトの名無しさん:2011/05/04(水) 20:46:46.85
やっぱり、ScalaはI/Oがカスだな。
743デフォルトの名無しさん:2011/05/04(水) 21:05:33.62
I/O回りのAPIの手入れが遅れてるのは何が理由なんだろうね。
744デフォルトの名無しさん:2011/05/04(水) 21:37:25.74
将来的には素晴らしいIOを入れようとはしてるんだけど、
今のものを完全に置き換えるようなものなので、
既存のものをちょっとだけ改善してもどうせ捨てられるから意味ないしーという感じで、
今のAPIは誰もいじろうとしてないらしい
745デフォルトの名無しさん:2011/05/04(水) 22:11:56.43
I/Oがカスじゃないと、本格的な関数型言語とは言えない。
746デフォルトの名無しさん:2011/05/04(水) 22:14:12.09
ライブラリ空っぽの方が夢詰め込める
747デフォルトの名無しさん:2011/05/04(水) 22:47:14.15
いちいち依存関係を解決するのがめんどくさいから、I/Oくらい標準APIでなんとかして欲しいなぁ。。w
748デフォルトの名無しさん:2011/05/05(木) 20:50:11.49
どのタイミングで始めるべきか、いまだにつかめない
749デフォルトの名無しさん:2011/05/05(木) 21:13:17.55
>>748
え?始めたいときに始めればいいんじゃ?
750デフォルトの名無しさん:2011/05/05(木) 21:24:05.01
覚えた言語が仮に廃れたって大した損じゃないし、面白いと思ったら勉強すればいいんだよ。
今時、「使える言語は一つだけです(キリッ」とか言ってる奴の方が、よっぽど使えない。
751デフォルトの名無しさん:2011/05/05(木) 23:33:45.18
Javaとの差分でScalaやるんならScalaで覚えたことは
他の静的型付け関数型言語でも使えるよ。
自分の趣味プログラムや細かい社内ツールにならまったく問題ないんだが
多人数である程度の期間やる商用の場合に使っていいかは迷う。
752デフォルトの名無しさん:2011/05/06(金) 21:42:00.70
>>709
「scalaでは」匿名関数でGenricsってできるの?マジ知りてーわ。
753デフォルトの名無しさん:2011/05/06(金) 22:10:09.15
scalaは関数内関数でできる
C#はdelegateでできる

終了
754デフォルトの名無しさん:2011/05/06(金) 23:44:26.13
>>752 Scalaだと普通にできるだろーが。
def foo = {
 def id[A](x: A) = x
 id(id[Int](_))
}
これはC#では絶対にできない。
755デフォルトの名無しさん:2011/05/06(金) 23:52:00.47
それ匿名関数ちがう
756デフォルトの名無しさん:2011/05/07(土) 08:28:10.34
>>755 あ、ホントだ。でも関数内関数でGenericsが実現できてるよん♡
757デフォルトの名無しさん:2011/05/07(土) 08:33:38.04
scalaは匿名関数でGenericsはできない
758デフォルトの名無しさん:2011/05/07(土) 08:49:08.10
関数内関数でGenericsが使いたいな♡
Scala: 出来る
C#: 出来ない

修了
759デフォルトの名無しさん:2011/05/07(土) 11:05:00.96
>>758
匿名関数でGenericsできないだろ。できるのか?ぜひ教えてくれ。
760デフォルトの名無しさん:2011/05/07(土) 12:19:25.60
>>752
匿名でgenericsって意味あるの?
761デフォルトの名無しさん:2011/05/07(土) 18:35:02.51
scalaの欠点ってなんなの?
valとvarが目障り以外で教えてくれ
762デフォルトの名無しさん:2011/05/07(土) 19:15:01.02
コンパイルが遅い。
763デフォルトの名無しさん:2011/05/07(土) 21:26:36.90
>>761 コンパイルが遅い。F#と比べると若干型推論が弱い。
764デフォルトの名無しさん:2011/05/07(土) 21:42:57.74
メモリ馬鹿食い
765デフォルトの名無しさん:2011/05/07(土) 21:44:07.47
>>763
若干型推論が弱い…kwsk
766デフォルトの名無しさん:2011/05/07(土) 22:12:59.06
>>765
//F#
let foo x = (x, x)
//Scala
def foo[A](x: A) = (x, x)
767デフォルトの名無しさん:2011/05/07(土) 22:19:38.45
DSLってなんなの?
いまいちピンとこない。
768デフォルトの名無しさん:2011/05/07(土) 22:32:10.51
Scala vs. F#: Comparing Functional Programming Features
http://www.developer.com/lang/other/article.php/3883051/Scala-vs-F-Comparing-Functional-Programming-Features.htm
これ読んだ?
769デフォルトの名無しさん:2011/05/07(土) 22:42:38.99
>>768
の記事には、scalaとF#はmixin以外はほぼ同じって書いてある。


scalaとF#ってほとんど同じなの?
770デフォルトの名無しさん:2011/05/07(土) 22:51:29.33
>>769
構文は全然違うけど、言語機能や思想はだいぶ近いと思うよ。
でもF#の方がより関数型っぽいキガス。
771デフォルトの名無しさん:2011/05/07(土) 23:27:39.96
>>770
>F#の方がより関数型っぽいキガス。
そうなのかー。
じゃあ、F#の本もちょっと買ってみるかな。
GUI作ったりするなら、やっぱり.NETの方がいいからね。

Scalaの場合は、ウェブアプリくらいしか、使い道が思い浮かばない。
Scalaで数値計算とかはやっぱ微妙だよね?
まあ、F#も微妙だろうけど?
772デフォルトの名無しさん:2011/05/08(日) 01:34:18.36
数値計算って言ってもいろいろあるんだろうけど
速度の限界目指さない用途ならそんなに困らないと思う。
糖衣構文ある分Javaより楽だけど不用意に使うと遅いこともあるんで、
JVMの限界目指すとJavaっぽい書き方になっていく

詳しくないがLAPACKみたいな用途だと突き詰めると
FORTRAN/C使えってことにならないの?
773デフォルトの名無しさん:2011/05/08(日) 01:58:15.13
>>772
>FORTRAN/C使えってことにならないの?
ガチンコで速度勝負ならそうなるよ。
例えば、実行速度が1.1倍になっただけでも、嬉しいならC言語で書くべき。

一方で、どんどん新しい数値計算処理コードを書く場合は、
実行速度と生産性の両方が重要になるよ。
もちろんrubyレベルの遅さは論外だけど、JavaやC#は許される。
pythonはちと厳しいかも。
774デフォルトの名無しさん:2011/05/08(日) 03:35:05.32
>>771
ScalaもF#も「静的型付け」の「非純粋関数型言語」であるという点で同じだね。

細くとしては、F#は、MicrosoftがOcamlっていうこれも「静的型付け」の「非純粋関数型言語」の言語を
参考に、「.NET」上で動く関数型言語を用意しようって目的で作られた。
で、Ocamlっていうのは、フランスのある機関が教育用につくった関数型言語である。
Scalaっていうのは、Javaのライブラリを使える関数型言語をつくるって目的でつくられた。
どれも親戚みたいなものだね。そして、目的(作られた経緯)がちゃんとあってすみわけされてる。
775デフォルトの名無しさん:2011/05/08(日) 03:49:19.27
pythonはCで書かれた数値計算用のライブラリがあるからそれなりに使えるよ。
ライブラリでカバーできない部分でも、高速化したい部分は自分でCで書いちゃえばいいし。
Cで書き直して高速化できるという点はrubyも同じ。
rubyもpythonもCと繋ぐのはそんなに難しくないです。

実はjavaもscalaもまるで分かってないのだけれど、
scalaの一部をjavaで書き直して高速化とか
javaで書かれた数値計算用ライブラリが使えるとか、
scalaにそういうのは無いの?
776デフォルトの名無しさん:2011/05/08(日) 04:42:53.38
データ型の問題で、ほとんどの言語でCのGMP使ってる例。
標準のラッパーか、FFIで、DLL直接呼び出してる。
java/scalaもjpargmpってのを使ってる。これは、なんだろう?

http://shootout.alioth.debian.org/u32/performance.php?test=pidigits


F#の将来拡張用の予約語 (近年中の気配はない)
atomic break checked component const constraint constructor
continue eager event external fixed functor include method
mixin object parallel process protected pure sealed tailcall trait
virtual volatile

http://msdn.microsoft.com/ja-jp/library/dd233249.aspx
777デフォルトの名無しさん:2011/05/08(日) 15:39:43.81
>>775

> scalaの一部をjavaで書き直して高速化とか

javaとscalaだと、ほとんど速度は変わらない、という話。
どちらも、ソースコードを、コンパイルして生成されるclassファイルを実行するという点
は変わらないからね。

ただ、Scalaのライブラリを遅く使うような書き方すれば遅くなる。

> javaで書かれた数値計算用ライブラリが使えるとか、

ScalaはJavaのライブラリをシームレスに使える。
当然、Javaで書かれたライブラリ資産を呼び出そう。
たとえば、Scalaから、Processingを呼び出すのも可能だ。

> scalaにそういうのは無いの?

つ Scalalab http://code.google.com/p/scalalab/

これは、Matlab みたいな数値計算を Scalaの文法でやるもの。
数値演算、行列演算、データマイニング、ニューラルネット など。

現在、ものすごい勢いで開発されているので、頻繁にアップデートチェックしてね。

ただ、チュートリアルとかの情報は少ないので、とりあえず実行してみるべし。

778デフォルトの名無しさん:2011/05/08(日) 15:57:19.77
Scalaによる科学計算の速度だが、

http://swik.net/scalalab
によると、
・Javaと同等
・ScalaLab(ScalaSci) は、 Matlab mスクリプトより 20〜40倍速い。
・C/C++に近い速度。もしくはC/C++以上の速度。
とか書かれている。

まあ、C/C++以上っていうのは、そういうライブラリもある、、って意味だろうけど。
779デフォルトの名無しさん:2011/05/08(日) 21:47:14.19
ScalaっつうかSun JVMの話になるがJNI経由でCのコード呼び出しは粒度が
あんまり細かいと呼び出しコストの方がでかくなりがちなのが難点だな。
780デフォルトの名無しさん:2011/05/08(日) 22:46:47.46
2.9.0 RC4 来たざんす
781デフォルトの名無しさん:2011/05/08(日) 22:59:23.91
ワシのRCは108式まであるぞ
782デフォルトの名無しさん:2011/05/08(日) 23:03:45.11
じゃあ3.0来週か?
783デフォルトの名無しさん:2011/05/10(火) 00:02:17.58
RC4のところの説明文読めばわかるけど、もうそろそろfinal来る頃だと思うよ。RC3→RC4は
大きなバグフィックスは無いし。
784デフォルトの名無しさん:2011/05/10(火) 01:58:12.53
Scala Daysまでにリリースって目標も続いてるのかな?(それとも、もともと無い?)
去年は4/15-16、今年は6/2-3
785デフォルトの名無しさん:2011/05/10(火) 18:16:55.70
なんかF#の方がいい気がしてきた今日この頃
786デフォルトの名無しさん:2011/05/10(火) 18:23:58.17
どうぞどうぞ
787デフォルトの名無しさん:2011/05/10(火) 18:26:37.31
純粋に言語仕様の良さなら Scala より良いのいくらでもあるよ。
中途半端に関数型で JVM 上で動くからこそ注目されてる。
788デフォルトの名無しさん:2011/05/10(火) 19:09:48.54
Scala Daysでもう一回School Daysネタを振ってくれる猛者はいないかなー(チラッ。
789デフォルトの名無しさん:2011/05/10(火) 20:08:49.64
>>787
残念ながら幾らでもはないです。
790デフォルトの名無しさん:2011/05/10(火) 23:06:01.32
ライブラリ回りがScalaの1/10でも1/100でもかまわなければ
ML派生・Lisp派生は10と言わずあるだろ
791デフォルトの名無しさん:2011/05/10(火) 23:29:25.46
VDM++をScalaでラッパした
ライブラリって知りませんか?
792デフォルトの名無しさん:2011/05/11(水) 00:19:54.57
>>788
思いっきり個人を特定し過ぎだろw
793デフォルトの名無しさん:2011/05/11(水) 01:58:24.89
>>792
何のことかさっぱりワカリマセン。
794デフォルトの名無しさん:2011/05/11(水) 21:15:41.18
Scala ってか関数型言語でコマンドラインパラメータの解析って
どういう書き方が良いんだろう?

for(int i=0; i<args.length; i++){
  if(args[i].equals("-f")){
    filename = args[i+1];
    i ++;
  } else if ...
}

Java だといつもこんな具合に書いてるんだけど。
795デフォルトの名無しさん:2011/05/12(木) 00:27:34.19
そんなんの代わりならこんなんでいいんじゃね?
パラメータの数ごとにループ走るけどまあ問題ないっしょ
本当はそれ用のライブラリ使うのがいいと思うが

val filename = args.dropWhile(_ != "-f").tail.headOption
val hoge = args.dropWhile(_ != "-h").tail.headOption
...
796デフォルトの名無しさん:2011/05/12(木) 08:31:12.11
2.9.0 RC5 登場。final間近の模様
797795:2011/05/12(木) 09:22:23.20
tailじゃ安全じゃなかったわdropで
val filename = args.dropWhile(_ != "-f").drop(1).headOption
798デフォルトの名無しさん:2011/05/12(木) 20:12:36.56
Commons CLIでいいんじゃね。
799デフォルトの名無しさん:2011/05/12(木) 22:06:04.07
800デフォルトの名無しさん:2011/05/12(木) 23:39:34.71
sbtも二時間前に0.7.7になったみたいだけど、

http://code.google.com/p/simple-build-tool/wiki/Changes
> Workaround for Scala issue #4426

って何だろう。13日前に修正されてるみたいだが。
801デフォルトの名無しさん:2011/05/13(金) 00:00:22.31
Typesafe社立ち上げ。資本金300万ドル。

ScalaとAkkaと各種開発ツールのを統合した「Typesafe Stack」を提供する。
Eclipseプラグインやsbtの新バージョン開発への貢献や、サポートサービスの提供にも関わる。

http://www.scala-lang.org/node/9484
802デフォルトの名無しさん:2011/05/13(金) 09:01:48.25
http://www.scala-lang.org/api/current/index.html ってデザイン変わった?
前はもっと野暮ったいデザインだったような。
803デフォルトの名無しさん:2011/05/13(金) 09:03:43.88
変わったし検索もだいぶ速くなってるぜ
804デフォルトの名無しさん:2011/05/13(金) 18:20:23.86
valを省略可能にしたいんですが、
コンパイル時に自動でvalを付け加えるプラグインって簡単に作れますかね?
805デフォルトの名無しさん:2011/05/13(金) 23:33:15.27
Scala2.9にあわせてAkka1.1も用意したんだな。
http://www.infoq.com/news/2011/05/akka11
806デフォルトの名無しさん:2011/05/16(月) 02:44:33.93
Scala 2.9.0 リリース
headlessによる 2011年05月15日 14時00分の掲載
ttp://slashdot.jp/developers/11/05/14/1758207.shtml

スラドにしてはぜんぜんコメントがついてない。
ほんと人気ない言語だよね。
807デフォルトの名無しさん:2011/05/16(月) 03:03:47.62
ここ数年スラドも特定技術の話題だと弱いね
Linuxや*BSDのリリースストーリーでも中の人が書きこまない限り
関連した回顧ネタや自分語りばっかりだったりする
808デフォルトの名無しさん:2011/05/16(月) 04:27:57.84
スラドのレベルが低いのか、それともハッカー受けしない言語なのか
809デフォルトの名無しさん:2011/05/16(月) 05:45:27.94
ばかにはよめないもじでこめんとがかいてあるのです
810デフォルトの名無しさん:2011/05/16(月) 07:30:48.99
/.jpのコメント数は人気とはほとんど相関関係が無いので、どうでもよいかと。
あそこは、単に誰でも参加できるような自転車置き場の議論があると盛り上がるところ
なので、新バージョンリリースとかだとさほど盛り上がらない事も多いです(実際に
そこそこ使われている言語であっても)
811デフォルトの名無しさん:2011/05/16(月) 08:03:00.12
スラドjは、とんがった人はほとんどいなくなっちゃったから。
812デフォルトの名無しさん:2011/05/16(月) 10:05:47.75
とんがった人はどこにいったの?
813デフォルトの名無しさん:2011/05/16(月) 11:37:53.74
>>812
呼んだ?
814デフォルトの名無しさん:2011/05/16(月) 15:54:12.21
次世代Javaはこれで決まりみたいな惹句が書いてある書籍売ってるけど、これが
主流になる世の中なんて絶対来ないよな(笑)
815デフォルトの名無しさん:2011/05/16(月) 16:25:18.69
スラドの読みづらさは異常
816デフォルトの名無しさん:2011/05/16(月) 22:53:01.04
>>814
この本の事か
ttp://www.amazon.co.jp/gp/product/4797359404/
「ボクらのScala ~ 次世代Java徹底入門」
浅海 智晴 (著)
817デフォルトの名無しさん:2011/05/17(火) 00:05:57.82
X[-Z, +R]

の-Zとか+Rってなんですか?
818デフォルトの名無しさん:2011/05/17(火) 00:09:49.71
共変・反変
819デフォルトの名無しさん:2011/05/17(火) 00:14:02.27
パラメータ化された型
820デフォルトの名無しさん:2011/05/17(火) 00:40:47.52
Perlとかもそうなんだけど
記号を使いまくる言語はググり難くて困る
821デフォルトの名無しさん:2011/05/17(火) 12:31:31.70
>>820
> 記号を使いまくる言語はググり難くて困る

だけど、記号じゃなくて、長い単語だったりするのも困るし、、。


どこかに、

記号 → 意味

の一覧表はないのかなあ。

英語と日本語(正式名称, 通称 ) 付で。

たとえば

+ ; PlusOperator ; プラス演算子
+ ; ????? ; 共変を示すなんとか
+ ; ??? ; 正規表現のうんたらなんとか

みたいな感じで。
822デフォルトの名無しさん:2011/05/17(火) 12:55:41.97
PlusOperator(笑)
823デフォルトの名無しさん:2011/05/17(火) 14:50:47.90
それほど探すの難しいところじゃない。
リファレンスマニュアルで検索すればすぐ出てくるし。
まあ索引がないのはどうかと思うが。
824デフォルトの名無しさん:2011/05/17(火) 20:33:55.17
公式のPDFにEBNFあるが、そういう目的には使いづらいね
825デフォルトの名無しさん:2011/05/17(火) 21:17:52.32
>>801
ScalaとAkkaの作者ら、マルチコアおよびクラウドアーキテクチャのための会社Typesafeを立ち上げ
http://www.infoq.com/jp/news/2011/05/typesafe
826デフォルトの名無しさん:2011/05/17(火) 23:21:25.59
inferred type arguments [Hoge,Hoge] do not
conform to method ~'s type parameter bounds [AA >: Hoge,R]

ってどういう意味ですか?
827デフォルトの名無しさん:2011/05/18(水) 00:59:34.01
>>826
具体的にどんなコードを書いてそんなエラーが出たんだ?
828デフォルトの名無しさん:2011/05/18(水) 21:44:52.00
fscで初回や、しばらく時間を置いたときに
Could not connect to compilation daemon.
となるのは何故ですか?
scala2.8.0 windowsXPです
829デフォルトの名無しさん:2011/05/18(水) 21:50:34.95
タイムアウトしてるから

まあ、起動が間に合うくらいのハイスペックマシンでないと
scalaを使うのはつらいね
830デフォルトの名無しさん:2011/05/19(木) 19:56:20.33
APIマニュアル見てると、メソッドに打ち消し線が入ってるのがあるけど、これって非推奨とか廃止予定とかって意味なのかな?
scala.io.Source.getLineとか。
831デフォルトの名無しさん:2011/05/19(木) 20:06:29.30
832デフォルトの名無しさん:2011/05/19(木) 20:07:13.66
deprecatedって書いてあるじゃん
833デフォルトの名無しさん:2011/05/19(木) 21:41:50.85
>>828
sbt使ってるけど、ビルドがタイムアウトしたことなんてないよ。
834デフォルトの名無しさん:2011/05/19(木) 21:47:43.33
起動でしょ?
835デフォルトの名無しさん:2011/05/21(土) 01:54:45.09
Rubyのブロックに相当する部分って何か呼び名ある?
後置クロージャーとか?
836デフォルトの名無しさん:2011/05/21(土) 03:44:56.27
クロージャにどこに置くもなんもなかろう
837デフォルトの名無しさん:2011/05/22(日) 20:46:28.38
>>814
動的型付け言語みたいのなんかよりはJavaの次世代候補としては可能性高いと思ってるけど
838デフォルトの名無しさん:2011/05/22(日) 21:56:24.00
普通にJava 7, 8, 9.... じゃねぇの?>次世代候補
839デフォルトの名無しさん:2011/05/22(日) 22:08:28.98
ScalaができればAmazonにも転職できるらしいぞ

http://uk-amazon.icims.com/jobs/128997/job
840デフォルトの名無しさん:2011/05/22(日) 23:33:46.44
Cに対するC++みたいにならないか心配
841デフォルトの名無しさん:2011/05/22(日) 23:46:26.70
>>840
大成功じゃん
そこまでは行かないかと。
842デフォルトの名無しさん:2011/05/22(日) 23:57:35.22
ScalaでOS書くことは可能ですか。
問題があるとすればなんでしょうか。
843デフォルトの名無しさん:2011/05/22(日) 23:58:46.03
最近Scalaの技術を求人募集に書くところ増えてきたよね。
ttp://www.indeed.jp/求人?q=scala
844デフォルトの名無しさん:2011/05/23(月) 00:34:40.90
>>842
可能だろうし特に問題はないんじゃない?
845デフォルトの名無しさん:2011/05/23(月) 00:36:01.98
Java製のOSもあるにはあるしね。実用的かはともかく。
846デフォルトの名無しさん:2011/05/23(月) 00:36:58.33
> We are keen to receive applications from recent, top quality graduates with good all round
> programming knowledge who are excited to work in a multi-language environment that
> includes Java, Scala, and C++. We are also looking for more experienced developers as follows:

まぁ、もっと専門的な経験(分散処理とか)を持っていることが大前提なわけだが。
業務での一番基本的な技能として位置づけられるところまで来た、と見ることはできるか。
847デフォルトの名無しさん:2011/05/23(月) 00:40:20.26
OSとかは、素直にCで書けばいいんじゃない。
ああいう基礎的で要求が変化しにくいものを、わざわざJVM言語で書く意義は無いと思う。
848デフォルトの名無しさん:2011/05/23(月) 00:41:25.42
そこはバイトコードをネイティブに変換すればよくない?
849デフォルトの名無しさん:2011/05/23(月) 00:53:16.98
ああいうのって、速度とか稼ぐためにCPUとかハードウェアべったりなんじゃないのかな。
OSって、根本的なアーキテクチャに大きな変更が何度も起きるものじゃないわけで、
アセンブリとかCとかで書いた方がメリットがあるものだと思うよ。
# APIがクルクル変わるOSとか、悪夢以外の何物でもない。

んで、アプリとかサービスになるとまた話は変わってくるわけでさ。
Scalaの力が発揮できる領域はそこでしょ。
850デフォルトの名無しさん:2011/05/23(月) 00:55:40.25
まあ実際にはそうだろうけど記述力の検証にはなるんじゃ?
851デフォルトの名無しさん:2011/05/23(月) 01:05:08.05
世の中にはカーネル書くのが趣味という暇人…もといハッカーが結構いるみたいだから、
そのうち誰かが試すかもね。
852デフォルトの名無しさん:2011/05/23(月) 21:07:22.33
Javaにはjnodeってのがかつてあって、
ブートに使ってる若干のアセンブラ以外は全てJavaで書かれてた。
853デフォルトの名無しさん:2011/05/23(月) 23:01:01.96
>>839
電話面接で英語できねーっていったらそこで面接終了された。
854デフォルトの名無しさん:2011/05/23(月) 23:10:51.12
電話切られたの?
855デフォルトの名無しさん:2011/05/23(月) 23:42:43.00
関数型でOS書くってのが、何か新しいものが見えてきそうで面白そうだけど・・・だめ?
856デフォルトの名無しさん:2011/05/23(月) 23:50:07.25
チャレンジはいつ何時でも尊いと思うよ。車輪の再発明という言葉はあるにせよ。
857デフォルトの名無しさん:2011/05/24(火) 00:48:42.47
関数型OSで何となく頑張ってた人がいるらしい
http://lambda-the-ultimate.org/node/499
JavaScriptでx86のエミュレーター実装してブラウザでLinuxというのもあるらしい
http://cpplover.blogspot.com/2011/05/javascriptpc.html

JVMのScala OSならこういうCPUがいいのかな
http://journal.mycom.co.jp/articles/2010/09/22/hot_chips22_greendroid/index.html

858デフォルトの名無しさん:2011/05/24(火) 00:50:37.39
車輪なんて何度発明されてもいいの。
だって再発明ってすごく楽しいじゃん。

関数型言語で作られた関数型OS。なんてクールなんだ。
プロセスを起動してもいつ実行されるか分からないぜ。

859デフォルトの名無しさん:2011/05/24(火) 01:10:35.89
( ;∀;)イイハナシダナー
860デフォルトの名無しさん:2011/05/24(火) 01:26:34.47
Operating systemの働きをmonadで記述したのがあったと思う。
Prologで書いたOS、荘園ってのもあったはず。ICOT!
861デフォルトの名無しさん:2011/05/24(火) 01:33:10.34
関数型と言ってもlazyじゃなきゃ、システムプログラミングは他の言語と大して変わらんと思う
862デフォルトの名無しさん:2011/05/24(火) 01:43:58.94
でもモナディウスはすごいな。
863デフォルトの名無しさん:2011/05/24(火) 02:56:16.46
>>860
荘園はOSってよりその中の独立したプロセスみたいなもん
OSはPIMOS、言語はKL1
864デフォルトの名無しさん:2011/05/24(火) 10:42:00.11
荘園はメタレベルプログラミングに基づく保護、管理機構だな。
http://ci.nii.ac.jp/naid/110002894960
865デフォルトの名無しさん:2011/05/24(火) 23:57:26.21
>>856
ダメな日本の代表みたいなコメントだな
866デフォルトの名無しさん:2011/05/24(火) 23:59:16.68
Scala 2.9.0、並列コレクションを導入
http://www.infoq.com/jp/news/2011/05/scala-29
867デフォルトの名無しさん:2011/05/25(水) 00:00:58.32
>>854
いきなりお祈りフェーズ突入。
868デフォルトの名無しさん:2011/05/25(水) 00:54:54.79
>>865
勝ち馬に乗ることしか考えてない冷笑主義よりは100倍マシな態度だと思うよ。
もちろん、実際に有用な結果が出るかはまた別だが。
869デフォルトの名無しさん:2011/05/25(水) 01:02:39.19
再開発は自分のスキルアップのためにも良いことだと思う。
ただし再発明はただの世間知らずということだ!
870デフォルトの名無しさん:2011/05/25(水) 01:26:46.09
こりゃ迂闊に面白そうとか言えねえな。
871デフォルトの名無しさん:2011/05/26(木) 00:53:50.41
2.9.0.1とか…
872デフォルトの名無しさん:2011/05/26(木) 01:05:36.67
何の冗談かと思ったら本当にリリースされてるのかw
873デフォルトの名無しさん:2011/05/26(木) 01:25:23.03
なんか致命的なバグでもあったん?
874デフォルトの名無しさん:2011/05/26(木) 01:33:52.44
2.8系のときと同じように、しばらくは新しい機能入れるよりも、バグフィックスとか、細かい調整になのかな
875デフォルトの名無しさん:2011/05/26(木) 01:53:19.37
ま現状では、一番まともな言語だと思うよおれは。
代数データ型あるし、ファーストクラスの関数あるし、パターンマッチあるし,imuutableあるし
だけど、オブジェクトあるし、破壊的代入あるし、継承あるし
で、こんだけあったうえで型推論がんばってるし。

876デフォルトの名無しさん:2011/05/26(木) 02:02:56.68
加点法でいくなら
C++0xとかCommon Lispとか最強じゃないですか
877デフォルトの名無しさん:2011/05/26(木) 02:04:29.41
もっと古い例だとMULTICSとPL/Iかな
878デフォルトの名無しさん:2011/05/26(木) 03:49:09.77

ただ、id:α→α くらいは推論してほしいな。
もう型推論にもレベルみたいなのいれて、選べるようにしてほしい。
このコードは型推論Lv2以下でコンパイル可能とかww
あと、もっと組み込みの代数データ型を増やしてほしい。色々なGraphとか、
879デフォルトの名無しさん:2011/05/27(金) 13:19:22.52
Future、性能、依存性の低減など多くの改善がされたAkka 1.1リリースhttp://www.infoq.com/jp/news/2011/05/akka11
akka版のFutureがあるのか

機械翻訳直し忘れた文があるけど気にしない。
880デフォルトの名無しさん:2011/05/27(金) 16:55:16.05
ttps://sites.google.com/site/scalajp/
なぜかとてもブックマークされている
881デフォルトの名無しさん:2011/05/27(金) 17:12:20.71
GraphはIncubatorにあって、そのうち入るかもしれないよ
882デフォルトの名無しさん:2011/05/27(金) 20:40:04.98

グーグルソースコード検索に、Scalaが登録されてないって、どういうことだよ。

http://www.google.co.jp/codesearch


だれか、googleに要望だしてくれ。
883デフォルトの名無しさん:2011/05/27(金) 22:44:10.39
ヒント:不人気言語
884デフォルトの名無しさん:2011/05/27(金) 22:51:59.41
ヒント:みんな882のように思ってる
885デフォルトの名無しさん:2011/05/27(金) 22:56:02.57
Scalaに代数的データ型なんてなくね?
886デフォルトの名無しさん:2011/05/27(金) 23:57:19.34
オダちゃんはいずれ
オラクルの金権攻撃に負ける

887デフォルトの名無しさん:2011/05/28(土) 00:13:54.41
( ´_ゝ`)フーン
888デフォルトの名無しさん:2011/05/28(土) 00:51:31.37
こんな言語が普及するわけがない。
889デフォルトの名無しさん:2011/05/28(土) 01:16:40.40
な、なんだってー
890デフォルトの名無しさん:2011/05/28(土) 01:28:57.74
>>880
Scalaの日本のユーザーグループだからブックマークされてて当然だろ JK
891デフォルトの名無しさん:2011/05/29(日) 11:05:16.98
インストールにえらく時間かかるなー
892デフォルトの名無しさん:2011/05/29(日) 16:43:59.87
エクセプション時のメッセージが長すぎてやってられん。
しかもJavaのだし。
893デフォルトの名無しさん:2011/05/29(日) 18:36:05.49
最初の10行くらいで十分だよな
sbt0.9.xだと表示する行数指定できて便利よ
894デフォルトの名無しさん:2011/05/29(日) 18:37:09.41
例外のメッセージは冗長な方が助かると思うのは俺だけか…
895デフォルトの名無しさん:2011/05/29(日) 20:44:32.25
長くてもいいが、scalaの言葉に直して表示して欲しいな。
896デフォルトの名無しさん:2011/05/29(日) 23:19:42.86
無名関数があると読みにくくなるのは確かだが変に省略されても困るね
897デフォルトの名無しさん:2011/05/29(日) 23:47:10.37
sbt0.9って最近聞くけど、何が変わってんの?
898 ◆CgacaMDhSQ :2011/05/30(月) 00:45:37.29
>>880,890
のサイト立ち上げた張本人です。ちょっと誤解がありそうなので、サイトの立ち上げ経緯を説明しておこうかと思います。
とはいっても、本当にサイトの冒頭に書いてある通りなので、ほとんど重複した説明になってしまいますが。
899その2 ◆CgacaMDhSQ :2011/05/30(月) 00:48:57.09
現在、Scalaの日本語情報はあちこちのブログとかに散逸していて、しかも、誤った情報も少なくない状態です。こういう状態では、英語が苦手な人が
Scalaを新しく始めるのは敷居が高いだろうと思います。その状況を草の根レベルでいいので、少しずつ改善していきたい、というのが一つ目の動機です。
900その2 ◆CgacaMDhSQ :2011/05/30(月) 00:51:53.17
二つ目の動機は、これまでScalaに関する疑問に勝手に首つっこんでいる内に蓄積された、FAQとかTipsとかの情報整理です。結構、皆同じようなところではまってる、
という事に今更気づいたので、それならサイト作ってFAQやらまとめておいた方が、レスして回るよりは効率的だろうなあと。
901その4 ◆CgacaMDhSQ :2011/05/30(月) 01:02:48.12
てなわけで、ユーザーズグループとかなんか大層なものでは全然無いです。もちろん、可能な限り正確&鮮度の高い情報を提供するつもりですが、あくまで私含む
少人数で、草の根的にScalaを普及させようという目的で(&趣味で)運営しているだけのサイトです。
902デフォルトの名無しさん:2011/05/30(月) 02:07:16.44
その2が2つある…だと…?
903デフォルトの名無しさん:2011/05/30(月) 02:09:04.98
ふいた。
904 ◆CgacaMDhSQ :2011/05/30(月) 02:35:30.31
>>902,903
ごめんなさい。ドジりましたw
905デフォルトの名無しさん:2011/05/30(月) 04:09:03.68
代数データ型あるだろ、
(1,2,3)とかのタプルとかSet,Seq,Mapなど、でも自分で作るときはオブジェクト経由して定義しないとだめ。
ML風の代数データ型の定義を導入してほしい
906デフォルトの名無しさん:2011/05/30(月) 06:41:22.51
>>897
ビルド速くなってる、設定ファイル書くの簡単になった、など
詳しくはこちら
http://github.com/harrah/xsbt/wiki/Migrating-from-SBT-0.7.x-to-0.9.x

もうすぐstableな0.10.0が出るからもうちょい待ってもいいかも
907デフォルトの名無しさん:2011/05/30(月) 08:08:45.31
>>897 scala-2.9対応とかじゃね?
正直SBT設定ファイル書くだけならバージョンとか気にならんよな。
しかしsbtまじ便利。scalaの弱点だったコンパイル速度が気にならないくらい
一瞬で結果を返してくれる。ガチで開発効率が良くなった。
Web開発者もAndroiderも、Scala開発者は全員sbt使うべきだと思う。
908デフォルトの名無しさん:2011/05/30(月) 08:51:06.76
>> ◆CgacaMDhSQ さん
乙です。リンク集のライブラリへのリンクと解説がイイ!(・∀・)
Scalaでなんかやりたいときに逆引き的に使えるね!
909デフォルトの名無しさん:2011/05/30(月) 12:43:24.30
結局scalaはrubyに勝てるんですか?
910デフォルトの名無しさん:2011/05/30(月) 12:45:28.04
>>909
はい
911Scala初心者:2011/05/30(月) 15:02:02.21
Scalaのパターンマッチを勉強しています。

新しいデータ構造を定義するときは、できればcase classで定義しておくと、
そのあと、パターンマッチしやすくて、そのデータ構造を探索するような処理のときに便利そうということはわかりました。

標準添付のライブラリのなかに、case classで定義したような
クラスってありますか?
まだ勉強中ですが、unapplyメソッドを自分で定義すれば、case をつけなくても良いような気がしますが、
標準添付のライブラリはそんな感じでしょうか?

理解が不十分で申し訳ありませんが、case classのよいサンプルを探しています。
912デフォルトの名無しさん:2011/05/30(月) 15:15:25.42
ProductNとかTupleNとか
913Scala初心者:2011/05/30(月) 16:00:47.09
むずかしぃ〜ということがわかった。
914デフォルトの名無しさん:2011/05/30(月) 16:13:43.83
他はxml.Elemとか
915デフォルトの名無しさん:2011/05/30(月) 17:54:24.93
一番メジャーなのはOptionかな
知ってると思うけど、case classはapplyとunapplyが自動で定義されるだけだから
基本的に他の関数型言語の代数的データ型と同じような機能と考えられるから、
使い道もそんな感じになる
916Scala初心者:2011/05/30(月) 20:52:38.95
>>912-915
ありがとうございます。
教えてもらったキーワードについて、理解を深めてみるよことにします。
917デフォルトの名無しさん:2011/05/30(月) 21:24:12.71
リストは,組み込みなんだっけ?
918デフォルトの名無しさん:2011/05/30(月) 21:53:18.17
いや、ただコレクション系はcase class一辺倒で、
unapplyのみの場合と対比して理解できない。
919デフォルトの名無しさん:2011/05/30(月) 22:34:28.80
NetBeans、eclipseの重さに耐えかねて、vim + codefellowってやつを使おうと思ったんだけど、更新が去年でとまってるのね。
誰かこれの行方を知ってる人いないかな。ただ更新止まっただけなのかな。
920デフォルトの名無しさん:2011/05/30(月) 22:38:27.65
そんな無駄な方向で時間を無駄にしないでPC買い換えろ
921デフォルトの名無しさん:2011/05/30(月) 22:49:55.12
>>917
コップ本P416によると、組み込みじゃないらしいぜ。
922デフォルトの名無しさん:2011/05/30(月) 22:55:37.22
Scalaってどこが偽関数型なんですか?
F#に比べてクソって書いてありますが・・・
923デフォルトの名無しさん:2011/05/30(月) 22:57:22.82
NetBeansは、7.0になって、何かマシになったの?
924デフォルトの名無しさん:2011/05/30(月) 23:11:03.07
F#は1980年台から開発してきた究極の関数型言語
Scalaはなんちゃって関数型言語ってことであってる?
925デフォルトの名無しさん:2011/05/30(月) 23:28:32.80
関数定義の順番に依存するF#の方がクソな気がしますが・・・
926デフォルトの名無しさん:2011/05/30(月) 23:44:44.59
F#はかなり有力な言語だよ
高速だし
927デフォルトの名無しさん:2011/05/31(火) 00:26:41.80
>>924
Scalaがなんちゃってなのはモナドまわりに関してですか?
928デフォルトの名無しさん:2011/05/31(火) 00:32:46.91
>>911
他の人も言っているけれど Option型はちゃんと使い方を知っとく多くの関数型言語で役に立つよ。
代数的データをうまく生かした好例だと思う。定義はこんな感じでとってもシンプル。でもベリー役に立つ。

sealed abstract class Option[A]
case class Some[A](x: A) extends Option[A]
case object None[A] extends Option[A]
929デフォルトの名無しさん:2011/05/31(火) 01:06:04.02
HaskellならともかくF#に言われる筋合いはない
930デフォルトの名無しさん:2011/05/31(火) 02:58:17.90
よく知らんが、#が付いているだけで残念な感じです。
いや、きっと究極なんだろうけど。
931デフォルトの名無しさん:2011/05/31(火) 07:32:58.19
F丼
932デフォルトの名無しさん:2011/05/31(火) 17:28:30.13
>>927
ScalaのモナドはHaskellそのまんまだぞ
F#のモナドは・・・非常にMS的というか
あのでかい表をみてHaskellerがどう思うか聞いてみたい
933デフォルトの名無しさん:2011/05/31(火) 20:28:36.58
MS的ってocamlと違うのかな?
それとMSとMSRって別もんじゃね?
934デフォルトの名無しさん:2011/05/31(火) 21:41:54.71
sbt0.9で run すると↓のようなログが出るんだけど、
> [error] {file:/C:/.../hoge/}default/test:run: java.lang.RuntimeException: No main class detected.
0.9では run = test:run ということなの?

run したときは mainClass in (Compile, run)
test:run したときは mainClass in (Test, run)
で指定したクラスが実行されるもんだと思ってたけど…。
というかそのようにしたいんだけど、どう設定したらいいんだろう。

コンパイルは早いし設定も楽になったから是非0.9を使いたい。
しかし実行に関する部分がイマイチわからない…。
935デフォルトの名無しさん:2011/05/31(火) 22:57:39.42
F#だけが唯一Haskellに対抗できる
至高の言語だよねぇ

936デフォルトの名無しさん:2011/06/01(水) 01:17:30.02
>>935
たぶん相手にされないと思う
937デフォルトの名無しさん:2011/06/01(水) 01:36:45.92
ぶっちゃけF#使ったことないわ
開発環境よく知らんからなあ
Scalaはsbtがあるし、OCamlはOMakeがあるんだけど
monoと一緒に使える、似たようなのがあれば、使うかもしれん
938デフォルトの名無しさん:2011/06/01(水) 01:38:54.82
VisualStudioっていう一級品の開発環境あるだろ・・・
939デフォルトの名無しさん:2011/06/01(水) 01:42:51.43
>>938
え?何?聞こえない
940デフォルトの名無しさん:2011/06/01(水) 01:54:37.99
OMakeってネーミングにちょっと惹かれた
941デフォルトの名無しさん:2011/06/01(水) 02:00:02.36
>>936
Simon Peyton-JonesとDon Syme、
開発者同士は、同じケンブリッジのMSRだから結構相談しあってるようだね。
942デフォルトの名無しさん:2011/06/01(水) 02:10:22.70
つーか、Simon Peyton JonesはMSに居たよね
今でもいるのかは知らんけど
943デフォルトの名無しさん:2011/06/01(水) 02:26:07.23
Simon Peyton-Jones - Microsoft Research
http://research.microsoft.com/en-us/people/simonpj/
944デフォルトの名無しさん:2011/06/01(水) 02:37:32.02
>>934
sbt 0.9は、まだちゃんと実装されてない部分があるので何とも。
何ヶ月か前に試した時は、consoleが実装されてなかったりとかした。
945デフォルトの名無しさん:2011/06/01(水) 09:09:11.37
C#の補助としては有用かもね、F#
946デフォルトの名無しさん:2011/06/01(水) 09:15:24.91
simonpjはCLRのboxing/unboxingをやってた。
今はたまにLINQに言及することがあるくらいで、
MSの製品とは直接関係ない昔と変わらない研究してる。
今は無きHaskell.NETにも関係していたはず。
947デフォルトの名無しさん:2011/06/01(水) 11:12:20.55
>>934
http://groups.google.com/group/simple-build-tool/browse_thread/thread/204221b7e0737393
俺もそれなったから解決策探してたらMLに同じ症状の人がいた
> compile:run
でいけるみたい
948デフォルトの名無しさん:2011/06/01(水) 11:17:32.76
まんまだな
949デフォルトの名無しさん:2011/06/01(水) 16:12:31.25
>>947
ありがとう。
バグなのね。
直るの待つしかないかな。
950デフォルトの名無しさん:2011/06/02(木) 01:23:09.15
Play Scalaの次期バージョンでは、新しいテンプレートエンジンが追加されるらしい。

http://d.hatena.ne.jp/sy-2010/20110530/1306770086
951デフォルトの名無しさん:2011/06/03(金) 09:25:30.74
>>950
PlayってJava前提だからScalaで使いにくいんじゃない?
nullが平気で出てくるから関数型言語なのに実行時エラーがでまくりって聞いたけど。
952デフォルトの名無しさん:2011/06/03(金) 09:41:05.32
Play Scalaは全然使い物にならないよ
一度でもエラー発生すると、nullばかりでどうにもならないし
関数型言語っていうよりRoRパクッた駄作だと思う
953デフォルトの名無しさん:2011/06/03(金) 11:46:12.23
結局LiftとPlayとScalatra+Scalateのどれがいいの?
それとも他に選択肢あんの?
954デフォルトの名無しさん:2011/06/03(金) 12:58:26.59
Wicketでやってる人も居たような
955デフォルトの名無しさん:2011/06/03(金) 20:35:57.56
>>947
ありがたやありがたや
956初心者:2011/06/04(土) 02:35:42.66
Scala 2.9 でScala勉強しています。

ListとArrayを見てるんですが、それぞれ、Immutable, mutableの違いがあるようです。
また実装の仕方も違うので、同じことをするのでも速度が違うということがわかりました。

それで、どういうメソッドがそれぞれ使えるかを調べていて、継承関係など見ていますが
コップ本やネットの記事をみてると、
ArrayもListもSeqを継承しているように書いています。
ちなみにネットの記事は
http://goo.gl/NXgoR を参照しました。

しかし、APIをみてみると、Arrayは、Seqを継承していないようです。
http://www.scala-lang.org/api/current/index.html

これは、2.9 で仕様変更があったのでしょうか?
(ちなみに、コップ本(日本語)は、Scalaのバージョンいくつですか?いろんなページみたけど書いてません)

ご存じの方、情報ください。
よろしくお願いします。

ArrayとListのメソッドの違いを理解するのに苦慮しています。
957デフォルトの名無しさん:2011/06/04(土) 02:54:56.88
958デフォルトの名無しさん:2011/06/04(土) 03:12:18.18
エラそうな奴だな。
959デフォルトの名無しさん:2011/06/04(土) 03:17:10.46
ちゃんと敬語使ってるのに!
ArrayとListの区別もつかないやつはもっと基礎から勉強したほうがいいよ
960デフォルトの名無しさん:2011/06/04(土) 05:15:25.36
それがエラそうなんだろ。
961デフォルトの名無しさん:2011/06/04(土) 06:18:50.04
Scalaユーザはキモい人が多いの?
962デフォルトの名無しさん:2011/06/04(土) 09:18:06.74
俺もscalaユーザになったからさらにキモくなるよ。
フヒヒ、すんません
963デフォルトの名無しさん:2011/06/04(土) 09:35:48.81
次世代Javaとか言ってるけど、C++みても分かるように既存の言語になんとか風味をくわえた
折衷言語って結局失敗するよね。JavaとかC#みたいなのが出てくる。
Javaに関数型言語風味を、なんて失敗するのがオチ。
964デフォルトの名無しさん:2011/06/04(土) 09:49:37.22
C++が失敗?
965デフォルトの名無しさん:2011/06/04(土) 10:10:06.15
じゃあJavaもC#も失敗だろ
966デフォルトの名無しさん:2011/06/04(土) 10:10:48.68
>>956
コップ本は2.7.7対象。2.8.0以上対象の第2版が英語だけど出てる。日本語版はまだ。
配列に関しては>>957を配列の項を読めばおk
ArrayOpsとListで使えるメソッドの違いって::系ぐらいだと思うんだけど……
967デフォルトの名無しさん:2011/06/04(土) 13:35:48.03
@yasushia氏のGoogle AppEngine用のsbtプラグインを使おうとするとエラーになるんだけど俺だけ?

http://scala-tools.org/repo-releases/net/stbbs/yasushi/sbt-appengine-plugin/2.2/sbt-appengine-plugin-2.2.jar
[error] sbt.ResolveException: unresolved dependency: net.stbbs.yasushi#sbt-appengine-plugin;2.2: not found
968デフォルトの名無しさん:2011/06/04(土) 14:22:46.91
解決しました。まずsbt-appengine-pluginをローカルにインストールする必要があることに気づきませんでした。
だってsbtは設定を書くだけで必要なパッケージを自動で取ってくる優れたツールって聞いてたし、
このpluginの本家READMEを読んでもインストールが必要なんてこれっぽっちも書いてないんだもん。
969デフォルトの名無しさん:2011/06/04(土) 22:33:26.12
>>953
Grails/GRuby on Rails のJavaで作ってた部分をScalaで置き換え。
970デフォルトの名無しさん:2011/06/05(日) 17:06:16.70
おまえらscalaで最強のフレームワーク作れ
scalaを流行らせてくれ
971デフォルトの名無しさん:2011/06/05(日) 17:35:46.27
Google pits C++ against Java, Scala, and Go
http://www.theregister.co.uk/2011/06/03/google_paper_on_cplusplus_java_scala_go/

Odersky先生のコメントもあり
972デフォルトの名無しさん:2011/06/05(日) 19:02:41.95
>>971
なるほど。Goが最も優れてるけど今更引くことは出来ないと
973デフォルトの名無しさん:2011/06/05(日) 19:55:48.48
>>972
どこにそんなことが書いてあるんだよw
974デフォルトの名無しさん:2011/06/06(月) 15:47:57.02
2.9でも相変わらず
List((1,2),(3,4)).map((a,b)=>a+b)
的なことはできないんですか?

ちなみに正解は
List((1,2),(3,4)).map({case (a,b)=>a+b})
975デフォルトの名無しさん:2011/06/06(月) 16:48:53.24
>>974
下の書き方で何も問題ないと思うが。もしかして数バイトが惜しいとか。
976デフォルトの名無しさん:2011/06/06(月) 16:52:28.15
>>975
しばらく使ってないと、必ず上のように書いてしまう。
caseがウザイと思いませんか?これなら許せる。
List((1,2),(3,4)) map {(a,b)=>a+b}
977デフォルトの名無しさん:2011/06/06(月) 17:08:04.56
>>976
いまさらそんなこと言ったってしょうがない。
確かにそのように書けたら、ちょっと短く書けて便利かもしれないが、
そんな数文字省略できるくらいで、それほどすごい利点があるわけではない部分が、
この先変更になる可能性はかなり低いと思う。

どうしてもそうしたいなら、自分でコンパイラのソースでもいじって、省略できるようにするればいいのでは?
978デフォルトの名無しさん:2011/06/06(月) 17:13:58.43
しかしまあなんでこうScalaの構文ってこんなにセンスが悪いんかね
979デフォルトの名無しさん:2011/06/06(月) 17:32:14.73
>>977
うむ・・、残念。
>>978
ちなみにセンスいい言語って何ですか?
Haskellはウネウネするしなぁ。
980デフォルトの名無しさん:2011/06/06(月) 17:49:25.76
カッコいい言語ならLisp
981デフォルトの名無しさん:2011/06/06(月) 17:53:36.41
Lispはね、書きやすいけど読みにくいのよ
982デフォルトの名無しさん:2011/06/06(月) 18:38:03.38
引数と戻り値がスタック上に暗黙のうちにあってぜんぜん字面にあらわれないForthとかぜんぜん読めない
983デフォルトの名無しさん:2011/06/06(月) 21:30:37.43
scalaのnullをjavaのGraphics2Dに渡したらjava.lang.NullPointerException
になっちゃったのですが、何を渡せばいいんですか?
具体的にはjava.awt.Graphics2Dのclip(null)ですが。
984デフォルトの名無しさん:2011/06/06(月) 21:42:51.74
setClip(null)だとうまくいったので、ライブラリのバグっぽいです。
985デフォルトの名無しさん:2011/06/06(月) 22:14:30.59
>>975
タプルと引数リストが互換になると見通しはよくなると思うが、何か技術的困難があるのかしら。
986デフォルトの名無しさん:2011/06/06(月) 23:03:51.44
case は我慢できても、無名変数 _ がかっこのなかで使えないのは我慢ならない
987デフォルトの名無しさん:2011/06/06(月) 23:12:18.10
>>985
タプルと引数リストの変換は3.0かどっかで入るんじゃなかったか
988デフォルトの名無しさん:2011/06/06(月) 23:15:38.35
>>987
昨日のおだちゃんdayでもそんなこと言ってなかったけど?
989デフォルトの名無しさん:2011/06/07(火) 01:06:09.75
>>988
ごめ、違ったっぽい。スルーしてください
990デフォルトの名無しさん:2011/06/07(火) 01:17:43.72
去年のScalaDaysで話されたロードマップにはあったよ
991デフォルトの名無しさん:2011/06/07(火) 12:23:17.80
プログラミング言語 Scala 6冊目
http://hibari.2ch.net/test/read.cgi/tech/1307416864/
992デフォルトの名無しさん:2011/06/07(火) 14:26:36.18
JVM版C++って解釈であってる?
993デフォルトの名無しさん:2011/06/07(火) 14:30:07.70
どこを見たらそんな解釈になるか教えてほしい
994デフォルトの名無しさん:2011/06/07(火) 18:51:41.13
たしかに、メタプロできると見せかけて、実際は(凡人の)生産性を下げるところとかは似てるかも・・・。
995デフォルトの名無しさん:2011/06/07(火) 19:03:47.60
更に阿呆な感想かよ
996デフォルトの名無しさん:2011/06/07(火) 21:09:50.63
JavaからScalaになって生産性下がるやつは首にしてもいいレベル
997デフォルトの名無しさん:2011/06/07(火) 21:50:50.18
Java(C)に対する後方互換性があるマルチパラダイム言語がScala(C++)
って意味では合ってるんじゃないの?
998デフォルトの名無しさん:2011/06/07(火) 22:02:32.88
C++がいかに嫌われてるかよくわかるな
誰も誉め言葉として受け取らないw
999デフォルトの名無しさん:2011/06/08(水) 00:42:37.86
>>997
それはC++のC互換性維持の努力を侮りすぎじゃ
1000デフォルトの名無しさん:2011/06/08(水) 00:49:20.35
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。