5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

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

1 :デフォルトの名無しさん:2012/04/21(土) 22:14:38.18
The Scala Programming Language
ttp://www.scala-lang.org/

日本Scalaユーザーズグループ
ttp://jp.scala-users.org/

■前スレ
プログラミング言語 Scala 7冊目
ttp://toro.2ch.net/test/read.cgi/tech/1315134454/

■Scalaの紹介文(さわり)
Scalaは簡潔かつ優雅で型安全な方法でよくあるプログラミングパターンを表現できるように
設計された汎用プログラミング言語です。
Scalaはオブジェクト指向と関数型言語の特徴をスムーズに統合しておりJavaやその他の言語を扱う
プログラマをより生産的にすることができます。(以下略)
ttp://www.scala-lang.org/node/25

■Scalaに関する書籍(英語)
ttp://www.scala-lang.org/node/959
リファレンスマニュアルや草稿のPDFなども充実しているのでそちらも参照してください。
日本語の資料には、チュートリアルの訳やIBM dW、IT Pro, @ITの連載記事、各々で開かれた勉強会の資料などがあります。

2 :デフォルトの名無しさん:2012/04/22(日) 15:18:47.79
>>1


3 :デフォルトの名無しさん:2012/04/24(火) 06:48:39.08
>>1おつおつ

4 :デフォルトの名無しさん:2012/04/24(火) 23:33:26.10
Windows7 Professional + Cygwin + TeraTerm 4.72 の環境で
Scala REPL を楽しみ始めました。
なんとか UTF-8 で漢字も使えるし、上矢印キーで前回入力時の
文字列を再度使ったり、TABキーでメソッド補間もできる(jlineが
動いている)ようになりました。
ただ、前回入力時の文字列を再表示させてカーソルキーで修正しようと
するときに全角文字の位置ではカーソル位置が半角文字のように動作し
ます。これは、java の jlineが日本語に完全対応でないこととして
あきらめるべきなんでしょうか。

scala REPL 起動時は、
$ scala
Welcome to Scala version 2.9.2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_03).
Type in expressions to have them evaluated.
Type :help for more information.
と表示されます。

5 :デフォルトの名無しさん:2012/04/24(火) 23:46:17.92
関係ないかもしれないけど
rlwrap
http://hitai.blog72.fc2.com/blog-entry-78.html
cygwin?
http://sites.google.com/site/genyamaguchi0/scala-1

諦めてvmplayer&lubuntuとか

6 :デフォルトの名無しさん:2012/04/26(木) 06:10:35.39
>> 5
ありがとうございます。rlwrap を使う前に jline をoffにする方法が
私には難しそうです。-Xnojline で :silent と同じ状態になりエコー
バックしないのです。
また、jline も別途バージョンアップ継続中(jline2)らしいので、
今後に期待し、現状のままで使ってみます。
Cygwin 上の scala REPL で UTF-8 が使えてるので、scala REPL 内で
"ls"等を呼び出して Windows7 のファイルを簡単に処理できそうです。
Windows7 の日本語ファイル名は UTF-8 ですから。

7 :デフォルトの名無しさん:2012/04/26(木) 06:16:43.55
一応、こんな感じで正常に動作してます。上矢印キーで前回入力行が
出てもいます(カーソル位置が半角判断になるだけで)。

scala> val 歌 = "咲いた咲いたチューリップの"
歌: java.lang.String = 咲いた咲いたチューリップの

scala> 歌.
+ asInstanceOf charAt
codePointAt codePointBefore codePointCount
compareTo compareToIgnoreCase concat
contains contentEquals endsWith
equalsIgnoreCase getBytes getChars
indexOf intern isEmpty
isInstanceOf lastIndexOf length
matches offsetByCodePoints regionMatches
replace replaceAll replaceFirst
split startsWith subSequence
substring toCharArray toLowerCase
toString toUpperCase trim

scala> 歌.matches(".*チューリップ.*")
res2: Boolean = true


8 :デフォルトの名無しさん:2012/04/27(金) 23:18:02.55
CygwinでScalaやっている人って意外と多いな。

普通にWindows上でやるのと比べてどういうメリットがあるのだろう?
あと VirtualBoxとかでLinux立ち上げて、そこでScalaやるのじゃだめなの?

9 :デフォルトの名無しさん:2012/04/28(土) 00:41:56.20
ckwとnyaosという手もある

10 :デフォルトの名無しさん:2012/04/28(土) 10:51:00.99
>> 8
6 です。
VMPlayerでLinuxも使ってます。けど、エクセル等のMS-Officeでの作業をし
なきゃならない時に、CSVファイルにして、さくっと Cygwin で Linux 的に
終わらせる、のが第1の目的です。日本語ファイル名で苦労するのは嫌なの
です。Scala だとXMLファイルの処理が簡単にできそうで楽しみです。
Windowsアプリ間のファイル形式変換ツールが簡単に作れそう。

11 :デフォルトの名無しさん:2012/04/28(土) 15:47:00.83
>>8
普段Cygwinを使ってるからそれに加えてちょっとしたスクリプトにScalaも使ってる。
Scala単体で使うなら別にCygwinはなくてもいいし、Eclipseたちあげて大物書くときも
Cygwinなくてもなんとかなる。

メリットっていってもgrepやsedと組み合わせられるとか/dev/や/procで
Windowsのクリップボードやプロセスと連携できるくらいかな。

12 :デフォルトの名無しさん:2012/04/28(土) 16:51:12.52
コマンド群が使いたいだけならckwとnyaosで、Unxutils落としてきてパスを通しておくというてもあるでよ!

13 :デフォルトの名無しさん:2012/04/28(土) 23:43:11.48
大事なことだから2回言いました

14 :デフォルトの名無しさん:2012/04/29(日) 21:45:31.85
>>12

単純に、Windowsでは、コマンドラインが使いづらいってだけだったら、nyaosで十分解決するよね。
だけど、Cygwin使う人は、やっぱり、それなりのUnix環境がほしい人なんだろうかな、って思って。

ただ、数年前と比べると最近はCygwinを使っている人は減ったみたいで、
仮想環境にLinux入れてやるって人が最近増えてきているみたい。

15 :デフォルトの名無しさん:2012/04/30(月) 08:48:50.33
>>14
同じ意見です。Scala REPL なら Cygwin, コンパイル後実行なら仮想環境
かなぁ。それに、Scala REPL を高機能関数電卓としても使ってます。
仮想環境の場合、ゲストである仮想環境内とホストのWindowsの間の
ファイルのやり取りがめんどくさい。



16 :デフォルトの名無しさん:2012/04/30(月) 09:34:32.93
そういう時はHost onlyの仮想ethアダプタを用意してWindows共有フォルダをマウントしてるな。
最近のUbuntuはUser level file systemのGVFSが最初から動いてるから、
Nautilusからネットワークを表示>対象のフォルダを選択しただけで、$HOME/.gvfs下にマウントされるし
デプロイとかの仕組みが不要な場合はこれで事足りる。

17 :デフォルトの名無しさん:2012/05/01(火) 12:56:05.76
Scala 勉強中です。
super class の default でない constructor を呼び出すのはどうしたらいいですか?
Y の this(a: Int, b:Int) を定義したいです。

class X (val i: Int) {
def this(a: Int, b: Int) = this(a * b + 10)
}
class Y (override val i: Int) extends X(i) {
def this(a: Int, b: Int) = super(a, b) // コンパイルエラー
}

println(new Y(2, 3).i) // 16 になるようにしたい

18 :デフォルトの名無しさん:2012/05/01(火) 13:54:41.10
本当にやりたい事がthisコンストラクタを使って実現すべき事なのかどうかが
疑問だけど(設計が悪いんじゃないかしらということ)
計算自体を分離するなりすれば良いだけじゃないの?

object X {
def calc(a: Int, b: Int) = a * b + 10
}
class X (val i: Int) {
import X.calc
def this(a: Int, b: Int) = this(X.calc(a, b))
}
class Y (override val i: Int) extends X(i) {
import X.calc
def this(a: Int, b: Int) = this(X.calc(a, b))
}


19 :デフォルトの名無しさん:2012/05/01(火) 14:21:26.61
class X(a: Int, b: Int) {
val i = a * b + 10
}
class Y(a: Int, b: Int) extends X(a, b)

scala> new Y(2, 3).i
res0: Int = 16

20 :デフォルトの名無しさん:2012/05/01(火) 14:34:54.01
>>18, 19
ありがとう。
実際には scala 標準ライブラリのクラス (具体的には scala.collection.mutable.BitSet) に機能を追加したい。
protected なメンバにアクセスする必要があるので継承して子クラスを作るといいのかな、と。で、親クラスに 3 つあるコンストラクタを子クラスでもそのまま使いたいというシチュエーションです。

と思ったんだけど、 trait 作って new BitSet() with TraitA みたいにするのがいいのかな?その場合 companion object (BitSet) によるインスタンス生成時に trait くっつけることできないですよね。。

21 :デフォルトの名無しさん:2012/05/01(火) 14:44:34.04
ライブラリなど既存のコードへの機能追加するときの有益な手法として
「Pimp my Library」パターンというものがあります。
つづきはWebで

22 :デフォルトの名無しさん:2012/05/01(火) 14:50:42.82
"pimp"というスラングはもともと「売春の斡旋人。売春婦に依存して生活する男。」
へぇー

23 :デフォルトの名無しさん:2012/05/01(火) 14:58:28.65
>>21
ググル先生に聞いて来ました。 RichInt とかのあれだったんですね。
Pimp my Library pattern, protected なメンバにアクセスできる?

24 :デフォルトの名無しさん:2012/05/01(火) 17:57:57.08
case class について質問です。

case class X(x: Int)の実体X(1)は、参照数が0になってもGCが走るまでの間
は存続していると考えていいのでしょうか?

既にどこからも参照されていないX(1)を再び生成しようとした際、GCに消され
ていなければ実体生成コストを省けるのか?という点が知りたいです。

想定している状況は、自己再帰関数内で case class X への map を行うけど、
条件にmatchしなければ作ったX(_)を捨てて、次の再帰関数呼出時にまた作り
直すといったもので、キャッシュされていると嬉しいなと思ったのです。

(そもそも小さいインスタンスを大量生成してもコストは軽微だという話はど
こかで読んだ気がしますが。)


25 :デフォルトの名無しさん:2012/05/02(水) 23:13:38.59
Memoizeしようという話か?

26 :デフォルトの名無しさん:2012/05/02(水) 23:40:44.49
>>24
実体はGCが走るまで存続してるけど、再利用はされないよ。
そういうしくみはないし、たとえあってもペイしない。

27 :デフォルトの名無しさん:2012/05/03(木) 00:33:08.36
>>26
Javaのプリミティブラッパーはキャッシュしてるし
登場頻度や生成量やGC/エスケープ解析の具合いによってはペイしないとも言い切れない

28 :デフォルトの名無しさん:2012/05/03(木) 10:01:37.91
とりあえずなんでもかんでもcase classにしてしまう病を発症してるわ

29 :デフォルトの名無しさん:2012/05/03(木) 11:51:53.66
自分でキャッシュしとけ

30 :デフォルトの名無しさん:2012/05/03(木) 11:54:02.91
キャッシュでくれ

31 :デフォルトの名無しさん:2012/05/03(木) 12:01:39.77
ほえ?
欲しいです!でもお金ないです!

32 :デフォルトの名無しさん:2012/05/03(木) 12:04:04.37
つセコム

33 :デフォルトの名無しさん:2012/05/03(木) 18:58:40.79
いま気づいたんだけど、REPLって前の実行結果(res*)が次の実行へ繋がってるんだね。
scala> List(1,2,3)
res1: List[Int] = List(1, 2, 3)
scala> .length
res2: Int = 3
地味に便利かも

34 :デフォルトの名無しさん:2012/05/05(土) 09:51:39.68
>>11
あと、Cygwin のメリットとしては
A. Windows から直接 Cygwin 内の emacs が使える。Windows の
NotePad や WordPad は嫌だから。ファイル指定に cygpath コマンド使うのがコツ。
B. 仮想環境じゃないから Cygwin で作った OpenGL のプログラムが
高速表示可能。Scala だと、JOGL を Scala から使えるはず。
REPL から JOGL とかインタラクティブで面白そうだけど試したことない。
まあ、人それぞれかと。

35 :デフォルトの名無しさん:2012/05/05(土) 12:34:33.26
僕はLWJGLちゃん!

36 :デフォルトの名無しさん:2012/05/05(土) 23:49:03.24
>>35 情報ありがとう。
LWJGL は Nightly builds の lwjgl-2.8.4 なら Scala + 64bit JVM で
正常に動作した。Windows Professional 64bit だと 32bit JVM でも
2.8.3 は動作しなかった。情報ありがとう。lwjgl_test.jar のインベー
ダーゲームに感動したw (Java or Scala でもスピード出るね)



37 :デフォルトの名無しさん:2012/05/06(日) 00:27:45.11
REPLでGUIってEDTで死ぬとばっかり思って試してなかった

38 :デフォルトの名無しさん:2012/05/06(日) 12:13:07.02
lwjglお試しならgiter8でお手軽かんたんにできます
さんきゅーNicol (洞窟物語まだクリアしてないや

39 :デフォルトの名無しさん:2012/05/12(土) 14:45:32.08
2.9.2にしてから,スクリプトでエラーになると操作不能,プロンプトが表示され
ないって状態になる時がある.

windows 64bit + cygwin(mintty) + scala 2.9.2

40 :デフォルトの名無しさん:2012/05/12(土) 14:53:42.58
どうせ cygwin(mintty) のバグだろ

41 :デフォルトの名無しさん:2012/05/13(日) 20:51:45.50
Scalaくん、最近使ってないんだけど調子どう?
何か新しい話はある?

42 :デフォルトの名無しさん:2012/05/13(日) 22:05:59.15
4 です。
>>39
たぶん、scala コマンドの -echo が効いたままになってしまうから
だと思います。Scala の scala コマンドは単なるシェルなので、
内容を読むことができます。

読むとCygwin は特別待遇であることがわかります。
環境が Cygwin だと認識すると, cygpath を利用したかなり
丁寧な対応を行ってます。その中の
stty -i canon -min 1 -echo
が原因かと。REPLではこうしないと端末のコールバックと重なる。
私は Cygwin + TeraTerm ですが、残りの環境はたぶん同じです。

43 :デフォルトの名無しさん:2012/05/13(日) 22:15:41.51
>>41
新しい話ではないかもですが、
この週末 scala-2.9.2 での UTF-8 におけるカーソル動作を
調べてました。自分用程度なら、jlineのコード修正で UTF-8 へ
の対応(全角文字でのカーソル移動正常化)はできそう。
jline(jline2がscala-2.9.2には使われてます)の UTF-8 への
完全対応は、Jruby,Jython,Scala とどの REPL でも必要とされ
てるようで、既に取り掛かっていると思われます。
サロゲート(Javaのみ)と文字幅(Unicode共通)が課題です。
既に xterm や emacs は解決してるので、できる方ならそれらを
参考にすればすぐかも。
近いうちに、JVM + UTF-8 での REPL が各国で普通になると推測。

44 :デフォルトの名無しさん:2012/05/13(日) 22:24:01.47
43です。>>43 のサロゲートはJavaの内部コードである UTF-16 の話。
ちなみに、emacs shell内なら(emacs term ではない)
現時点でも Scala REPL は UTF-8 を正しく操作できます。
環境変数 TERM が異なるため jline を使わないから。
ただ、jlineを使っていないので、TAB補間や矢印での履歴
再表示は不可能。

45 :デフォルトの名無しさん:2012/05/13(日) 22:53:14.98
>>8
今になって気づきましたが、Cygwin 内の emacs のかな漢変換は
Windowsの機能をそのまま使います。つまり Ctrl-\ で Windows
のかな漢変換機能と辞書が使えるわけです。最初気付かず、いつ
もは自分で登録する特殊な人名があっさり変換されるので不思議に
思ってましたw まあ、これも Cygwin の利点かと。

46 :41:2012/05/14(月) 21:55:25.93
>>43,44
ここにきてえらい地味〜な話をもってきたね(笑)
半年ぶり(?)くらいで使ったら、ぜんぜん覚えてなくて一苦労だった。

ところで、コマンドラインで、
scala> Double.[TAB]
とかやって、出てくるメソッドに使えないものが入ってるんだけど何でだっけ?
java.lang.Doubleのメソッドとごっちゃになってるの?

47 :41:2012/05/14(月) 21:56:41.35
>>46
あと、相変わらずコンパイル遅いのは閉口する。
ネイティブコンパイラまだかね。

48 :デフォルトの名無しさん:2012/05/14(月) 23:04:20.57
>>47
ネイティブコンパイラって、ソースコードがScalaで書かれてる
コンパイラって意味?
javaコマンド(JVM)を使わずにclassファイルを作るコンパイラ
の意味??
OSでのネイティブコードを吐くコンパイラの意味???

49 :デフォルトの名無しさん:2012/05/14(月) 23:11:05.15
>>43
今、Jline2に力を入れてるのは readline に Jline2 を使ってる
Jruby のメンバーらしい。Scala は REPL の部分のみに Jline2 を
使うだけなので Jline2 の進歩を待つ方がいいかも。

50 :デフォルトの名無しさん:2012/05/15(火) 07:24:07.44
>>46
の候補の話なのですが、たとえば
Double.longBitsToDouble(Long)
のことです。
scalaのドキュメントみても、そんなメソッドないし
java.lang.Double.(...)
で使うのが正しいのでしょうか?

51 :デフォルトの名無しさん:2012/05/15(火) 07:26:12.28
>>48
うーん、本当に速いならどっちでもいいけどJVMは欲しいかな。
いま現状で最も速いのはfscなんですか?

52 :デフォルトの名無しさん:2012/05/15(火) 19:13:59.95
sbt使えよ

53 :デフォルトの名無しさん:2012/05/15(火) 20:42:21.04
REPLでcase classを入れ子にしてTreeつくって遊んでたら
toString()がNode,Leaf全部辿って文字列返してくれようとしてて
heap食い尽くしてた、よくばりさんめ

54 :デフォルトの名無しさん:2012/05/15(火) 23:39:29.98
>>51
スクリプト言語でもよくネイティブコンパイルっていう人がいるが
ネイティブかどうかそれ自体は基本的に速度に影響ないぞ。

55 :デフォルトの名無しさん:2012/05/16(水) 08:02:32.68
GCJがポシャッた経緯とか知らないんだろうな

56 :デフォルトの名無しさん:2012/05/16(水) 09:41:56.45
Scalaを使う人の呼び方を調べたのですが定番がないようです。
子音で終わればerを付けるだけですが、aで終わるからそうは行きません。
Scalalianという提案も見かけましたが、
AustralianはAustra人ではなくAustralia人です。
そこでaで終わる国の人を何と言うのか調べてみました。

America   → American   (アメリカ人)
Australia  → Australian  (オーストラリア人)
Cuba     → Cuban      (キューバ人)
Guatemala → Guatemalan  (グアテマラ人)

Scalaを使う人はScalanと呼ぶ事にしませんか?

57 :デフォルトの名無しさん:2012/05/16(水) 10:32:15.61
スカラ←◎
カルト教団御用達(あいつらどうなったんだろ?

58 :デフォルトの名無しさん:2012/05/16(水) 19:32:35.53
>>56
Mohicanでいいよ

59 :デフォルトの名無しさん:2012/05/16(水) 19:42:37.80
>>43 で地味なこと書いた43ですw
とりあえず「自分用」としては、全角カーソル問題は
jline2 の修正で解決できました。
入出力とも UTF-8 限定ですが、
A) ノートパソコン
Windows 7 Professional (64bit) +
CygwinCYGWIN_NT-6.1-WOW64 1.7.1 + Tera Term 4.72
B) 同じノートパソコンから SSH で遠隔ログイン
UBUNTU(Linux 2.6.16-76.55vl4) + Tera Term 4.72

A),B) とも修正前の jline.jar では全角文字が
半角単位で重なったりカーソル位置と文字位置が
一致しなかったりしていました。
修正後の jline.jar では今のところ正常。
日本語が REPL でストレスなく使えるのでかなり嬉しい。
ただ、やっつけの修正でしかないので、詳しい方が多そうな
ところで報告してみます
(既に正式な修正や予定があるよ、とかの情報がありそう)。

60 :デフォルトの名無しさん:2012/05/17(木) 22:51:40.51
リストがソート済みかって判断しようとして詰まった・・・

61 :デフォルトの名無しさん:2012/05/18(金) 03:04:57.14
val list = List(....)
list.sorted == list

62 :デフォルトの名無しさん:2012/05/18(金) 05:50:56.67
なんか関数型の練習問題みたいだけど

@scala.annotation.tailrec
def presorted[T: Ordering](xs: List[T]): Boolean = xs match {
case Nil => true
case x :: Nil => true
case x :: y :: ys => implicitly[Ordering[T]].lt(x, y) && presorted(y :: ys)
}

短いのは誰かまかせた

63 :デフォルトの名無しさん:2012/05/18(金) 10:05:34.25
scala> List(1,2,3,3).sliding(2).find(x => x(1) < x(0)).isDefined.unary_!
res1: Boolean = true
scala> List(1,2,3,3,2).sliding(2).find(x => x(1) < x(0)).isDefined.unary_!
res2: Boolean = false

64 :デフォルトの名無しさん:2012/05/18(金) 10:24:50.24
>>63 長さ0or1のリストに対する考慮洩れをfix

scala> List[Int]().sliding(2).filter(_.length > 1).find(x => x(1) < x(0)).isDefined.unary_!
res3: Boolean = true

scala> List[Int](1).sliding(2).filter(_.length > 1).find(x => x(1) < x(0)).isDefined.unary_!
res4: Boolean = true

scala> List[Int](1,2,3).sliding(2).filter(_.length > 1).find(x => x(1) < x(0)).isDefined.unary_!
res5: Boolean = true

scala> List[Int](1,2,3,3).sliding(2).filter(_.length > 1).find(x => x(1) < x(0)).isDefined.unary_!
res6: Boolean = true

scala> List[Int](1,2,3,2,3).sliding(2).filter(_.length > 1).find(x => x(1) < x(0)).isDefined.unary_!
res7: Boolean = false


65 :デフォルトの名無しさん:2012/05/18(金) 10:50:17.95
関数化したもの

def presorted[T: Ordering](xs: Seq[T]): Boolean =
!xs.sliding(2).filter(_.length > 1).find(x => implicitly[Ordering[T]].lt(x(1), x(0))).isDefined

66 :デフォルトの名無しさん:2012/05/18(金) 11:09:16.33
60

返答サンクス.できなくはないんだけどぱっとできなくない?



67 :デフォルトの名無しさん:2012/05/18(金) 11:32:00.49
日本語でおk

エスパー回答すると、>>65の解法は全ての要素を辿るわけではなくて、
大小関係を満たしていない組が見つかったらそこで計算を打ち切るから
速度面での心配はない。

slidingはIteratorを返すのだけどIteratorについての理解はもちろん済ませての質問ですよね。

68 :デフォルトの名無しさん:2012/05/18(金) 13:33:42.86
違うな、>>66 の暗号は「ぱっと(parと)できなくない?」と解読できる
つまり…並列処理コレクションで高速に問題が解けないかということを問うているんだよ!

ΩΩΩ<な、なんだってー!!

69 :デフォルトの名無しさん:2012/05/18(金) 13:48:07.64
Finagleハッカソン〜Twitterを支える基盤技術をみんなでハッキングする会〜第一部 - ニコニコ生放送
http://live.nicovideo.jp/watch/lv93012184
Finagleハッカソン〜Twitterを支える基盤技術をみんなでハッキングする会〜第二部 - ニコニコ生放送
http://live.nicovideo.jp/watch/lv93393157


なにこれ、ちゃんと見て楽しいものになるの?
まさかプログラミングしてる風景を垂れ流すだけじゃないよね…?

70 :デフォルトの名無しさん:2012/05/18(金) 14:33:34.55
>>69 隣の家からご飯借りて来い

71 :デフォルトの名無しさん:2012/05/18(金) 20:40:26.14
それママカリ

72 :61:2012/05/18(金) 22:46:06.22
>>66

俺が最初にぱっとしたやつ書いたじゃん

73 :デフォルトの名無しさん:2012/05/18(金) 22:47:27.37
んなクソ遅いコード使い物にならん

74 :デフォルトの名無しさん:2012/05/18(金) 23:11:35.69
おいおいニコ生中止かよ
どんだけチキンハートなんだよ
晒される覚悟がないやつはScala使うなよ

75 :デフォルトの名無しさん:2012/05/18(金) 23:17:40.59
ustはするみたいだぞ

76 :デフォルトの名無しさん:2012/05/19(土) 09:07:51.62
そんな頭の悪い一年生議員が吐くような安い野次じゃマサカリは飛んで来ないな(嘲笑

77 :デフォルトの名無しさん:2012/05/19(土) 10:01:16.27
なんでScalaの標準ライブラリにはbinarySearchが無いの?

いや、Javaのを使えばいいのは判るんだけど、
敢えてScalaに入れていないのは何か狙いというかポリシーがあるんじゃないかと思う。
binary searchって関数言語的に美しくないとか?
でも、ポリシーの美しさにこだわって実用性を捨てるのはどうよ?

78 :デフォルトの名無しさん:2012/05/19(土) 11:00:18.67
ScalaとJavaどっちから勉強するべきか教えてください

79 :デフォルトの名無しさん:2012/05/19(土) 11:24:14.89
うわぁこれニコ生中止して正解だわ
15人くらいしか見てねえし
Scala知らないやつ多すぎ
言語知らないやつがFinagleで何作るんだよ
何も準備しないでこういうのに参加するやつなんなのまじで

80 :デフォルトの名無しさん:2012/05/19(土) 11:51:51.88
>>77
実用的にも普通はMap使うんじゃね

81 :デフォルトの名無しさん:2012/05/19(土) 12:05:03.35
>>77
まだソート絡みの課題が終わらないのかい?かわいそうに...

82 :デフォルトの名無しさん:2012/05/19(土) 12:49:55.74
そーっとしておいてやろうぜ?

83 :デフォルトの名無しさん:2012/05/19(土) 13:01:39.19
ソートー苦労してそうだ

84 :デフォルトの名無しさん:2012/05/19(土) 13:38:56.39
>>81
そういうつながりだったのか
おまえよく気付いたな

85 :デフォルトの名無しさん:2012/05/19(土) 14:11:54.15
>>80
Map遅えしメモリ食うだろ。

そもそも、sorted arrayを標準ライブラリに入れないセンスはいくらなんでも変だぞ、
とゆー、ポリシーの話。

ついでに言えば、なんで標準のPriorityQueueにはdecreaseKey操作が無いんだよ。
どういうセンスなんだ?

86 :デフォルトの名無しさん:2012/05/19(土) 14:23:36.39
そんなもの欲しがるのはお前だけなんだって
常にソートされている状態が必要なら、生成時に最初からソートされた値を使うし
後から要素を追加されてもソートされている状態が必要なら Map, Tree を使う

仕様も決めないでコード書こうとしているからそんな下らないところでグダグダ悩むんだよ

87 :デフォルトの名無しさん:2012/05/19(土) 14:28:11.50
ぼくのかんがえたさいきょうのコンテナ(笑)

88 :デフォルトの名無しさん:2012/05/19(土) 14:38:35.50
>>86
ArrayにbinarySearchや、PriorityQueueにdecreaseKeyがあるのが
普通だと思えない感覚の持ち主だとしたら、
まず、初歩的な修行として著名なOSやコンパイラのコードを10万行ぐらい読んだ方がいい。


89 :デフォルトの名無しさん:2012/05/19(土) 14:42:05.79
10万行って少なくね?

90 :デフォルトの名無しさん:2012/05/19(土) 14:45:36.22
>>89
うん。まあ、初心者向けにはいいんじゃね?

91 :デフォルトの名無しさん:2012/05/19(土) 14:59:08.35
Cしか知らないやつが一気に背伸びしてScala覚えた感がすごい

92 :デフォルトの名無しさん:2012/05/19(土) 15:04:40.01
Scalaって背伸びして覚えるようなもんか?

93 :デフォルトの名無しさん:2012/05/19(土) 15:29:07.54
なんでbinarySearchぐらいで、ぐだぐだ言われてるのか理解出来ない。

94 :デフォルトの名無しさん:2012/05/19(土) 16:01:15.01
ScalaよりCの方が遥かに難しいだろ。ただし、言語の外まで含めればの話。

もちろん、言語仕様内ではScalaの難易度はCの100倍だ。
Scalaは選ばれた天才のみが触れることを許される試行の言語。

まあ、>>78はScalaは百年早いからJavaを触るべきってこった。

95 :デフォルトの名無しさん:2012/05/19(土) 16:05:14.24
言語外まで含めてもCのほうが簡単だと思うが
C++ならまだしも
Scala使うならJavaまで精通していなきゃいけないから

96 :デフォルトの名無しさん:2012/05/19(土) 16:27:17.56
>>88みたいに漠然としたことを言っちゃう奴は大抵自分もろくすっぽ読んでない

97 :デフォルトの名無しさん:2012/05/19(土) 16:45:25.28
Javaしか知らないやつが一気に背伸びしてScala覚えた感がすごい

うん、どこかで聞いたフレーズかと思ったら、これだった。

98 :デフォルトの名無しさん:2012/05/19(土) 17:03:37.41
Mapは遅くてメモリ使うから使わない
binarySearchを入れないのはScalaのポリシーがおかしい

普通だと思えない感覚の持ち主だとしたら、
まず、初歩的な修行として著名なOSやコンパイラのコードを10万行ぐらい読んだ方がいい。


背伸びしてる感すごいでしょ

99 :デフォルトの名無しさん:2012/05/19(土) 17:06:24.23
デタラメ言い放つの流行ってるの?

100 :デフォルトの名無しさん:2012/05/19(土) 17:49:35.94
kmizuさん滑舌悪すぎ

101 :デフォルトの名無しさん:2012/05/19(土) 19:37:16.92
>>77
オレたちScala使いはな! そこら辺の低級言語や、オブジェクト志向倶楽部で、
「あれがない」「これがない」って、大口叩いて仲間と心をなぐさめあってるような
負け犬どもとはわけが違うんだからな。

「binarySearchが必要だ」と心の中で思ったならッ!
その時スデに行動は終わっているんだッ!

def indexOf[T <% Ordered[T]](xs: IndexedSeq[T], elem: T): Int = _indexOf(xs, elem).right.toOption.getOrElse(-1)
def _indexOf[T <% Ordered[T]](xs: IndexedSeq[T], elem: T): Either[Int, Int] = (xs, xs.length / 2) match {
case (IndexedSeq(), _) => Left(-1)
case (xs, i) if xs(i) > elem => { _indexOf(xs.slice(0, i), elem)}
case (xs, i) if xs(i) < elem => { _indexOf(xs.slice(i, xs.length), elem).right.map(_ + i)}
case (_, i) => Right(i)
}

短いのは誰かまかせた

102 :デフォルトの名無しさん:2012/05/19(土) 19:45:43.17
さすがScala様!俺たちにできないことを平然とやってのけるッ!そこにシビれる!あこがれるぅ!!

103 :デフォルトの名無しさん:2012/05/19(土) 19:53:29.81
大口叩く
心を慰めあう
両方やらなければならないのが
幹部の辛いところだ

104 :デフォルトの名無しさん:2012/05/19(土) 23:23:48.05
いやだから、入れてない理由が知りたいのであって、コード例なんてどうでもいいのよ。

105 :デフォルトの名無しさん:2012/05/19(土) 23:31:17.48
自分でメール出して尋ねてみれば

106 :デフォルトの名無しさん:2012/05/19(土) 23:56:23.34
どうしてもMapを使いたくない、
配列で二分探索しないと気がすまないというやつは
Scala使うの向いてないってことだろ
その程度のオーバーヘッドは随所に発生してるぞ

107 :デフォルトの名無しさん:2012/05/20(日) 00:08:20.23
>>101 λ化&Option化&tailrec化した

def indexOf[T <% Ordered[T]](xs: IndexedSeq[T], elem: T): Int = {
@scala.annotation.tailrec
def lambda(from: Int, to: Int): Option[Int] = (from + (to - from) / 2) match {
case i if to < from => None
case i if xs(i) > elem => lambda(from, i - 1)
case i if xs(i) < elem => lambda(i + 1, to)
case i => Some(i)
}
lambda(0, xs.length - 1).getOrElse(-1)
}

108 :デフォルトの名無しさん:2012/05/20(日) 00:19:02.74
>>107 いいね!
IndexedSeqOptimizedをPimp my LibraryしてindexOfを拡張すればまったく違和感なくなるな

109 :デフォルトの名無しさん:2012/05/20(日) 02:04:28.04
Pimp my Library化。
#indexOfは既に存在するから別の名前にしないとimplicitが働かないな

implicit def toIndexedSeqWithBinarySearch[T <% Ordered[T]](xs: IndexedSeq[T]) = new {
def binarySearch(elem: Ordered[T]): Int = {
@scala.annotation.tailrec
def lambda(from: Int, to: Int): Option[Int] = (from + (to - from) / 2) match {
case i if to < from => None
case i if elem < xs(i) => lambda(from, i - 1)
case i if elem > xs(i) => lambda(i + 1, to)
case i => Some(i)
}
lambda(0, xs.length - 1).getOrElse(-1)
}
}

scala> Vector(1,2,3).binarySearch(2)
res2: Int = 2

110 :デフォルトの名無しさん:2012/05/20(日) 02:05:13.43
あえて無いことを選択してるんじゃないだろうからイシューあげてみれば?

111 :デフォルトの名無しさん:2012/05/20(日) 02:41:50.77
>>109
やってることは同じだけど、もうちょっと素直に書いたほうがいいと思うな
こんな感じで

def binarySearch[T](xs: IndexedSeq[T], elem: T)(implicit ord: Ordering[T]): Int = {
import ord._
@scala.annotation.tailrec
def binarySearch0(start: Int, end: Int): Int = {
if (start > end) return -1
val mid = (start + end) / 2
if (elem < xs(mid)) binarySearch0(start, mid - 1)
else if (elem > xs(mid)) binarySearch0(mid + 1, end)
else mid
}
binarySearch0(0, xs.length - 1)
}

無駄にmatch文使ったりとか、Option使ったりとかはしなくていいと思う
あと、OrderedよりOrderingのほうが若干使い勝手がいいかなと
Orderingは処理ごとにインスタンスを作れるので
たとえばこんな感じで

scala> binarySearch(Array(3, 2, 1), 1)(Ordering.fromLessThan(_ > _))
res1: Int = 2

まあ、全部細かい話だけどw


112 :デフォルトの名無しさん:2012/05/20(日) 02:42:41.98
やめとけバカにされるだけだ
JavaのArrayが云々って時点でセンス無いんだよ、お前は型無し言語でも使っとけ
http://stackoverflow.com/questions/4226947/scala-replacement-for-arrays-binarysearch

113 :デフォルトの名無しさん:2012/05/20(日) 02:44:22.15
>>110
あえてだと思うけどね
やっぱりソート済みなことを表現できないArrayに
binarySearchがないのはScala的に当然だと思うんだよね
静的言語がなるべく静的に表現しようとするのはポリシーの問題じゃなくて、実益の問題だと思う

メタファーとかアナロジーとか意外と精神世界にいきがちなプログラミングの世界で
実益を第一に考えて、その裏付けとして理論があるのが関数型の世界なんだよね
逆だと誤解されることが多いけど

114 :デフォルトの名無しさん:2012/05/20(日) 09:00:21.33
if else return 使ってドヤ顔の手続き脳が関数型語られても

115 :デフォルトの名無しさん:2012/05/20(日) 13:54:01.87
いや、構造分解とかしないのにmatch使っちゃ駄目だから
なんとなく関数型っぽいとか、行数が減りそうとかそういう理由で使っちゃ駄目
プログラムは全ての要素に意味を持たせないと
あと、内部関数にlambdaって名前をつける文化もScalaにはないから
Scalaのソース取ってきて検索したらすぐにわかることでしょ?
たった10行ちょっとのコードなんだからちゃんと書こ?
この調子で何千行、何万行って書いたらとんでもないプログラムが出来上がっちゃうから

と、会社に入ったらこういう説教かましてくる先輩とか出てくると思うけど
冷たくあしらわないでねw

116 :デフォルトの名無しさん:2012/05/20(日) 15:28:00.97
>>115
> と、会社に入ったらこういう説教かましてくる先輩とか出てくると思うけど
> 冷たくあしらわないでねw

ワロタw

117 :デフォルトの名無しさん:2012/05/20(日) 16:40:28.07
でも、先輩!
「Effective Scala」には部分関数の効率的な利用法として紹介されているみたいですよ!

http://twitter.github.com/effectivescala/index-ja.html#関数型プログラミング-代数的データ型としてのケースクラス
> 部分関数は多くの場面で起こり得るものであり,PartialFunction で効率的に符号化される。 メソッドの引数として利用する例:
>
> trait Publisher[T] {
> def subscribe(f: PartialFunction[T, Unit])
> }
>
> val publisher: Publisher[Int] = ..
> publisher.subscribe {
> case i if isPrime(i) => println("found prime", i)
> case i if i%2 == 0 => count += 2
> /* ignore the rest */
> }

118 :デフォルトの名無しさん:2012/05/20(日) 17:39:55.79
>>117
それはちゃんと意味あるから
部分関数って自分が処理しないものはスルーしなきゃいけないんだけど

publisher.subscribe {
case i =>
if isPrime(i) {
println("found prime", i)
} else if (i%2 == 0) {
count += 2
}
}

こう書いたらこの部分関数が全部処理しちゃうからね
だからガードを使って自分が処理できるところだけのコードを書く
ガードっていうのはパターンマッチの後ろについてるif文のことだけど
/* ignore the rest */ って書いてあるしね


119 :デフォルトの名無しさん:2012/05/20(日) 17:40:25.24
かたなし先輩ェ...

120 :デフォルトの名無しさん:2012/05/20(日) 22:18:05.49
scalaインタプリタで
e.
まで書いてタブを打つとeのメソッドやフィールド一覧を出してくれますよね。

だけどeの型が自前のJavaのjarファイル内のクラスの場合には
タブを打ってもpublicのメソッドやフィールドの一覧が出てきません。

なにが原因なんでしょう?
Javaの標準ライブラリクラスSystemなんかではうまくいくので
Javaだからというのが原因でない気がするのですが…

121 :デフォルトの名無しさん:2012/05/20(日) 22:55:57.87
よくわかんないけど、sbt環境だったらJavaだろうが、補完してくれると思うんだよね
たとえば空のディレクトリの下に lib というディレクトリを作って、
そこに joda-time-1.6.jar を入れて、sbtを実行すると、


$ sbt
(中略)
> console
(中略)
scala> val t = new org.joda.time.DateTime
t: org.joda.time.DateTime = 2012-05-20T22:47:37.286+09:00

scala> t.secondOf(タブ入力)
secondOfDay secondOfMinute


これなら補完できる。sbtでやってないならわかんないけど、
sbtでやることをお勧めするw

122 :デフォルトの名無しさん:2012/05/20(日) 23:10:06.54
>>121
ありがとうございます。

ただ、私の環境ではsbtでも駄目でした。
たぶんWindows 7 64bitだからとか何か環境問題があるのだと思いますが…

とりあえず補完はeclipseの方でやることにします。

123 :デフォルトの名無しさん:2012/05/23(水) 08:27:43.65
>>122
sbt のバージョンが違うだけとか。
scala REPL の一部は、まだ古いバージョンの sbt を使って
作っているようですし。

124 :デフォルトの名無しさん:2012/05/23(水) 12:21:40.91
部分関数って自分が処理しないものはスルーしなきゃいけない(>>118)

sbtなら補完できるはず、やってないけど(>>121)

なんだこれ?

125 :デフォルトの名無しさん:2012/05/23(水) 15:38:46.26
部分関数は数学的な定義の話か?
実際の動作はそうじゃん
話がガードを使う必然性の話だからね
部分関数って何ですか?ってことならまた別の回答したと思うけど

下はどう見てもやってるじゃん
質問者がどういう実行環境なのかわからないから、
「sbtでやってないならわかんないけど」って書いたけど
っていうか実行しないでjoda-timeでどんな補完するのか把握してたらそっちのほうがすごいわ

結局何が言いたいねん
言いたいことはもっと直接来いや!

126 :デフォルトの名無しさん:2012/05/23(水) 17:33:02.80
「馬鹿は死なねば治らないのであり、だからこそアナトール・フランスは
『愚かな者は、邪悪な者よりも忌まわしい』と言ったのだ。
 邪悪な者は休むときがあるが、愚かな者はけっして休まないからである。」
(ホセ・オルテガ・イ・ガセット 1883〜1955)

127 :デフォルトの名無しさん:2012/05/24(木) 02:48:19.35
本人が手続き脳なだけで後輩にもそれを強制するとか害悪でしかない

128 :デフォルトの名無しさん:2012/05/25(金) 08:15:57.03
末尾再帰できない再帰で、スタックオーバーフローが出る場合の対処って、どういうのがイケテるんすか?

今はStack使って自力でDFSに書き直しているんだけど、
どうも手続き言語的な場当たり対処な気がしてて、気がとがめる。
関数型的にはもっと洗練されたやり方がある気がする。

129 :デフォルトの名無しさん:2012/05/25(金) 11:39:59.59
argvの要素数上限ってどっからくるの?

130 :デフォルトの名無しさん:2012/05/27(日) 10:08:03.19
>>122
私も Windows 7, 64bit 環境(Javaも64bit版を利用)ですが、
Java/Scala での LWJGL や SWT 用の DLL の未対応といった
64bit 固有の問題もあったけど、最新の(安定板ではない)
DLLなら両方とも対応済み。
Scala REPL で SWT and LWJGL 利用サンプルを動かして遊んで
ます。



131 :デフォルトの名無しさん:2012/05/27(日) 10:08:58.57
http://farumaki.com/?p=top&genre_id=55

132 :デフォルトの名無しさん:2012/05/27(日) 10:12:59.77
>>130
個人的な経験だと 64bit 問題よりは、現在の Scala 安定板であ
る 2.9.2 が Java 6 (JVM 1.6) でコンパイルされてることが気に
なります。
Java 7 (JVM 1.7) でも Scala は動作するけど、安定性を求める
ならまだ Java は 6 (JVM1.6) のままで利用した方が良いかも。
もちろん、Scala 2.9.2 の話なので、次がどうかはわかりません。

133 :デフォルトの名無しさん:2012/05/27(日) 10:25:31.03
>>132
えと、安定板->安定版w
あと、JVM 1.6 と JVM 1.7 では Swing の取り扱いが変更
され、そのために Scala 2.9.2 自身のソースコード
(scalac 等)のコンパイルでは Java6 でコンパイルしないと
エラーになるのです。JVM1.6用のクラスファイルするという
意味です。
もちろん、JVM 1.7 上で公開されている Scala 2.9.2 は
Swing を Java よりも簡単に利用できます。クラスファイル
レベルでは互換ですから。JVM 1.6 用のクラスファイルが
JVM 1.7 上で動くだけなので。

134 :デフォルトの名無しさん:2012/05/31(木) 05:47:02.69
Mybatis for Scala
http://blog.mybatis.org/2012/05/mybatis-for-scala-beta-available.html

135 :デフォルトの名無しさん:2012/06/01(金) 16:16:58.36
def (v: => A)
の場合、vという引数にはA型の値が入っていて、メソッド内で参照したタイミン
グで評価される(遅延評価)ですよね?

def (v: => A => B)
の場合は、vにはA型の引数を受け取って、B型の結果を返す関数が入っていると
いうことで間違いないでしょうか?

上記の認識に間違いがない場合、
def (v: => A => B => C)
っていうメソッドの場合、引数の意味が分からない・・・

136 :デフォルトの名無しさん:2012/06/01(金) 17:19:09.64
>>135
A => B => C は、A => (B => C) ってこと。
後は分かるな?

137 :デフォルトの名無しさん:2012/06/01(金) 19:01:39.61
>>136
ありがとうございます!
ということは、
def (v: => A => B => C)の場合、
引数vには、
「B型の引数を受け取ってC型の値を返す関数」
という関数(これがA)が入る、ということでしょうか?

138 :デフォルトの名無しさん:2012/06/06(水) 08:29:01.72
初学ですが、コップ本の1版がぶくオフで安かったのですが、とりあえず読み始めるならコッチでもいい?
それとも最新の2版?

139 :デフォルトの名無しさん:2012/06/06(水) 16:14:53.77
>>138

問題なし。もし違いが分かるなら3版を待つべきだしw

140 :デフォルトの名無しさん:2012/06/22(金) 20:45:48.85
実践プログラミングDSL ドメイン特化言語の設計と実装のノウハウ

第2部 DSLの実装(内部DSLの実装パターン
Ruby、Groovy、Clojureによる内部DSLの設計
Scalaによる内部DSLの設計
外部DSLの設計
Scalaのパーサーコンビネータを使った外部DSLの設計)



チラ見したけど、大半はDSLに関する本だが、
実装例が、他の言語よりScalaの扱いが大きかった。


mizさんの好きそうなネタだよなあ。今はいずこ。



141 :デフォルトの名無しさん:2012/06/22(金) 21:53:53.35
水島さんのツイッターは顔やめてほしい

142 :デフォルトの名無しさん:2012/06/23(土) 15:59:28.03
>>140
> 実践プログラミングDSL ドメイン特化言語の設計と実装のノウハウ

http://books.shoeisha.co.jp/book/b101671.html

Scalaがもっともその真価を発揮できるのって、DSLじゃないかと思う。


しかし、それ以外では、、Scalaの採用例増えているのかなあ??

143 :デフォルトの名無しさん:2012/06/26(火) 10:23:21.45
おい、水島さんが顔アイコンやめちゃっただろ
滑舌悪すぎとか顔出しやめろとか本人気にしてるみたいだからほどほどにしろよ!

144 :デフォルトの名無しさん:2012/06/27(水) 01:50:44.26
あの人の発表は滑舌どうのより話す内容に補足事項や細かい例外を
全部正確に詰め込もうとして結果わかりにくくなってる気が

145 :デフォルトの名無しさん:2012/06/27(水) 09:52:09.45
意味無くmatch使うなって?
>>111 的書き方より >>109 の方が可読性が高い。
見やすくなってコードも短いというのは意味あることだと思うけど。

146 :デフォルトの名無しさん:2012/06/28(木) 21:06:36.55
scalafxってgroovyfxよりイイものですか?


147 :デフォルトの名無しさん:2012/06/29(金) 00:31:06.81
つーかJavaFXってどうなのよ
特に2.0になってから

148 :デフォルトの名無しさん:2012/06/30(土) 10:05:36.38
>>145
同感。>>111 にある 1行 if、
if (start > end) return -1
これって、Phython では最も嫌われる書き方だよね。
けれど、Scala の philosophy に従うとソースコードを
構造化し短い文で組み立てようとするから適切な使用になる。
その意味では match や case 等があるからこそ
Scalaでは1行ifをもし使っても読みやすくなると思うのです。
だから >>111 は中途半端かと。
詳しい方のご意見希望。

149 :デフォルトの名無しさん:2012/06/30(土) 11:41:32.99
レオナルド熊とjava太郎が握手画像のURL教えてください。

150 :デフォルトの名無しさん:2012/06/30(土) 12:11:47.96
if (start > end) return -1
これって、Phython では最も嫌われる書き方だよね。


初めて聞いたな
しかも Python じゃないし

151 :デフォルトの名無しさん:2012/06/30(土) 16:29:11.50
>>150
Python を書き間違った。すまん。
けど、Python の作者(Guido van Rossum)自身が、
Python でのインデントの位置づけで、そう言ってるんだけど。
有名な話(インタビュー)だと思ってた。
意外に知られてない?


152 :デフォルトの名無しさん:2012/06/30(土) 16:34:09.02
えっ、インデントの話だったの?

153 :デフォルトの名無しさん:2012/06/30(土) 16:38:33.30
Pythonはこう

if start > end: return -1

154 :デフォルトの名無しさん:2012/06/30(土) 16:43:51.38
>>152
うーんw からかわれてるんだろうなぁw
「Pythonのグイド・ヴァンロッサム氏へのインタビュー」
で検索してくれ。ただ、読んだとしても、インデントの話
じゃない?と思うのかなぁ。
そもそもCやJavaでも「1行if」推進派の方だったら、何言って
も理解されないとは想像しますw

155 :デフォルトの名無しさん:2012/06/30(土) 18:57:12.08
一行ifが嫌われるのはうっかり見逃したり
次の行が実行文と間違う人がいると思ってるからなのか?
だとしたら相当なfoolproofだな

156 :デフォルトの名無しさん:2012/06/30(土) 19:21:05.05
そもそも何が問題なのだろう
Pythonのことはよくわからんからなー
Rubyの後置ifは許されるのかしら?
elseがないifとかありえんだろうという関数型的な話ではないよな
Cなら単体のifでも絶対に中括弧で囲むというコーディングルールはあると思う

157 :デフォルトの名無しさん:2012/06/30(土) 19:56:01.91
これか

読みやすいという答えに何かご不満でも? 私は至極もっともな理由だと思うよ。 コードの読みやすさを気にしないだ
ろうか? 正しくインデントされていないコードは嫌では? インデントを文法の一部にすることで、すべてのコードが適
切にインデントされることを保証できる。 かっこを用いる場合だが、その置き方にいくつかの流儀がある。 つまり、
開きかっこをifと同じ行におくか、それとも次の行にか? 次の行だとして、インデントするか、しないか? 閉じかっこも同様。
もしどれかの流儀に慣れると、他の流儀は読みにくくなり得る。 コードをざっと読む場合、多くの人はいずれに
しろインデントを頼りにするので、 これはしばしば次のようなバグを見落とすことにつながる。


if (x > 10)
  x = 10;
  y = 0;


ifが式でさらに副作用をなるたけ嫌うscalaじゃ書かなそうなコードかな〜?

158 :uy:2012/06/30(土) 23:57:00.53
そもそもプログラミングにおいてIF文使ったら負けだと気づけ

159 :デフォルトの名無しさん:2012/07/01(日) 09:36:43.61
>>156
Cで一行からでも{}付ける習慣があるのはは
ぶらさがりelse/elseifの問題があるからだな

160 :デフォルトの名無しさん:2012/07/01(日) 10:12:35.69
>>157
言ってることが矛盾してるんだよな。
Pythonだと、
if x > 10: z = 1
と書いても、
if x > 10:
  x = 10
  y = 0
と書いても、
バグの見落としにならないし、
if x > 10: z = 1
  x = 10
と書く香具師がいたらそれはただの馬鹿だし、
if x > 10: z = 1
x = 10
の二行目をifの続きだと思う香具師も馬鹿。

161 :デフォルトの名無しさん:2012/07/01(日) 10:14:46.55
香具師って何?

162 :デフォルトの名無しさん:2012/07/01(日) 10:32:33.93
>>161
こうぐし 工具 師

工具を使う職人、つまりココではプログラマの事を馬鹿にした表現

163 :デフォルトの名無しさん:2012/07/01(日) 13:40:35.71
>>161
古語みたいなもんだから、気にしなくていいよ

164 :デフォルトの名無しさん:2012/07/01(日) 15:01:31.91
香具師=ヤシ

165 :デフォルトの名無しさん:2012/07/01(日) 15:04:36.39
>>161
奴 -> ヤツ -> ヤシ -> 香具師

こういう単語使う人って、10年後くらいにもまだScalaやってたりするのかな

166 :デフォルトの名無しさん:2012/07/01(日) 21:06:57.17
10年後にはもう37歳になるのか
...早いな〜
2002〜2012と、2012〜2022だと後者は前者ほど劇的な変化はコンピュータ的にはなさそうな気がする

167 :デフォルトの名無しさん:2012/07/01(日) 21:37:31.79
プログラミング言語史的にはこの10年も大したことは起きてないでしょ
C#がうまくいったのと、JavaScriptとObjective-Cが墓から蘇ったくらいで
あとはRails人気でRubyが普及したとかか
Pythonは2002年には既にある程度人気あったはずだし

168 :デフォルトの名無しさん:2012/07/02(月) 11:42:53.39
>>166
Jobs が死んだからな

169 :uy ◆pdu1UZmweE :2012/07/03(火) 11:28:15.45
>>167
そもそも技術は既に開発されていて、知ってる奴は昔から知っている
知ってる奴からすればああようやく流行ってきたかおせーなって程度だろ
一般浸透してゴミッカスドカタ共がその利点を理解し
使うかどうか
人海戦術を嫌う奴は多いけど、結局最後は人の数
どんな優れた技術も理解する奴が少ないと流行らないから
ゴミカス共が理解できる範囲のレベルの技術が流行り、
なんかそこで意味わからない方法で、効率の悪いプログラミングを、効率をよくしようと努力したのが
C#.NET まさにドカタの為のドカタ言語
Scala(笑)

170 :デフォルトの名無しさん:2012/07/06(金) 21:01:30.11
>>142
この本買った。DSLでScalaは真価を発揮、に同意。
1章冒頭の「ホイップをトッピングしたグランデサイズの
スキニーシナモン・ドルチェ・ラテ」の(自然言語と
しての)DSL具合に笑った。

171 :デフォルトの名無しさん:2012/07/08(日) 22:33:58.46
今唐突に言うけど水島さんエバンジェとか言っていじってごめんなさい
また戻ってきてよ

172 :デフォルトの名無しさん:2012/07/08(日) 23:01:50.33
戻れも何もkmizuさんは今でもここ見てるでしょ
単に話すことないだけでは

173 :デフォルトの名無しさん:2012/07/08(日) 23:21:22.17
彼は忙しそう

174 :デフォルトの名無しさん:2012/07/09(月) 01:52:58.20
パーサコンビネータの使い方が何度読んでも分からんとです。
int hoge, hage[3] = { 1, 2, 3 }, huge = 5;
をパースする例とか、どっかないですか?

175 :デフォルトの名無しさん:2012/07/09(月) 10:42:24.72
import scala.util.parsing.combinator.JavaTokenParsers
case class IntDef(name: String, value: Int)
case class IntArrayDef(name: String, value: IndexedSeq[Int])
object HogeParser extends JavaTokenParsers {
lazy val parse = "int" ~> repsep((defIntArray | defInt), ",") ~ ";"
lazy val defInt = ident ~ ("=" ~ wholeNumber).? ^^ {
case ident ~ None => IntDef(ident, 0)
case ident ~ Some(_ ~ default) => IntDef(ident, default(0).toInt)
}
lazy val defIntArray = ident ~ "[" ~ wholeNumber ~ "]" ~ ("=" ~ "{" ~> repsep(wholeNumber, ",") <~ "}").? ^^ {
case ident ~ _ ~ size ~ _ ~ None => IntArrayDef(ident, IndexedSeq.fill(size.toInt)(0))
case ident ~ _ ~ size ~ _ ~ Some(defaults) => IntArrayDef(ident, defaults.map(_.toInt).toIndexedSeq)
}
def apply(str: String) = parseAll(parse, str)
}

scala> HogeParser("int hoge, hage[3] = { 1, 2, 3 }, huge = 5;").get
res1: HogeParser.~[List[Product with Serializable],String] =
(List(IntDef(hoge,0), IntArrayDef(hage,Vector(1, 2, 3)), IntDef(huge,5))~;)


176 :デフォルトの名無しさん:2012/07/09(月) 10:44:00.88
修正
- lazy val parse = "int" ~> repsep((defIntArray | defInt), ",") ~ ";"
+ lazy val parse = "int" ~> repsep((defIntArray | defInt), ",") <~ ";"


177 :デフォルトの名無しさん:2012/07/09(月) 15:10:54.63
なんか一箇所おかしかったのを直してgistへ
https://gist.github.com/3074485

178 :デフォルトの名無しさん:2012/07/09(月) 21:14:50.78
>>175
ありがとうございます!理解するのに時間掛かってお礼遅れましたすいませんorz

調べてみて何となくボヤっと分かった気がする部分
1.identやwholeNumberって何だろ?
  JavaTokenParsersで定義されてるパーサ?
2.Some不思議!
  (~>|<~)とかで捨てられなかった部分が引数に渡される?
  1, 2, 3とかは自動的に文字列のリストになる?
3.lazy val types = "int|string".rとか追加するとstring hoge;とかもパースできる

解決できなかった部分
int hoge = 5;<OK! int hoge = "test";<NG!
string hoge = "test";<OK! string hoge = 5;<NG!
ってするにはどうすればいいか?
http://ideone.com/mRyvb

179 :デフォルトの名無しさん:2012/07/09(月) 22:28:35.80
モヤっとしてる部分はParsers.scalaのソース読んでちゃんと消化しておくといいね

typesでまとめ上げてしまったら後に続かないから詰む
def definitions = (defInt | defString).*
def defInt = "int" ~ ...
def defString = "string" ~ ...

180 :デフォルトの名無しさん:2012/07/09(月) 22:48:20.81
>>179
あっ、なんか天啓来たかも?
頭から順番に自分が食べられる部分だけ食べたら残りを次の子へ渡して
次の子も頭から自分が食べられる部分だけ食べて残りを次へってバケツ
リレーみたくなってんのかな?
それで食べ残しがなくなったら、全部パースできてる的な?
そんな都合よくはいかない?まだモヤっとしてるけど、なんか取っ掛かり
がみつかった気がする。深く深く感謝です!

181 :デフォルトの名無しさん:2012/07/10(火) 13:55:20.44
で、逆引きレシピの具合はどうなのさ?

182 :デフォルトの名無しさん:2012/07/10(火) 22:37:11.48
銀色に光ってるよ

183 :デフォルトの名無しさん:2012/07/10(火) 23:04:01.39
俺の隣で寝てるよ

184 :デフォルトの名無しさん:2012/07/11(水) 12:13:38.37
締まり具合はどうなの?

185 :デフォルトの名無しさん:2012/07/12(木) 01:23:44.84
まあ実戦本よりは実戦感あるよ
コップ本の次に読む本としてはいいかもしれない
Scalaで何ができるのかというのがわかる
個人的にはもっとカタログ的なライブラリの比較みたいなのが欲しかったかな
どのライブラリ使ったらいいか悩んだりするから

でもさ、本が出るたびに思うけど、前半のScala入門の話とかいる?
「varとvalの違いを知りたい」とかさ、
たぶん日本で出てる全部のScalaの本に書いてあると思うんだけど、まだ書く必要あるの?

186 :デフォルトの名無しさん:2012/07/12(木) 01:27:31.65
Scalaが関数型言語とか...しっくりこねえ

187 :デフォルトの名無しさん:2012/07/12(木) 04:02:22.22
んー Ensimeは英語がなんかだるいし、
Eclipseのプラグインの方はただInstall new softwareから引っ張ってきただけなんだけどエラー吐く。
どういうこっちゃ

188 :デフォルトの名無しさん:2012/07/12(木) 04:24:56.14
英語がだるいやつはプログラミングなんてやめちまえ

189 :デフォルトの名無しさん:2012/07/12(木) 05:46:19.73
いやいやw なにいってんの

190 :デフォルトの名無しさん:2012/07/12(木) 23:22:41.39
函数モヒカンの集い 2012 in Tokyo

おまいら参加する?

191 :デフォルトの名無しさん:2012/07/12(木) 23:35:44.95
なにそれ?
まあどうせHaskellの連中がデカい顔するだろうから行かないけど

192 :デフォルトの名無しさん:2012/07/12(木) 23:40:34.48
Lisperのほうが強い

193 :デフォルトの名無しさん:2012/07/12(木) 23:44:47.64
Lispはいいや
奴らはマクロしか取り柄ないし
異様なimmutable推しのClojureはちょっとやっかいだが

194 :デフォルトの名無しさん:2012/07/12(木) 23:45:38.77
>>193
CLOSもあるよ!

195 :デフォルトの名無しさん:2012/07/12(木) 23:46:42.35
そのイベントは型付きラムダ計算が主流なので、erlang、lisp族は少し肩身が狭い

196 :デフォルトの名無しさん:2012/07/12(木) 23:46:52.00
言語ディスとか気持ち悪いから消えてくれませんかね

197 :デフォルトの名無しさん:2012/07/12(木) 23:48:27.31
the world is immutable.

198 :デフォルトの名無しさん:2012/07/13(金) 08:30:25.11
なら新党結成だ「関数の扱いが第一」

199 :デフォルトの名無しさん:2012/07/13(金) 10:14:52.64
>>198
よくできてるネタじゃないか
Twitterあたりでやるべきだったな

200 :デフォルトの名無しさん:2012/07/13(金) 23:58:03.36
カカッと@functional2chをフォローしている俺に隙は無かった

201 :デフォルトの名無しさん:2012/07/14(土) 00:35:10.06
scalaってなんなん

202 :デフォルトの名無しさん:2012/07/14(土) 08:48:59.01
ナンではありません

203 :デフォルトの名無しさん:2012/07/14(土) 11:29:08.78
雪花菜っておから?

204 :デフォルトの名無しさん:2012/07/14(土) 20:32:41.31
win7
cygwin
GNU Emacs 24.1.1
scala2.9.2
ensime_2.9.2-RC1-0.9.3.RC4
sbt

上記の環境で、M-x ensimeすると
Failed to connect to Swank: server process exited.
と出てきます。
参考になりそうなサイトはあったのですが、よくわからなかったです。
そのサイト
ttp://jutememo.blogspot.jp/2010/12/meadow-scala.html
一応パスまでに空白はありません。
どなたか解決策わかる方いますか?

205 :204:2012/07/15(日) 06:09:12.17
諦めてeclipse3.7使ってます。
ところで、scalaってコンパイラ完璧ではない?
object Main {
def main(args: Array[String]) = {
val l = List(1, 2, 3)
l.map(x => x * 2)
}
}
だと"Editor does not contain a main type"ってエラー吐かれ
object Main {
def main(args: Array[String]) = {
val l = List(1, 2, 3)
l.map(x => x * 2)
print(l)
}
}
だと動作する。

206 :デフォルトの名無しさん:2012/07/15(日) 06:48:27.20
>>205
上は def main(args: Array[String]): List[Int]
下は def main(args: Array[String]): Unit
あとはわかるな?

207 :デフォルトの名無しさん:2012/07/15(日) 07:05:28.42
>>206
おうふ!セックス!
そっか、戻り値は最後のアレだっなー。
そっかそっかー。

208 :デフォルトの名無しさん:2012/07/15(日) 09:22:19.34
= {にしなきゃいいのに

209 :デフォルトの名無しさん:2012/07/15(日) 09:58:04.91
初学者ほど手を抜いて格好つけて、
つまらないところでハマる。
おまけにそれを他人のせいにする。

210 :デフォルトの名無しさん:2012/07/15(日) 13:38:05.03
まぁ一度顔真っ赤にしたら次から慎重になるさ、誰もが通る道だろ

211 :デフォルトの名無しさん:2012/07/15(日) 17:28:40.95
使い方をよく理解していない省略記法を使って節約できる時間と、
それでハマって無駄にする時間を天秤にかけたら、どちらがいいかは明らかだな。

212 :204:2012/07/15(日) 19:59:11.38
カッコつけたも何も、サンプルプログラムなんだけどなぁ(^_^;)

= {
以外で便利な表記法あるっけ

213 :デフォルトの名無しさん:2012/07/15(日) 20:16:31.12
=を省略して

foo() {
}

とすれば、

foo(): Unit = {
}

になるとマジレス。
某実践プログラミングでは、今回の件の逆の間違い
(なぜか最後の値が返らずにUnitになる)を防ぐために非推奨にしてたけどね

214 :204:2012/07/15(日) 21:16:42.12
トンクス
慣れが必要だなぁこの言語。
楽しんでみるよ!

215 :デフォルトの名無しさん:2012/07/15(日) 21:32:20.41
Scala Style GuideではUnit返すメソッドは略記法使えと言ってるよな
http://docs.scala-lang.org/style/types.html
自分はこっちの方が分かりやすいし短くなるから :Unit = つけるより好き

216 :デフォルトの名無しさん:2012/07/15(日) 22:01:31.76
何のための型システムなんだ
そんなもん検出できるからどっちでもいいだろ

217 :デフォルトの名無しさん:2012/07/16(月) 10:04:36.74
ここまでの流れをわかったうえで
そんなこと言ってるのか?

218 :デフォルトの名無しさん:2012/07/18(水) 19:37:38.48
Java 8 vs Scala: 特徴を比較する
http://www.infoq.com/jp/articles/java-8-vs-scala

219 :デフォルトの名無しさん:2012/07/18(水) 23:12:06.39
infoQでこんな長い記事初めて見た

220 :デフォルトの名無しさん:2012/07/19(木) 00:27:26.48
右サイドにある特集記事はこんな感じじゃね

221 :デフォルトの名無しさん:2012/07/19(木) 01:52:16.14
たまにはGroovyの事も思い出してあげてください

222 :デフォルトの名無しさん:2012/07/24(火) 02:51:22.65
正しいプログラミング言語の選び方
http://www.startup-dating.com/2012/07/developer-programming-languages/

どうせScalaなんか入ってないんだろうなと見てみたら
思いっきり入ってて逆にどうかと思ってしまった

223 :デフォルトの名無しさん:2012/07/24(火) 05:30:18.68
>>222
金融なんかは非プログラマがプログラミングを強いられる場面が多いんじゃね?
っで、これまでだと簡易言語を導入してたけど、今時はDSLに置き換わってる
のかな?って気がする。

224 :デフォルトの名無しさん:2012/07/24(火) 09:54:34.06
金融会社Jane StreetでOCamlに置き換えた例

なぜ次に学ぶ言語は関数型であるべきか
http://ymotongpoo.hatenablog.com/entry/20111105/1320506449

225 :デフォルトの名無しさん:2012/07/24(火) 22:30:58.08
https://www.coursera.org/course/progfun

scalaのオンライン授業がもうすぐ始まるよー

226 :デフォルトの名無しさん:2012/07/25(水) 14:54:24.32
scalaの導入事例増えてるよ
今年か来年頭には有名企業からも採用事例としてプレゼン資料というか、勉強会資料が続々でてくると思う
もちろんscalaエンジニアの募集もね

227 :デフォルトの名無しさん:2012/07/25(水) 16:00:24.84
あきれるわ
なんでいつも求人がないのよ…?
来年っていつの来年よ?

228 :デフォルトの名無しさん:2012/07/25(水) 21:44:41.56
http://jp.indeed.com/jobs?q=scala&l=
派遣会社は意外にめざといな

http://www.indeed.com/jobs?q=scala
http://www.linkedin.com/jsearch?keywords=Scala&searchLocationType=I&countryCode=us&trk=skills
http://careers.stackoverflow.com/jobs/tag/scala

scalaやhadoop、awsで外資系にとらばーゆするチャンスではある。
http://www.itjobswatch.co.uk/jobs/uk/scala.do

229 :デフォルトの名無しさん:2012/07/28(土) 15:25:04.64
REPLでtupleからunpackingして変数宣言した時に変数名が大文字だと
期待しているのとは違う挙動をするんですが、なぜなんでしょう?

環境: Scala version 2.9.1.final (OpenJDK Server VM, Java 1.6.0_24).

■. tupleからunpackingして変数宣言

scala> val (X, Y) = (1, 2) // 変数名が大文字の時はエラー
<console>:8: error: not found: value X
val (X, Y) = (1, 2)
^
<console>:8: error: not found: value Y
val (X, Y) = (1, 2)
^

scala> val (x, y) = (1, 2) // 変数名が小文字の時は問題無し
x: Int = 1
y: Int = 2


230 :229:2012/07/28(土) 15:26:35.14
■. 2つめ以降を不要な入力として _ で捨てたときの挙動

scala> val (X, _, _) = (1,2,3) // X の型が Tuple1[Int] になってしまう
scala> X
res1: (Int,) = (1,)

scala> val (x, _, _) = (1,2,3)
x: Int = 1
scala> x
res2: Int = 1

■. パースに失敗してる?

scala> val (X: Int, _, _) = (1,2,3)
<console>:1: error: ')' expected but ':' found.
val (X: Int, _, _) = (1,2,3)
^
scala> val (x: Int, _, _) = (1,2,3)
x: Int = 1

231 :デフォルトの名無しさん:2012/07/28(土) 15:55:07.50
>>229
val の後にタプルを書いた場合はパターンマッチと見なされるが、
パターンマッチの中では大文字で始まる識別子は変数ではなく定数と見なされるから。
つまり最初の例では 1 を定数 X とマッチングしようとして、X が見つからないのでエラーになっている。

どうしても大文字の変数名を使いたければ
val t = (1, 2)
val X = t._1
val Y = t._2
のようにするしかない。

232 :229:2012/07/28(土) 16:08:33.29
パターンマッチでしたか
ありがとうございました、おかげですっきりしました

233 :デフォルトの名無しさん:2012/07/28(土) 21:44:55.90
そういえばそんな決まりがあったな…

すっかり忘れてた。勉強になったわ。dクス

234 :デフォルトの名無しさん:2012/08/01(水) 00:52:49.71
trait AttrHelper[+Holder[X]]
って表現のHolder[X]の部分がなんなのかよくわかりません

235 :デフォルトの名無しさん:2012/08/01(水) 02:05:10.09
なぜそれを今知りたいんだ

236 :デフォルトの名無しさん:2012/08/01(水) 13:03:13.45
個人でiphoneアプリ、Windowsアプリをマーケットに売って生き残れ

格安iPhoneEラーニング(学習動画多数あり)
http://tinyurl.com/7wj77om
コワーキングスペースJP
http://tinyurl.com/76vdrny
コワーキング帳
http://tinyurl.com/brzs486

javaやlinuxは手間がかかる 一人でやるには手間がかかりすぎる 手間がかからないで一人で開発できて
人の多いところで直接販売できる仕組みが提供されているメーカ製言語だけやる ずばりiphone またはWindow 8 Metro App Store C#
やるならメーカー製の言語 洗練された仕様 脆弱性が少なく 開発ソフトが優れ 課金ライブラリ アップデートライブラリが提供されていて 情報、書籍が多く開発しやすい
奴隷になりたければオープン系をやればいい 時間がかかり 人は多く 仕事の取り合い 足の引っ張り合い 脆弱性が多く 互換性がなく 癖があり 大規模開発中心
詳細設計しかやれない体になって年取ってぽいだ 独立もできない 手間のかかりすぎる仕様だから 

派遣屋 IT経営者はその方が喜ぶ 大規模分割開発では使い捨てても独立はできまい 代わりはいくらでもいる 嫌なら辞めろ
若い派遣営業は舐めた態度をとってくる ひどいピンハネ

オープン言語、日本独自開発の言語・フレームワーク ガラパコ携帯 javascript html5 android java linux python rubyやnode.jsとかやめとけ
メディアに金を払ってステマ宣伝してくるが釣られて手を出しても情報は少なく手間がかかり スパゲッティコード 未完成 デスマに陥る
コンパイルできないからパクられ  直接売る場所がないから企業に買い叩かれ金にならない 生きていけない奴隷仕様だ

237 :デフォルトの名無しさん:2012/08/01(水) 13:03:50.36
ここから抜け出すにはiPhone一択 またはWindow 8 Metro App Store(未確) C#
Objective-CやC#を覚えるとサーバーサイドからクライアントサイドまでカバーでき人の多い場所でソフトを売る権利を得られる
仕事や趣味でObjective-CやC#をやっておけば派遣切りされても会社辞めることになってもソフトを売って生きていける それはセーフティーネットになる
WEBサーバーIIS Win2008ServerVPS SqlServer Oracle MySql 言語はマーケットで売れるメーカー製のみ C#は自分用業務支援ツールとして使える 
例えばPHPでWEBアプリを作っていて管理者画面はC#(EXEアプリ)で作るとかなり早く作れる(Smartyなんか使うよりもかなり早くだ)
C#のソースを出さなければWEBアプリの著作権も守れる ASP.net(C#)+管理EXEアプリ(C#)+iPhone

C#マーケット Windows8 Metroアプリ WindowsPhone Surface PS Vita Xbox360 iphone(mono使用)
iPhoneマーケット iPhone iPad 予定 iTv iCar i (家電製品)

地方に安い土地を買いコンテナ型の格安高性能オフィスを建て(300万〜500万)
レンタル自習室&シェアオフィス・コワーキングで収入を得ながらそこでアプリを開発する
http://tinyurl.com/7pb2yaa
http://bit.ly/iLIpJa

238 :デフォルトの名無しさん:2012/08/01(水) 13:10:22.94
ステマ通報しといた

239 :デフォルトの名無しさん:2012/08/01(水) 13:25:18.46
javaやlinuxは手間がかかる?
ここから抜け出すにはiPhone一択?

じゃあScalaでAndroidアプリ作ればいいんじゃないかな(´・ω・`)

240 :デフォルトの名無しさん:2012/08/01(水) 13:37:20.52
言いたいことは、個人でアプリなりwebサービスを作って提供できるようになれ!ってとこか。
されに関しては同意だ。

241 :デフォルトの名無しさん:2012/08/01(水) 13:37:20.77
SL4AScala

242 :デフォルトの名無しさん:2012/08/01(水) 21:48:10.25
trait AttrHelper[+Holder[Z]]
って表現のHolder[Z]の部分がなんなのかよくわかりません

243 :デフォルトの名無しさん:2012/08/01(水) 21:52:59.26
>>242
このスレには>>234で投下済みだ。
別スレを回ろう。

244 :デフォルトの名無しさん:2012/08/02(木) 01:00:29.93
http://togetter.com/li/17462
http://yuroyoro.hatenablog.com/entry/20110126/129604334
これとこれ見ろや

っていうかむしろ「AttrHelper、Holder」で検索すると真っ先にこれが出てくるレベル
それでも理解できないならScala使うのやめよっか…

245 :デフォルトの名無しさん:2012/08/02(木) 22:58:31.56
別スレで回答貰ったんで、もういいです

246 :デフォルトの名無しさん:2012/08/04(土) 12:17:33.07
Scalaは関数型プログラミング言語ではない?

247 :デフォルトの名無しさん:2012/08/04(土) 13:22:51.11
まず関数型プログラミング言語とは何か定義してください

248 :デフォルトの名無しさん:2012/08/04(土) 22:10:06.19
ああーん?Wikipedia大先生に教えてもらってこいよ!!

249 :デフォルトの名無しさん:2012/08/05(日) 10:07:45.39
泊稼働させないと本当は25%程度不足するよね。

250 :デフォルトの名無しさん:2012/08/05(日) 18:57:49.94
北電社員乙

251 :デフォルトの名無しさん:2012/08/06(月) 07:53:14.49
class Functor f where
fmap :: (a -> b) -> f a -> f b

何故このように変換できるの?

trait Functor[F[_]] {
def map[A,B](fa: F[A])(f: A => B) : F[B]
}



252 :デフォルトの名無しさん:2012/08/06(月) 09:56:54.97
class Functor f where
fmap :: (a -> b) -> f a -> f b

instance Functor [] where
fmap = map

fmap (\x -> x * 2) [1, 2, 3]



trait Functor[F[_]] {
def map[A,B](fa: F[A])(f: A => B) : F[B]
}

implicit val functorListInstance: Functor[List] = new Functor[List] {
def map[A,B](fa: List[A])(f: A => B): List[B] = fa map f
}

implicitly[Functor[List]].map(List(1,2,3))(2 *)

こう書けばわかるでしょ

253 :デフォルトの名無しさん:2012/08/07(火) 22:27:35.74
>>252
別の型に適用させるにはどうすればいいの?
implicitを型別に書くのかな?

254 :デフォルトの名無しさん:2012/08/09(木) 21:11:41.13
http://www.infoq.com/jp/news/2011/02/lift-jruby

私は Scala が好きです。Scala は私のお気に入りのプログラミング言語なのです。
これまで数多くの開発組織で,Scala に関する話をしてきました。
しかしその後の Scala の普及状況を見たとき,私はこの言語が Ruby や,
あるいは Python の採用レベルにさえも達しそうもないことに気付いたのです。

255 :デフォルトの名無しさん:2012/08/09(木) 22:00:24.34
abstract classとtraitって
どう使い分ければいいでしょうか?

256 :デフォルトの名無しさん:2012/08/10(金) 00:15:25.86
Context boundがよくわからないです。

257 :デフォルトの名無しさん:2012/08/10(金) 01:47:03.45
>>255
コンストラクタに引数があるかどうかじゃない?
基本的にtraitで済むならtraitでいいかと
たまに引数はいらないけどimplicit paramaterが欲しくてabstract classになることもある

258 :デフォルトの名無しさん:2012/08/10(金) 02:05:45.31
>>256
implicit parameterの略記法
一番典型的なのがManifestかな

def hoge[A](a: A)(implicit m: Manifest[A]) = manifest[A]

def hoge[A: Manifest](a: A) = manifest[A]

この二つが同じ意味


型クラス的な使い方でもよく出る
上記のFunctorが既に定義されているとして

def myMap[F[_]: Functor, A, B](a: F[A])(f: A => B) = implicitly[Functor[F]].map(a)(f)

こう書くと

scala> myMap(List(1,2,3))(2*)
res13: List[Int] = List(2, 4, 6)

こんな感じで動く


そして自分で書いて思ったけど、型クラスってやっぱり駄目だな
こんなの覚える必要ないわ
型クラスもContext Boundもみんな忘れよう

259 :デフォルトの名無しさん:2012/08/10(金) 02:42:11.78
型クラスってやっぱり駄目だな(キリッ
そのmyMapがダメダメなのは分かるがね

260 :デフォルトの名無しさん:2012/08/10(金) 02:51:29.35
同ダメなの?

261 :デフォルトの名無しさん:2012/08/10(金) 02:56:31.16
どうせHaskellerだろ?
おつむもPureだから関係ないスレにしゃしゃりでてくるんだよなー

262 :デフォルトの名無しさん:2012/08/10(金) 07:47:26.87
きもいimplicit paramaterで型クラスを模倣できる!とか言い出すからだよ
どんだけHaskellにコンプレックスあるんだか

263 :デフォルトの名無しさん:2012/08/10(金) 09:36:33.10
こういう宗教戦争、嫌いじゃないわよ。

264 :デフォルトの名無しさん:2012/08/10(金) 14:12:01.68
ていうか、>>258がサッパリ分かりませんわ。
ジャバ厨にスカラはむづかしすぎる(何故か変換(ry

265 :デフォルトの名無しさん:2012/08/10(金) 14:26:15.81
ジャバ厨を名乗るのはgenericsを理解してからにしてください!

266 :デフォルトの名無しさん:2012/08/10(金) 14:47:29.08
まあ、Javaのジェネリクスには型コンストラクタないでしょ

267 :デフォルトの名無しさん:2012/08/10(金) 20:43:26.51
型クラスは、フレームワーク実装者の秘奥義くらいの扱いにしておいた方がいいと思う。
バンピーが扱うには高度過ぎる。

268 :デフォルトの名無しさん:2012/08/10(金) 23:32:51.69
Map[String, Any]なマップに
ValueとしてInt、String、Doubleを混在して入れた場合
getOrElseだと型がBがAnyになっちゃうけどどうすりゃええの?



269 :デフォルトの名無しさん:2012/08/11(土) 00:33:53.03
設計からやり直せ

270 :デフォルトの名無しさん:2012/08/11(土) 02:12:14.94
>>258
def myMap[F[_]: Functor, A, B](a: F[A])(f: A => B) = implicitly[Functor[F]].map(a)(f)

なんでこんなに複雑に記述しないといけないの?

271 :デフォルトの名無しさん:2012/08/11(土) 08:57:27.77
Scala逆引きレシピ すぐに美味しいサンプル&テクニック300

って、本、なかなか良いな。

272 :デフォルトの名無しさん:2012/08/11(土) 13:55:13.99
カレントディレクトリにある全ての*.jpegファイルを取得するのに、こんなコードが思い浮かびました
new File(".").listFiles.filter{x =>
val tmp = x.getName.split("\\.");
tmp(tmp.length-1).equals("jpeg");
}
ただ、ファイル名と拡張子を分割した文字列配列をイチイチtmpという退避変数を用意するのがなんだか野暮ったく見えます
かと言って下記は論外です
new File(".").listFiles.filter(x =>
x.getName.split("\\.")(x.getName.split("\\.").length-1).equals("jpeg");
}
何かもっとカッコ良く書く方法はないでしょうか?

273 :デフォルトの名無しさん:2012/08/11(土) 14:20:17.36
Scalaがどうとかいう以前にJavaの文字列のendsWithを使うといいと思います

274 :272:2012/08/11(土) 16:28:58.52
>>273
ありがとうございます!

275 :デフォルトの名無しさん:2012/08/11(土) 16:36:48.45
>>272
Scala IO使うなら


import scalax.file.Path

Path(".") * "*.jpeg"


これでいけるっぽい
そのコードとまったく同じものを返したければ


(Path(".") * "*.jpeg").toArray flatMap (_.fileOption)


build.sbtの設定は


resolvers += "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/"

libraryDependencies += "com.github.scala-incubator.io" %% "scala-io-file" % "0.4.1"


276 :デフォルトの名無しさん:2012/08/11(土) 21:29:29.20
>>271
> Scala逆引きレシピ すぐに美味しいサンプル&テクニック300



だが、

277 :デフォルトの名無しさん:2012/08/11(土) 21:35:22.95
どうした途中送信か?

278 :272:2012/08/11(土) 22:24:34.30
>>275
それも出来ました、ありがとうございます!
scalaIOって良いですね

279 :デフォルトの名無しさん:2012/08/12(日) 10:15:10.32
scalaの関数内関数って、普通の関数と比べてオーバーヘッドありますか?
外側のローカル変数の書き換えもできるようなので、何か特別な変換をしてそうなのですが。

280 :デフォルトの名無しさん:2012/08/12(日) 15:41:02.19
小さなことだけどこの板って>>276こういう風に途中送信だかなんだか
よく分からないものが書き込まれても本人訂正しない奴が多い

PG/SEってその程度も出来ないくらいに衰弱しているって事なんかなってたまに思う

281 :デフォルトの名無しさん:2012/08/12(日) 16:29:34.73
>>280
確かにこういう2chのレス一つからプログラマの力量は伝わってくるな



でも、

282 :デフォルトの名無しさん:2012/08/12(日) 16:32:21.30
>>280
「多い」と主張するからには、多い根拠を示してもらおうか



それゆえ、

283 :デフォルトの名無しさん:2012/08/12(日) 19:15:00.25
だがしかし、




284 :デフォルトの名無しさん:2012/08/12(日) 22:06:23.17
>>279
普通の関数、というより、外側のローカル変数を利用しない限りオーバーヘッドは発生しない
逆アセンブルしてみるとわかるけど、通常のメソッドと衝突しないようなメソッド名のメソッドができる

外側のローカル変数を書き換える関数内関数では、オーバーヘッドが発生する。これは主に、
外側のローカル変数を書き換えられるように、mutableなセルで値をラップするため。まあ、
普通は気にしなくていい範囲のオーバーヘッド

285 :デフォルトの名無しさん:2012/08/12(日) 22:26:36.68
外側のローカル変数を読む場合はその時点の値を引数で渡すんだっけ?


286 :デフォルトの名無しさん:2012/08/13(月) 13:29:44.14
クロージャから自由変数に破壊的代入を行う設計ってどうなのって思う...
すなおに関数の戻り値で置き換えるかDynamicVariableかましたい

287 :デフォルトの名無しさん:2012/08/13(月) 23:31:20.00
>>280
異論があるけど下手な発言すると総ツッコミ来るから怖いんだよ。
察してやれ。

288 :デフォルトの名無しさん:2012/08/13(月) 23:50:24.96
近い将来に引数も型推論してくれる予定とかってありますか?

289 :デフォルトの名無しさん:2012/08/14(火) 00:07:32.63
ありません

290 :デフォルトの名無しさん:2012/08/14(火) 00:30:00.51
f(l: List, x: String, y: String)
g(l: List, x: String, y: String)

をf(g(x))みたいに書きたいです。どうすればいいの?

291 :デフォルトの名無しさん:2012/08/14(火) 01:33:16.48
(f _ ).tupled compose (g _ ).tupled

292 :デフォルトの名無しさん:2012/08/14(火) 09:52:07.86
日本人は マスコミ電波で動く ロボット人間

日本人は、先進諸国で飛び抜けてマスコミ報道を鵜呑みに
信じやすいことがこの動画で実証されています。

いわばマスコミ報道の「鵜呑度」を国際比較すると、
日本人は、先進国中ダントツに「鵜呑度」が高く70%、
最も低い国民は英国で14%です。
その他の主要欧米諸国(ロシアを含め)は20−35%です。
日本に近い国は、ナイジェリア、中国など、途上国と新興国となります。

別の言い方をすれば、日本人の70%は、
自分の頭で考えず(思考停止)、
テレビ、新聞、週刊誌などのマスコミの情報を鵜呑みにしていることを意味します。
青山は以前からこれを「観客民主主義」と言っています。
観客民主主義は、マスコ ミの情報操作による世論誘導に最も陥りやすく、
独裁にも呼応しやすい特性を持っています。

マスコミ報道「鵜呑度」
日本人70%、英国人14% You Tube
http://www.youtube.com/watch?v=ypPqsWUC6Vo

http://www.asyura2.com/12/senkyo132/msg/578.html


293 :デフォルトの名無しさん:2012/08/18(土) 20:12:17.53
鵜呑みにする率は同じだけど、他の国はマスコミの報道が多種類あるだけという説に一票

294 :デフォルトの名無しさん:2012/08/23(木) 09:50:07.18
御高説ごもっともです、佐藤先生
でも僕らはスイスアーミーナイフが大好きなんですよ

2012年7月28日

Scalaはまぁ好きな言語なのですが、普及するかというと正直いって否定的。
最大の理由はマルチパラダイムという点。Scalaはオブジェクト指向と関数型
の二つをパラダイムを融合させたマルチパラダイム言語ということになってい
ますが、これまでオブジェクト指向と論理型や、関数型と論理型などなどマル
チパラダイム言語は数多く提案されてきましたが、普及した言語は皆無。その
理由は簡単、多くのプログラマーは、ひとつのパラダイムでも使いこなせない
のが現実。そうなるとマルチパラダイム言語は身に付けないといけないパラダ
イムが複数あるわけで、使いこなせない。逆に言うと相当、優秀なプログラマー
でないと使いこなさないはず。Scalaが普及するとしたら、メニーコアプロセッ
サを前提に、関数型の特質をうまくつかって、副作用の少ない並行プログラミ
ングだと思います。というのは並行プログラミングも逐次プログラミングと比
べると格段に難易度が高いので、その難易度についていけるプログラマーなら
ばオブジェクト指向と関数型の二つをパラダイムを使いこなせるかも、という
のが理由。


295 :デフォルトの名無しさん:2012/08/23(木) 09:51:16.45
こうかくとScalaに否定的に思われるかもしれませんが、普及する言語という
のは、できるプログラマーに好かれるだけでは十分ではなく、そうではないプ
ログラマーにも敷居の低いことは要件なんですよね。逆に言うと圏論や型推論
など、一般のプログラマーには難しい理論を要求する言語というのは普及は難
しいのではないでしょうかね。もちろん完全に隠し込めればいいのでしょうが、
コンパイルエラーやデバッグなどで顔を出す限りはなかなか難しい。というわ
けで頭の言い方々が推奨されるプログラミング言語については、その普及とい
う点では否定的に見ております。なお、アカデミアのプログラミング言語を専
門とする研究者(特に優秀な研究者)が設計した言語が大きく普及しないという
のも、この辺りに遠因があるのではないかと邪推しております。


296 :デフォルトの名無しさん:2012/08/23(木) 18:00:09.48
Javaのゲネリクスがく普及してるなら勝機はあると思うんだ

297 :デフォルトの名無しさん:2012/08/23(木) 23:03:48.80
当分は、ハイスキルなバックエンドプログラマーの秘密道具、みたいな感じかなぁと思う。
例えば、SIとかの労働集約的な職場で普及するとは確かに思えん。

あとは、Play2がどこまで行けるかだなー。
RubyだってRoRが出てくるまでは(ry的なところがあったわけだし。

298 :デフォルトの名無しさん:2012/08/24(金) 13:56:10.46
JVMとJavaAPIを使えるということ以外の利点が見つからない

299 :デフォルトの名無しさん:2012/08/24(金) 14:36:04.99
雇う側が"Java PG(笑)"をフィルタできるのは利点だな

300 :デフォルトの名無しさん:2012/08/24(金) 21:38:11.96
>>294

> 理由は簡単、多くのプログラマーは、ひとつのパラダイムでも使いこなせない


プログラム言語って、全部の機能を使いこなしてプログラムする必要はまったくないのだが。

下流プログラマは、知っている範囲だけでプログラムすれば十分なんだよ。
フレームワークとかシステムまわりを設計する人だけ、難しい機能使えばよい。



Scalaが本領を発揮するのって、DSLとか、もしくは科学技術計算じゃない?
http://mwongstyle.com/wordpress/?tag=scalalab

最近は、中流プログラマにさえ、ビックデータを行列計算して統計処理とかが必須になってきているし、
いまどきの情報工学出身の新卒プログラマは、そういうの得意だろ。




301 :デフォルトの名無しさん:2012/08/24(金) 22:51:36.21
言語の良さを宣伝するのは勝手だけど、教育コストの高さも考えてくれないと困る
なんだかんだ言ってC言語が一番教育コストが低い

302 :デフォルトの名無しさん:2012/08/24(金) 22:59:23.27
>>298
ちょっとキツイ言い方になるけど、その認識レベルは色々やばい
現状日本国内ではScalaプログラマを集めるのが難しいっつう問題などデメリットもあるけど
言語レベルでは型安全性や簡潔性、並列性の扱いやすさなど、自明なレベルで利点が
色々あるわけで。その辺を認識した上で、「あえて」Scalaを使えないと判断するのは良いけど

303 :デフォルトの名無しさん:2012/08/24(金) 23:05:54.18
scalaがネイティブなら使ってもいいが・・・

304 :デフォルトの名無しさん:2012/08/24(金) 23:17:15.75
>>302
むしろ、JVMとJavaAPIを使うために、プログラマが型安全性や簡潔性や並列性理解できないというデメリットに目をつぶってる
最悪、scala無視してJavaでclassファイル作ればいいわけだから

305 :デフォルトの名無しさん:2012/08/24(金) 23:28:13.83
利点がわからないなら普通にGroovyでも使えばええがな

306 :デフォルトの名無しさん:2012/08/25(土) 00:23:51.09
ボスの命令でイヤイヤScalaで書かされてる僕ちゃんの泣きごとだろ
当人たちの能力の無さでどうこうなろうが知ったこっちゃないけど
エセScala使用実績に釣られて巻きぞえ喰う奴は悲惨だよな

307 :デフォルトの名無しさん:2012/08/25(土) 00:54:19.92
嫌々Scalaやってるやつとか代わってくれよ

308 :デフォルトの名無しさん:2012/08/25(土) 00:55:42.34
ですまとかぶらっくそうでとてもとても

309 :デフォルトの名無しさん:2012/08/25(土) 01:14:30.62
本当に余裕なかったらScalaなんか使わんだろ
とてつもなく頭の悪い上司なら別だが

310 :デフォルトの名無しさん:2012/08/25(土) 01:20:33.29
>>309
本当に余裕がなくなれば途中からJavaに移行できるから、仕事ついでに新パラダイム言語の教育させようと思ったらScalaは悪い選択じゃない


311 :デフォルトの名無しさん:2012/08/25(土) 01:23:05.83
最初から関数型とかやる気ないやつに押し付けることないよ
わかる気がないやつには一生わからない
まあオブジェクト指向も同じだが

312 :デフォルトの名無しさん:2012/08/25(土) 01:23:23.48
いつになったらVMじゃなくてネイティブ作れるようになるの?

313 :デフォルトの名無しさん:2012/08/25(土) 01:23:35.40
もうバイナリでいいよ

314 :デフォルトの名無しさん:2012/08/25(土) 01:46:58.39
>>312
javaでネイティブコードを生成するプロジェクトは、結局はC言語で開発することがほとんど
scalaを前提にした設計をC言語で実装する悪夢を考えてほしい


315 :デフォルトの名無しさん:2012/08/25(土) 02:18:51.98
>>300
>下流プログラマは、知っている範囲だけでプログラムすれば十分なんだよ。

自分が書くだけなら問題はないが、他人のコードを読む・使うことまで考えると、
使われうる全てのパラダイムを押さえないと言語を使いこなせなくなってしまう

要するにC++ってこと

316 :デフォルトの名無しさん:2012/08/25(土) 02:19:01.23
ネイティブならHaskellでいいじゃん
CはOOPはできるんだけど、クロージャがないから関数型はしんどい

317 :デフォルトの名無しさん:2012/08/25(土) 02:23:44.18
針小棒大にScalaのここがわからんと騒いでるやつには、
だったらJavaで開発するときに言語やフレームワークの仕様を隅々まで把握して使っているのか?と言いたくなる

318 :デフォルトの名無しさん:2012/08/25(土) 02:32:39.50
>>302
比較対象の問題でしょ
個々の機能に関してはシングルパラダイムの言語ほど
洗練されているわけがないので

型理論的にScalaは何か凄いかっていうと、先進的というほどではないし
並列性もそこまで目新しいわけではないし(Erlangみたいに古い例もある)

結局、Scalaに残る独自性は、それらがとりあえず一通り
詰め込まれて一つの言語になっているという事と
Javaとの互換性が考慮されていること

319 :デフォルトの名無しさん:2012/08/25(土) 02:56:23.97
とりあえずJVMで動く静的型関数型言語が他にないという問題が大きいな

320 :デフォルトの名無しさん:2012/08/25(土) 04:05:19.17
>>318
言ってる自体は一理あると思うけど、元のレスのぼかされてる比較対象は書き方からして、
そーいうシングルパラダイムの洗練された言語ではないだろう。

型理論的にScalaは凄い先進的、かはともかく、核となるは独自性強いというのが自分の見解
見た目的にはJavaの型システムに色々のっけた、ように見えるけど、核にあるのは型をメンバに持てる
オブジェクト、というもので(これはResearchのところみてもらえばわかるかと)、それほど研究されてたもの
じゃないと記憶してる。無論、Scalaが一番先に手をつけた、とも言えないが

並列性は、言語レベルでは特に目新しいことはしてないね。どちらかというとライブラリのレベル。
scala.actorsはもうAkkaに置き換えられるのが決まってるからそっちは念頭に置いてなかった。

Scalaという言語とプラットフォーム自体は、最初はそれほど独自性が無くて、既存の機能のうまい
組み合わせ、という面が強かったけど、最近は良くも悪くも独自性が出てきてる気がするよ。2.10とか
みてるとね…

321 :デフォルトの名無しさん:2012/08/25(土) 05:42:05.42
>>317
Javaの言語やフレームワークの仕様を教育するコストと
Scalaの言語やフレームワークの仕様を教育するコストを比較すると、
Javaの方が低い

理由は、Scalaを選択しても、なんだかんだ言ってJavaAPIとフレームワークを利用させられることになるから
どちらにしろJavaを教育しなければならない


322 :デフォルトの名無しさん:2012/08/25(土) 08:19:26.75
>>317への反論になってないぞw
>>317は、
Scalaわからんとか騒いでるやつはJava言語やフレームワークを熟知してんのか?してないんだろ?
ならScalaでわからんところあっても使えるだろうよ、と言ってるわけで、話ずれてる

教育コスト論としてはもっとも。最近はScalaのライブラリが増えてきたとはいえ、J2SEのAPIは知ってないと
実開発としては使えないし。フレームワークレベルでは、そろそろJavaのを直接使わなければいけない局面
は減ってると思う。「準」標準ライブラリを現状より増やすなり安定させるなりして、J2SEのAPIを直接叩かなければ
いけない場面をもっと減らして欲しいとは思うね。

ただ、Typesafeが先日1400万ドルの投資を受けたニュースのコメント見ると、そういう地味で重要な話より、性能的に
スケールするプラットフォームとしてのScalaに重点を置きそうな気がする。Scalaの大手顧客を考えると無理からぬ話
ではあるが…

323 :デフォルトの名無しさん:2012/08/25(土) 09:24:49.73
>Scalaわからんとか騒いでるやつはJava言語やフレームワークを熟知してんのか?してないんだろ?
>ならScalaでわからんところあっても使えるだろうよ、と言ってるわけで、話ずれてる

それも大概極論だな。

知っていなければならないことがJavaよりScalaの方が多いってはなしだろ。
「使える」の範囲が狭けりゃ、そりゃあ「使える」だろうよ。

324 :デフォルトの名無しさん:2012/08/25(土) 11:05:25.19
そんなこといいから未経験者が食いつくようなscalaのいいとこコードと共に列挙してくれ

325 :デフォルトの名無しさん:2012/08/25(土) 12:03:50.41
どっかの宿題スレにactorつかったNP問題の近似解法が書かれてて
閾値とコンテキストを適切に定義できればActorでスケーラブルに問題を解ける良い例だなと思った

326 :デフォルトの名無しさん:2012/08/25(土) 13:06:49.35
>>323
だからずれてるって。元のはJava知ってる奴がScala新しく始める前提の話なんだから
JavaプログラマがScalaを開発で「使える」ようになるために知らなければいけない部分と
Java未経験のプログラマがJavaを開発で「使える」ようになるために知らなければいけない部分を
比較しないといけないんじゃね?

俺が思うに、まともなJavaプログラマなら、better JavaくらいのScalaでよけりゃ数日あれば習得できるよ。better Java
を恐れるな(Scalaらしいコードがすぐ書けないことを恐れるな)って言葉をどっかのScala採用企業の技術者が残してたけど、
そういう心理的な側面は大きいと思う。あるいはコミュニティの問題かもしれないが。
知らない土地にいって、その土地らしい作法が出来るか不安がってるような、そんな印象をよくうけるわ

327 :デフォルトの名無しさん:2012/08/25(土) 13:12:34.78
>>325 これか
http://toro.2ch.net/test/read.cgi/tech/1276873238/856
https://github.com/tono-nakae/package-loading-problem

なんでたった200行で出来るのかもう謎技術だ
ここまでくるとJavaの知識に付け焼き刃でどうこうなるレベルじゃねーな

328 :デフォルトの名無しさん:2012/08/25(土) 16:28:13.21
関数型で200行あればかなりのことができるかなー

329 :デフォルトの名無しさん:2012/08/25(土) 17:21:49.68
Scalaのいいとこ→ワイドモニターに適している

330 :デフォルトの名無しさん:2012/08/25(土) 20:28:47.31
>>324
eed3signさんのtetrix連載でもあるようにテストを書くまでもないちょっとした確認なら
sbtのconsole/console-quickつかってREPLでパパっとできちゃうところ
んで、最終的には清書してテストケースにする

http://eed3si9n.com/tetrix-in-scala-day10

331 :デフォルトの名無しさん:2012/08/25(土) 20:33:56.85
>>328
メガデモみたいなブームを作ろうぜ
200行でつくるFPSとか

332 :デフォルトの名無しさん:2012/08/25(土) 21:32:32.27
>>322
基本的にプログラマはどの言語も熟知してないので、使う=教育 と同意
Javaすらも熟知してないのにScalaなんか使わせたくない

333 :デフォルトの名無しさん:2012/08/25(土) 22:34:09.15
>>324 >>331
scalatron AI作成コンぺとか盛り上がってるな
http://geekblog.tv/2005

LEGOマインドストームによるデザイン駆動型開発入門講座とか参考にしてやれば
会社のセミナー費用をカモにしたビジネスモデルにあてはめれるんじゃね?

334 :デフォルトの名無しさん:2012/08/25(土) 22:46:44.92
大学でも教えにくい

ただのプログラミング言語入門として Pascal
一番スタンダードな言語として C
オブジェクト指向言語のオモチャとして Smalltalk
就職に役立つという宣伝で Java
そのまま論文で使える関数型言語として Haskell
記号処理・人工知能用として Scheme

335 :デフォルトの名無しさん:2012/08/25(土) 22:55:34.93
C++さん…

336 :デフォルトの名無しさん:2012/08/25(土) 23:02:16.01
大学はポインタと関数でもう限界
C++は無理
Lispも無理

337 :デフォルトの名無しさん:2012/08/25(土) 23:25:55.60
全くの初心者にとっては手続き型も関数型も似たような難易度じゃないかな?

338 :デフォルトの名無しさん:2012/08/25(土) 23:28:07.15
>>334
君、大学行ってたの?
別にプログラミング言語なんてそんな教えんよ
せいぜい必修はCとFortranくらいで、あとはLispがあるかどうか

339 :デフォルトの名無しさん:2012/08/25(土) 23:30:38.07
>>338
最近は Fortran も教えない
ただ、先生方が Fortran を使いたがる
Lisp系の場合は、最近はLispじゃなくてSchemeだと思う

340 :デフォルトの名無しさん:2012/08/25(土) 23:43:26.94
ICOT出身の先生はPrologを教えたがる

341 :デフォルトの名無しさん:2012/08/26(日) 00:08:23.04
手続き型の言語に乗っかってる関数型言語でプログラミング入門は嫌だな

342 :デフォルトの名無しさん:2012/08/26(日) 00:14:04.03
もちろん大学による差はあるけど、CS専攻だとCとJavaを必修で教えてるところは多い
Pascalは教育用言語としてはもう大体駆逐されてる。第一デファクトな処理系がまともに無いし
後は教員によりけり。SMLやOCaml、Schemeの授業やってるところは国公立だと
そこそこある。Schemeは言語仕様がコンパクトでちゃんと定義されてるから、教える
側には扱いやすいってのがあるのかな。Haskellの授業やってる大学もあるけど、
こっちはまだ少ない気がする。

Prologは40代以上の先生だと時々教えてたりする
この辺の年齢の教員はPrologなどの論理型言語に馴染みの深い先生多いから
CSの授業でFortran教えてるところはかなり少ないと思う。どっちかというと他分野で
Fortran使った計算しなきゃいけないので教えてるってケースがほとんど

343 :デフォルトの名無しさん:2012/08/26(日) 00:21:33.64
>>334
大学行ったことない人が想像で発言してるようなラインナップだな

記号処理・人口処理用でSchemeなんてまずやらないよ。どちらかというと関数型プログラミング
を教える題材だったりプログラミング入門だったりする。Smalltalk教えてる大学は相当希少
CとJavaは教えてるところは確かに多い。C教えるのは、後の課程でOSのシステムコールの話
とか教えようと思うと無いとどうしようも無いとか色々。静的型付け関数型言語で
Haskell/SML/OCamlのどれ教えるかは大体教員の得意言語による。NGY大はGarrigue先生
居るせいか、OCamlも教えてるみたいだね

344 :デフォルトの名無しさん:2012/08/26(日) 00:29:15.74
なんにせよScalaは無いわ

345 :デフォルトの名無しさん:2012/08/26(日) 00:56:34.47
別にいくら流行っててもC#もRubyも大学じゃ教えないわ
そもそも大学では、プログラミング言語の習得なんていうことは
学生が自主的にやることであって、いちいち教わることじゃない

Scalaが難しいってぶつぶつ文句言ってるやつとか、
Haskellをやってドヤ顔で高尚なことやってる気になってるやつは、
そんなもんパソコンの使い方を覚えることと同レベルだってことがわかってない
仕事なり研究するなら、できて当然なんだよ

346 :デフォルトの名無しさん:2012/08/26(日) 01:03:53.98
Scalaをやってドヤ顔

347 :デフォルトの名無しさん:2012/08/26(日) 03:11:05.49
>>343
記号処理の定番テキストがscheme使ってるから、scheme教える大学は多い
MITの罪は重い


348 :デフォルトの名無しさん:2012/08/26(日) 03:16:11.50
>>345
休み明けに投入されるプログラマの方々はプログラム言語などいちいち教わることじゃないどころか勉強すらするものじゃないと思ってるから、
こっちはいちいち教えなければならない


349 :デフォルトの名無しさん:2012/08/26(日) 03:34:54.99
Scalaの弱点は得意とする問題領域があいまいという点
一番得意な問題領域がJavaとの連携というオチ


350 :デフォルトの名無しさん:2012/08/26(日) 03:50:38.96
だから静的型関数型言語に何の利点も感じないやつはScala使わなくていいよ
Groovyでも使っとけ
Groovyですら覚えるの面倒臭いなら一生Java使ってろ
まあそうやって本当に一生Javaしか使わないやつなんてごまんと出てくるだろうが

351 :デフォルトの名無しさん:2012/08/26(日) 04:11:42.75
長年プログラミング入門にC使われてたんだから
Scalaで入門だって十分有りだろう
誰得だが

352 :デフォルトの名無しさん:2012/08/26(日) 06:26:44.50
大学で Java を教えてるとファイル入出力が鬼門な学生たちがあまりに
多く、授業でも Scala を a better Java として使おうかと思ってた
私は異端かな(ちなみに情報処理専門の学科ではない)。
「初学者が躓く点は実は最先端でも難問/難題であることが多い」
のが信条。Scala の REPL とか高校生向きと思う。

353 :デフォルトの名無しさん:2012/08/26(日) 08:36:15.70
確かにJavaのcodecsは意味フ

354 :デフォルトの名無しさん:2012/08/26(日) 09:02:52.69
Scalaを第一言語として教える(必修)かはともかく、選択授業で教えるのは十分
アリだと思うよ。REPLのような対話環境の有無は少なくとも大学でのプログラミング
教育では重要で、ScalaはそのREPLがあるから。入力したプログラムが即座に
実行結果として反映されるかどうかってのは、学生のモチベーションを左右
したりする。

355 :デフォルトの名無しさん:2012/08/26(日) 09:03:25.54
もうREPLみたいなのが無い言語は使いたくないってくらい便利だよね。
ただ初学者があれをメインで使うとプログラミングを勘違いしそうな気がする。
あくまで気がするだけだけど。

356 :デフォルトの名無しさん:2012/08/26(日) 10:53:07.97
Scalaでおすすめの書籍はどれですか?
あと買ってはいけない読んではいけない書籍も教えて下さい。

357 :デフォルトの名無しさん:2012/08/26(日) 12:39:09.23
REPLにコード補完機能追加きぼんぬ

358 :デフォルトの名無しさん:2012/08/26(日) 12:46:39.19
>352
>大学で Java を教えてるとファイル入出力が鬼門な学生たちがあまりに多く、

鬼門というかいちいち説明に時間さくのが勿体ないので、東大京大ではRubyを採用している。

情報工学科で授業で使う言語って、
・Matlab (Scilab,Rの場合も)
・JavaやC (プログラム言語というのはこういうもの、という題材向け)
・Ruby (東大、京大の1年向け教養課程で、情報科学の宿題向けに)
が人気だろ。
言語の授業だったら、Smalltalk,Haskell,Schemとかも教えるかもしれないけど、あくまで言語の授業の題材としてだな。

大学で言語専門でなければ、言語は使うもの。
教えたいのは言語じゃなくて、 情報科学の方だからな。
Matlabでアルゴリズム開発して、速度のためにC言語で再実装するっていうのが多いだろ。

そういう用途では、Scalaで関数言語の特徴生かして、アルゴリズムも実装も一気にやっちゃうのは得策だな。

>>356
> Scalaでおすすめの書籍はどれですか?

・即実践なら、「Scala逆引きレシピ」
・入門なら、「Scalaで学ぶ関数脳入門」
他は、「Scala実践プログラミング」「ボクらのScala 」「プログラミングScala」など。

> あと買ってはいけない読んではいけない書籍も教えて下さい。

本代くらいケチるな。全部買え。
と言いたいところだが、ここでこんな質問するような>356には、通称「コップ本」はムリ。買うな。

359 :デフォルトの名無しさん:2012/08/26(日) 12:57:02.18
>>358

あと、Processingを使って大学で講義することも最近多いな。
情報というよりも、デザイン系の学科での話だけど。


ProcessingもJVM系だから、Scalaとの親和性が高い。
AndroidにもScalaは使える。
Web開発にもScalaは使える。


でも、Scalaはまだまだ若すぎて、使っている人少ない。
5年以内にキラーアプリが出たら状況は変わると思う。



360 :デフォルトの名無しさん:2012/08/26(日) 15:11:02.78
あの・・・C++さんどこで教えてはるんですか・・・

361 :デフォルトの名無しさん:2012/08/26(日) 15:19:49.23
>>360

はい。質問が意味不明か、スレ違いのどちらかですね。
とりあえず、他へ行け!

362 :デフォルトの名無しさん:2012/08/26(日) 15:27:14.49
C++を直接教えるところがあるかは知らんけど、
コンパイラの講義とか普通にC++知ってることが前提だったりするので、
言語系をやりたい人はC++の基本文法くらいは勉強しとるぞ

363 :デフォルトの名無しさん:2012/08/26(日) 17:28:22.26
こんな広く浅くやる授業もある
http://www.csg.ci.i.u-tokyo.ac.jp/~chiba/lecture/11/#java

364 :デフォルトの名無しさん:2012/08/26(日) 17:42:12.38
千葉先生は相当実戦的なほうだと思うけどね
しかし今東大だったのか…


365 :デフォルトの名無しさん:2012/08/26(日) 17:47:51.69
そうか、FAで現役のC++を大学で教えないからFAが悲惨なことになってるんだな

366 :デフォルトの名無しさん:2012/08/26(日) 18:28:09.06
有限オートマトン?

367 :デフォルトの名無しさん:2012/08/26(日) 18:54:46.99
Factory Automation

368 :デフォルトの名無しさん:2012/08/26(日) 22:18:18.16
>>362
ぶっちゃけると、教員もよく理解できてなくてC++を教えなかった
計算機プログラムの入門ならCだけでも十分だったし

実際、10年間の現場の混乱を見る限りC++なんか教えなくて正解だった

369 :デフォルトの名無しさん:2012/08/27(月) 11:14:30.04
>>365
旧国立系の情報処理専門の学科がお隣の学科なのですが、(今日は
有給で自宅からなので書き込み可能)学部教育で C++ を教えようと
頑張った時期もあったけど、学生がついてこれず断念したそうです。
他からみてると C++ が好きな先生は、C++ はどう使うべきかに対し
個性が強く、C++ が好きな先生方同士で衝突してる感があります。
それに C++ が好きな先生の一部は C が C++ のサブセットであるべ
きと主張され、初学者が多い C の学部共通教育で困る場面も多々あ
ります(現在の C の規格は C++ とは別言語として定義されてます)。
スレ違い、すいません。


370 :デフォルトの名無しさん:2012/08/27(月) 18:06:15.21
Scalaを教える場合もJavaを教えることになって、
Scalaが難しくてついてこれなくなるので、
結局Javaだけ教えて終わることになると思う

371 :デフォルトの名無しさん:2012/08/28(火) 01:43:36.66
入門書はある。良書がない。

372 :デフォルトの名無しさん:2012/08/28(火) 11:30:50.12
サードパーティライブラリを含めてエコシステムと捉える意味では、
「Scala逆引きレシピ」がいまのところ一番近いのかな<良書。

373 :デフォルトの名無しさん:2012/08/28(火) 11:33:23.44
あと、ゆーじーんさんのテトリス連載は一冊の本になると面白いのではないか、と無責任に言ってみる。

374 :デフォルトの名無しさん:2012/08/28(火) 22:35:05.40
>>372
最初から最後までScalaだけ使ってコンピュータ科学や計算理論や数値計算を解説する本が欲しい

375 :デフォルトの名無しさん:2012/08/29(水) 07:34:09.65
期待してるよ

376 :デフォルトの名無しさん:2012/08/29(水) 10:24:05.19
馬鹿には無理

377 :デフォルトの名無しさん:2012/08/29(水) 21:05:05.82
>>369
教育者のレベルってどんなもんなの?
国立の情報システム科に居たけど、hello wolrd止まりの教授がドヤ顔で講義おしえてたよ

378 :デフォルトの名無しさん:2012/08/29(水) 21:06:56.75
>>362
文法だけ知っててプログラムが組めるわけねーだろw

379 :デフォルトの名無しさん:2012/08/29(水) 21:12:20.06
そんなのTA丸投げです
教授はソースコードなんて読みません

380 :デフォルトの名無しさん:2012/08/29(水) 22:25:03.63
TAだって、ろくにプログラム書ける奴なんていないだろw
hackerあがりの準教が居ない研究室は全て行くだけ無意味な外れクジだよ
viの二画面分割でドヤ顔しているアホ教授のとこなんて特に最低だw

381 :デフォルトの名無しさん:2012/08/29(水) 22:44:38.01
申し訳ないですが全く好感が持てません。

色々なスタイルや考え方がある中で、
このように自分の考えだけで言い切るような人は、ただのカタブツです。
突っ込みどころも多いため、全面的には信用できません。

しかも、聞かれてもいないのに、
いきなり話題を振り脳内豆知識を披露してきて何がしたいのか全く理解不能。
店の名前も出していないから宣伝だとは思えないですし、
すごいねーもの知りだねーって言われたいだけなのでしょうか?

2chではなく、あなたの信者だけで盛り上がればいいと思います。

382 :デフォルトの名無しさん:2012/08/29(水) 23:39:32.42
とりあえず、C++の話題は以後禁止。

ここは、Scalaのスレだ。
ということで、この辺で、Scalaの話にもどろうぜ!


>374

計算理論って、オートマトンとかか?
数値計算って、ニュートン法とか?

今、流行なのは、データから特徴量抽出とか、信号処理とか、そっち方面じゃない?

で、信号処理関係には、Scalaは得意そうな気がするんだ。
FIRフィルタとか。

383 :デフォルトの名無しさん:2012/08/30(木) 00:56:12.11
>>382
行列演算とパーサとコンパイラ自作


384 :デフォルトの名無しさん:2012/08/30(木) 01:03:21.97
大規模データ分析を売りにするなら、まずはコレクションの性能改善からだねえ。
はやくjava.util.HashMapなどを使わずにすむようにならんかな。

385 :デフォルトの名無しさん:2012/08/30(木) 01:12:00.51
>>384
今の「大規模」はギガバイトレベルだから、大規模データ分析はコンテナじゃなくて、ストリームで処理すべきだと思う


386 :デフォルトの名無しさん:2012/08/30(木) 01:55:06.96
GBオーダーであればメモリに載るケースも多いんじゃない?
Javaの場合は何でもボックス化されちゃって
メモリ消費量が想定外に大きくなったりもするけど

387 :デフォルトの名無しさん:2012/08/30(木) 02:28:16.85
メモリはJVMで限界が決まってるような…


388 :デフォルトの名無しさん:2012/08/30(木) 07:53:58.73
>>383
>パーサとコンパイラ自作

これについては、本「実践プログラミングDSL」とかでScalaは大絶賛だな。


ところで、「Scala逆引きレシピ」は、NTTの中の人が著者らしいが、
NTTでは、Scala使っているのか?

> 著者の現場経験に基づいた実践的なノウハウ、レシピを提供します。

とか書いてあるぞ。

389 :デフォルトの名無しさん:2012/08/30(木) 09:30:17.64
商用ならJVMでもっとメモリを扱うためのツールがあるようだ。
http://www.infoq.com/jp/news/2012/08/azul-zing-free
http://d.hatena.ne.jp/golb/touch/20101105/1288983622

390 :デフォルトの名無しさん:2012/08/30(木) 09:50:56.78
-Xmx オプションで指定可能なメモリサイズ上限はOS毎に違う

On Solaris 7 and Solaris 8 SPARC platforms, the upper limit for this
value is approximately 4000m minus overhead amounts. On Solaris 2.6
and x86 platforms, the upper limit is approximately 2000m minus
overhead amounts. On Linux platforms, the upper limit is approximately
2000m minus overhead amounts.


391 :デフォルトの名無しさん:2012/08/30(木) 13:36:55.19
>>388
NTTの人なら、Erlang(かそれに似たアクターモデルの言語)を使ってるはずだから、その経験でScalaの解説をしてると予想

世間で30年くらいオブジェクト指向とか宣伝されてたけど、本当にメッセージパッシングしてるのはErlangやScalaのActorモデルだけだと思う

392 :デフォルトの名無しさん:2012/08/30(木) 14:04:51.90
>>381
好感なんて持たなくて良いです。
教授である貴女方は無能でありゴミであり、税金泥棒で給料泥棒の人の屑です。
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね

393 :デフォルトの名無しさん:2012/08/30(木) 14:14:36.94
NTTって下請けにパワポ送り付けて暇だからscalaとか弄ってるのかな

394 :デフォルトの名無しさん:2012/08/30(木) 14:41:22.25
>>391
http://en.wikipedia.org/wiki/Actor_model
Actor Modelの考え方自体は1973年を起源としていて、
並列モデルとの間で人気が行ったり来たりしているみたいだ。
対応言語もけっこうあるな

395 :デフォルトの名無しさん:2012/08/30(木) 14:56:58.22
Python版akka
_人人人人_
>Pykka─!!<
 ̄Y^Y^Y^Y ̄

396 :デフォルトの名無しさん:2012/08/30(木) 15:06:02.93
アクターモデルが一番単純で教えやすい並列モデルだと思うんだけど、なんでMVarとかがスタンダードになっているのだろうか

397 :デフォルトの名無しさん:2012/08/30(木) 15:36:10.70
Non-Blocking Lock & Semaphore はオーバーヘッドが無い分速いから

398 :デフォルトの名無しさん:2012/08/30(木) 19:45:57.39
>>386
プリミティブ型を、プリミティブのまま格納するコレクションライブラリとかもあったりする。

最近の分散処理フレームワークは、Scala用のインタフェースを提供してるものもあるね。
手元でやるのは、軽くサンプリングして予備解析とか、集計済みのを分析とか、そういう感じかねぇ。

399 :デフォルトの名無しさん:2012/08/30(木) 20:53:10.69
Scala で GUI しようと思ったら swing するしかないですか?

400 :デフォルトの名無しさん:2012/08/30(木) 21:48:16.01
AWTでもSWTでもFXでもHTMLでも好きなの使え

401 :デフォルトの名無しさん:2012/08/30(木) 22:11:27.88
そういやSparkなんてのがあったのを思い出した。
http://www.ibm.com/developerworks/jp/linux/library/l-sparkdataanalysis/

402 :デフォルトの名無しさん:2012/09/01(土) 13:47:05.76
おい、函数プログラミングの集いで何が起きてるんだ…

403 :デフォルトの名無しさん:2012/09/01(土) 20:24:24.02
用事が無ければ行きたかったなぁ。

404 :デフォルトの名無しさん:2012/09/01(土) 20:51:40.53
>>402

オレは今日のイベントには行ってないけど、
ksknac氏の関数型プログラミングの説明が面白かった。

http://www.slideshare.net/ksknac/120901fp-key

関数型なプログラミングは、どの言語でもできる。
関数型言語っていう言葉は適切でなくて、
たんに関数型でプログラムしやすい言語かどうかって話。


他は、F#とかHaskellばっかりなのかな?
オレは今日のイベントには行ってないので分からない。


kmizu氏のスライド見つからないなあ。



405 :デフォルトの名無しさん:2012/09/01(土) 23:02:40.92
>>404
何が面白いのかさっぱり
関数型言語の定義とかどうでもいいし、そして強烈なHaskell史観
だからHaskellの連中がデカい顔するだけの集まりだから行かないほうがいいって言っただろ?
好きな言語アンケート、Haskellがほぼ全体、Clojureが1人とか終わってるだろ
所詮やつらはHaskellを好きな自分のことが好きなだけ

406 :デフォルトの名無しさん:2012/09/01(土) 23:08:47.24
そりゃ、あの文化圏においてはScalaはゴミだからな

407 :デフォルトの名無しさん:2012/09/01(土) 23:13:36.42
でも俺たちのリーダー水島氏はやってくれたよ
まず関数型と関係ないマクロについての発表
この時点でちょっとイベントに喧嘩売ってるのに、さらに当日いきなりボイコット
そして行かないかに見せかけてからの急遽参加でセッションを乱す
完全にこの腐ったイベントを馬鹿にしてるからね

そして発表スライド見るとどう見てもScalaのマクロをディスってるようにしか見えない
セッション参加者の時間を無駄に潰していくスタイル
水島氏は真のScalaテロリスト

408 :デフォルトの名無しさん:2012/09/02(日) 00:45:19.18
約一名触りたくないのが居るんだが。

409 :デフォルトの名無しさん:2012/09/02(日) 02:10:44.72
関数型にErlangのアクターモデルを足したまでは良かったけど、複雑なオブジェクトモデルを混ぜたせいで全部が汚水になった感じ
オブジェクト指向関係の仕様についてはJavaよりももっともっと簡素化すべきだったのに、なぜ複雑にした


410 :デフォルトの名無しさん:2012/09/02(日) 02:20:21.79
Javaよりオブジェクト指向関連の仕様が複雑になってるとか
どこがどうなのか具体的にいってほしいがね
っていうかErlangは関数型じゃないのかね

411 :デフォルトの名無しさん:2012/09/02(日) 02:31:50.74
http://elixir-lang.org/
erlangをrubyっぽくした言語もあったな。

412 :デフォルトの名無しさん:2012/09/02(日) 02:39:32.72
>>411
なんだよ、これ、シンタックスがRubyに似てるだけのErlangじゃねーか
よくこんな気持ちの悪いもの作ろうと思ったな

413 :デフォルトの名無しさん:2012/09/02(日) 04:06:56.99
>>410
特にトレイトが余計だった
インターフェイスだけでいい
Javaのオブジェクト指向ですらマトモに理解させるの無理だったのに、なぜ複雑にしたし
オブジェクトプログラミング関係の糖衣構文も不必要に多過ぎる
わざわざJVMの制約入った言語を選んで使う人がタイプ数を少なくすることなんか望んでいない

Erlangは関数型持ってるけど、Scalaの関数型は何か変な言語の関数型を持ってきてる
特に代入
おかげで、似たような通信モデルなのに、自動変換できない


414 :デフォルトの名無しさん:2012/09/02(日) 04:18:37.30
トレイトが余計とか自分はScala書けませんって言ってるようなもんじゃないか
Javaを理解できない人がいるように>413がScalaを理解できないだけ

415 :デフォルトの名無しさん:2012/09/02(日) 05:10:14.45
理解できないのにScala触る必要は無い

416 :デフォルトの名無しさん:2012/09/02(日) 05:56:55.95
仕様として複雑化してる部分もあるのは間違いないが
それによって表現力が増していたり記述が簡潔になっていたりする面もあるので
トレードオフではある

とりあえずBetter Javaの部分と、
一般的な関数型言語の部分(高階関数とか)を使う分には
おいしいところだけを得られて良い感じになるんじゃないの

417 :デフォルトの名無しさん:2012/09/02(日) 10:38:12.10
kmizu氏のスライド見たけどdisじゃなくね?
Nemerleとの比較で△が多くて残念だけど。
割とフツーのマクロで地味に嬉しいと書いてるじゃん。

418 :デフォルトの名無しさん:2012/09/02(日) 11:09:11.06
407はこのスレにはりついているアンチだから、気にしない。

419 :デフォルトの名無しさん:2012/09/02(日) 11:24:23.36
kmizuフィルターを通してあの評価なら
Scalaのマクロはうんこって事

420 :デフォルトの名無しさん:2012/09/02(日) 12:13:51.14
>>405
「参照透過性を満たしているかは値域で決まる」って話でしょ。
すげぇ重要な話だし勉強になったが。

421 :デフォルトの名無しさん:2012/09/02(日) 15:00:52.13
>>414
書いた本人すら理解できないコードを保守する側の身にもなってくれとしか

422 :デフォルトの名無しさん:2012/09/02(日) 15:27:12.99
むしろJavaからオブジェクトプログラミング関係の仕様を削除してもいいとすら思ってる
保守と理解と生産性と過去との整合性のバランスが一番いいのは、C言語からポインタとビット演算を削除した言語

C言語からポインタとビット演算削除して、ポインタとビット関係は関数で抽象化して、関数型とクロージャの代入を取り入れて、Erlangのアクターモデルを取り入れるという方向で言語作ってくさい

423 :デフォルトの名無しさん:2012/09/02(日) 15:58:46.96
もうなんでErlang使わんの?としか

424 :デフォルトの名無しさん:2012/09/02(日) 16:02:56.37
>>423
Javaの資産を利用したいから
逆に、JVMとJavaの資産を無視できるならScalaを使うメリットはない

425 :デフォルトの名無しさん:2012/09/02(日) 16:08:49.11
クロージャ使えると言っても、プログラム全部をクロージャで表現できるわけじゃないんだよね
プログラム全部をクロージャで表現できるなら、schemeみたいに自分でグレードダウンした処理系を設計できるのに

426 :デフォルトの名無しさん:2012/09/02(日) 16:14:03.19
for文を使えると言っても……

427 :デフォルトの名無しさん:2012/09/02(日) 16:19:48.73
じゃあClojure使えばいいんじゃねーの

428 :デフォルトの名無しさん:2012/09/02(日) 16:20:26.25
確かに、プログラム全部を代入できるなら話が変わる

429 :デフォルトの名無しさん:2012/09/02(日) 16:23:14.58
>>427
Clojure はアクターモデルじゃないから
Scalaはアクターモデル採用したのに、何でだろ

430 :デフォルトの名無しさん:2012/09/02(日) 19:04:52.13
ぶっちゃけ、Actorモデルでバリバリ並行処理書いてる例とか寡聞にして知らないのだが。

あと、OO理解できない人間ほどOO不要論を唱えるよね。
いまさら劣化Cで複雑なプログラム書くとか正気とは思えん。

431 :デフォルトの名無しさん:2012/09/02(日) 19:30:53.51
Erlangを使ったエリクソンの開発事例が有名じゃないの
有名といってもたかが知れてる感はあるけど
非常に高度な無停止性を実現したケースだったはず

アクターとかCSPとかデータフローとかペトリネットとか
並行性を含んだモデルは昔からあるけど
少なくとも今のところメジャーになった言語には採用されてないね

432 :デフォルトの名無しさん:2012/09/02(日) 19:40:08.85
アクターモデル採用したってなに?
言語本体じゃなくてライブラリで実装してる機能じゃん
Clojureもライブラリで実装すればいいじゃん

433 :デフォルトの名無しさん:2012/09/02(日) 22:24:19.71
>>431
それは知らなかった。サンクス。

まぁでも、最近は大規模データ処理と言えば猫も杓子もMapReduceかCEPな感じがする。
何が普及を妨げてるんだろう。

434 :デフォルトの名無しさん:2012/09/02(日) 22:31:17.68
>>430
OO理解できない人間が作ったプログラムを保守させられてきた人間ほどOO不要論を唱える
OO理解できない人間はOO不要論は唱えない

435 :デフォルトの名無しさん:2012/09/02(日) 22:34:58.84
>>432
アクタごとにプロセス(スレッドではない)を生成するからAPIインクルードすれば使えるというわけじゃない

436 :デフォルトの名無しさん:2012/09/02(日) 23:19:06.52
>>434
それはOO理解できない人間にプログラマを名乗らせて人月単価を上積みしてるビジネスモデルの問題だろ。

437 :デフォルトの名無しさん:2012/09/02(日) 23:48:01.35
>>435
Actorはスレッドプールからのリソースを割り当てられて実行される計算コンテキストの単位なので
プロセスじゃないぞ

438 :デフォルトの名無しさん:2012/09/03(月) 00:09:02.27
>>437
アクタモデルのプロセスはスレッドではない(OSのプロセスでもない)


439 :デフォルトの名無しさん:2012/09/03(月) 00:09:53.95
>>436
つまり、日本の実務ではScalaを使ってはいけないということか…


440 :デフォルトの名無しさん:2012/09/03(月) 00:13:03.89
メッセージとして送るオブジェクトはどこまでコピーされるん?
シャロウコピーで参照先は共有?

441 :デフォルトの名無しさん:2012/09/03(月) 00:18:39.55
>>435
プロセスだとどうしてダメなのか説明してください。
現にscalaではActorはライブラリとして実装されているというのに。

442 :デフォルトの名無しさん:2012/09/03(月) 00:35:24.98
>>432
言語によっては、専用構文とかを用意して
そのモデルの活用を支援している事がある
もちろん、より記述しやすくなることが多い。そういうのを指しての話

443 :デフォルトの名無しさん:2012/09/03(月) 00:53:05.05
少なくともScalaのActorに専用構文なんてないけど?

444 :デフォルトの名無しさん:2012/09/03(月) 01:00:27.54
中身がなんだっていいねん 使えればいいねん

445 :デフォルトの名無しさん:2012/09/03(月) 01:01:53.24
一人言ってることが支離滅裂なやつが居るな

446 :デフォルトの名無しさん:2012/09/03(月) 01:05:23.39
最近ScalaちゃんのTwitterゲスくなりすぎだろ…

447 :デフォルトの名無しさん:2012/09/03(月) 01:09:35.67
>>440
アクターモデルだから当然ディープコピー

448 :デフォルトの名無しさん:2012/09/03(月) 02:41:39.85
ディープコピーというか、なんか変なシリアライズしてないか?


449 :デフォルトの名無しさん:2012/09/05(水) 21:27:22.08
そりゃ本格的な通信だなあ

450 :デフォルトの名無しさん:2012/09/06(木) 09:50:11.67
アクターがアンダーグラウンドのサービスを呼び出すとエージェントになるです?

451 :デフォルトの名無しさん:2012/09/06(木) 10:24:53.77
twitterも当たるから当たらないか分からないサービスなんて
最初からjavaでは書きたくなかったんだろうな

452 :デフォルトの名無しさん:2012/09/06(木) 10:40:49.86
>>450
いいえ、こびとさん
それはアクターでなくて夜を往くアイドルなのでは?

453 :デフォルトの名無しさん:2012/09/07(金) 00:30:30.29
http://mizuyoukan0809.bbs.fc2.com/ @kabayakiya1999 @10yenn @curtain_call1
scalaちゃんかわいいよ。スーハースーハー

454 :デフォルトの名無しさん:2012/09/08(土) 01:00:15.54
そろそろ魔法言語リリカルscalaが出てきてもいい頃

455 :デフォルトの名無しさん:2012/09/13(木) 21:15:53.68
時代は、スカラロイド だろ。

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class ScalaRoid extends Activity{
override def onCreate(savedInstanceState: Bundle){
super.onCreate(savedInstanceState)

val tv = new TextView(this)
tv.setText("わたしはスカラロイドちゃん!")
setContentView(tv)
}
}


456 :デフォルトの名無しさん:2012/09/15(土) 19:46:26.16
T -> m -> a
TMA完成でスカラロイドちゃんが3次元に!

457 :デフォルトの名無しさん:2012/09/16(日) 21:45:45.21
JavaFXって、Scalaから簡単に利用できるようになる動きはあるのかな?

いままで、JavaはGUIが弱かったけど、JavaFX2.0でようやくまともなGUIが使える?

458 :デフォルトの名無しさん:2012/09/16(日) 23:51:37.09
スカトロイドみてえだ・・・

459 :デフォルトの名無しさん:2012/09/17(月) 00:22:42.94
>>457
JavaAPI直接使う以外にもScalaバインディングはあって簡便な記述できるらしい
でも現時点ではFX自体の完成度がいまいちって話も聞くんで短期的にはSwing/SWT使い続けるほうが

460 :デフォルトの名無しさん:2012/09/17(月) 11:48:43.96
SWTはもういりません!

461 :デフォルトの名無しさん:2012/09/17(月) 14:39:38.87
そもそもJavaの普及率に比べてJavaのAPIを使ったアプリケーションをあんまり目にしない
携帯やWebならもっと普及してるのだろうか

462 :デフォルトの名無しさん:2012/09/17(月) 15:43:12.20
>>457
scalafxがある
http://code.google.com/p/scalafx/
でもまだ開発中っぽいね

463 :デフォルトの名無しさん:2012/09/17(月) 18:02:02.96
生のjavafxでも簡単に扱えます
そう、scalaならね

464 :デフォルトの名無しさん:2012/09/18(火) 00:53:30.50
>>461
もはやフロントエンドで使う言語じゃないしな。
JavaFXでRIAとして復権を目論んだものの失敗し、最近ではセキュリティホールの元凶扱い。

465 :デフォルトの名無しさん:2012/09/19(水) 00:07:21.97
akka 2.0になってからリモート通信ができなくなった。
透過的な設計というのも善し悪しだな…
明示的制御機能がなくなって個人的には悪化した

466 :デフォルトの名無しさん:2012/09/19(水) 00:11:49.85
>悪化した
これが言いたかっただけだろw

467 :デフォルトの名無しさん:2012/09/19(水) 00:18:23.89
FXやるやつはクズ
汗水流して働いてお金稼げと

468 :デフォルトの名無しさん:2012/09/19(水) 02:56:19.76
f(x)だと!?

469 :デフォルトの名無しさん:2012/09/19(水) 06:10:44.31
確かにFXは高性能すぎる
オービタルぐらいに留めておくべき

470 :デフォルトの名無しさん:2012/09/20(木) 11:58:44.47
>468
関数型ですねわかります

471 :デフォルトの名無しさん:2012/09/26(水) 22:48:47.39
akka2.0は何故リモート通信ないのアホなの?
生産性10倍なんだろ?

472 :デフォルトの名無しさん:2012/09/26(水) 23:04:19.22
何で無いと思ってるの?アホなの?ドキュメントも読めないの?

473 :デフォルトの名無しさん:2012/09/27(木) 00:32:59.89
ところで、おまいら、
Scalaって、OpenJDKで動かしたりしてる?

474 :デフォルトの名無しさん:2012/09/27(木) 01:21:04.84
うごかねーよw

475 :デフォルトの名無しさん:2012/09/27(木) 07:49:47.32
そうなの?
何が違うのかな

476 :デフォルトの名無しさん:2012/09/27(木) 10:14:48.81
何でOpenJDKで動かないと思ってるの?アホなの? 471 と同じ人なの?

477 :デフォルトの名無しさん:2012/09/28(金) 00:15:27.10
たとえば、このスレでも >229 さんとかは、
Scala2.9をOpenJDKで常用しているみたいだし、
別に珍しくもなんともないだろ。


478 :デフォルトの名無しさん:2012/09/28(金) 06:08:49.81
>>447
それおらだ Ubuntu で何も考えずに環境作ったら OpenJDK だったのでそのままにしてる
Sun環境も作ってるけどね

479 :デフォルトの名無しさん:2012/09/28(金) 12:10:40.03
Functional Programming Principles in Scala
https://www.coursera.org/course/progfun
Scalaの作者Odersky先生による無料の授業とかやってるらしい


480 :デフォルトの名無しさん:2012/09/28(金) 23:11:30.63
先生に後方互換性完全無視した夢のscalaを語って欲しい

481 :デフォルトの名無しさん:2012/09/29(土) 08:05:35.82
そんなものは夢でscala

482 :デフォルトの名無しさん:2012/09/29(土) 09:23:00.35
後方互換性完全無視ってJavaとかJVMを無視って意味?

483 :デフォルトの名無しさん:2012/09/29(土) 11:12:07.87
JVMとJavaAPIを無視するなら、わざわざScala使う必要ないしな…

484 :デフォルトの名無しさん:2012/09/29(土) 12:22:02.04
>>480
> 先生に後方互換性完全無視した夢のscalaを語って欲しい


おまえ、分かり辛い書き方するから、勘違い君が増殖しちゃったじゃないか!


おまえが480で言いたかったことは
「Odersky先生に、 もしも、互換性無視で新たにScalaを作るとしたら、
どんなScalaにしますか?って聞いてみたいわ〜キラキラ」
でしょ。


まさに、チラシの裏に書けって。


485 :デフォルトの名無しさん:2012/09/29(土) 14:20:21.24
むしろScalaがJavaへの発言力を高めてErasureで型情報が消えなくなるように改善させるという方向を目指します

486 :デフォルトの名無しさん:2012/09/29(土) 15:10:44.33
JDKのExploitの多さってどうにかならんの?

487 :デフォルトの名無しさん:2012/09/29(土) 17:38:55.38
Erasureで型情報が消えなくなるようになったら、Scalaに不都合もあるぞ

488 :デフォルトの名無しさん:2012/09/29(土) 23:46:13.04
scala> { x: Int =>; x * 2 }
res0: Int => Int = <function1>

ブロックに => 記法が入っていると関数になっちゃうのは何故?

{ x: Int =>
x * 2
}
というふうに使う。

コップ本のどこに書いてあるとか、くらいでもいいので知りたい。
本家の言語使用のブロックの所を一読したが不明だった。

scala> { println("foo"); x: Int =>; println("bar"); y: Int =>; println("baz") }
foo
res1: Int => Int => Unit = <function1>
scala> res1(1)
bar
res2: Int => Unit = <function1>
scala> res2(1)
baz

とかとか。

489 :デフォルトの名無しさん:2012/09/30(日) 00:50:53.82
↓ scala で servlet 書いてるコード探してて見付けたんだけど、このコードはレースコンディション発生するよね…?
http://yuroyoro.hatenablog.com/entry/20100316/1268735022
http://d.hatena.ne.jp/qtamaki/20120730/1343630511

mutable.Set += this と mutable.Set -= this の部分。
なんか scala 書いてる有名な人?っぽいし、俺の理解が間違ってるのかもしれなくて不安なので誰か教えて。
あとこういうときってどうやってスレッドセーフにするのが良いの?

scala> var clients = scala.collection.mutable.Set.empty[Int]
scala> (1 to 100*10000).par.foreach((n) => clients += n)
scala> println(clients.size)
836536

490 :デフォルトの名無しさん:2012/09/30(日) 01:18:48.77
自己レス、やっぱりこのブログ記事のコード、バグあるよね…

scala> var clients = new mutable.HashSet[Int] with mutable.SynchronizedSet[Int]
scala> (1 to 100*10000).par.foreach((n) => clients += n)
scala> println(clients.size)
1000000

491 :デフォルトの名無しさん:2012/09/30(日) 02:10:11.73
>>488
言語仕様の文法部分に書いてあることはある。すっげえわかりにくいけど

6.11 Blocks の構文規則が

BlockExpr ::= ‘{’ Block ‘}’
Block ::= {BlockStat semi} [ResultExpr]

ってなってて、6.23 Anonymous Functionsで

ResultExpr ::= (Bindings | ([‘implicit’] id | ‘_’) ‘:’ CompoundType) ‘=>’ Block

として定義されてるので、{x: Int => x* 2} みたいなのは、{ ... } 全体でBlockExprで、
最後がx: Int => x * 2なので、ResultExprのパターンに当てはまる…んだが、無駄にわかりにくい
{x => ... }形式の無名関数は通常の形式より後で導入されたので、こんなわかりにくい書き方になってる
んだろうと思う

492 :デフォルトの名無しさん:2012/09/30(日) 02:20:17.83
補足。

{ println("foo"); x: Int =>; println("bar"); y: Int =>; println("baz") }

は解釈としては、ブロックの中で x: Int => が出てきた時点で、残りの部分全体がBlockになるので、実質的に

{ println("foo"); (x: Int) => { ; println("bar"); (y: Int) => { ; println("baz") } } }

のように差し支えない

493 :デフォルトの名無しさん:2012/09/30(日) 04:54:50.75
>>489
ふつーにconcurrentコレクションつかえばいいだけの話だろ
- java.util.concurrent.CopyOnWriteArraySet
http://dev.eclipse.org/svnroot/rt/org.eclipse.jetty/jetty/trunk/test-jetty-webapp/src/main/java/com/acme/WebSocketChatServlet.java
- scala.collection.mutable.ConcurrentMap
- scala.collection.mutable.{SynchronizedBuffer, SynchronizedMap, SynchronizedPriorityQueue, SynchronizedQueue, SynchronizedSet, SynchronizedStack}
- scala.concurrent.*

494 :488:2012/09/30(日) 14:05:55.44
>>499

ありがとうございます。自分でも書き込んだ後仕様書を見てて気づきました。

最初読んだときは

Block ::= {BlockStat semi} [ResultExpr]

の { を '{' と空目してわかんなかった。

便利だけど、少し奇妙な文法だ。


495 :488:2012/09/30(日) 14:43:09.24
Ruby の {|x| ...} みたいに書きたい!
みたいな動機があってひねり出したんだろうか。

496 :デフォルトの名無しさん:2012/10/02(火) 13:49:11.77
Odersky先生ってゴリラみたいな顔してるな

497 :デフォルトの名無しさん:2012/10/03(水) 23:38:13.85
重要なのはヒゲ

498 :デフォルトの名無しさん:2012/10/07(日) 00:17:50.21
スイスって、国の産業とかを大切にする国だよなあ。




499 :デフォルトの名無しさん:2012/10/12(金) 19:49:41.43
こんな黒魔術言語・・・ 流行る?

500 :デフォルトの名無しさん:2012/10/12(金) 20:21:21.63
[変態][Scala]パンツ履き替えさせようとする黒魔術なRubyistに対してScalaistが立ち向かう
http://d.hatena.ne.jp/razon/20111207/1323264726


501 :デフォルトの名無しさん:2012/10/12(金) 21:43:02.59
吐き気を催す駄文

502 :デフォルトの名無しさん:2012/10/13(土) 00:39:47.43
個人的にはもう十分流行ってる気がする

それはさておきIntellij使ってみたけどこりゃ便利だな
色々親切すぎてもうscala-modeには戻れんわ

503 :デフォルトの名無しさん:2012/10/13(土) 10:38:11.55
気づいたらライセンス料払ってた

504 :デフォルトの名無しさん:2012/10/13(土) 11:41:28.77
もう2.10.0-RC1でてるんだな

505 :デフォルトの名無しさん:2012/10/13(土) 12:19:23.07
phpstorm(webstorm)は、一度買ったことあるけど(アップグレードしてない)、Intelijあいでぃあはコミュニティ版のヘタレだぜ。

506 :デフォルトの名無しさん:2012/10/13(土) 13:48:17.28
IntelliJ派とIDEA厨の戦いが終わらない

507 :デフォルトの名無しさん:2012/10/14(日) 09:13:41.11
javaの延長としての使い方なら快適なんだけど・・・
passwordthing-scalaをテンプレートとしてアプリ作ろうと思ったら、ハマってしまった。 難解すぐる。
一応、仕上げたけど、javaハイレベル出身者でも、ハードルは高い。 scalaとplay2のマッチは頭痛が痛い。

508 :デフォルトの名無しさん:2012/10/14(日) 18:31:50.50
言語としてはいいな。

509 :デフォルトの名無しさん:2012/10/14(日) 20:10:56.64
後発だからJavaより良い点は多々あるが…
敢えて使う理由が無い。

510 :デフォルトの名無しさん:2012/10/14(日) 20:31:12.55
Javaを長年使ってるとプログラマとしての資質が破壊されて
Java以外の言語を使いこなすことが困難になるからね

「敢えて使う理由が無い」というより「使いたくても使えない」が正しい

511 :デフォルトの名無しさん:2012/10/14(日) 21:18:24.05
そこまでひどくなくても、サンマイクロの出方次第で大量のjavaプログラマが路頭に迷うのは確か

512 :デフォルトの名無しさん:2012/10/14(日) 21:42:07.46
サン自体が既に消滅してるだろ・・

513 :デフォルトの名無しさん:2012/10/14(日) 22:44:36.20
こういう話?
http://web.archive.org/web/20080727024157/http://local.joelonsoftware.com/mediawiki/index.php/Javaスクールの危険
http://d.hatena.ne.jp/gothedistance/touch/20070108/1168183689

514 :デフォルトの名無しさん:2012/10/15(月) 00:16:26.28
>>513

>私のような新卒でIT業界に入ってきてJavaでプログラムを覚えた人間、即ち大量生産されるJavaプログラマは、


↑あほくさ。

ここ数年、新卒の学生は、むちゃくちゃ優秀なのが多いので、何の話をしているのだかサッパリ。

自分が優秀でないのを、言語のせいにするとか意味不明。
COBOLを今だにやってるオッサンだったら、言語のせいにしても良いが。



Javaに関してはAndroidで息を吹き返したが、Scalaはキラーアプリがまだないかもね。

515 :デフォルトの名無しさん:2012/10/15(月) 00:36:38.36
Javaはスタンドアロンのマルチプラットフォームアプリ基盤として
独自の立ち位置を持ってるから、Scalaもなんとなく便乗できるんじゃね

516 :デフォルトの名無しさん:2012/10/15(月) 07:50:27.23
>>513
POJO頼りならscalaなんて無理無理 w

517 :デフォルトの名無しさん:2012/10/15(月) 09:27:24.31
その発言だけでお前がPOJOの意味を間違えて覚えているのがよく理解できました。

518 :デフォルトの名無しさん:2012/10/19(金) 20:45:10.93
はい過疎

519 :デフォルトの名無しさん:2012/10/19(金) 21:50:50.95
2.10はまだか

520 :デフォルトの名無しさん:2012/10/19(金) 22:40:17.66
RC1出てるらしいしもうすぐじゃね

521 :デフォルトの名無しさん:2012/10/19(金) 23:19:45.58
Scalaの勉強会って最近どうなの?

東北、関東、なごや、倉敷 とかでやってるみたいだが、
どこも遠いのでいけなくて残念。

522 :デフォルトの名無しさん:2012/10/20(土) 10:54:37.66
>>498
> スイスって、国の産業とかを大切にする国だよなあ。

かつてスイス最大の産業は傭兵。

523 :デフォルトの名無しさん:2012/10/20(土) 11:11:59.05
せっかくスルーされてた脱線ネタを掘り返すんじゃねェぞこのスカタンがァーッ!

524 :デフォルトの名無しさん:2012/10/20(土) 15:38:23.82
POJOの奇妙な冒険

525 :デフォルトの名無しさん:2012/10/21(日) 21:36:41.57
崖の上のPOJO

526 :デフォルトの名無しさん:2012/10/23(火) 08:39:59.62
>>519
> 2.10はまだか

注目の機能は?

527 :デフォルトの名無しさん:2012/10/23(火) 17:26:36.60
Macro
String Interpolation
Value Class
Implicit Class

528 :デフォルトの名無しさん:2012/10/23(火) 22:15:08.66
spawnの廃止
akkaの統合

529 :デフォルトの名無しさん:2012/10/25(木) 23:45:36.06
日経ソフトウェア12月号の特集の中に Scala入門があったぞ。

日経ソフトウェアは、結構な頻度でScalaを取り上げているなあ。


でも、毎回入門ばっかりなんだけど、、。

530 :デフォルトの名無しさん:2012/10/27(土) 13:20:10.79
実用にならない何よりの証>入門ばっか

531 :デフォルトの名無しさん:2012/10/27(土) 16:05:32.27
naruh

532 :デフォルトの名無しさん:2012/10/28(日) 21:53:54.48
コンパイルが遅かったから最近使ってないんだが、改善された?
環境にもよる気がするが・・・。

533 :デフォルトの名無しさん:2012/10/29(月) 03:07:07.76
使わなくなった時期が気になるところだが、
fsc とか sbt 使うぶんにはそれほど気にならないけど。
どうやってコンパイルしてんの?

534 :デフォルトの名無しさん:2012/10/29(月) 03:40:22.45
コンパイル遅いのは、改善されてないと思うよ

535 :デフォルトの名無しさん:2012/10/29(月) 07:04:20.94
sbtだと差分コンパイルしてくれるからそんなに気にならないな……
まあ遅いのは確かなんだけど。
2.9.1.finalでコンパイル速度が改善されたって記事どっかで見た気がするから、
それ以前のバージョン使ってた人ならもう一度試してみてもいいんじゃないかね

536 :デフォルトの名無しさん:2012/10/29(月) 07:06:21.00
たぶんこれ
http://www.quora.com/Scala/Is-Scala-compile-time-likely-to-improve-in-the-future

537 :デフォルトの名無しさん:2012/10/29(月) 11:55:39.55
誰かtypesafeに就職して、コンパイル速度はやくしてくれよ
http://typesafe.com/company/careers


538 :デフォルトの名無しさん:2012/10/29(月) 19:25:04.47
自分でフォークして改善したらタダみたいなもんやぞ

539 :デフォルトの名無しさん:2012/10/30(火) 09:53:44.85
就職して給料で良いマシンあてがわれて課題を見失うオチが見える

540 :デフォルトの名無しさん:2012/10/30(火) 10:33:04.27
>>533
2年くらい前かな。
2コアのしょぼいマシンでLINUXとかiMacでMacPorts経由とか。
>>539
エスパーか?5年前のラップトップなんだけど、最近の良いマシンがどの程度かよく知らないです。

541 :デフォルトの名無しさん:2012/10/30(火) 10:34:24.57
当時小さいプログラムしか書かなかったから、fscでも立ち上がりの遅さが腹立たしかった。

542 :デフォルトの名無しさん:2012/10/30(火) 12:51:40.09
>>539


こんな遅いの使えるか!とかさんざん愚痴を漏らしつつ、
重たいソフトを拒否して、古いソフトばっかり使っていたら、、、、

周りはふつうにi5,i7マシンを使っていて、最近のソフトでサクサク仕事をやっていた、、、、でござる。



543 :デフォルトの名無しさん:2012/10/31(水) 23:52:13.27
最近はビルドの速度と実行速度はどうでもよくなっる
結局、開発速度だけがボトルネックになってる


544 :デフォルトの名無しさん:2012/11/01(木) 05:50:52.51
実行速度がわりとどうでもいいのは、うちもそうだけど
ビルドの速度は開発速度の一部だったりしないかい?

545 :デフォルトの名無しさん:2012/11/01(木) 08:45:47.73
バックグラウンドでテスト走らせて結果がNGの場合だけ手戻りが発生する
CPUでいう各ステージの並列動作と予測分岐みたいなものだからな
演算ステージが人間のおつむだからボトルネックになるってことだろ

546 :デフォルトの名無しさん:2012/11/01(木) 09:25:05.05
replで動きを確かめながらコーディングするような状況を想像してた
出直してくる

547 :デフォルトの名無しさん:2012/11/01(木) 10:04:55.76
>>545
いいな〜
日本の会社でそこまでテスト環境整備する余裕のある会社ってあるんですか?
IT業界でもそこまでやってるとは思えないんですが。
反射的に某G社しか浮かばない・・・。

548 :デフォルトの名無しさん:2012/11/01(木) 10:13:20.37
技術職で食っていくつもりなら会社が優れた人材に育ててくれるなんてIT土方気質はいいかげん捨てろ
10年待たずに首を吊ることになるぞ
G社のように才能を持った人材が流動的に要職を担ってるのが現在の会社の形態なんだよ

549 :デフォルトの名無しさん:2012/11/01(木) 12:34:27.61
10年前はビルドとテストのタスクを実行始めたら家に帰って、次の日出社するくらいにちょうど終わってたんだけど、今は昼飯食ってる間に終わるので、仕事量の密度がとんでもないことになってる

550 :デフォルトの名無しさん:2012/11/01(木) 15:58:24.00
IT関連企業TOPに踊り出る方法教えます

「sbtで~test」

一部上場どころか全部上場する勢いだ!!

551 :デフォルトの名無しさん:2012/11/01(木) 18:17:43.31
Java系だとテスト体制完備しないで開発するのは非常、っていう空気を感じる

552 :デフォルトの名無しさん:2012/11/01(木) 20:15:41.17
>>547

"日本の会社でそこまでテスト環境整備する余裕のある会社ってあるんですか? "

いくらでもあるだろ。。。どんなひどい会社にいるんだ

553 :デフォルトの名無しさん:2012/11/01(木) 20:26:59.02
>>552
WEB系は自動テストが難しいのでコンパイルが通るかだけチェックして、テスタに投げてしまう

554 :デフォルトの名無しさん:2012/11/01(木) 22:35:18.62
そこで言うWEB系とは何のことだ。

555 :デフォルトの名無しさん:2012/11/01(木) 22:55:11.88
ウェッブのインターネッツに散らばってるめちゃシコ画像をモリモリ探し出してくれる系です

556 :デフォルトの名無しさん:2012/11/02(金) 01:53:16.39
>>554
HTMLコードを動的生成するヤツ
データベースと連携するヤツ
クライアントのクッキーもらうヤツ


557 :デフォルトの名無しさん:2012/11/02(金) 02:13:11.20
>>556
違うだろ
>>554
ここでいうWEB系ってのはLiftやPlayやScalatraの事だ

558 :デフォルトの名無しさん:2012/11/02(金) 02:16:30.93
Scalatraは知らんが、LiftとかPlayって自動テストできるように設計されてるだろ?

559 :デフォルトの名無しさん:2012/11/02(金) 04:59:37.84
Scalatraもできるよ

560 :デフォルトの名無しさん:2012/11/02(金) 19:39:42.42
>>532
だが、スレチのネタでここまで盛り上がるとは、最近話題ないんだな・・・。
ver3.0台の構想とかないの?

561 :デフォルトの名無しさん:2012/11/02(金) 21:06:35.71
Scalazについて語るスレ。

562 :デフォルトの名無しさん:2012/11/02(金) 21:30:17.00
>> 560

ver3.0の話は全くでてないが、2.10の後のことは少しだけ話出てるぞ

https://groups.google.com/forum/?fromgroups=#!searchin/scala-internals/next$20version/scala-internals/xvhvgqBXFtE/2hla7fCODMMJ

563 :デフォルトの名無しさん:2012/11/04(日) 19:33:54.40
scalazって触ったことないんだけどやっぱスーパーscala使いには必須なの?

564 :デフォルトの名無しさん:2012/11/05(月) 20:18:24.50
>>563
必須ではない。Scalaをよりpurely functionalに使いたいなら便利。ただ、数名のチームで、全員がscalazのコンセプトを理解してる状況でなきゃ使えないと思う
アプリケーションよりライブラリ設計者に有用なライブラリというのが私見
Scalaのライブラリ/フレームワーク設計者でscalazを使ってる人は少なくないし

565 :デフォルトの名無しさん:2012/11/05(月) 20:38:47.05
本体に統合される可能性ってある?

566 :デフォルトの名無しさん:2012/11/05(月) 23:33:14.85
>>565
小田隙先生はScalazの人たちと少し距離を取ってる節があるし、たぶん入らない。Scalazそのものが悪いというわけ
でもないのだけど、Scalazの人の一部はしばしば過激な言説でもめたりするので、自分も少し苦々しく思ってる部分があったり
とはいえ、Specs 2の内部とか、縁の下の色々なところで使われてるのも事実

567 :デフォルトの名無しさん:2012/11/05(月) 23:54:26.19
こんなスライドもある、しょうがないから俺はmixinを使うぜ。
http://www.slideshare.net/asami224/scala-9728001
http://www.slideshare.net/asami224/monadic-14014281

568 :デフォルトの名無しさん:2012/11/06(火) 00:26:03.39
flatMapとOption型でモナディックにプログラムを書こうとすると
型推論の弱さに気が狂いそうになる

569 :デフォルトの名無しさん:2012/11/06(火) 08:07:14.21
scalazのソース読んでるけどたまに型名の後についてる#λ←これ何なの?
こんな構文あったっけ

570 :デフォルトの名無しさん:2012/11/06(火) 22:38:03.58
λという名前の内部クラスのように見えるが。

571 :デフォルトの名無しさん:2012/11/06(火) 23:04:06.66
scalaはutf8(でASCII外)の演算子があったりする。

572 :デフォルトの名無しさん:2012/11/06(火) 23:55:48.05
入力画面度過ぎるだろ・・

573 :デフォルトの名無しさん:2012/11/06(火) 23:57:25.66
特殊なキーボード使ってるんじゃね?

574 :デフォルトの名無しさん:2012/11/07(水) 01:17:02.37
たしか 2.8 で「->」を「→」で代替できるようになったはず。

575 :デフォルトの名無しさん:2012/11/07(水) 01:26:19.97
>>574
少なくとも2.7から
⇒ === =>
← === <-

ぶっちゃけ使う機会はないし、使ってるのもほとんどみないけど
Scalazは普通にUnicode演算子が結構あって、Scalazキーボード配置というネタがあったり
http://www.cakesolutions.net/teamblogs/2011/09/13/u-s-lisp-keyboard-layout/

576 :デフォルトの名無しさん:2012/11/07(水) 01:31:30.80
>>572

入力が面倒ってか?

日本人だと、日本語IMEを使えばそんなに面倒でもないけど、
英語文化圏の人は、λ とかどうやって入力するんだ??


577 :デフォルトの名無しさん:2012/11/07(水) 03:20:04.56
>>569

これ嫁
"Scalaにおける型パラメータの部分適用 [({type F[X] = G[A,X]})#F] について"
http://yuroyoro.hatenablog.com/entry/2012/08/02/153418

578 :デフォルトの名無しさん:2012/11/10(土) 09:45:09.49
>>577
ありがとん、読んだ
コレ使えばtype Y[A] = X[A, Int]と部分適用するのにいちいち別名で定義しなくても
その場限りの無名な型コンストラクタが使えるぜ!!って感じなのね

579 :デフォルトの名無しさん:2012/11/10(土) 13:15:46.46
>>577
>>578
どうでもいいツッコミだが、これって「その場で使い捨ててる」けれど、無名じゃなくて名前を一旦つけてるような

580 :デフォルトの名無しさん:2012/11/10(土) 14:30:05.87
YammerがScalaからJavaへ移行中 http://www.infoq.com/jp/news/2011/12/yammer-scala

581 :デフォルトの名無しさん:2012/11/10(土) 18:50:59.96
あれからもう1年か
前スレ眺めてちょっと思い出に浸った

582 :デフォルトの名無しさん:2012/11/10(土) 19:41:45.91
はじめからJavaでやれよ、と

583 :デフォルトの名無しさん:2012/11/10(土) 22:16:10.91
最新号のWEB+DBにこの事例がのってた。
http://tech.furyu.jp/blog/?p=1884
DBまわりも発展途上で決定打がないのでいろいろやってるみたい。

そしてPlay2使ってる人たちの@IT連載が増えてた
http://www.atmarkit.co.jp/fjava/index/index_play.html
http://www.atmarkit.co.jp/ait/articles/1210/26/news018.html

584 :デフォルトの名無しさん:2012/11/11(日) 13:50:23.17
DBの回りはなんだかんだ言って結局Javaの資産を使うことになる

585 :デフォルトの名無しさん:2012/11/11(日) 14:05:42.93
しかしただでさえ複雑なのに、2.10になってマクロとか入ったらさらに複雑になるな

586 :デフォルトの名無しさん:2012/11/11(日) 14:21:01.52
カオスは人の印象に過ぎない
Scalaはすべて調和と秩序で成り立っている

587 :デフォルトの名無しさん:2012/11/11(日) 18:21:52.26
モヒカンと戦うものは自らもモヒカンとならないように気を付けねばならない。
汝が混沌を覗き込むとき、混沌もまた汝を覗き込んでいるのだ。

588 :デフォルトの名無しさん:2012/11/11(日) 18:46:31.96
女が混浴
に見えた

589 :デフォルトの名無しさん:2012/11/11(日) 19:25:16.40
>>285
マクロはexperimentalなので、明示的にimportしないと使えない。
他にもhigher-kinded typesなど「高度な」機能はimportしないと
警告出る。将来的にはコンパイルエラーになる。2.10以降のScalaは
「高度な」機能をデフォルト状態でOFFにすることで、(普通のユーザにとっての)
複雑さを減らす方針

590 :デフォルトの名無しさん:2012/11/11(日) 22:30:29.18
フレームワーク設計者にマクロが与えられることで、
DBやWEB向けの内部DSLが簡潔になるはずではある。
http://eed3si9n.com/ja/scala-macros-scaladays2012

591 :デフォルトの名無しさん:2012/11/11(日) 23:07:51.86
明示的にimportしないと使えない。
といっても、みんながそれやって使い出したら初心者も結局マクロ使われたコード目にすることになるだろ

592 :デフォルトの名無しさん:2012/11/12(月) 04:01:35.61
初心者にとってはお先マックロだな。

593 :デフォルトの名無しさん:2012/11/12(月) 19:09:44.55
【審議中】
    ∧,,∧  ∧,,∧
 ∧ (´・ω・) (・ω・`) ∧∧
( ´・ω) U) ( つと ノ(ω・` )
| U (  ´・) (・`  ) と ノ
 u-u (l    ) (   ノu-u
     `u-u'. `u-u'

594 :デフォルトの名無しさん:2012/11/18(日) 22:58:36.45
>>591

明示的にimportすることで、
あ、このimport文があるってことは、これを使った文があるわけだ、
というのが分かる。

初心者にとってありがたいのは、検索するときのキーワードが分かるかどうかってこと。


ま、おまいさんが心配するほどのことじゃないってことだ。

595 :デフォルトの名無しさん:2012/11/19(月) 02:47:12.81
import *

596 :デフォルトの名無しさん:2012/11/19(月) 23:05:40.62
>>595
> import *

だから、そういう心配はしなくて良いって。

597 :デフォルトの名無しさん:2012/11/20(火) 00:03:56.11
>595がScala書いたことないのは分かる

598 :デフォルトの名無しさん:2012/11/23(金) 22:57:57.58
JavaFXって、
単なるGUIライブラリかと思っていたら、スクリプトっぽいな。
変数の型の指定とかって、Scalaに似ている。

バインドとかトリガーっていうのは言語として面白いね。

ScalaFxっていうのがあるけど、
Scalaから JavaFXを呼び出したりとかいう使い方は、しないものだろうか?

599 :デフォルトの名無しさん:2012/11/24(土) 06:09:52.24
>>598
それは初代JavaFXの事で、既に(開発自体が)オワコンになってる
今JavaFXと言われてるのはJavaFX 2の事で、これはSwingの後継というと違うけど、単なるJava(JVM)用GUIライブラリ
ScalaFXはJavaFX 2のラッパー(ScalaFXはまだまだ開発中っぽいけど)

600 :デフォルトの名無しさん:2012/11/24(土) 10:33:05.33
>>599
> >>598
> それは初代JavaFXの事で、既に(開発自体が)オワコンになってる

なるほど、
昔は、JavaFxスクリプトって呼ばれてたものなあ。

今更、スクリプト(=言語)が増えるよりかは、JVM上のライブラリーが向上するほうが嬉しいよね。

>ScalaFXはまだまだ開発中っぽいけど)

GUI部分は、Javaで書いて、Model,Controller部分のScalaから classを呼び出すって使い方で十分な気がするけど。

601 :デフォルトの名無しさん:2012/11/25(日) 17:38:06.49
JavaFXScriptサポートなくなってたけど、
Visage、ScalaFX、GroovyFXのオープンソースプロジェクトをOracleの中の人が管理してるみたい。
http://www.slideshare.net/mobile/steveonjava/cleaner-apis-cleaner-uis-with-visage-33rd-degrees
http://www.slideshare.net/steveonjava/javafx-2-and-scala-like-milk-and-cookies-33rd-degrees

602 :デフォルトの名無しさん:2012/11/27(火) 19:37:47.82
2.10って年内にリリースされますか?

603 :デフォルトの名無しさん:2012/11/27(火) 23:43:51.10
http://www.scala-lang.org/node/16606
Issues
In this release, we've fixed ~500 issues with ~800 (non-blocking) remaining.
まだバク報告増えていってるし難しそうだね。

604 :デフォルトの名無しさん:2012/11/28(水) 00:11:27.19
慎重にやっていって欲しいものだね。今のプロジェクト運営なら、さすがにScala 2.8 RC1のときのような事にはならんと思うけど…

Scala Days 2013(春頃)に合わせるくらいでちょうどいいんじゃないかなあ

605 :デフォルトの名無しさん:2012/12/02(日) 19:41:54.43
コレクションライブラリによく出てくる
型パラメータ「Repr」って何ていう単語の略ですか?

606 :デフォルトの名無しさん:2012/12/02(日) 20:22:54.36
Representation Type(表現型)の略。この辺参照:
http://eed3si9n.github.com/scala-collections-impl-doc-ja/collections-impl_2.html

607 :デフォルトの名無しさん:2012/12/03(月) 03:01:01.71
どうもありがとうございます。

608 :デフォルトの名無しさん:2012/12/12(水) 18:01:23.70
"hogehoge".contains("hoge")
こう書く代わりに
"hogehoge".contains(List("hoge"))
こう書いてしまったんですが、なぜかコンパイルエラーにならず、しかもfalseになったのですが?
Scalaさんの気持ちが解らないのですが、どういうことなんですか?

609 :デフォルトの名無しさん:2012/12/12(水) 18:19:14.67
https://github.com/scala/scala/blob/v2.9.2/src/library/scala/collection/SeqLike.scala#L401

610 :デフォルトの名無しさん:2012/12/12(水) 21:05:34.32
引数にAny取るんだな
Aでよくないかコレ?

611 :デフォルトの名無しさん:2012/12/14(金) 13:12:40.61
つい最近ちょうどソース見て同じ事思ったんだけど、それ Nightly だと
 def contains[A1 >: A](elem: A1): Boolean
になってる

なので、そのうちScalaさんの方が >> 608 の気持ちを解ってくれるようになるんじゃないかな
たぶん

612 :デフォルトの名無しさん:2012/12/14(金) 22:47:45.11
実行しようとおもってコマンド打ち込んでもエラーになる
よく見てみたら、saclac と打ち込んでた

ずっと「サクラ」だと思ってました

613 :デフォルトの名無しさん:2012/12/15(土) 07:49:36.22
さくらっく

614 :デフォルトの名無しさん:2012/12/17(月) 12:31:00.97
プログラム言語って、どれも、検索しづらい単語ばっかりで困る。
CとかGOとか。

それはさておき、Java6のjrunscript と scala を組み合わせて使っている人いる?

615 :デフォルトの名無しさん:2012/12/17(月) 12:33:53.66
>614
それだけじゃなくPHPが流行ってからCの検索がさらにやりにくくなった

616 :デフォルトの名無しさん:2012/12/27(木) 20:27:37.12
てす

617 :デフォルトの名無しさん:2012/12/27(木) 23:31:18.24
今さら言うのはなんだが、どのへんがスケーラブルなのかよく分からない

618 :デフォルトの名無しさん:2012/12/27(木) 23:42:22.91
twitterのような大規模システムも書けるし
ちょっとした使い捨てスクリプトも簡単に書ける

619 :デフォルトの名無しさん:2012/12/27(木) 23:51:55.63
スクリプトと大規模開発向けの言語のいいとこ取りしてるから使いこなすの難しそう

620 :デフォルトの名無しさん:2012/12/28(金) 05:03:29.17
pythonで充分だと思うの

621 :デフォルトの名無しさん:2012/12/28(金) 08:45:48.13
せめて型システムとパターンマッチは欲しい

622 :デフォルトの名無しさん:2012/12/29(土) 03:42:49.63
Scalaはまぁ好きな言語なのですが、普及するかというと正直いって否定的。

最大の理由はマルチパラダイムという点。Scalaはオブジェクト指向と関数型
の二つをパラダイムを融合させたマルチパラダイム言語ということになってい
ますが、これまでオブジェクト指向と論理型や、関数型と論理型などなどマル
チパラダイム言語は数多く提案されてきましたが、普及した言語は皆無。その
理由は簡単、多くのプログラマーは、ひとつのパラダイムでも使いこなせない
のが現実。そうなるとマルチパラダイム言語は身に付けないといけないパラダ
イムが複数あるわけで、使いこなせない。逆に言うと相当、優秀なプログラマー
でないと使いこなさないはず。Scalaが普及するとしたら、メニーコアプロセッ
サを前提に、関数型の特質をうまくつかって、副作用の少ない並行プログラミ
ングだと思います。というのは並行プログラミングも逐次プログラミングと比
べると格段に難易度が高いので、その難易度についていけるプログラマーなら
ばオブジェクト指向と関数型の二つをパラダイムを使いこなせるかも、という
のが理由。

こうかくとScalaに否定的に思われるかもしれませんが、普及する言語という
のは、できるプログラマーに好かれるだけでは十分ではなく、そうではないプ
ログラマーにも敷居の低いことは要件なんですよね。逆に言うと圏論や型推論
など、一般のプログラマーには難しい理論を要求する言語というのは普及は難
しいのではないでしょうかね。もちろん完全に隠し込めればいいのでしょうが、
コンパイルエラーやデバッグなどで顔を出す限りはなかなか難しい。というわ
けで頭の良い方々が推奨されるプログラミング言語については、その普及とい
う点では否定的に見ております。なお、アカデミアのプログラミング言語を専
門とする研究者(特に優秀な研究者)が設計した言語が大きく普及しないという
のも、この辺りに遠因があるのではないかと邪推しております。

623 :デフォルトの名無しさん:2012/12/29(土) 05:50:45.94
どっかで見た文章だな

624 :デフォルトの名無しさん:2012/12/29(土) 06:04:59.84
マルチパラダイムなC++が普及してるんだから即論破

625 :デフォルトの名無しさん:2012/12/29(土) 10:18:24.54
>>624
C++はパラダイムどころか設計思想をガン無視してもプログラミングできる
Cの資産もそのまま使えるので、普及の説得がしやすい

Scalaはパラダイムと設計思想を無視すると、ものすごく冗長になり、逆に難しくなる
Javaの資産が使えるという理由で普及させようとしたが、実はJava自体の互換性がCよりも低かったと言うオチ

626 :デフォルトの名無しさん:2012/12/29(土) 11:05:19.91
どう冗長になるのかコード例出せ

627 :デフォルトの名無しさん:2012/12/29(土) 11:09:30.95
>>626
Javaで書いてscalaで呼び出す

628 :デフォルトの名無しさん:2012/12/29(土) 11:12:39.17
パラダイムと設計思想を無視するとどう冗長になるのか聞いてる

629 :デフォルトの名無しさん:2012/12/29(土) 11:28:34.21
>>628
def hasA(s:String) = s.exists(_ == 'a')



def hasA(s:String):Boolean = {
for(i <- 0 until s.length) {
if(s(i) == 'a') return true
}
return false
}

630 :デフォルトの名無しさん:2012/12/29(土) 11:32:50.21
手続き型より関数型の方が簡単だと言いたかったんですね解ります

631 :デフォルトの名無しさん:2012/12/29(土) 11:36:42.67
>>630
関数型より手続き羅列の方が簡単だから、冗長になるにも関わらずわざわざ手続きをくどくど羅列する

632 :デフォルトの名無しさん:2012/12/29(土) 11:39:58.61
>>625に冗長になり逆に難しくなるって書いてあるけど

633 :デフォルトの名無しさん:2012/12/29(土) 11:40:32.02
>>629
def hasA(s:String, i:Int = 0):Boolean = {
if(i == s.length) return false
if(s(i) == 'a') return true
return hasA(s, i + 1)
}

634 :デフォルトの名無しさん:2012/12/29(土) 11:42:59.93
>>632
どっちが読みやすい?

635 :デフォルトの名無しさん:2012/12/29(土) 11:44:34.22
質問することによって逃げる

636 :デフォルトの名無しさん:2012/12/29(土) 11:44:34.99
床に水を置けと言われたら、床に水をぶちまけるのが一番簡単
床に置いた水を使えと言われたら、床にぶちまけられた水を使うのは難しい

637 :デフォルトの名無しさん:2012/12/29(土) 11:46:43.52
>>632
関数型より手続きを羅列する方が簡単だから、冗長になって難しくなるにも関わらず、わざわざ手続きをくどくど羅列する

638 :デフォルトの名無しさん:2012/12/29(土) 12:08:41.19
C言語でfor文繰り返しによる抽象化というパラダイムにありがたみを感じない人がコピペの方が簡単だからという理由でprintf文を100行羅列するみたいな

という理解でよろしいでしょうか

639 :デフォルトの名無しさん:2012/12/29(土) 12:24:28.77
ルフィが今更ギアと覇気を使わずに戦っているようなもの

640 :デフォルトの名無しさん:2012/12/29(土) 14:59:42.66
for文がjava非互換で機能上あるいはパフォーマンス上for使えず
while使うしか無い箇所の記述見ると無駄だと感じる
enumも用途次第ではjavaより冗長になることも

どっちもパラダイムとは違う話だが

641 :デフォルトの名無しさん:2012/12/29(土) 17:52:11.40
javaにパフョーマンス求めるなって

642 :デフォルトの名無しさん:2012/12/30(日) 12:19:20.30
javaに求められてるのはサーブレットAPIだけ
GUIですら大して使われていない

643 :デフォルトの名無しさん:2012/12/30(日) 12:41:32.78
>>641
http://d.hatena.ne.jp/satosystems/20121228/1356655565

言語(処理系)時間
Java (OpenJDK)0.732
C (gcc -O2)1.18
C++ (g++ -O2)1.18
Scala       1.896
--------------------------------
Java速ぇええ!

644 :デフォルトの名無しさん:2012/12/30(日) 12:46:27.92
>>643
再帰はプログラムそのものの実装方法とコンパイラのベンダー依存の最適化の影響をモロにうけるからベンチマークには向いていないと思う
もしやるとしても、実行時使用メモリの大きさを指定すべきだと思う

645 :デフォルトの名無しさん:2012/12/30(日) 12:52:37.62
「プログラムそのものの実装方法とコンパイラのベンダー依存の最適化の影響」を測定するベンチマークなんでしょ?

646 :デフォルトの名無しさん:2012/12/30(日) 13:18:09.19
>>645
プログラムそのものの実装方法とコンパイラのベンダー依存の最適化の影響を測定するなら、「同じ言語」でやらなきゃ

647 :デフォルトの名無しさん:2012/12/30(日) 13:24:08.32
JVMのパフォーマンスいらないならあえてJVM言語選ぶ理由の半分は無くなる
積和演算の塊みたいなことをJVM言語でやりはしないがパフォーマンスと機能の
バランス取れるからわざわざJavaバイトコードをターゲットにしてんだろ

648 :デフォルトの名無しさん:2012/12/30(日) 13:26:14.33
>>646
「プログラムそのものの実装方法とコンパイラのベンダー依存の最適化の影響をモロにうける」という主張を認めるなら、当然その影響を測定できることになる。
もちろん、>>644の主張を認めないという立場はあっていいと思う。

649 :デフォルトの名無しさん:2012/12/30(日) 13:38:18.51
>>648
具体的に言うと、例えば、再帰は、末尾最適化を言語仕様で定めてるモノと、ベンダーが勝手に実装してるモノがあるので、
フィボナッチみたいなベンチマークは畳み込みの実装が同一であるということが保証されているコードでないと何を比較しているのか分からない

下手するとプログラマのスキルの比較になってしまう

650 :デフォルトの名無しさん:2012/12/30(日) 13:58:28.24
>>643のリンク先コードは末尾再帰で書いてないから
末尾再帰最適化は関係なくね?

651 :デフォルトの名無しさん:2012/12/30(日) 14:02:08.92
>643 のScalaはコンパイル時間含めて計測されてるからはっきりいって無意味

652 :デフォルトの名無しさん:2012/12/30(日) 14:22:07.76
>>649
あなたの言っていることは、
「言語仕様で定めてるモノ」と、「ベンダーが勝手に実装してるモノ」を区別して測定する必要があるが、
この実験ではそれを区別できていない、ということかな。

そもそも、その2つを区別するための実験ではないので、勝手に藁人形を作って批判しているように見える。

653 :デフォルトの名無しさん:2012/12/30(日) 14:27:16.89
>>651
すべての場合で意味がないことを証明するのは難しい

やるべきことは
1)どういう性質があれば意味があって、どういう場合に意味がないのかを定義する
2)それに従い、意味がないことを証明する

ここでは1)が難しい
それは、あなたにとって意味がないだけでしょ?という意見に耐える必要がある

654 :デフォルトの名無しさん:2012/12/30(日) 14:59:03.90
>>650
末尾再帰が仕様の一部の言語もあるから、末尾再帰を使わないということは、その言語では実際に使われないような効率の悪い実装で比較することになる
だったら、再帰やfor文を使わずに、=と+だけの式を100行くらい並べて計測すべきということにならないだろうか

655 :デフォルトの名無しさん:2012/12/30(日) 15:19:16.88
>>652
まず、「フィボナッチ数を求める処理時間の計測」が目的と言っているが、やっていることは「フィボナッチ数を求める処理時間の計測」ではない
やってることは「フィボナッチ数を求める処理を空間効率の悪いアルゴリズムで実装したときの実行時間の計測」
しかも、ベンダごとにプログラマが意図しない最適化が存在することは、 -O2 オプションを確認していることから、本人も認めていると分かる
さらに、わざわざ空間効率の悪いアルゴリズムを選んだんだから、計測するのは実行時間ではなく、n=38の実行時間の比較ではなく、例えばn=38とn=50の実行時間の差の比較をすべきだと思う

656 :デフォルトの名無しさん:2012/12/30(日) 15:22:02.08
効率的なアルゴリズムを採用すれば、
n=100000でも1秒かかるまい

657 :デフォルトの名無しさん:2012/12/30(日) 15:37:00.08
「フィボナッチ数を求める処理を空間効率の悪いアルゴリズムで実装したときの実行時間の計測」を異なる言語間で比較したのだから、
この実験は「フィボナッチ数を求める処理を空間効率の悪いアルゴリズムで実装したときの実行時間の計測」を異なる言語間で比較できている。

アルゴリズムの効率という誰も主張していない論点を持ち出して批判するのは、存在しない藁人形を作り出して批判しているにすぎない。

658 :デフォルトの名無しさん:2012/12/30(日) 15:39:52.35
>>654
もちろん、言語仕様にある機能をふんだんに使って結果どうなるかを比較するための実験ならば、
末尾再帰が仕様の一部の言語で末尾再帰を使わないということは、その目的を達成できていない。

しかし、そもそも言語仕様にある機能をふんだんに使ってどうなるかを比較するための実験ではないので、
あなたは存在しない藁人形を作り出して批判している。

659 :デフォルトの名無しさん:2012/12/30(日) 15:53:47.74
>>653
他のコンパイル言語は実行時間のみで計測した数値なのに、Scalaだけscalacでコンパイルしたものを実行するのではなくscalaコマンドを使って実行した時間を並べている。
違う物を比べた結果を並べても「俺に取っては」無意味だ。そこに意味を見出す人がいてもいいが、考えが合わないな。

660 :デフォルトの名無しさん:2012/12/30(日) 16:02:09.88
>>659
それでも十分速いという、Scalaの実装のすばらしさを示した実験だと思ったけど
そう思わない人がいてもいいと思うよ

661 :デフォルトの名無しさん:2012/12/30(日) 16:11:22.78
他の言語もコンパイル時間込みでtimeで計ってるんじゃねーの?
わざわざ「gcc -O2 fib.c; ./a.out」みたいなコマンド載せてるんだし

662 :デフォルトの名無しさん:2012/12/30(日) 16:19:51.54
> さて、ぶっちぎりで速いのが Scheme48 のコンパイルバージョン。なんと 0.004sec。
> ただこれはタネがあって、コンパイル時に関数を評価してフィボナッチ数を算出しているためです。
> したがって、コンパイルがインタプリタで実行するのと同程度の時間がかかります。
とあるので、コンパイル時間は含まれてないようだ

663 :デフォルトの名無しさん:2012/12/30(日) 16:35:52.05
>>658
問題は、
・コンパイラが「勝手に」言語仕様に「ない」機能をふんだんに使って最適化する可能性があるということ
・言語によっては、言語仕様が推奨する実装方法を避けている(現実にやらない実装をしている)のに、「フィボナッチ数を求める処理時間を計測してみました」と主張していること
・計算空間を広げることを意図した実装なのに、n=38という小さい数だけの実行時間を比較していること

664 :デフォルトの名無しさん:2012/12/30(日) 16:40:38.51
>>659
素朴な疑問だが、scalacでコンパイラしたモノって、同じ処理をする.javaファイルをjavacでコンパイラしたモノと異なるのだろうか

665 :デフォルトの名無しさん:2012/12/30(日) 17:06:40.37
>>663
> ・コンパイラが「勝手に」言語仕様に「ない」機能をふんだんに使って最適化する可能性があるということ
可能性があるから、だから何なのか?


> ・言語によっては、言語仕様が推奨する実装方法を避けている(現実にやらない実装をしている)のに、「フィボナッチ数を求める処理時間を計測してみました」と主張していること
「フィボナッチ数を求めるアルゴリズムはいろいろありますが、今回は以下の再帰で求めるアルゴリズムで統一しました。」と、ある基準で統一していることを明示している。
この基準において測定し比較するという実験デザインは、完結している。

言語仕様が推奨する実装方法で実験をしたければ、やればいい。
今回の実験とは無関係だ。
あなたは、無関係な論点を作り出して批判しているだけだ。


> ・計算空間を広げることを意図した実装なのに、n=38という小さい数だけの実行時間を比較していること
もちろん完全無欠の実験など存在しない。
追加の実験をしたければ好きにすればいい。

また、n=38が小さいとは思わない。
例えば、10分以上かかったものも存在するし、実行できなかった環境もある。
もっと小さな数字でも試すべきだった。

しかし、n=38だけを測定したからといって、この実験の価値やおもしろさが損なわれているわけではない。

666 :デフォルトの名無しさん:2012/12/30(日) 17:29:28.20
Scalaが遅いベンチマークは無意味なベンチマーク

667 :デフォルトの名無しさん:2012/12/30(日) 17:40:45.04
実行速度だけでペイできるような仕事なんか世の中にはないだろ
キンキンにチューニングして最速謳ってても環境の変化に対応できなければお客は離れていっちゃうよ
だからぼくらには"Scalability"に対応できる言語が必要なんだ

そうScalaならね

668 :デフォルトの名無しさん:2012/12/30(日) 17:49:56.63
ただJavaでの記述に改めるだけで速度が2倍になるとは素晴らしいな。

669 :デフォルトの名無しさん:2012/12/30(日) 18:16:38.28
>>665
「フィボナッチ数を求めるアルゴリズムはいろいろありますが、今回は以下の再帰で求めるアルゴリズムで統一しました。」言っているが、
「特に再帰を利用したプログラムは」コンパイラが「勝手に」言語仕様に「ない」機能をふんだんに使って最適化する可能性があるので、アルゴリズムを統一するだけでは不十分
言語仕様にない最適化をオフにして、各言語各ステップの対応が1対1であることを保証しなければならない
(同じ言語だけを用いて、コンパイラごとオプションごとの最適化の違いを比較したと主張するなら、この実験はこのままでも意味がある)

n=38は数が小さいからおかしいのではなく、n=38という小さい数「だけ」で比較したから意味がない
実行時コンパイル時か実行時のメモリサイズ指定の有無でまったく別の結果になるから
メモリ指定をガン無視してるんだから、わざわざメモリをたくさん消費してそれが決定的に計算能力に影響するアルゴリズムを用いるべきではない
(2つの入力の結果の差同士を比較するなら、メモリ消費の効率を比較したと言えなくもない)

670 :デフォルトの名無しさん:2012/12/30(日) 18:26:54.71
n=38だろ?そんなにメモリ使うか?

671 :デフォルトの名無しさん:2012/12/30(日) 18:41:36.85
>>670
再帰するときに参照・値だけスタックする言語と、サンクみたいに計算をスタックする言語と、環境の大部分をスタックに積み上げてく言語がある
後者は再帰でメモリをバカ食いする

672 :デフォルトの名無しさん:2012/12/30(日) 18:54:45.39
スタックを巻き戻すときに解放されるメモリを再利用しないの?

673 :デフォルトの名無しさん:2012/12/30(日) 19:32:27.48
ポップした後に空いた領域を利用可能にするのは結構コストがかかる

674 :デフォルトの名無しさん:2012/12/30(日) 19:41:10.63
C, C++, Java, Objective-C, Haskell, OCaml, Go, C#, D, Ada, Pascal
よりもScalaは遅いんだね

675 :デフォルトの名無しさん:2012/12/30(日) 19:57:46.95
Javaより2倍遅いということは、メソッドそのものではなく、メソッドの呼び出しごとにスケルトンを作ってるということだろうか

676 :デフォルトの名無しさん:2012/12/30(日) 20:07:10.12
1秒程度の実行時間で1回の測定なので、細かいことを言うのは不適切
実行時間のオーダーが違うのを見てフーンと言う程度にしておくのがいい

677 :デフォルトの名無しさん:2012/12/30(日) 20:37:09.93
>>675
バイトコード見るとJavaはif分岐にScalaはテーブルジャンプになってるけど、
どっちもごく普通のコードに落ちてる

scala.Predefの初期化とinvokevirtualの呼び出しコストだな

678 :デフォルトの名無しさん:2012/12/30(日) 20:57:58.52
>>669
"「特に再帰を利用したプログラムは」コンパイラが「勝手に」言語仕様に「ない」機能をふんだんに使って最適化する可能性"を比較できている
だから、"「特に再帰を利用したプログラムは」コンパイラが「勝手に」言語仕様に「ない」機能をふんだんに使って最適化する可能性"を比較する実験としては正しい

あなたの頭の中にある目的を達成できていないのは理解した。
その目的を無関係な実験に押し付けるのは間違い。

679 :デフォルトの名無しさん:2012/12/30(日) 21:18:12.17
>>678
確認したいんだけど、それは言語や言語仕様の比較じゃなくてコンパイラの比較だよね?

>>643 はいろんな言語の複数のコンパイラの結果を一つにまとめた表が真ん中にあるからおかしい
コンパイラごとの結果を言語の数だけ用意した後半だけを用いて言語ごとに議論すべき

680 :デフォルトの名無しさん:2012/12/30(日) 21:39:42.90
>>679
「それ」がなにを指しているのかよくわからないけど
>>643 は載っているコードを色々な環境で実行させたときの実行時間を比較している。


>>643 の実験の特徴は、具体的な目的を設定せずに、こういうことをしたらこうなりましたという結果だけを列挙している。
「言語や言語仕様の比較」や「コンパイラの比較」のような難しい目的を設定していない。

おそらくやっている人が優秀なので、これらの難しい目的を設定してしまうと、「XがYだから」目的を達成できていないという批判があると理解しているためだろう。
目的を設定せず結果だけを列挙するならば、「XがYだから」目的を達成できていないという批判に対して、そもそもそんな目的は存在せず、単に「XがYである」ことを含んだ実験なんだと反論すれば十分だから。

例えば、再帰を利用したプログラムはコンパイラが勝手に言語仕様にない機能をふんだんに使って最適化する可能性があるから実験は不十分だという批判に対して、
再帰を利用したプログラムはコンパイラが勝手に言語仕様にない機能をふんだんに使って最適化する可能性を含んだ実験だよ、と反論できる。

681 :デフォルトの名無しさん:2012/12/30(日) 22:01:41.85
scalacで測らないと実験全体としては意味ないよなあ
あとは、scala 2.7.7って古っとかツッコんで終わりだと思うんだが
何故謎の論点でこんなスレ進むんだろ

682 :デフォルトの名無しさん:2012/12/30(日) 22:12:38.69
>>680

>>643
言語(処理系)時間
Java (OpenJDK)0.732
C (gcc -O2)1.18
C++ (g++ -O2)1.18
Scala       1.896
--------------------------------
Java速ぇええ!
            
↑ この主張からは、「載っているコードを色々な環境で実行させたときの実行時間を比較している」という主張は導出されない

仮に↓のページを作った人が「載っているコードを色々な環境で実行させたときの実行時間を比較している」ことを意図しているとしたら、
http://d.hatena.ne.jp/satosystems/20121228/1356655565
のいちばんはじめの
「AWK、Ada、Bash、Boo、C、C#、C++、Clojure、D、Erlang、Forth、Fortran、Go、Groovy、
Haskell、Io、Java、JavaScript、Lisp、Lua、OCaml、Objective-C、PHP、Pascal、Perl、Pike、
Prolog、Python、R、Ruby、Scala、Scheme、Smalltalk、Tcl でフィボナッチ数を求める処理時間を計測してみました。」
という文は間違い

683 :デフォルトの名無しさん:2012/12/30(日) 22:19:27.05
なぜこんなことをクドクドここに書かなければならないかと言うと、仕事でクライアントが言語押ししてくるときに明らかに2chのスレをソースのひとつにしたと思われることが何度かあったから
特にベンチマーク系は逐一クドクドと間違いの指摘を残しておかなければらならない

684 :デフォルトの名無しさん:2012/12/30(日) 22:32:58.50
具体的な目的を設定してない実験に対して、目的を仮定した批判は的外れ、というのはくりかえしておく価値はあると思う。
論理構造を理解できていないことが原因。

なぜこんなことをクドクドここに書かなければならないかと言うと、文章の論理構造を理解できていない人と会話はうんちゃらかんちゃら

685 :デフォルトの名無しさん:2012/12/30(日) 22:34:07.52
>>681
単純なプログラムなので2.7.7程度のバージョンなら差はないと思う
素直なバイトコードになると思う

686 :デフォルトの名無しさん:2012/12/30(日) 22:45:53.10
>>685
無目的だとしても、
http://d.hatena.ne.jp/satosystems/20121228/1356655565
で実際に記述される実験内容から、序盤に書いてある
「AWK、Ada、Bash、Boo、C、C#、C++、Clojure、D、Erlang、Forth、Fortran、Go、Groovy、
Haskell、Io、Java、JavaScript、Lisp、Lua、OCaml、Objective-C、PHP、Pascal、Perl、Pike、
Prolog、Python、R、Ruby、Scala、Scheme、Smalltalk、Tcl でフィボナッチ数を求める処理時間を計測してみました。」
という文と
このページのデータをもとにした>>643 の「Java速ぇええ! 」という結論は間違い

687 :デフォルトの名無しさん:2012/12/30(日) 23:14:50.87
Scalaが遅いという結果は全部間違い
これ覚えておくように

688 :デフォルトの名無しさん:2012/12/31(月) 01:33:58.62
scalac版も記載されたよ。良かったね
それでもクソ遅いけどww

689 :デフォルトの名無しさん:2012/12/31(月) 05:26:22.93
>>680
このベンチマーク設定した人が優秀かはともかく私情入りすぎてるとは思う
特定の言語群だけくさすコメントが入ってたり、Schemeは思いいれがあるからたくさん結果載せてたり
「具体的な目標を設定してない」のかどうか。

690 :デフォルトの名無しさん:2012/12/31(月) 05:31:26.09
あとさ、「もし Scala が Java より速かったら、「おおっ、Java の文法的制約を超越してバイトコードのポテンシャルを 100% 引き出しているっ」」
とか、「最適化でこんなに早くなって…」とかコメントが全体的にお粗末だわ。初心者が色々な言語でべんちまーくしてみました、だったら
わかるんだけど、処理系実装に詳しい人とはとても思えん、っつうのが正直な感想

691 :デフォルトの名無しさん:2012/12/31(月) 05:52:22.05
そもそもマイクロベンチマークを
言語の速度の近似だとみなす事に
無理があるわけで

692 :デフォルトの名無しさん:2012/12/31(月) 06:25:50.57
http://d.hatena.ne.jp/satosystems/20121228/1356655565#c1356894304
>生成されたバイトコードをみる限り、足引っ張りそうなのはinvokevirtualくらいで、しかも、これだけ同じメソッド
>呼び出しが多発すれば脱仮想化が働くと考えられるので、差がついた部分は
>scala-library.jar(Scala標準ライブラリのjarファイル)のロード時間部分ではないかと
>思います。
>裏付けをとるために、n=38ではなくn=40にしてみたところ、ほぼ予想どおりの結果が出ました。
scala-library.jar読み込み時間の差は固定値で実運用時にはどうでもいいんだから
実際はJavaとほぼ同じ性能だと見なしてよさそうだな

693 :デフォルトの名無しさん:2012/12/31(月) 10:26:12.92
起動が遅過ぎて小物作成に向かないってのは
もう周知の事実だから、いまさらだな

694 :デフォルトの名無しさん:2012/12/31(月) 12:14:29.78
>>692
実際がフィボナッチの計算程度しかしないなら、その通りだね

695 :デフォルトの名無しさん:2012/12/31(月) 12:19:24.08
>>691
そもそも言語の速度という概念の測定は難しいし、おそらく不可能
だからこそ適当なベンチマークで妥協することが重要
スパコンのTOP500ですら連立方程式を解く性能で比較している

696 :デフォルトの名無しさん:2012/12/31(月) 13:34:33.79
再帰やるならフィボナッチ数じゃなくて、状態探索を例題にすべきではなかろうか

697 :デフォルトの名無しさん:2012/12/31(月) 13:56:24.59
play2.1さっさと出せや!

698 :デフォルトの名無しさん:2012/12/31(月) 19:45:35.19
>>695
論旨は理解しているつもりだが、
測定が難しい事がトイプログムを正当化する理由にはならないだろう
フィボナッチのどこが適当な妥協なのよって事

少なくとも複数のプログラムを採用してベンチマークスイートを構成するべきだし
できることなら現実に用いられる比較的大きいプログラムが望ましい
SPEC CPUのような代表的なベンチマークは実際そうやっている

HPC分野はまったく知らんが、少なくともLINPACKがスパコン性能の全てだと
思ってる技術者はいないだろう

699 :デフォルトの名無しさん:2013/01/03(木) 13:19:26.72
ちょっと誰かsbt + IDEAで幸せにテストがステップ実行出来る環境の作り方教えてよ

700 :デフォルトの名無しさん:2013/01/03(木) 16:57:29.88
むしろJVMのデバッガ使った方がよくないだろうか

701 :デフォルトの名無しさん:2013/01/03(木) 23:33:17.02
>>700
なにそれ?

702 :デフォルトの名無しさん:2013/01/04(金) 08:41:10.21
jdbのことか
scalaでコンパイルしても使えるのだろうか

703 :デフォルトの名無しさん:2013/01/04(金) 14:05:50.00
squerylで、主キーに一致するデータがなければinsert、既にあればupdateになる処理は
どうやって書いたらいいですか?

704 :703:2013/01/04(金) 14:10:55.36
自己解決しました
insertOrUpdateっていうそのまんまのメソッドがありました

705 :デフォルトの名無しさん:2013/01/06(日) 01:50:53.79
Scala 2.10.0 now available!

706 :デフォルトの名無しさん:2013/01/06(日) 10:17:49.35
>>705
> Scala 2.10.0 now available!

何が変わった?

707 :デフォルトの名無しさん:2013/01/06(日) 12:27:38.73
http://www.scala-lang.org/node/27499

708 :デフォルトの名無しさん:2013/01/06(日) 17:34:14.47
値型はマジうれしい!!

709 :デフォルトの名無しさん:2013/01/06(日) 17:37:38.55
新機能の解説の翻訳。
http://docs.scala-lang.org/ja/overviews/index.html

710 :デフォルトの名無しさん:2013/01/06(日) 20:23:31.04
2,10で追加された投射って何?

711 :デフォルトの名無しさん:2013/01/07(月) 08:04:41.17
DBpress

今月号のWEB+DB PRESSとかいう雑誌にて
Scalaがチラリと紹介されているけど
そこで
Scalaは for文は遅いのでwhile文にしないと遅いとかいう例が載っていた。

(実際は、for文でなく、 (1 until 100).〜 みたいな繰り返しとwhile文に書き換えたの比較)

そういうのって、どうにかならないのかな。

712 :デフォルトの名無しさん:2013/01/07(月) 09:06:48.83
さてみなさん仕事ですよ
Scalaじゃんじゃん書いてください

713 :デフォルトの名無しさん:2013/01/07(月) 19:51:01.99
誰かandroid向けのscala REPL環境を作ってくれませんか?

JSとかPython、schemeだとあるのに何でないのか不思議

714 :デフォルトの名無しさん:2013/01/07(月) 22:40:57.24
>>709
解説を翻訳する機能が追加されたのかと思った

715 :デフォルトの名無しさん:2013/01/07(月) 23:49:02.91
>>711
記事みてないけどその議論は1年以上前に通り過ぎた道
scalac内部とか、一部のほんとにチューンしなきゃまずいコードだとwhile使うのはありだが
それ以外でwhile使ったって性能向上の度合いは知れてる。それでも我慢できないなら、Scala 2.10のマクロ
使ってwhlieに展開するマクロ書いてもいいけど

716 :デフォルトの名無しさん:2013/01/08(火) 00:29:18.05
javaのリフレクションのラッパー
http://www.ne.jp/asahi/hishidama/home/tech/scala/reflect.html
今回のやつ
http://hexx.github.com/pshow-scala-reflection/out/#0

717 :デフォルトの名無しさん:2013/01/09(水) 20:45:07.23
コレクションライブラリの格操作の計算量一覧ありませんか?

718 :デフォルトの名無しさん:2013/01/09(水) 21:49:31.40
ソース見るしか…

719 :デフォルトの名無しさん:2013/01/10(木) 04:16:04.85
>>717
http://docs.scala-lang.org/ja/overviews/collections/performance-characteristics.html

こういう公式ドキュメント、eugene yokotaさんが精力的に翻訳して、本家にも取り込まれてるのにあまり知られていない
という悲しい事実。docs.scala-lang.org/ はみといて損はないよ

720 :デフォルトの名無しさん:2013/01/10(木) 05:28:18.13
Vectorっていまいち影薄いよな

721 :デフォルトの名無しさん:2013/01/12(土) 03:30:13.45
ケースクラスを継承して、別のケースクラスを定義する事って何故ダメなんですか?

722 :デフォルトの名無しさん:2013/01/13(日) 00:34:00.53
>>719
docs.scala-lang.org の最近の充実ぶりは凄い。

723 :デフォルトの名無しさん:2013/01/15(火) 02:55:18.60
非JVMな処理系が無いのはナンセンスだからなんでしょうか

724 :デフォルトの名無しさん:2013/01/15(火) 22:04:50.11
>>723
JVMというより、JavaのAPIが使えるかどうかだと思う

725 :デフォルトの名無しさん:2013/01/15(火) 22:43:50.51
JVMで動かすのでもない限りオダスキが型推論弱い言語作る意味無い

726 :デフォルトの名無しさん:2013/01/16(水) 03:43:14.24
型推論はわざと弱めてあるんじゃなかったっけ?
強力すぎる型推論はエラーメッセージがよく分かんなくなったりするから
理論と実用の妥協点なのかなあと思ってた

727 :デフォルトの名無しさん:2013/01/18(金) 11:12:07.42
思ってたね

728 :デフォルトの名無しさん:2013/01/19(土) 02:34:49.70
>>726
ほんとのところはOderskyセンセに聞かないとわからないけど、多相型をサポートした
オブジェクトシステムを持った言語の完全ないしは完全に近い型推論は難しい(Principal
Typeがないので)。

729 :デフォルトの名無しさん:2013/01/19(土) 02:37:33.96
Oderskyセンセの結構前からのテーマは、オブジェクト指向と関数型の融合で、彼は
Hindly-Milner型推論関連の研究もやってたことあるし、その辺の微妙な難しさは
よく知ってるはず。Scalaに関してはもう少し強くできるだろうけど、中途半端に型推論
強くても挙動が予測しづらくてあんましいいことないから、意図的に弱くした部分はあるだろうね。
理論的に無理な部分もあるだろうけど

730 :デフォルトの名無しさん:2013/01/19(土) 08:51:02.01
ocamlの型推論もオブジェクト絡むと少し残念だしね

731 :デフォルトの名無しさん:2013/01/19(土) 23:17:11.71
subtyping considered harmful

732 :デフォルトの名無しさん:2013/01/21(月) 22:49:28.68
Java最新版に新たな脆弱性情報
www.itmedia.co.jp/enterprise/articles/1301/21/news022.html
# 米Oracleが脆弱性を修正したばかりの「Java 7 Update 11」に、新たな2件の脆弱性が報告された。

Scala終わったな…

733 :デフォルトの名無しさん:2013/01/21(月) 23:16:37.84
ただユーザ数が多いからバグ見つけた人が隠しておけないだけだと思う
ユーザ数が少なければ、黙って穴を使い続けるだけ

734 :デフォルトの名無しさん:2013/01/21(月) 23:29:41.08
Javaっつーか、Sandboxの脆弱性じゃないの?
Scalaの主戦場であるサーバサイドにはあんまり関係ない話だという理解。

735 :デフォルトの名無しさん:2013/01/22(火) 00:47:33.97
この流れどっかでデジャヴ?

736 :デフォルトの名無しさん:2013/01/22(火) 16:24:57.87
>>732-734
clojureスレにもいたな

737 :デフォルトの名無しさん:2013/01/25(金) 09:09:31.74
なんもかんもscaladocが日本語化されないのが悪いw

738 :デフォルトの名無しさん:2013/01/26(土) 21:50:49.30
Java 7のjavadoc日本語化は見送られましたが何か?
scalaの場合単純にマンパワー足りない部分あるだろうけど
なんもかんも日本語で本家並のドキュメントほしいってのは
どんどん通用しなくなってくとオモウヨ

739 :デフォルトの名無しさん:2013/01/26(土) 21:56:49.64
付け加えると、もう今の時代、英語は書けなくても英語の技術文書や
マニュアルくらいふつーに読めないと色々どーにもならん時期になってると思う。いい悪いじゃなくて、日本人でもgithubでそれなりのものツクッテル人たちとか英語マニュアルまず優先だし

740 :デフォルトの名無しさん:2013/01/26(土) 22:02:29.95
え、なんでこの人ネタにマジレスしてんの

741 :デフォルトの名無しさん:2013/01/27(日) 14:08:40.96
Marry: What are some of the reasons for your successful career?
Toshio: Mainly, I ________ ________ ________ ________ ________ my uncle.
 He was the one who would always help me when I was in trouble.

1) am
2) I
3) owe
4) to
5) what

742 :デフォルトの名無しさん:2013/01/27(日) 20:12:45.83
マニュアルの英語もおかしいと思う

743 :デフォルトの名無しさん:2013/02/02(土) 07:06:48.29
誰かScala2.10.0でScalaFX動かせた人いますか?

mercurialでsbtで2.10.0向けにビルドしました。
Eclipseからjfxrt.jarとビルドしたscalafx-core_2.10-1.0-SNAPSHOT.jar(scalafx.jarとリネーム)を外部jarとして指定して、
HelloScalaFX.scalaを実行しようとしたんですが、java.lang.IllegalArgumentExceptionがCss2Bin.javaの44行目で出てしまいます。
sbtからscalafx-demosをrunした時には動きました。

誰かわかる人がいたら教えてください。

744 :デフォルトの名無しさん:2013/02/02(土) 19:17:52.81
http://stackoverflow.com/questions/13584356/javafx-starting-in-eclipse-helios-error

745 :743:2013/02/02(土) 20:11:23.73
>>744
ありがとうございます。無事動作しました

746 :デフォルトの名無しさん:2013/02/02(土) 21:09:58.30
http://www.scalaconf.jp/ja/program/index.html
3/2(日)大岡山にtypesafeの中の人たちが来るんだね。

747 :デフォルトの名無しさん:2013/02/02(土) 21:29:53.93
3/2は土曜です〜

748 :デフォルトの名無しさん:2013/02/03(日) 11:56:35.23
3/3はハッカソンになるのか

749 :デフォルトの名無しさん:2013/02/03(日) 22:57:56.04
scalaはIO周りがクソなのは直った?今のところ何使うのでFA?

750 :デフォルトの名無しさん:2013/02/03(日) 23:00:43.26
IOのどこら辺が不満?

751 :デフォルトの名無しさん:2013/02/04(月) 01:34:02.60
http://itpro.nikkeibp.co.jp/article/COLUMN/20130112/449223/?ST=system&P=1

少数精鋭の開発メンバーで、短期間に新しい検索サービスを始められた」。特許情報などの無料検索サービスで200万人以上の会員を抱えるアスタミューゼ。
同社でサービス開発を統括する三木隆史プラットフォーム事業部部長は、こう語る。スピードの秘密は、開発言語選びにあった。

 同社が採用したのは、業務系システムの開発で主流になっているJavaでも、Webシステムで人気を博すRubyやPythonでもない。
「関数型プログラミング言語」と呼ばれるオープンソースの開発言語の一つ、「Scala(スカラ)」だ。

752 :デフォルトの名無しさん:2013/02/04(月) 02:17:23.81
>>749
scala.ioパッケージは糞なのは同意。この辺含むレガシーな部分は
Scala 2.11辺りでpaulpさんが大鉈振るってばっさりやる。
次善としては、scala-ioかな。Scala標準のちゃんとしたIOライブラリは…
Typesafeも何もしてないわけじゃないくらいしか今は言えない。その内
発表あるかもしれんので 待つしか

>>746,747
本家の人が来日する貴重な機会なので、不満ぶつけたい人も、ぜひぜひ

753 :デフォルトの名無しさん:2013/02/04(月) 17:17:40.17
Windows番のMSIインストーラーとZIPの違いってなんですか?
ZIPのほうがサイズが小さいんですが
どっちを使ったほうが良いんでしょうか?

754 :デフォルトの名無しさん:2013/02/04(月) 22:44:18.85
インストーラの方はサイズでかいし展開遅いしでいいとこないから
zip解凍して適当な場所に置いてPATH通せばおk

755 :デフォルトの名無しさん:2013/02/04(月) 22:44:37.52
msiインストーラーは勝手に環境変数を書き換えられそうで怖い

756 :デフォルトの名無しさん:2013/02/04(月) 23:09:36.09
どっち使えばいいか分からんなら
とりあえずインストーラ使っとけばいいと思う

757 :デフォルトの名無しさん:2013/02/04(月) 23:14:53.77
zipで入れる経験が1回でもあればUSBメモリで別のマシンにscala持ち出せる

758 :749:2013/02/05(火) 09:07:41.16
play2.1まだか

759 :デフォルトの名無しさん:2013/02/06(水) 00:04:02.44
【トレンド】開発言語にJavaはもう古い!次の主流は「関数型」言語★2
http://uni.2ch.net/test/read.cgi/newsplus/1360017468/

760 :デフォルトの名無しさん:2013/02/06(水) 00:08:40.72
インストールできました
ありがとうございます

761 :デフォルトの名無しさん:2013/02/06(水) 12:28:50.75
scalac Test.scala & echo %errorlevel%

ってやってコンパイルに成功しようがしまいが常にエラーレベルが0なんですが
https://github.com/scala/scala/pull/54
https://issues.scala-lang.org/browse/SI-5295?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
これって修正されてるんですか?

762 :デフォルトの名無しさん:2013/02/06(水) 13:22:55.72
助けてくださいクラスの書き方についてお願いします
Scala 2.10.0

class Test{
def a() = println("aaa")
}
これでscala Test.scalaってやってもエラーは出ないんですが
scala Testをやると
java.lang.NoSuchMethodException: Test.main([Ljava.lang.String;)
at java.lang.Class.getMethod(Unknown Source)
at scala.tools.nsc.util.ScalaClassLoader$class.run(ScalaClassLoader.scal
a:67)
at scala.tools.nsc.util.ScalaClassLoader$URLClassLoader.run(ScalaClassLo
ader.scala:139)
at scala.tools.nsc.CommonRunner$class.run(ObjectRunner.scala:28)
at scala.tools.nsc.ObjectRunner$.run(ObjectRunner.scala:45)
at scala.tools.nsc.CommonRunner$class.runAndCatch(ObjectRunner.scala:35)

at scala.tools.nsc.ObjectRunner$.runAndCatch(ObjectRunner.scala:45)
at scala.tools.nsc.MainGenericRunner.runTarget$1(MainGenericRunner.scala
:74)
at scala.tools.nsc.MainGenericRunner.process(MainGenericRunner.scala:96)

at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:105)
at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)
ってエラーがでます
object Test{def main(args: Array[String]{println("aaaa")}}のほうはエラーは出ません
クラスで書くとエラーが出ます

763 :デフォルトの名無しさん:2013/02/06(水) 13:23:45.81
レスの中のscala Test.scalaは
scalac Test.scalaのタイポです

764 :デフォルトの名無しさん:2013/02/06(水) 20:12:38.12
>>762
mainメソッドを定義してないクラスは実行できないよ。

765 :デフォルトの名無しさん:2013/02/06(水) 20:31:05.32
Play Framework 2.1.0 Finalキタ━━━(゚∀゚)━━━!!

766 :デフォルトの名無しさん:2013/02/06(水) 21:24:09.41
>>764
このように修正してみましたがエラーが出ます
何が原因なんでしょうか?

class Test {
def main(args: Array[String]) {
println("main")
}
}

java.lang.NoSuchMethodException: Test.main is not static
at scala.tools.nsc.util.ScalaClassLoader$class.run(ScalaClassLoader.scal
a:69)
at scala.tools.nsc.util.ScalaClassLoader$URLClassLoader.run(ScalaClassLo
ader.scala:139)
at scala.tools.nsc.CommonRunner$class.run(ObjectRunner.scala:28)
at scala.tools.nsc.ObjectRunner$.run(ObjectRunner.scala:45)
at scala.tools.nsc.CommonRunner$class.runAndCatch(ObjectRunner.scala:35)

at scala.tools.nsc.ObjectRunner$.runAndCatch(ObjectRunner.scala:45)
at scala.tools.nsc.MainGenericRunner.runTarget$1(MainGenericRunner.scala
:74)
at scala.tools.nsc.MainGenericRunner.process(MainGenericRunner.scala:96)

at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:105)
at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)

767 :デフォルトの名無しさん:2013/02/06(水) 21:27:08.26
公式のドキュメントに乗ってるコードサンプルにもmainメソッドは書いてないのですが
2.10で仕様が変わったって事ですか?

768 :デフォルトの名無しさん:2013/02/06(水) 21:28:36.35
そういうもん
そもそもなんでclassにしたいのさ?

769 :デフォルトの名無しさん:2013/02/06(水) 21:29:46.51
classをobjectにするんだ

770 :デフォルトの名無しさん:2013/02/06(水) 21:30:21.79
>>766
java でも public static void main(String[]) だし object Test で

771 :デフォルトの名無しさん:2013/02/06(水) 21:34:44.65
勉強のためclassで書いたコードを動かしたいんです
objectのほうだとエラーは出ないんですがclassのほうでつまずいています

772 :デフォルトの名無しさん:2013/02/06(水) 21:36:34.14
言ってる意味が全く分からないんだが
objectだと勉強にはならないの?

773 :デフォルトの名無しさん:2013/02/06(水) 21:38:02.96
objectは書いて動かせるところまで確認できたのでいいのです
classを使って動かせるところが確認したいだけなんです

774 :デフォルトの名無しさん:2013/02/06(水) 21:38:51.29
>>773
objectしかmainの起動はできない。
まずここ理解して。
objectのmainからclassを呼ぶコード書け。

775 :デフォルトの名無しさん:2013/02/06(水) 22:05:46.30
何故か分かりませんがREPLから
class Test{
def a() = println("test")
}
var test = new Test
test.a()
って書くと正常に実行できるようなんですが、ファイルに保存してコンパイル後に実行する方式だとエラーが起きるようです
このへんよくわかりません

776 :デフォルトの名無しさん:2013/02/06(水) 22:08:29.61
そもそも、そのコードの奴それ実行したって言わないから

777 :デフォルトの名無しさん:2013/02/06(水) 22:14:02.90
>>775
REPLで実行してる内容は
objectのmainの中に書いてるモノと思えばいいよ。
本当に理解する気があるのか文句言いたいだけなのか分からなくなってきたけど。

778 :デフォルトの名無しさん:2013/02/06(水) 22:20:01.80
本当scalaのドキュメントはクソだな

779 :デフォルトの名無しさん:2013/02/06(水) 22:29:24.67
公式の「A Brief Scala Tutorial」見ると1ページ目にHelloWorldが載ってるんだが・・・

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

REPLはあくまでお試し版みたいなものだから、コンパイルして実行する場合とは色々差異がある。

もしJavaやったことがないか経験が浅いなら、悪いことは言わないからコップ本買ったほうがいい。
Javaをそれなりにやってれば、ひたすらググるだけでもとりあえず組めるようになる
が、個人的にはやっぱりコップ本おすすめ(経験談)
ネットだけだと体系的に解説してくれるようなサイトは今のところ無いよな。

780 :デフォルトの名無しさん:2013/02/06(水) 22:31:25.12
sage消えとる・・・すまん。吊ってくる

781 :デフォルトの名無しさん:2013/02/06(水) 22:34:26.98
質問者はobjectのほうは問題ないって書いてあるのに何故そのサンプルを?

782 :デフォルトの名無しさん:2013/02/06(水) 22:53:45.81
こうやって書いて実行できました
ようはobjectとclassについて勉強になりましたありがとうございました
class Test
{
def a(n: Int): Int = n * 2
}

object Test
{
def main(args: Array[String])
{
var test = new Test
println(test.a(5))
}
}

783 :デフォルトの名無しさん:2013/02/06(水) 23:17:39.80
小学生もScalaを勉強する時代なんだな。

784 :デフォルトの名無しさん:2013/02/07(木) 00:24:16.97
まあそんな煽らんでも

785 :デフォルトの名無しさん:2013/02/07(木) 14:24:07.55
classやobjectは入れ子にもできるよ。
object Test {
class Test {
def a(n : Int) : Int = n * 2
}
def main (args : Array[String]) {
val test = new Test()
println(test.a(5))
}
}

でも同じ感じで動く。

786 :デフォルトの名無しさん:2013/02/07(木) 14:25:51.66
def 関数名(引数リスト):返り値型 = {定義}
イコールを忘れるなよ

787 :デフォルトの名無しさん:2013/02/07(木) 15:03:43.74
お願いします

val n = 1 //特に意味のない変数
n match {
case 2 > 1 => println("1") // 2>1のように比較するとエラー
case x: 10 => println(x) // 評価する部分で変数に代入して結果を出力したいけどエラー
}

788 :デフォルトの名無しさん:2013/02/07(木) 15:42:17.04
エラーメッセージが読めなきゃどうにもならんね

789 :デフォルトの名無しさん:2013/02/07(木) 15:45:07.83
それは言い過ぎ

790 :デフォルトの名無しさん:2013/02/07(木) 15:58:37.31
>>787
val n = 1
n match {
 case m if 2 > m => println("1")
 case x => println(x)
}
こういうことがやりたいのか?
下のx: 10は何がしたいのか全く分からん

791 :デフォルトの名無しさん:2013/02/07(木) 18:08:35.61
scalaって何でこんなに楽しいの!!!!
PHPしか出来ないんだけどscalaがこんなに楽しいなんて分かりませんでした
scalaに来たのはHaskellに挫折したからなんですが
javaもやった事ないからよくわかんないけどhttp://www.scala-lang.org/api/current/index.htmlをみて検索すればすぐ答えが出るから楽しい!!!!
javaの知識がなくても
日本ではRubyは愛のあるだの書いてて楽しい言語だの言ってるステマが流れてるけど全然楽しくない
むしろendとか書かされる言語は気持ち悪いぐらい
それに比べてscalaは効率よくコードが書ける
まさにscalaは愛があるのではなく愛されている言語

792 :デフォルトの名無しさん:2013/02/07(木) 19:25:18.48
http://ideone.com/rUnAHs

ラベルをクリックすると現在のウィンドウの位置をコンソールに出力したいのですが
locationOnScreenで取得できません
取得方法のアドバイスお願いいたします

793 :デフォルトの名無しさん:2013/02/07(木) 20:17:54.26
>>792
http://ideone.com/zctian

794 :793:2013/02/07(木) 20:28:21.86
解説面倒だ、誰か頼んだ

795 :デフォルトの名無しさん:2013/02/07(木) 22:49:57.46
>>792-793
うまくいきました。ありがとうございます
標準で取得できるものと思ってたのですがoverrideしないといけないのは敷居が高いですね・・・
C#だと同じクラスないならthis.Topとthis.Lefpいけるんですが
scalaは難しい

796 :デフォルトの名無しさん:2013/02/07(木) 23:13:05.28
Haskell と Erlang やってる人は Scala が15分で隅々まで理解できる

797 :デフォルトの名無しさん:2013/02/07(木) 23:21:37.08
それはちょっと無理がある

798 :デフォルトの名無しさん:2013/02/07(木) 23:24:32.15
ちょっとしか無理がないのかよ

799 :デフォルトの名無しさん:2013/02/07(木) 23:52:20.36
Haskell と Erlang と Java 知ってれば15分チートシート眺めて
任意のアプリを書けるくらいにはなるんじゃね?
隅々まで理解して任意のコードを読むには15分じゃ無理だろ

800 :デフォルトの名無しさん:2013/02/08(金) 00:14:34.45
むしろ、15分で理解できない部分は理解しない方がよい部分

801 :デフォルトの名無しさん:2013/02/08(金) 07:57:28.42
そういう痛々しい話題はHaskellスレでやってくれ

802 :デフォルトの名無しさん:2013/02/08(金) 10:56:28.59
>>790
自分もわからなくなったので取り下げます

803 :デフォルトの名無しさん:2013/02/08(金) 18:50:17.12
↓weather.xmlの内容
<root>
<item>晴れ</item>
</root>

var xml: Elem = XML.load("weather.xml")
var item = xml \\ "item"

これで変数itemはElem型になりますが
Elem型から文字列に変換して別の変数に入れるにはvar item2 = item.toString()
Elem型から数値に変換するには一度文字列に変換した後にtoIntして別の変数に入れるには
var item3 = item.toString().toInt (無駄な気がしますが合ってますか?)で出来ました
そこで質問なんですが、
var item = xml \\ "item"
この時点でで変数itemに文字列としてもしくは数値を指定して変数itemに入れられたら楽なんですが方法ありますか?

804 :デフォルトの名無しさん:2013/02/08(金) 18:51:56.71
var item: String = 〜とか
var item: Int = 〜とか
var item = (xml \\ "item").toString()
など試してみたのですが出来ませんでした

805 :デフォルトの名無しさん:2013/02/08(金) 19:28:25.25
xml \\ "item"で返ってくるのはNodeSeqだぞ
textを使え

scala> val xml = scala.xml.XML.loadString("""<root><item>sunny</item></root>""")
xml: scala.xml.Elem = <root><item>sunny</item></root>
scala> val item = xml \\ "item"
item: scala.xml.NodeSeq = NodeSeq(<item>sunny</item>)
scala> item.text
res0: String = sunny
scala> item.toString
res1: String = <item>sunny</item>

806 :デフォルトの名無しさん:2013/02/08(金) 19:34:42.16
val item = (xml \\ "item").text
// => item: String
val item = (xml \\ "item").text.toInt
// => item: Int

807 :デフォルトの名無しさん:2013/02/08(金) 21:50:01.29
textで出来ました!
xmlから取得した値が空だった場合に数値に変換すると例外が発生するので、
ifで判定して空だったら0を代入、空ではなかったらそのまま代入したいんですが
xmlの値をtrueの位置に持ってくるのはどう書くのでしょうか?

val item = if ("" != (xml \\ "item").text) 数値に変換して代入 else 0

808 :デフォルトの名無しさん:2013/02/08(金) 21:56:17.24
って聞いて気づいたんですが、数値に変換して代入の部分に(xml \\ "item").text.toIntって書くしかないですね

809 :デフォルトの名無しさん:2013/02/08(金) 23:08:16.46
えっ?一度変数に代入しとけばいいじゃないの
val itemText = (xml \\ "item").text
そしたら
val item = if ("" != itemText) itemText.toInt else 0
って書けるじゃん?

ちなみに2.10から入ったutil.Tryを使えばこういう書き方もできる
val item: Int = util.Try(item.toInt).recover{ case _ => 0 }.get

810 :デフォルトの名無しさん:2013/02/08(金) 23:09:53.92
代入!代入!

811 :デフォルトの名無しさん:2013/02/09(土) 11:46:29.84
束縛!束縛!

812 :デフォルトの名無しさん:2013/02/09(土) 13:22:52.87
>>809
util.Tryっていいですね
forall{_.isDigit}で数値チェックもしてたのですがこっちは負数は対応してないのでutil.Tryのほうを使いたいと思います
いろいろと教えていただいてありがとうございます

813 :デフォルトの名無しさん:2013/02/09(土) 15:00:26.89
Try { Item.toInt } getOrElse 0

でいいよ

814 :デフォルトの名無しさん:2013/02/09(土) 19:57:45.39
Process("C:\\editor.exe").run

↑これの引数と作業ディレクトリを指定する方法がわかりません

815 :デフォルトの名無しさん:2013/02/09(土) 20:16:17.64
>>814
ドキュメント嫁
http://www.scala-lang.org/api/current/index.html#scala.sys.process.Process$

816 :デフォルトの名無しさん:2013/02/10(日) 00:05:00.28
さんきゅ

817 :デフォルトの名無しさん:2013/02/11(月) 20:59:13.05
ScalaとLiftフレームワークがかなり実績があるようなので気になってるんですが、
関数型っぽい書き方を使わずに、Scalaを使うことってできるんですか?

C#使っていたので、関数型のコーディングにいきなり変え
ることは(頭の切り替えが)難しいです。

818 :デフォルトの名無しさん:2013/02/11(月) 21:05:56.02
scalaのフレームワークは何があるんだろうとググってもPlayFrameworkばっかりヒットするんですが
これダウンロードすると100MBあるんですよね
サイズ大きすぎませんか
10MB以下のフレームワークとかないですかね?

819 :デフォルトの名無しさん:2013/02/11(月) 21:14:44.21
>>817
関数型っぽい書き方も当然出来ます
ってかJavaやC#をやってた人が普通にScalaで書くと
まず関数型のスタイルにはなりません

820 :デフォルトの名無しさん:2013/02/11(月) 21:17:43.03
>>818
10MB以下のフレームワークが存在するかどうかはちょっと分からないんですが
100MBぐらいたいしたサイズじゃないと私は思いますがね

821 :デフォルトの名無しさん:2013/02/11(月) 22:37:14.60
そんな事は聞いていません
あなたと私は意見が違います

822 :デフォルトの名無しさん:2013/02/11(月) 23:13:00.58
「scala フレームワーク」でググると1ページ目にフレームワークを羅列したページが見つかる
あとは全部確認してみればいいんじゃない?

823 :デフォルトの名無しさん:2013/02/11(月) 23:18:33.31
軽いフレームワークならScalatra辺りかなあ。

824 :デフォルトの名無しさん:2013/02/12(火) 03:15:21.94
scalaのpermutationsメソッドはサイズが指定できませんが
scalaみたいな重複なしの順列を生成する場合にはサイズを指定したときの高速な実装ができないということなんでしょうか

825 :デフォルトの名無しさん:2013/02/12(火) 08:51:06.62
>>819
ありがとう。
関数型スタイルは使わずに書けるならScalaは敷居は高くないということか

>>818
Scala用フレームワークといえばLiftが一番有名だと思う。Liftはサイズ小さい。
wikiには、Lift, Scalatra, Playの3つが載っていた。
http://en.wikipedia.org/wiki/Comparison_of_web_application_frameworks#Scala

Play!はScala以外の他の言語でも使えるしいろいろ独自に作りこんでいるから
サイズが肥大化しているんだと思う。

826 :デフォルトの名無しさん:2013/02/12(火) 13:34:14.63
scalaって本当クソだな
日付も扱えないじゃん
最初からjava使ったほうがいい

827 :デフォルトの名無しさん:2013/02/12(火) 16:36:57.39
お前何言ってんの?
Javaの標準ライブラリ使えるんだからそれ使えよ

828 :デフォルトの名無しさん:2013/02/12(火) 16:59:47.97
だからだ結局java使えばいいって話じゃん

829 :デフォルトの名無しさん:2013/02/12(火) 18:05:13.39
ひと通り触った上で俺はjavaで充分だ、と思ったんなら無理して使う必要はないだろ
少なくとも俺はそう思わなかったからscala使ってるわけで

シームレスにjavaとやりとりできるってのも売りの1つなのに
javaのライブラリ使わないといけないからscalaはクソ!!って意味が分からんわ

830 :デフォルトの名無しさん:2013/02/12(火) 18:17:46.72
ああそうかjava経由しないでscalaに来た場合は
scalaとjava両方について調べなきゃいけないわけだし確かにめんどくせーな

831 :デフォルトの名無しさん:2013/02/12(火) 19:57:31.19
java知らずにScalaとか

832 :デフォルトの名無しさん:2013/02/12(火) 20:32:03.69
そう
つまりJavaを知ってる人が多い今だけ価値があるスキマ言語

833 :デフォルトの名無しさん:2013/02/12(火) 21:10:40.05
まったくのJava初心者は混沌としたJavaの世界を
理解することから始めないといけないからScalaは学びにくいかもしれない

公式サイトでさえ、「プログラミングの経験がないならまずJavaを
勉強するといい」、と初心者お断りな雰囲気
http://www.scala-lang.org/node/1305#Begin

>>832
仮にJavaが消えても、Scalaはこの先生きこれれるとおもう。
JVM用バイトコードから.net用のMSILに変換するツールもあるようだし

>>828
なぜjavaではなくscalaなのかは、Scalaのメリットを読めばわかるんじゃないかな
http://www.atmarkit.co.jp/fjava/rensai4/scala01/01.html

834 :デフォルトの名無しさん:2013/02/12(火) 21:51:06.58
>>817
C#でも3.5くらいからはかなり関数型なコードかけるよ!
Scala学びながらC#にもフィードバックできるよ!!

まったくのプログラミング初心者(メモリモデルとかが頭に入っていない人)は
ScalaやJavaなんかよりHaskellから学んだ方が楽だと思う。
仕事があるかどうかは置いておいて、
プログラム独特のハードウェアから来る制約が少ない言語だし。

835 :デフォルトの名無しさん:2013/02/12(火) 23:06:50.39
アクターモデルはErlangから入った方が理解が早いと思う

836 :デフォルトの名無しさん:2013/02/15(金) 18:34:46.38
(´・ω・`)

837 :デフォルトの名無しさん:2013/02/15(金) 20:06:08.32
なんだよ

838 :デフォルトの名無しさん:2013/02/16(土) 22:36:48.54
Scalaの良いところはJava8に取り込まれるみたいだな
http://www.infoq.com/articles/java-8-vs-scala

例えば、
lambda expressions,
higher-order functions,
parallel collections
virtual extension methods aka traits

中にはscalaのsyntaxをそのままjava8に取り入れる予定もあるらしい。

Java8リリースされたら今Scala使ってる人や、開発参加してる人の
多くがJavaに戻ってしまうんじゃないかという気もするけどどうかな?
この先生きのこれる?

839 :デフォルトの名無しさん:2013/02/16(土) 23:08:19.56
単にプログラミング言語の研究の成果が、ScalaとJavaのそれぞれに入っただけに見える
Scalaの良いところと言いかえるのはちょっとなあ

840 :デフォルトの名無しさん:2013/02/16(土) 23:17:33.47
スカラの利点はまだ他にもあるし
Java8がリリースされる頃にはScalaもさらに進化してるだろう

841 :デフォルトの名無しさん:2013/02/16(土) 23:21:27.50
ラムダを導入するとScalaの良いところを取り入れたと言われてしまうのかww

842 :デフォルトの名無しさん:2013/02/16(土) 23:31:42.05
java8 のラムダ式が=>でなく->なのってなんで?
<= >=とまちがえやすいとかそういうの?

843 :デフォルトの名無しさん:2013/02/16(土) 23:42:26.39
MLやHaskellだと -> だし言語によってどっちもある

844 :デフォルトの名無しさん:2013/02/16(土) 23:44:39.28
数学の記号に似せようよ派と、気にしないよ派

845 :838:2013/02/17(日) 01:13:47.46
838はScalaをかじり始めた程度の人の感想だから
Scalaの良いところという部分はあんまり気にしないでくれw

俺の考えるScalaの良いところは、3つ
Javaよりも簡潔にかけて開発生産性が高い。
Javaのライブラリの知識が使える。
実績のあるJVMで動く。

一方、Javaにかなわないところは:
英語以外の情報が少ない。
初心者向けのドキュメントが不足しがち。
IDEの最新バージョンが使えない。
web frameworkの種類が少ない。

IDEの件は割ときつい制限だと気付いた。
Scala Plugin for IntelliJ IDEAはまだbeta stageだった。
Scala Plugins for NetBeansはv7.0までしか使えず、Scalaの2.8までしか使えない。

Scala IDE for EclipseについてもEclipse4.2(Juno)がサポートされてなかった。
現状、Scala IDEを、Eclipse3.7 + scala2.10で使うのがベストなのかな

846 :デフォルトの名無しさん:2013/02/17(日) 02:19:25.78
JavaはCの冗長なところ引き継いでるから簡潔性に欠ける
こういうのは言語の機能追加で解決できることじゃない

847 :デフォルトの名無しさん:2013/02/17(日) 02:56:23.24
>>845
IntelliJ IDEA Scala Pluginは3種類のScala IDEの中では一番完成度高いよ。まだbetaという事になっていたのか
もう忘れてしまったが、言葉の響きに引きずられてはいけない。海外含め、Scalaを実戦投入しているところはIntelliJ IDEA
使ってるところ結構多い。NetBeansのScala Pluginがオワコンなのはその通り

848 :2:2013/02/17(日) 02:59:48.74
補完機能は一通り使えるし、Renaming, Extract Methodなどのよくある自動リファクタリングもある。変数に型をつけなかった場合、
そこから型を推測して型宣言を自動で追加する機能もある。Java to Scalaというファンキーな機能まで。Scala IDE for Eclipseは、
リリース版はJunoをサポートしてないけど、マイルストーン版ならJuno使える。自分が知る限りではそんな感じ

849 :3:2013/02/17(日) 03:02:33.91
> JavaはCの冗長なところ引き継いでるから簡潔性に欠ける
> こういうのは言語の機能追加で解決できることじゃない

同意する。lambdaでかなりよくなる部分はあるけど、結局当初より機能がずいぶん後退したし、immutable objectのためのクラス作るだけで
面倒なコードを書かなければいけないのも改善されない。コレクションもまだjava.util.Collectionの時代遅れの使わなければいけないし

850 :3:2013/02/17(日) 03:04:42.56
NetBeansのScala Pluginがオワコンなのは、あれが主に個人開発だったせいでScalaのバージョンアップに追従できなかったせいなので、
まあ仕方ない。バックにどっかの会社つけば別だけど、IDEAが大きく引き離してて、Eclipseが後追いしてる状況だとNetBeansのScala Plugin
にはあまり興味をもたないだろうな

851 :デフォルトの名無しさん:2013/02/17(日) 03:07:58.30
JavaでモダンなCollectionってあるの?

852 :デフォルトの名無しさん:2013/02/17(日) 11:34:26.16
そう言えばplayframeworkの公式デモ動画で使ってるエディタ
いつの間にかtextmateからIntelliJに変わってるな

853 :デフォルトの名無しさん:2013/02/17(日) 12:05:25.61
>>847
サンクス。
Scala Plugin for IntelliJ IDEAは最初にうまく動かなくて、
しかもbeta stageと書いてあったのでいったんは諦めていたけど
完成度高いと聞いてもう一度セットアップ試してみた。

不具合の原因もわかった。
Scalaランタイムのインストールをするときに、MSIファイル(scala-2.10.0.msi)
でセットアップしてしまうと不具合がでるみたいだ。
ちゃんとパス指定してもIntelliJ IDEA環境でcompilerなどを認識してくれない。
scala-2.10.0.zipを落としてきて、パス指定したらIntelliJで使えるようになった。

IntelliJ、UIデザインが美しい。
特にDarculaのテーマのデザインがかっこいい
どこにどんな機能があるのかもすぐわかる。これEclipseより使いやすそうだ

854 :デフォルトの名無しさん:2013/02/18(月) 15:07:25.71
文字列の集合Sの中にある文字列Xが含まれているかどうかを
O(|X|log|S|)時間(|X|は文字列長、|S|は集合の大きさ)で判定したいのですが
Set#exists使えば大丈夫でしょうか?

855 :デフォルトの名無しさん:2013/02/18(月) 21:43:15.24
とりあえずはこれ読めば?
ttp://docs.scala-lang.org/ja/overviews/collections/performance-characteristics.html

856 :デフォルトの名無しさん:2013/02/20(水) 01:39:03.73
swing+scala の本でオススメはありますでしょうか

857 :デフォルトの名無しさん:2013/02/20(水) 05:07:46.57
scsala.swingが本で解説されてんのは見たことねーな
使ってる人もあんまりいない感じ
今は分からんけど2.8の頃は主要なコントロールしかラップされてなくて
残りは自分でソース読んで同じ風にラップしなけりゃいけなくてめんどかった
Publisher(listenTo)とReacter(reactions)を理解したらあとはjavaのswingとだいたい同じ
ラップ元のjavaのコンポーネントに触りたかったら#peerで取得できる

858 :デフォルトの名無しさん:2013/02/20(水) 05:13:20.81
sが変なとこに入った……
↓英語だけどscala.swingの概略的なものが読める
http://www.scala-lang.org/sid/8

859 :デフォルトの名無しさん:2013/02/20(水) 21:22:04.50
数値計算の行列を利用するときは、クラス作るか Array[Array[Int]] みたいにするしかないですかね

860 :デフォルトの名無しさん:2013/02/20(水) 22:42:37.02
>>859

行列の数値計算だったら、
scalala とか scalalab を使うのは?

861 :デフォルトの名無しさん:2013/02/21(木) 02:11:05.96
計算がしたいわけじゃなくて、ガウスの消去法とか自分で実装して勉強した気になりたいので
外部のライブラリは使わない方向がいいんだけど、Matrix クラスは標準装備じゃないのね

862 :デフォルトの名無しさん:2013/02/21(木) 21:32:36.92
Array.ofDim[Double](m,n) で2次元配列

863 :デフォルトの名無しさん:2013/02/24(日) 11:39:07.70
scalaでDIやAOPの話聞かないなって思ってたら
traitがAOPでcake patternがDIの役割してたんですね

864 :デフォルトの名無しさん:2013/02/24(日) 22:46:49.86
traitがAOPの役割するってのがよくわからないので説明して

865 :デフォルトの名無しさん:2013/02/24(日) 23:37:42.74
JavaだとAOPで横断的にlogの処理とかを突っ込むのにアノテーションつけて、コンパイル前に処理しないといけない。
あれ?scalaでそういう処理ってtraitで追加するのか?

866 :デフォルトの名無しさん:2013/02/24(日) 23:42:08.88
http://eed3si9n.com/ja/real-world-scala-dependency-injection-di
http://jonasboner.com/2008/12/09/real-world-scala-managing-cross-cutting-concerns-using-mixin-composition-and-aop/
ここの話だよな。

867 :デフォルトの名無しさん:2013/02/25(月) 00:11:54.96
コードを折り込む部分は、AspectJの機能を使ってるのか
> parser.parsePointcutExpression("execution(* *.bar(..))")

この記事の言いたいことはaspectの記述をtraitでもできると言っているのかな
aspectとtraitはコードの再利用に特化したクラスという意味で元々似ているので、そりゃそうかなあと思った

868 :デフォルトの名無しさん:2013/02/25(月) 00:16:32.24
>>865
AspectJとかJVM系のAOP実装だと
クラスのロード時にバイトコードを書き換えるので、コンパイル時には何もしなくていい
C言語ベースとかだとコンパイル時にがんばる

869 :デフォルトの名無しさん:2013/02/25(月) 19:30:45.61
ScalaTestを導入してsbtでコンパイルしてるんだがどういうわけかsbt testがまるで終わらない
Test名に日本語が含まれてるんだがこれは大丈夫なのかな
[info] Compiling 1 Scala source to /Users/…/target/test-classes...

870 :デフォルトの名無しさん:2013/02/26(火) 09:35:02.49
↓エスパーの方よろしくお願いします

871 :デフォルトの名無しさん:2013/02/26(火) 10:16:13.80
テストクラスへのパスに含まれる日本語フォルダ名がログに出てきてるのを
Test名と勘違いしてアタフタしているだけで問題の本質は全く別だろ
流石にお前の実行環境までは透視できんからこれ以上はわからん

872 :デフォルトの名無しさん:2013/02/26(火) 15:48:43.93
BEST SOFTWARE WRITING の中の1章に、ブルース・エッケルという人が書いた"強い型付け vs. 強いテスト"というエッセイがある。
ここでは、元々静的型チェックを支持していた著者が、どのような経験を経て動的型チェックの方が素晴らしいと考えるに至ったかが記述されている。

最終的に著者は、「テストされていないものは、壊れていると思え」、つまり、動的/静的に関わらずテストは行う必要があり、どちらも必ずテストを行う必要があるのであれば、動的型付け言語の方が柔軟性がある分優位である、としている。

873 :デフォルトの名無しさん:2013/02/26(火) 17:48:04.91
つまり型推論があるScalaは静的言語の中でもかなり有利であるって事か

874 :デフォルトの名無しさん:2013/02/26(火) 20:43:53.16
某ERP製品で、同じ数値でも管理会計上「混ぜるな危険」な項目とかあるから
細かく型が分けられてるのみて、金融でHaskellが好まれる理由ってこれかーと思った
でもそのERP製品は型厳密じゃないんだと。ドットダメじゃん

875 :デフォルトの名無しさん:2013/02/27(水) 02:18:17.87
repl なんだけど、相互に依存するファイル3つくらいを同時に編集してプログラミングする場合、
どれが1つのファイルの更新を反映させるたびに
:load file1.scala
:load file2.scala
:load file3.scala
って3回ロードしなおさなきゃいけないのでしょうか、ひょっとして

876 :デフォルトの名無しさん:2013/02/27(水) 06:54:50.11
そうだよ
そもそもそういう使い方するのなら
REPL直で使わずにsbtのconsole使うべき

877 :デフォルトの名無しさん:2013/02/27(水) 23:03:48.04
全部一つのファイルに書き込んで、エラーがなくなったらファイルを分割する

878 :デフォルトの名無しさん:2013/03/02(土) 21:33:39.15
Scalaはバージョンアップで後方互換性は保たれる言語ですか?
Rubyのように1,2年前に書いたコードが動かなくなることもよくありますか?

879 :デフォルトの名無しさん:2013/03/02(土) 23:56:08.15
ある

しかしコンパイラエラー吐くからRuby程深刻では無い。

880 :デフォルトの名無しさん:2013/03/03(日) 11:19:52.40
>>879
ありがとう
コンパイラのエラー検出でわかる程度なら
互換性は特に問題なさそうですね

881 :デフォルトの名無しさん:2013/03/03(日) 16:37:12.59
>880
warning deprecated を放置しておかなければ通常は問題ない。

882 :デフォルトの名無しさん:2013/03/05(火) 22:35:36.41
上の方で swing の話が出てきたけど、swingの問題って、scalaに問題があるのか、javaのswingそのものに問題があるのか分からん
Webで調べると javaだけに使えるような解決法だったりするから困る

883 :デフォルトの名無しさん:2013/03/05(火) 22:47:43.28
例えばどんなの?

884 :デフォルトの名無しさん:2013/03/05(火) 23:01:28.36
new Table(values, names) で values の型をどうすればいいのかとか、
Tableの TableRowsSelectedイベントは、すでに選択されてる行を選択しても何もイベントが起きてくれないこととか、
TableSelectionMode には Cell があるのに、TableCellsSelected イベントがないとか、
reactions += {} で Table の model や selection の説明が API doc にないとか、
BoxPanelで中のComponent を 右寄せしようと思って、xLayoutAlignmentに数値を代入しても何も変わらないとか

885 :デフォルトの名無しさん:2013/03/08(金) 11:09:23.72
>>884
>BoxPanelで中のComponent を 右寄せしようと思って、xLayoutAlignmentに数値を代入しても何も変わらないとか
これじゃね?
http://docs.oracle.com/javase/tutorial/uiswing/layout/box.html#alignment

886 :デフォルトの名無しさん:2013/03/08(金) 12:29:16.42
            , ィェェェェェェェェェェ 、     /  あ…
         /彡彡=⌒゛゙亠亠ヾ\    |   ごめんなさい
        /彡彡´         `ヽ   |
        |;':;';';'  _ - ―---´⌒ 、 !   !  それ Java
        |;';'"    _,,-‐='     `ー 、|   |   なんですよ
       r'⌒     ,r'兪 ヽ 〃匍、.|    \_  _______ノ
       {(牙       ̄ノ  {  ̄  |     ノノ
       \┐      イ  ヽ   |     ´
            Y     / `ー‐´)   |
         |   _ノ   ゞ二ニヱ   !
         ト、         ー      ノ
       , ィ!\\            /}`ヽ、 __
    _,.- '  { { : :.ヽ`_ー  ____  ´ | |     ` ヽ 、_
 _,.- '     ヽヽ: : : : :  ̄`:><: : : :| |  ヽ     `
       ノ   \\: : : :./ |C \: :.| |   ヽ ハ

887 :デフォルトの名無しさん:2013/03/09(土) 04:09:15.17
scala.swingはjava.swingのうっすいラッパーだから
UIElement#peerで取得したjavaのコンポーネントを直接弄り回しても大体問題ない。event関連以外は。
そしたらjavaだけに使える解決法とやらも使えるだろ

一方俺はSWTを使った

888 :デフォルトの名無しさん:2013/03/09(土) 14:01:41.82
swing 勉強してたら今度は fx が出てきた
scala fx の解説の日本語ってないですかね
というか、「scala fx」で検索してもjavaの解説ばっかり引っかかる

これスレを見ている人は、java のことを中心に書く人は、scalaという文字をページの中に表示しないでください

889 :デフォルトの名無しさん:2013/03/09(土) 15:06:49.00
Javaで書けば万事解決じゃね?

890 :デフォルトの名無しさん:2013/03/09(土) 15:16:52.55
>>889
scalaはjdk(javacコマンド)が必要ない
コンパイルから実行までjreだけでOK

大学や会社のマシンでプログラムのインストール禁止でjreだけ入ってる場合は、30MB解凍すればOKのscalaは楽

891 :デフォルトの名無しさん:2013/03/09(土) 16:45:14.37
javaで実装されたjavac使えば問題ない

892 :デフォルトの名無しさん:2013/03/10(日) 00:10:44.43
java使ってる部分が、全部classファイルになってればいいのか。

893 :デフォルトの名無しさん:2013/03/14(木) 18:20:06.58
>>872 遅レス
「Scalaプログラミング入門」Railsによって得られた生産性の向上は、テスト作成の作業に失われてしまいました。
wota.jp/ac/?date=20100426 に詳しい。 くまくまーさんの記事は何度よんでもおもろいなぁ...

894 :デフォルトの名無しさん:2013/03/15(金) 00:01:57.91
コレクションの重複している項目を求める方法を教えてください。
現在
def duplication[A](lis: List[A]): List[A] = lis diff (lis distinct)
としていますが、うまく動作しないようです。
List[Array[Byte]]での利用を想定しています。
md5-hashを入れてファイルの重複を検査します。

895 :デフォルトの名無しさん:2013/03/15(金) 00:56:13.11
def f(xs:List[Array[Byte]]) = xs.map(_.deep) diff xs.map(_.deep).distinct

896 :デフォルトの名無しさん:2013/03/23(土) 20:43:18.87
今月号の日経ソフトウェアで、さいきんの10大人気言語としてまたScalaが紹介されているね。

897 :デフォルトの名無しさん:2013/03/24(日) 00:56:51.99
http://itpro.nikkeibp.co.jp/NSW/image/top/Cover201305.jpg

雑誌に載るのはうれしいけど、表紙にあったKotlilnというのはScalaよりも
普及するんじゃないかと思った。
Scalaよりも難しくないし、typesafeで、JavaScriptに変換できるようだ。
TypeScriptやScalaやC#の強みを取り込んでいる。
Kotlinまだ正式版にはなってないけれど化けるかもしれない

http://news.mynavi.jp/news/2011/07/26/022/index.html
http://confluence.jetbrains.com/display/Kotlin/Welcome

898 :デフォルトの名無しさん:2013/03/24(日) 01:44:50.31
>JavaScriptに変換できるようだ。

ふ〜ん(

899 :デフォルトの名無しさん:2013/03/24(日) 01:52:03.55
>>898
え?
同じ言語でサーバサイドとクライアントサイドの開発
ができたらWeb系開発者にとってメリット大きいだろう

900 :デフォルトの名無しさん:2013/03/24(日) 02:04:30.82
>>899

まあ、JavaScriptに変換できる言語とか、JavaScriptを簡単にかける環境みたいなって他にもあるから、
ふーんって感じじゃないだろうか。

しかし、プログラム言語って、年々増えていくねえ。乱立している感じ。

> http://itpro.nikkeibp.co.jp/NSW/image/top/Cover201305.jpg

↑PHPってまだ人気あるんか?PHPのせるくらいなら、Rubyだろ、とか思ったが。

901 :デフォルトの名無しさん:2013/03/24(日) 02:16:27.35
>>897
現状のkotlinc & IDE 試してみればわかるけど、実用レベルに達するまではまだ何年もかかるわ、ほぼ間違いなく。普及云々はさらにその先の話
難しさ以前の問題で、処理系の品質が全体的に低い。buggyだし、速いコンパイルとか夢のまた夢でkotlincのコンパイルはかなり遅い

902 :デフォルトの名無しさん:2013/03/24(日) 02:20:41.71
>>900
TypeScriptとかはサーバサイド開発できないし
できたとしてもJavaと同程度の速度はでないでしょ

Kotlinはコンパイル時はJava, Scalaと同じくらい速いから
サーバサイドに最適。
JVMで動くからサーバ側もクロスプラットフォーム
さらにJSへの変換もできるから、違いは大きいかと

もっとも、ScalaがKotlinと同様にJSへのコンパイル機能も
取り込んでくるかもしれないけれど

903 :デフォルトの名無しさん:2013/03/24(日) 02:22:37.31
前に一度チェックしたけど、
本当にBetterJavaに過ぎなくて
言っちゃ悪いけどD言語みたいな始まる前からオワコン臭がきつい。

BetterJavaやるだけならScalaでも十分だし、

904 :デフォルトの名無しさん:2013/03/24(日) 02:29:07.80
BetterJavaに過ぎないことが重要なんじゃね

905 :デフォルトの名無しさん:2013/03/24(日) 02:30:31.16
>902
TypeScriptはNode.jsをばっちりサポートしているわけだが、
Node.jsはJAVAよりは遅いと言ってもrubyなんかよりは遙かに早い。

それに、ScalaもLiftなりPlayなりからいくらでも直接jQueryに触れるし
精密なことをやりたいなら、 WriteOnceとは行かなくなって、Kotlinで書けてバンザイではなくなるだろう。

906 :デフォルトの名無しさん:2013/03/24(日) 02:31:54.75
Scalaが誕生2003で、アーリーアダプタ以外が実用可能なレベルに達したのがここ1〜2年の話だというのを甘く見過ぎてる
Oderskyが現在のjavacの作者で、Pizza (1996) 等JVM上での静的型付き言語「処理系実装」の先駆者でもあるってのを忘れていやしないかと
ScalaがJava並に普及するとは思わないけど、KotlinやCeylonは期待寄せるにも早過ぎる

907 :デフォルトの名無しさん:2013/03/24(日) 02:36:12.89
TypeScriptとかCoffeeScriptとかはJavaScriptへのトランスレータだから他の難しいことやらなくても実用できるけど
JVM上で動いて、既存ライブラリと相互運用性ある静的型付き言語の環境整備するのはどうしても時間やコストがかかるんだわ
そういう実装上の泥臭いところを知らない人たちがScala複雑だから新しい言語作ってみましたとやっても、まあ難しいねえというか。

908 :デフォルトの名無しさん:2013/03/24(日) 02:39:22.38
>904
それなんだけど、
D言語は、C++にboostが出て完全にオワコンになったじゃん。

Kotlin程度の改善だったらJava10が出る頃には全部本家に入っていておかしくない。
だったらJava使い続けるよ。

909 :デフォルトの名無しさん:2013/03/24(日) 02:40:17.55
JavaScript吐くというのはRPCを使う動的なページを書くのに楽が出来そうだなぁ。

JVM上で動いてJavaScriptを吐くといえばGWTがあるけれども、RPCのAPIの管理が楽。
通信に使うPOJOやRPCのインターフェイス定義をJavaのコードとして書いてしまえば
同じコードからサーバー側のサーブレットやJavaScriptで書かれた非同期クライアントを
自動生成するのでAPIの仕様の同期が楽。サーバー側のAPIを変更したりPOJOを拡張しても
クライアント側のJavaScriptをいじる必要が無い。

910 :デフォルトの名無しさん:2013/03/24(日) 02:44:36.60
>909
最大の利点はそれかなぁ
haxejvmでもできそうだけど。

最近の流行だから、そのうちscalaからjavascript吐けるようになるんじゃないのかと思っている。

911 :デフォルトの名無しさん:2013/03/24(日) 02:46:47.23
ちなみに、JetBrainsのScala Plugin作ってるチームは全く別で彼らは彼らでScalaサポート続けるだけなので(JetBrainsは元々
色んな言語のIDEを作ってる。コードベースはEclipseみたいに明らかに共通化されてるけど)、「JetBrains」というくくりでの開発リソースの
投入は期待できない

912 :デフォルトの名無しさん:2013/03/24(日) 02:54:50.51
>>901
速いと書かれていたのは「コンパイル後」のサーバ上の実行速度。
「コンパイル」の速度はScalaもJavaより重い感じがあるね

Kotlinもクラスライブラリは大半はJavaのものを使うようだし
Javaのバイトコードに変換するだけと考えれば
5年以上かかったりすることはないと思うんだけど、
どうやらここの人たちは先行きに悲観的だね

ステータスはM5で正式版ではないから現時点での品質は
まだ心もとないのはわかる。
IntelliJ IDEAの開発元が作ってるから技術力はあるんじゃないかと
期待してる。

>>906
開発スピードはOSSの世界からどれだけの開発リソースが
投入されるか次第じゃないかな

>>903-904
904に同感で、Scalaの先進的な機能、関数言語的なものの習得は
平凡なJava開発者には重荷になっていて、
それがScalaがブレイクしない理由だと思う

913 :デフォルトの名無しさん:2013/03/24(日) 02:56:26.22
>>908
D言語始まってたことないし・・・

914 :デフォルトの名無しさん:2013/03/24(日) 03:02:34.95
>>906
後から似たようなもの作る場合は先人の知恵を参考にできるわけだから
同じだけ時間がかかることはないんじゃないかな

>>908
http://news.mynavi.jp/news/2011/07/26/022/index.html
でも書かれているけど、Javaは後方互換性の呪縛があるから
もう好きなように改良はできなくなってる。

Java10になろうが呪縛は変わらない。
プロパティもいまだにないとかありえない、信じられない。
長ったらしいgetter/setterとかはJavaでは永遠になくならないんじゃないかね

915 :デフォルトの名無しさん:2013/03/24(日) 03:06:51.07
単にBetter JavaならGroovyで良いじゃんとも思う。
基本的にJavaのコードがそのまま通るので、Javaで書いておいて楽をしたいところだけGroovy風に
書いたり逆に基本Groovyでカチッと書きたいとこだけJavaで書いたりと、Javaと混ぜやすい。

916 :デフォルトの名無しさん:2013/03/24(日) 03:08:10.76
Groovyは動的だから遅い

917 :デフォルトの名無しさん:2013/03/24(日) 03:12:31.55
Groovyの影の薄さは異常

918 :デフォルトの名無しさん:2013/03/24(日) 03:48:52.35
Kotlinが普及するかどうかは分からんけど
ただのreadonlyなインターフェースを指してimmutableコレクションとか言い出した時点で自分が使うことはないと確信した

919 :デフォルトの名無しさん:2013/03/24(日) 04:00:28.97
>>916
静的型検証のみならず静的型として扱うコンパイルも出来ますが、このコンパイルを通そうとすると
コードの記述量がJavaと大差無くなってしまうのが悩みどころ。

920 :デフォルトの名無しさん:2013/03/24(日) 04:03:44.81
>>912
いや、少なくとも5年程度はかかるとやはり思う。静的型付き「ジェネリクスあり」の言語をクラスファイルにコンパイルしてIDEサポートして…
って時点で実装力もリソースも必要。s/IntelliJ IDEAの開発元/JetBrainsの一部のKotlinやってるチーム/。で、こっちは未知数というか信頼できるかびみょー

921 :デフォルトの名無しさん:2013/03/24(日) 04:14:27.04
Scala PluginチームがKotlin作ったんだったら、技術力は信頼できるけどね
中の人ベースの方が正確だったり。KotlinチームとScala Pluginチームは全く別とかページみるとわかる

>>914
言語仕様まではともかく、stableな処理系作るのにかかる苦労はコピペできない。Kotlinは言うほど会社のリソース割かれてないし…

922 :デフォルトの名無しさん:2013/03/24(日) 06:22:22.72
連投支援

923 :デフォルトの名無しさん:2013/03/24(日) 08:04:11.53
Better JavaといえばJavaのコードを生成するEclipseさんちのXtend

924 :デフォルトの名無しさん:2013/03/24(日) 09:36:10.13
そういやCeylonなんてのもあったな……

925 :デフォルトの名無しさん:2013/03/24(日) 11:57:25.22
普段過疎過疎なのに今日に限って午前中だけで30レス弱付いたな

926 :デフォルトの名無しさん:2013/03/24(日) 12:15:26.80
そりゃKotlilnごときと比較されちゃね……

927 :デフォルトの名無しさん:2013/03/24(日) 13:57:24.26
15分で始めるScala
http://xerial.org/scala-cookbook/recipes/2012/11/29/scala-in-15-minutes/



東大の先生は、Scala使ってDNA解析をガンガンぶん回しているというのに、
おまえらみたいな低脳は、いつまでもたっても、言語がどーのこーので、ちっとも前に進まないな。

928 :デフォルトの名無しさん:2013/03/24(日) 15:33:58.26
そういうレスはHaskellスレに書いたほうがウケる

929 :デフォルトの名無しさん:2013/03/24(日) 15:56:18.25
kotlinのwikipediaのページ、学生のブログみたいだな

930 :デフォルトの名無しさん:2013/03/24(日) 17:39:59.70
class Test(val a:Int, val b:Int){
val c = a+b
}

repl上で↑をロードする(:load test.scala) とOKだけど、

class Test(val a:Int, val b:Int)
{
val c = a+b
}

↑(波カッコを改行しただけ)をロードするとエラーがでます。
<console>:9: error: not found: value a
val c = a+b
^
scalac だとエラーは出ません。これはバグではなく、こういう仕様なのでいいのでしょうか?
Scala code runner version 2.10.0 -- Copyright 2002-2012, LAMP/EPFL です。

931 :デフォルトの名無しさん:2013/03/24(日) 17:55:20.50
ことりんかわいい

932 :デフォルトの名無しさん:2013/03/24(日) 18:27:27.95
>>930
class Test(val a:Int, val b:Int)
の時点でクラスの定義が完了しちゃってるから
{以降はただのブロックとして認識されてんだろうな
scalaでは下の改行スタイルは全く推奨されないので上使ってれば問題ない
scalacや:pasteではちゃんと1つのクラス定義として認識されるけど理由はよく分からんので詳しい人よろぴく

933 :デフォルトの名無しさん:2013/03/24(日) 18:34:04.08
>>930
改行だけならバグじゃないの
こういう簡単なバグも直ってないの見ると、ことりんのこと笑えないな


C#みたいに開始かっこの前で改行したほうが美しいと思う
開始、終了のかっこがそろうと見やすいし

934 :デフォルトの名無しさん:2013/03/24(日) 18:44:55.80
REPLだと改行ごとにevalされるから仕方ないだろ

935 :デフォルトの名無しさん:2013/03/24(日) 18:55:30.19
>>934
だとすると、最終的に scalac でコンパイルが成功したコードを使って、 scala repl でそれを :load しつつ実験しながら新しいコードを書いていくというのはダメな開発手法ということでしょうか

936 :デフォルトの名無しさん:2013/03/24(日) 18:57:47.80
sbtのconsoleを使うと幸せになれるよ

937 :デフォルトの名無しさん:2013/03/24(日) 19:01:40.25
>>933
バグじゃなくてScalaのREPLの意図された挙動だから
case classとかREPLの一行でその場で書いたときにいちいち{}入れないとクラス定義されないのは困るわけで…
複数行にしたければ { 入れればいいわけだし。:pasteはまさに改行含めた定義をはりつけたいときに使う
コマンドだからそういう挙動するわけだ。

938 :デフォルトの名無しさん:2013/03/24(日) 19:06:19.70
>>936
sbt はWindowsで使っててコマンドプロンプトでクラスパスを設定する場合は、コンパイルするたびにクラスパスをいちいち設定しないといけなくない?

939 :デフォルトの名無しさん:2013/03/24(日) 19:09:44.34
scalac でコンパイルできるソースファイルは scala で :load できるとは限らない、と

940 :デフォルトの名無しさん:2013/03/24(日) 19:55:26.25
>>938
俺普通にwindowで使えてるぞ
そんな面倒な話があるか
sbtのconsoleコマンドはプロジェクト内のソースのコンパイル結果と依存jarがクラスパスに入った状態で
REPLを起動できる超絶便利コマンドだよ

941 :デフォルトの名無しさん:2013/03/24(日) 20:05:08.21
>>940
Windowsで環境変数に一切手を加えたくないから、scalaを起動する直前に作業用のコマンドプロンプトの画面で一回だけ set CLASSPATH=%CLASSPATH%;(必要なjarへのパス) を実行してる
sbtだと、コンパイルして実行する度にパスエラーになる

942 :デフォルトの名無しさん:2013/03/24(日) 20:37:42.80
設定ファイルに書けばいいじゃない

943 :デフォルトの名無しさん:2013/03/25(月) 06:27:30.78
LINEに関わった日本人技術者が退職「韓国人のための会社、溝が埋まらなかった」
http://androidken.blog119.fc2.com/blog-entry-2002.html
 また、優秀なエンジニアと交流できた事も今後へ向けた糧になりました。
印象深い方々TOP3をtwitter IDで名指しすると、@sunsuk7tp、@overlast、@tagomoris(敬称略)です。

944 :デフォルトの名無しさん:2013/03/25(月) 06:35:37.06
http://hayabusa3.2ch.net/test/read.cgi/news/1364113290/

945 :デフォルトの名無しさん:2013/03/25(月) 15:10:23.12
土日に朝鮮(北朝鮮含む)に言ってバイトしてくるなんて普通なのに、一般人はプログラマの生活をあんまり知らないんだなと思った

946 :デフォルトの名無しさん:2013/03/26(火) 11:28:13.91
この問題は、FAQだよ。結構、多くの人がハマる落とし穴。

Scalaは、文の区切りは ; または 改行 だけど、改行の扱いが少し複雑
改行による命令区切りの判定は、scalacとREPLで少し違う

scalacの場合
・改行にて、文が明らかにまだ途中であるならば、区切らない。
・改行にて、次の行も調べまだ文が続いていると判断できるなら次の行とつなげる。
・続かないならば、改行は、文区切りと判定する
みたいな感じ。
それに対して、REPLでは
・改行にて、文が明らかにまだ途中であるならば、区切らない。
・改行にて、そこで文がエラーなく終わるなら、そこで文を区切る
となっている。

〜〜〜〜〜〜〜〜〜〜〜〜
つまり、、、
コーディングスタイルを変えて、
class Test(〜)
{
でなく
class Test(〜) {
というように書けばOK.
〜〜〜〜〜〜〜〜〜〜〜〜
個人的には、コーディングのレイアウトが強制されるのは、少し残念。

この改行の問題は、たびたび議論にあがるし、バージョンアップ時の機能追加要望
としてあがってはいる(VBAのoption explicitみたいなオプション)けど、どうなるやら。

947 :デフォルトの名無しさん:2013/03/26(火) 11:51:08.06
936は、 >>935 へのレスね。
コーディングスタイルを>946のように変えれば、一応できるかも。

だけど 935のやり方は
1. scalac MyClass.scala で文法チェックとかしてから

2. REPLで :load MyClass.scala (→ ソースをREPL上での解釈となる )
なんだよね。

もっとよいやり方がありそう。

948 :デフォルトの名無しさん:2013/03/26(火) 12:24:48.63
scalacで作ったclassファイルをimportすればいいんじゃね?
sbt consoleの方が楽だけど

949 :デフォルトの名無しさん:2013/03/27(水) 00:09:13.18
どちらにせよ
REPLだと1パスでSCALACは2パスだからREPLで本格的なプログラムは無理じゃない?

950 :デフォルトの名無しさん:2013/03/27(水) 20:58:24.74
REPLって日常的なちょっとした計算のためにあると思ってたけどマゾっているんだなあ

951 :デフォルトの名無しさん:2013/03/27(水) 22:34:42.33
LispやHaskellだとインタラクティブで検証しながらコード書いて
うまく行ったらソースにまとめるってやり方はある
Scala REPLだとそういうふうに全力で使う気になれない

952 :デフォルトの名無しさん:2013/03/29(金) 00:05:13.39
Lispは…うーん、どうなんだろう
HaskellのREPLというかインタラクティブモードは機能が制限されてるから、あれで検証しながらコード
書いてソースにまとめてる人が居るのかどうか。ScalaのREPLは機能的にはcompletion含めて
高機能な方だとは思う

953 :デフォルトの名無しさん:2013/03/29(金) 02:06:00.88
scalacを実行すると .classファイルが大量に出てくるのが嫌だから、repl+:loadだけで開発をすすめてる

954 :デフォルトの名無しさん:2013/03/29(金) 06:09:44.04
IDE使えよ…

955 :デフォルトの名無しさん:2013/03/29(金) 10:46:04.88
emacs 上で sbt 最強ってことですね

956 :デフォルトの名無しさん:2013/03/29(金) 11:07:49.41
scala界隈の人はもう皆intellijに行ってるものとばかり思ってた

957 :デフォルトの名無しさん:2013/03/29(金) 11:36:35.76
2chにLiftのスレがないようだけど使ってる人いないのかな?
scalaでは一番有名なフレームワークだよね

>>956
公式サイトがScala IDE for Eclipseを推している感じがあるから
IDEA知らない人はそっちに行ってしまうと思う

958 :デフォルトの名無しさん:2013/03/29(金) 12:05:39.57
scalaでintelljに慣れたせいで、javaもintellij使うようになってしまった

959 :デフォルトの名無しさん:2013/03/29(金) 12:23:20.92
EclipseもIDE2.1(今は3.0)からはなかなかできが良いよ。
ここまでの流れでidea押す人が良いけど

EclipseならScalaごとインストールしてくれるしとっかかりにはおすすめ

960 :デフォルトの名無しさん:2013/03/29(金) 19:57:31.17
Eclipse使っている人は、Sbtとの連携どうしてる?
・sbt側でsbteclipseというプラグイン

・Eclipseにesbtというプラグイン
と、どっちが良いか、、、。


あと、WindowsでCygwinを使っている人で、Exclipseもsbtも使っている人居るかなあ?

961 :デフォルトの名無しさん:2013/03/29(金) 21:11:56.18
>>952
インタラクティブ単体というよりはemacsとslimeとの組み合わせで。
ScalaはREPL自体は強力だけどクラスの枠組みとコードブロック単位の
evalはちょっと相性悪いと思う。自分はIDEのほうが楽。

962 :デフォルトの名無しさん:2013/03/29(金) 21:17:26.42
IDEはいちいちキーボードから手を放してマウスをクリックするのが嫌です

963 :デフォルトの名無しさん:2013/03/29(金) 21:27:53.80
これはこれはなかなか立派な釣り針をお垂らしで

964 :デフォルトの名無しさん:2013/03/29(金) 21:36:40.68
IDE否定派は絶滅してないらしい
同じことやらせても効率悪くて時間かかるだけなのにIDEを使おうとしない

Windowの大きさ、位置かえるのもキーボードという馬鹿さえいる

965 :デフォルトの名無しさん:2013/03/29(金) 21:54:15.20
普段使ってるのがIDEでもvimでも何でもいいけど、
それ以外使えなかったり、ましてや否定するエンジニアがしょぼいのは分かる

966 :デフォルトの名無しさん:2013/03/30(土) 00:26:17.31
Scalaは背伸びしたJavaドカタが
使ってみたりする言語だから
IDE好きな輩も多いよね

967 :デフォルトの名無しさん:2013/03/30(土) 00:36:58.50
お前らホント喧嘩好きだよなw

968 :デフォルトの名無しさん:2013/03/30(土) 02:43:13.95
スケルトンは自作のスクリプトで生成する
自分の目が届かないところで設定ファイルをいじられたくない
マウスでビューを切り換えるなら、Ctrl+矢印で画面を切り換える
集中してるときは仮想デスクトップ1つにterm 1つにコマンド1つだ
途中でファイル名を変える方法ごときで悩みたくない
キーボードから手を離すと集中が途切れる

ゆえにIDEは使いたくない

emacsと仮想デスクトップとtermで十分

969 :デフォルトの名無しさん:2013/03/30(土) 04:06:36.13
emacs()

970 :デフォルトの名無しさん:2013/03/30(土) 08:33:49.20
>>968
まとめると、「お前が使いこなせないのをツールのせいにするな」かな
ぐだぐだと書き連ねた内容は全てIDEでも解決出来る
これ以上はスレチなのでマ板でスレでも立てて叩かれて来いや

971 :デフォルトの名無しさん:2013/03/30(土) 08:39:06.13
CUIを使いこなせない低能が
沢山並んだメニュー(それでもCUIで出来る事全てをカバー出来ない)からマウスで選んだり
ショートカットを丸暗記したり(低能は丸暗記が大好き)して
使うためのツールだからね > IDE

972 :デフォルトの名無しさん:2013/03/30(土) 08:44:10.35
併用しておいしいどころどりするのが大抵だと思う。

973 :デフォルトの名無しさん:2013/03/30(土) 08:51:31.43
たまにキーボードから手を離した方が腕が凝らなくいからIDE派かなぁ

974 :デフォルトの名無しさん:2013/03/30(土) 08:56:52.29
次スレは「冊目」はなくしたほうがいいと思う

「冊目」を見るとScalaは実戦投入もできない段階の代物で
住人も本で勉強してるだけ、のイメージ

975 :デフォルトの名無しさん:2013/03/30(土) 09:09:06.41
次スレ立てようとしたら無理だった

「ERROR:Lvが足りなくてスレッド立て(ら)れません。」

Lvは40なんだけどな
この板は有料会員以外はスレ立てられない規制入ってるの?

976 :デフォルトの名無しさん:2013/03/30(土) 11:09:41.39
プログラミング言語「Scala」の日本初カンファレンスが開催、盛況で立ち見のセッションも
2013/03/30
http://itpro.nikkeibp.co.jp/article/NEWS/20130329/467341/

977 :デフォルトの名無しさん:2013/03/30(土) 11:10:53.66
続きを読むには会員登録が必要です。

978 :デフォルトの名無しさん:2013/03/30(土) 12:20:56.18
うめるね

979 :デフォルトの名無しさん:2013/03/30(土) 12:22:20.76
うめるわ

980 :デフォルトの名無しさん:2013/03/30(土) 12:23:07.85
>>975

981 :デフォルトの名無しさん:2013/03/30(土) 12:38:54.61
残念立てられなかった

982 :デフォルトの名無しさん:2013/03/30(土) 12:42:46.00
最近「このホストでは〜」が良く出る
スレ立て乱立のときでも出てたから不思議

983 :デフォルトの名無しさん:2013/03/30(土) 13:52:49.75
なんか今>>1のリンク全部逝ってるね


http://toro.2ch.net/test/read.cgi/tech/1364619119/

984 :デフォルトの名無しさん:2013/03/30(土) 13:57:11.85
>>983
乙。いったい9杯目ってなんだ
リンクは日本のサイト以外は全部見れた

985 :デフォルトの名無しさん:2013/03/30(土) 14:02:05.60
>>974が冊やめろって言うからコップ水かなって…

986 :デフォルトの名無しさん:2013/03/30(土) 14:13:08.41
えっ、あんなの真に受けたの……?

987 :デフォルトの名無しさん:2013/03/30(土) 15:29:28.32
>985
なるほど、コップ本からとったのか

>>976
Scalaの注目度はあがってるみたいだな

988 :デフォルトの名無しさん:2013/03/30(土) 15:42:18.40
ちょっと前他スレでjava系の開発してるやつがscalaが如何に効率的か熱弁した話してて
当時はそんな無名言語推しまくるヤツ()とか思ってたけど着々と広まって行って意外だった

989 :デフォルトの名無しさん:2013/03/30(土) 16:01:23.85
なんだその又聞きばかりで立ち位置の判然としないレスは

990 :デフォルトの名無しさん:2013/03/30(土) 18:12:00.69
>>982
エラー出るのはこの板だけ?
俺はこの板でだけスレ立てができない気がする。
荒らしがいるからスレ立て規制されているのかもしれないがよくわからない

991 :デフォルトの名無しさん:2013/03/30(土) 19:54:11.21
>>976

こういうイベントが開催された事知りませんでした。
どうして、ここでお知らせしてくれなかったんですか?
出れなかったじゃないですか!

992 :デフォルトの名無しさん:2013/03/30(土) 20:00:02.84
もっと規模が小さくていいので情報交換できる勉強会の方がいいです
だれか名古屋で開催してください
会費は無料でお願いします

993 :デフォルトの名無しさん:2013/03/30(土) 20:18:13.90
991
2chはおわってる

994 :デフォルトの名無しさん:2013/03/30(土) 21:00:56.18
Scalaの開発者の映像はYouTubeにいくつかあったよ
新しいものかどうかは知らん

995 :デフォルトの名無しさん:2013/03/31(日) 03:58:23.40
富ヶ谷の工事っていつおわんの?

255 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)