2012年09月プログラム18: プログラミング言語 Scala 8冊目 (562) TOP カテ一覧 スレ一覧 2ch元 削除依頼
スレ立てるまでもない質問はここで 121匹目 (1001)
MFC相談室 mfc22d.dll (304)
NetBeans Part6 (864)
プログラミング言語 Scala 8冊目 (562)
datファイルを共有するP2Pソフト o2on 17dat (371)
【初心者歓迎】C/C++室 Ver.80【環境依存OK】 (550)

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


1 :2012/04/21 〜 最終レス :2012/11/02
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 :
>>1


3 :
>>1おつおつ

4 :
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 :
関係ないかもしれないけど
rlwrap
http://hitai.blog72.fc2.com/blog-entry-78.html
cygwin?
http://sites.google.com/site/genyamaguchi0/scala-1
諦めてvmplayer&lubuntuとか

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

7 :
一応、こんな感じで正常に動作してます。上矢印キーで前回入力行が
出てもいます(カーソル位置が半角判断になるだけで)。
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 :
CygwinでScalaやっている人って意外と多いな。
普通にWindows上でやるのと比べてどういうメリットがあるのだろう?
あと VirtualBoxとかでLinux立ち上げて、そこでScalaやるのじゃだめなの?

9 :
ckwとnyaosという手もある

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

11 :
>>8
普段Cygwinを使ってるからそれに加えてちょっとしたスクリプトにScalaも使ってる。
Scala単体で使うなら別にCygwinはなくてもいいし、Eclipseたちあげて大物書くときも
Cygwinなくてもなんとかなる。
メリットっていってもgrepやsedと組み合わせられるとか/dev/や/procで
Windowsのクリップボードやプロセスと連携できるくらいかな。

12 :
コマンド群が使いたいだけならckwとnyaosで、Unxutils落としてきてパスを通しておくというてもあるでよ!

13 :
大事なことだから2回言いました

14 :
>>12
単純に、Windowsでは、コマンドラインが使いづらいってだけだったら、nyaosで十分解決するよね。
だけど、Cygwin使う人は、やっぱり、それなりのUnix環境がほしい人なんだろうかな、って思って。
ただ、数年前と比べると最近はCygwinを使っている人は減ったみたいで、
仮想環境にLinux入れてやるって人が最近増えてきているみたい。

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


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

17 :
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 :
本当にやりたい事が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 :
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 :
>>18, 19
ありがとう。
実際には scala 標準ライブラリのクラス (具体的には scala.collection.mutable.BitSet) に機能を追加したい。
protected なメンバにアクセスする必要があるので継承して子クラスを作るといいのかな、と。で、親クラスに 3 つあるコンストラクタを子クラスでもそのまま使いたいというシチュエーションです。
と思ったんだけど、 trait 作って new BitSet() with TraitA みたいにするのがいいのかな?その場合 companion object (BitSet) によるインスタンス生成時に trait くっつけることできないですよね。。

21 :
ライブラリなど既存のコードへの機能追加するときの有益な手法として
「Pimp my Library」パターンというものがあります。
つづきはWebで

22 :
"pimp"というスラングはもともと「Rの斡旋人。R婦に依存して生活する男。」
へぇー

23 :
>>21
ググル先生に聞いて来ました。 RichInt とかのあれだったんですね。
Pimp my Library pattern, protected なメンバにアクセスできる?

24 :
case class について質問です。
case class X(x: Int)の実体X(1)は、参照数が0になってもGCが走るまでの間
は存続していると考えていいのでしょうか?
既にどこからも参照されていないX(1)を再び生成しようとした際、GCに消され
ていなければ実体生成コストを省けるのか?という点が知りたいです。
想定している状況は、自己再帰関数内で case class X への map を行うけど、
条件にmatchしなければ作ったX(_)を捨てて、次の再帰関数呼出時にまた作り
直すといったもので、キャッシュされていると嬉しいなと思ったのです。
(そもそも小さいインスタンスを大量生成してもコストは軽微だという話はど
こかで読んだ気がしますが。)

25 :
Memoizeしようという話か?

26 :
>>24
実体はGCが走るまで存続してるけど、再利用はされないよ。
そういうしくみはないし、たとえあってもペイしない。

27 :
>>26
Javaのプリミティブラッパーはキャッシュしてるし
登場頻度や生成量やGC/エスケープ解析の具合いによってはペイしないとも言い切れない

28 :
とりあえずなんでもかんでもcase classにしてしまう病を発症してるわ

29 :
自分でキャッシュしとけ

30 :
キャッシュでくれ

31 :
ほえ?
欲しいです!でもお金ないです!

32 :
つセコム

33 :
いま気づいたんだけど、REPLって前の実行結果(res*)が次の実行へ繋がってるんだね。
scala> List(1,2,3)
res1: List[Int] = List(1, 2, 3)
scala> .length
res2: Int = 3
地味に便利かも

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

35 :
僕はLWJGLちゃん!

36 :
>>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 :
REPLでGUIってEDTで死ぬとばっかり思って試してなかった

38 :
lwjglお試しならgiter8でお手軽かんたんにできます
さんきゅーNicol (洞窟物語まだクリアしてないや

39 :
2.9.2にしてから,スクリプトでエラーになると操作不能,プロンプトが表示され
ないって状態になる時がある.
windows 64bit + cygwin(mintty) + scala 2.9.2

40 :
どうせ cygwin(mintty) のバグだろ

41 :
Scalaくん、最近使ってないんだけど調子どう?
何か新しい話はある?

42 :
4 です。
>>39
たぶん、scala コマンドの -echo が効いたままになってしまうから
だと思います。Scala の scala コマンドは単なるシェルなので、
内容を読むことができます。
読むとCygwin は特別待遇であることがわかります。
環境が Cygwin だと認識すると, cygpath を利用したかなり
丁寧な対応を行ってます。その中の
stty -i canon -min 1 -echo
が原因かと。REPLではこうしないと端末のコールバックと重なる。
私は Cygwin + TeraTerm ですが、残りの環境はたぶん同じです。

43 :
>>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 :
43です。>>43 のサロゲートはJavaの内部コードである UTF-16 の話。
ちなみに、emacs shell内なら(emacs term ではない)
現時点でも Scala REPL は UTF-8 を正しく操作できます。
環境変数 TERM が異なるため jline を使わないから。
ただ、jlineを使っていないので、TAB補間や矢印での履歴
再表示は不可能。

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

46 :
>>43,44
ここにきてえらい地味〜な話をもってきたね(笑)
半年ぶり(?)くらいで使ったら、ぜんぜん覚えてなくて一苦労だった。
ところで、コマンドラインで、
scala> Double.[TAB]
とかやって、出てくるメソッドに使えないものが入ってるんだけど何でだっけ?
java.lang.Doubleのメソッドとごっちゃになってるの?

47 :
>>46
あと、相変わらずコンパイル遅いのは閉口する。
ネイティブコンパイラまだかね。

48 :
>>47
ネイティブコンパイラって、ソースコードがScalaで書かれてる
コンパイラって意味?
javaコマンド(JVM)を使わずにclassファイルを作るコンパイラ
の意味??
OSでのネイティブコードを吐くコンパイラの意味???

49 :
>>43
今、Jline2に力を入れてるのは readline に Jline2 を使ってる
Jruby のメンバーらしい。Scala は REPL の部分のみに Jline2 を
使うだけなので Jline2 の進歩を待つ方がいいかも。

50 :
>>46
の候補の話なのですが、たとえば
Double.longBitsToDouble(Long)
のことです。
scalaのドキュメントみても、そんなメソッドないし
java.lang.Double.(...)
で使うのが正しいのでしょうか?

51 :
>>48
うーん、本当に速いならどっちでもいいけどJVMは欲しいかな。
いま現状で最も速いのはfscなんですか?

52 :
sbt使えよ

53 :
REPLでcase classを入れ子にしてTreeつくって遊んでたら
toString()がNode,Leaf全部辿って文字列返してくれようとしてて
heap食い尽くしてた、よくばりさんめ

54 :
>>51
スクリプト言語でもよくネイティブコンパイルっていう人がいるが
ネイティブかどうかそれ自体は基本的に速度に影響ないぞ。

55 :
GCJがポシャッた経緯とか知らないんだろうな

56 :
Scalaを使う人の呼び方を調べたのですが定番がないようです。
子音で終わればerを付けるだけですが、aで終わるからそうは行きません。
Scalalianという提案も見かけましたが、
AustralianはAustra人ではなくAustralia人です。
そこでaで終わる国の人を何と言うのか調べてみました。
America   → American   (アメリカ人)
Australia  → Australian  (オーストラリア人)
Cuba     → Cuban      (キューバ人)
Guatemala → Guatemalan  (グアテマラ人)
Scalaを使う人はScalanと呼ぶ事にしませんか?

57 :
スカラ←◎
カルト教団御用達(あいつらどうなったんだろ?

58 :
>>56
Mohicanでいいよ

59 :
>>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 :
リストがソート済みかって判断しようとして詰まった・・・

61 :
val list = List(....)
list.sorted == list

62 :
なんか関数型の練習問題みたいだけど
@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 :
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 :
>>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 :
関数化したもの
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 :
60
返答サンクス.できなくはないんだけどぱっとできなくない?


67 :
日本語でおk
エスパー回答すると、>>65の解法は全ての要素を辿るわけではなくて、
大小関係を満たしていない組が見つかったらそこで計算を打ち切るから
速度面での心配はない。
slidingはIteratorを返すのだけどIteratorについての理解はもちろん済ませての質問ですよね。

68 :
違うな、>>66 の暗号は「ぱっと(parと)できなくない?」と解読できる
つまり…並列処理コレクションで高速に問題が解けないかということを問うているんだよ!
ΩΩΩ<な、なんだってー!!

69 :
Finagleハッカソン〜Twitterを支える基盤技術をみんなでハッキングする会〜第一部 - ニコニコ生放送
http://live.nicovideo.jp/watch/lv93012184
Finagleハッカソン〜Twitterを支える基盤技術をみんなでハッキングする会〜第二部 - ニコニコ生放送
http://live.nicovideo.jp/watch/lv93393157

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

70 :
>>69 隣の家からご飯借りて来い

71 :
それママカリ

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

73 :
んなクソ遅いコード使い物にならん

74 :
おいおいニコ生中止かよ
どんだけチキンハートなんだよ
晒される覚悟がないやつはScala使うなよ

75 :
ustはするみたいだぞ

76 :
そんな頭の悪い一年生議員が吐くような安い野次じゃマサカリは飛んで来ないな(嘲笑

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

78 :
ScalaとJavaどっちから勉強するべきか教えてください

79 :
うわぁこれニコ生中止して正解だわ
15人くらいしか見てねえし
Scala知らないやつ多すぎ
言語知らないやつがFinagleで何作るんだよ
何も準備しないでこういうのに参加するやつなんなのまじで

80 :
>>77
実用的にも普通はMap使うんじゃね

81 :
>>77
まだソート絡みの課題が終わらないのかい?かわいそうに...

82 :
そーっとしておいてやろうぜ?

83 :
ソートー苦労してそうだ

84 :
>>81
そういうつながりだったのか
おまえよく気付いたな

85 :
>>80
Map遅えしメモリ食うだろ。
そもそも、sorted arrayを標準ライブラリに入れないセンスはいくらなんでも変だぞ、
とゆー、ポリシーの話。
ついでに言えば、なんで標準のPriorityQueueにはdecreaseKey操作が無いんだよ。
どういうセンスなんだ?

86 :
そんなもの欲しがるのはお前だけなんだって
常にソートされている状態が必要なら、生成時に最初からソートされた値を使うし
後から要素を追加されてもソートされている状態が必要なら Map, Tree を使う
仕様も決めないでコード書こうとしているからそんな下らないところでグダグダ悩むんだよ

87 :
ぼくのかんがえたさいきょうのコンテナ(笑)

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

89 :
10万行って少なくね?

90 :
>>89
うん。まあ、初心者向けにはいいんじゃね?

91 :
Cしか知らないやつが一気に背伸びしてScala覚えた感がすごい

92 :
Scalaって背伸びして覚えるようなもんか?

93 :
なんでbinarySearchぐらいで、ぐだぐだ言われてるのか理解出来ない。

94 :
ScalaよりCの方が遥かに難しいだろ。ただし、言語の外まで含めればの話。
もちろん、言語仕様内ではScalaの難易度はCの100倍だ。
Scalaは選ばれた天才のみが触れることを許される試行の言語。
まあ、>>78はScalaは百年早いからJavaを触るべきってこった。

95 :
言語外まで含めてもCのほうが簡単だと思うが
C++ならまだしも
Scala使うならJavaまで精通していなきゃいけないから

96 :
>>88みたいに漠然としたことを言っちゃう奴は大抵自分もろくすっぽ読んでない

97 :
Javaしか知らないやつが一気に背伸びしてScala覚えた感がすごい
うん、どこかで聞いたフレーズかと思ったら、これだった。

98 :
Mapは遅くてメモリ使うから使わない
binarySearchを入れないのはScalaのポリシーがおかしい

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

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

99 :
デタラメ言い放つの流行ってるの?

100 :
kmizuさん滑舌悪すぎ

101 :
>>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 :
さすがScala様!俺たちにできないことを平然とやってのけるッ!そこにシビれる!あこがれるぅ!!

103 :
大口叩く
心を慰めあう
両方やらなければならないのが
幹部の辛いところだ

104 :
いやだから、入れてない理由が知りたいのであって、コード例なんてどうでもいいのよ。

105 :
自分でメール出して尋ねてみれば

106 :
どうしてもMapを使いたくない、
配列で二分探索しないと気がすまないというやつは
Scala使うの向いてないってことだろ
その程度のオーバーヘッドは随所に発生してるぞ

107 :
>>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 :
>>107 いいね!
IndexedSeqOptimizedをPimp my LibraryしてindexOfを拡張すればまったく違和感なくなるな

109 :
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 :
あえて無いことを選択してるんじゃないだろうからイシューあげてみれば?

111 :
>>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 :
やめとけバカにされるだけだ
JavaのArrayが云々って時点でセンス無いんだよ、お前は型無し言語でも使っとけ
http://stackoverflow.com/questions/4226947/scala-replacement-for-arrays-binarysearch

113 :
>>110
あえてだと思うけどね
やっぱりソート済みなことを表現できないArrayに
binarySearchがないのはScala的に当然だと思うんだよね
静的言語がなるべく静的に表現しようとするのはポリシーの問題じゃなくて、実益の問題だと思う
メタファーとかアナロジーとか意外と精神世界にいきがちなプログラミングの世界で
実益を第一に考えて、その裏付けとして理論があるのが関数型の世界なんだよね
逆だと誤解されることが多いけど

114 :
if else return 使ってドヤ顔の手続き脳が関数型語られても

115 :
いや、構造分解とかしないのにmatch使っちゃ駄目だから
なんとなく関数型っぽいとか、行数が減りそうとかそういう理由で使っちゃ駄目
プログラムは全ての要素に意味を持たせないと
あと、内部関数にlambdaって名前をつける文化もScalaにはないから
Scalaのソース取ってきて検索したらすぐにわかることでしょ?
たった10行ちょっとのコードなんだからちゃんと書こ?
この調子で何千行、何万行って書いたらとんでもないプログラムが出来上がっちゃうから
と、会社に入ったらこういう説教かましてくる先輩とか出てくると思うけど
冷たくあしらわないでねw

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

117 :
でも、先輩!
「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 :
>>117
それはちゃんと意味あるから
部分関数って自分が処理しないものはスルーしなきゃいけないんだけど
publisher.subscribe {
case i =>
if isPrime(i) {
println("found prime", i)
} else if (i%2 == 0) {
count += 2
}
}
こう書いたらこの部分関数が全部処理しちゃうからね
だからガードを使って自分が処理できるところだけのコードを書く
ガードっていうのはパターンマッチの後ろについてるif文のことだけど
/* ignore the rest */ って書いてあるしね

119 :
かたなし先輩ェ...

120 :
scalaインタプリタで
e.
まで書いてタブを打つとeのメソッドやフィールド一覧を出してくれますよね。
だけどeの型が自前のJavaのjarファイル内のクラスの場合には
タブを打ってもpublicのメソッドやフィールドの一覧が出てきません。
なにが原因なんでしょう?
Javaの標準ライブラリクラスSystemなんかではうまくいくので
Javaだからというのが原因でない気がするのですが…

121 :
よくわかんないけど、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 :
>>121
ありがとうございます。
ただ、私の環境ではsbtでも駄目でした。
たぶんWindows 7 64bitだからとか何か環境問題があるのだと思いますが…
とりあえず補完はeclipseの方でやることにします。

123 :
>>122
sbt のバージョンが違うだけとか。
scala REPL の一部は、まだ古いバージョンの sbt を使って
作っているようですし。

124 :
部分関数って自分が処理しないものはスルーしなきゃいけない(>>118)
sbtなら補完できるはず、やってないけど(>>121)
なんだこれ?

125 :
部分関数は数学的な定義の話か?
実際の動作はそうじゃん
話がガードを使う必然性の話だからね
部分関数って何ですか?ってことならまた別の回答したと思うけど
下はどう見てもやってるじゃん
質問者がどういう実行環境なのかわからないから、
「sbtでやってないならわかんないけど」って書いたけど
っていうか実行しないでjoda-timeでどんな補完するのか把握してたらそっちのほうがすごいわ
結局何が言いたいねん
言いたいことはもっと直接来いや!

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

127 :
本人が手続き脳なだけで後輩にもそれを強制するとか害悪でしかない

128 :
末尾再帰できない再帰で、スタックオーバーフローが出る場合の対処って、どういうのがイケテるんすか?
今はStack使って自力でDFSに書き直しているんだけど、
どうも手続き言語的な場当たり対処な気がしてて、気がとがめる。
関数型的にはもっと洗練されたやり方がある気がする。

129 :
argvの要素数上限ってどっからくるの?

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


131 :
http://farumaki.com/?p=top&genre_id=55

132 :
>>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 :
>>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 :
Mybatis for Scala
http://blog.mybatis.org/2012/05/mybatis-for-scala-beta-available.html

135 :
def (v: => A)
の場合、vという引数にはA型の値が入っていて、メソッド内で参照したタイミン
グで評価される(遅延評価)ですよね?
def (v: => A => B)
の場合は、vにはA型の引数を受け取って、B型の結果を返す関数が入っていると
いうことで間違いないでしょうか?
上記の認識に間違いがない場合、
def (v: => A => B => C)
っていうメソッドの場合、引数の意味が分からない・・・

136 :
>>135
A => B => C は、A => (B => C) ってこと。
後は分かるな?

137 :
>>136
ありがとうございます!
ということは、
def (v: => A => B => C)の場合、
引数vには、
「B型の引数を受け取ってC型の値を返す関数」
という関数(これがA)が入る、ということでしょうか?

138 :
初学ですが、コップ本の1版がぶくオフで安かったのですが、とりあえず読み始めるならコッチでもいい?
それとも最新の2版?

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

140 :
実践プログラミングDSL ドメイン特化言語の設計と実装のノウハウ
第2部 DSLの実装(内部DSLの実装パターン
Ruby、Groovy、Clojureによる内部DSLの設計
Scalaによる内部DSLの設計
外部DSLの設計
Scalaのパーサーコンビネータを使った外部DSLの設計)

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

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


141 :
水島さんのツイッターは顔やめてほしい

142 :
>>140
> 実践プログラミングDSL ドメイン特化言語の設計と実装のノウハウ
http://books.shoeisha.co.jp/book/b101671.html
Scalaがもっともその真価を発揮できるのって、DSLじゃないかと思う。

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

143 :
おい、水島さんが顔アイコンやめちゃっただろ
滑舌悪すぎとか顔出しやめろとか本人気にしてるみたいだからほどほどにしろよ!

144 :
あの人の発表は滑舌どうのより話す内容に補足事項や細かい例外を
全部正確に詰め込もうとして結果わかりにくくなってる気が

145 :
意味無くmatch使うなって?
>>111 的書き方より >>109 の方が可読性が高い。
見やすくなってコードも短いというのは意味あることだと思うけど。

146 :
scalafxってgroovyfxよりイイものですか?

147 :
つーかJavaFXってどうなのよ
特に2.0になってから

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

149 :
レオナルド熊とjava太郎が握手画像のURL教えてください。

150 :
if (start > end) return -1
これって、Phython では最も嫌われる書き方だよね。

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

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

152 :
えっ、インデントの話だったの?

153 :
Pythonはこう
if start > end: return -1

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

155 :
一行ifが嫌われるのはうっかり見逃したり
次の行が実行文と間違う人がいると思ってるからなのか?
だとしたら相当なfoolproofだな

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

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

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

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

158 :
そもそもプログラミングにおいてIF文使ったら負けだと気づけ

159 :
>>156
Cで一行からでも{}付ける習慣があるのはは
ぶらさがりelse/elseifの問題があるからだな

160 :
>>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 :
香具師って何?

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

163 :
>>161
古語みたいなもんだから、気にしなくていいよ

164 :
香具師=ヤシ

165 :
>>161
奴 -> ヤツ -> ヤシ -> 香具師
こういう単語使う人って、10年後くらいにもまだScalaやってたりするのかな

166 :
10年後にはもう37歳になるのか
...早いな〜
2002〜2012と、2012〜2022だと後者は前者ほど劇的な変化はコンピュータ的にはなさそうな気がする

167 :
プログラミング言語史的にはこの10年も大したことは起きてないでしょ
C#がうまくいったのと、JavaScriptとObjective-Cが墓から蘇ったくらいで
あとはRails人気でRubyが普及したとかか
Pythonは2002年には既にある程度人気あったはずだし

168 :
>>166
Jobs が死んだからな

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

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

171 :
今唐突に言うけど水島さんエバンジェとか言っていじってごめんなさい
また戻ってきてよ

172 :
戻れも何もkmizuさんは今でもここ見てるでしょ
単に話すことないだけでは

173 :
彼は忙しそう

174 :
パーサコンビネータの使い方が何度読んでも分からんとです。
int hoge, hage[3] = { 1, 2, 3 }, huge = 5;
をパースする例とか、どっかないですか?

175 :
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 :
修正
- lazy val parse = "int" ~> repsep((defIntArray | defInt), ",") ~ ";"
+ lazy val parse = "int" ~> repsep((defIntArray | defInt), ",") <~ ";"

177 :
なんか一箇所おかしかったのを直してgistへ
https://gist.github.com/3074485

178 :
>>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 :
モヤっとしてる部分はParsers.scalaのソース読んでちゃんと消化しておくといいね
typesでまとめ上げてしまったら後に続かないから詰む
def definitions = (defInt | defString).*
def defInt = "int" ~ ...
def defString = "string" ~ ...

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

181 :
で、逆引きレシピの具合はどうなのさ?

182 :
銀色に光ってるよ

183 :
俺の隣で寝てるよ

184 :
締まり具合はどうなの?

185 :
まあ実戦本よりは実戦感あるよ
コップ本の次に読む本としてはいいかもしれない
Scalaで何ができるのかというのがわかる
個人的にはもっとカタログ的なライブラリの比較みたいなのが欲しかったかな
どのライブラリ使ったらいいか悩んだりするから
でもさ、本が出るたびに思うけど、前半のScala入門の話とかいる?
「varとvalの違いを知りたい」とかさ、
たぶん日本で出てる全部のScalaの本に書いてあると思うんだけど、まだ書く必要あるの?

186 :
Scalaが関数型言語とか...しっくりこねえ

187 :
んー Ensimeは英語がなんかだるいし、
Eclipseのプラグインの方はただInstall new softwareから引っ張ってきただけなんだけどエラー吐く。
どういうこっちゃ

188 :
英語がだるいやつはプログラミングなんてやめちまえ

189 :
いやいやw なにいってんの

190 :
函数モヒカンの集い 2012 in Tokyo
おまいら参加する?

191 :
なにそれ?
まあどうせHaskellの連中がデカい顔するだろうから行かないけど

192 :
Lisperのほうが強い

193 :
Lispはいいや
奴らはマクロしか取り柄ないし
異様なimmutable推しのClojureはちょっとやっかいだが

194 :
>>193
CLOSもあるよ!

195 :
そのイベントは型付きラムダ計算が主流なので、erlang、lisp族は少し肩身が狭い

196 :
言語ディスとか気持ち悪いから消えてくれませんかね

197 :
the world is immutable.

198 :
なら新党結成だ「関数の扱いが第一」

199 :
>>198
よくできてるネタじゃないか
Twitterあたりでやるべきだったな

200 :
カカッと@functional2chをフォローしている俺に隙は無かった

201 :
scalaってなんなん

202 :
ナンではありません

203 :
雪花菜っておから?

204 :
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 :
諦めて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 :
>>205
上は def main(args: Array[String]): List[Int]
下は def main(args: Array[String]): Unit
あとはわかるな?

207 :
>>206
おうふ!R!
そっか、戻り値は最後のアレだっなー。
そっかそっかー。

208 :
= {にしなきゃいいのに

209 :
初学者ほど手を抜いて格好つけて、
つまらないところでハマる。
おまけにそれを他人のせいにする。

210 :
まぁ一度顔真っ赤にしたら次から慎重になるさ、誰もが通る道だろ

211 :
使い方をよく理解していない省略記法を使って節約できる時間と、
それでハマって無駄にする時間を天秤にかけたら、どちらがいいかは明らかだな。

212 :
カッコつけたも何も、サンプルプログラムなんだけどなぁ(^_^;)
= {
以外で便利な表記法あるっけ

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

214 :
トンクス
慣れが必要だなぁこの言語。
楽しんでみるよ!

215 :
Scala Style GuideではUnit返すメソッドは略記法使えと言ってるよな
http://docs.scala-lang.org/style/types.html
自分はこっちの方が分かりやすいし短くなるから :Unit = つけるより好き

216 :
何のための型システムなんだ
そんなもん検出できるからどっちでもいいだろ

217 :
ここまでの流れをわかったうえで
そんなこと言ってるのか?

218 :
Java 8 vs Scala: 特徴を比較する
http://www.infoq.com/jp/articles/java-8-vs-scala

219 :
infoQでこんな長い記事初めて見た

220 :
右サイドにある特集記事はこんな感じじゃね

221 :
たまにはGroovyの事も思い出してあげてください

222 :
正しいプログラミング言語の選び方
http://www.startup-dating.com/2012/07/developer-programming-languages/
どうせScalaなんか入ってないんだろうなと見てみたら
思いっきり入ってて逆にどうかと思ってしまった

223 :
>>222
金融なんかは非プログラマがプログラミングを強いられる場面が多いんじゃね?
っで、これまでだと簡易言語を導入してたけど、今時はDSLに置き換わってる
のかな?って気がする。

224 :
金融会社Jane StreetでOCamlに置き換えた例
なぜ次に学ぶ言語は関数型であるべきか
http://ymotongpoo.hatenablog.com/entry/20111105/1320506449

225 :
https://www.coursera.org/course/progfun
scalaのオンライン授業がもうすぐ始まるよー

226 :
scalaの導入事例増えてるよ
今年か来年頭には有名企業からも採用事例としてプレゼン資料というか、勉強会資料が続々でてくると思う
もちろんscalaエンジニアの募集もね

227 :
あきれるわ
なんでいつも求人がないのよ…?
来年っていつの来年よ?

228 :
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 :
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 :
■. 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 :
>>229
val の後にタプルを書いた場合はパターンマッチと見なされるが、
パターンマッチの中では大文字で始まる識別子は変数ではなく定数と見なされるから。
つまり最初の例では 1 を定数 X とマッOしようとして、X が見つからないのでエラーになっている。
どうしても大文字の変数名を使いたければ
val t = (1, 2)
val X = t._1
val Y = t._2
のようにするしかない。

232 :
パターンマッチでしたか
ありがとうございました、おかげですっきりしました

233 :
そういえばそんな決まりがあったな…
すっかり忘れてた。勉強になったわ。dクス

234 :
trait AttrHelper[+Holder[X]]
って表現のHolder[X]の部分がなんなのかよくわかりません

235 :
なぜそれを今知りたいんだ

236 :
個人で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 :
ここから抜け出すには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 :
ステマ通報しといた

239 :
javaやlinuxは手間がかかる?
ここから抜け出すにはiPhone一択?
じゃあScalaでAndroidアプリ作ればいいんじゃないかな(´・ω・`)

240 :
言いたいことは、個人でアプリなりwebサービスを作って提供できるようになれ!ってとこか。
されに関しては同意だ。

241 :
SL4AScala

242 :
trait AttrHelper[+Holder[Z]]
って表現のHolder[Z]の部分がなんなのかよくわかりません

243 :
>>242
このスレには>>234で投下済みだ。
別スレを回ろう。

244 :
http://togetter.com/li/17462
http://yuroyoro.hatenablog.com/entry/20110126/129604334
これとこれ見ろや
っていうかむしろ「AttrHelper、Holder」で検索すると真っ先にこれが出てくるレベル
それでも理解できないならScala使うのやめよっか…

245 :
別スレで回答貰ったんで、もういいです

246 :
Scalaは関数型プログラミング言語ではない?

247 :
まず関数型プログラミング言語とは何か定義してください

248 :
ああーん?Wikipedia大先生に教えてもらってこいよ!!

249 :
泊稼働させないと本当は25%程度不足するよね。

250 :
北電社員乙

251 :
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 :
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 :
>>252
別の型に適用させるにはどうすればいいの?
implicitを型別に書くのかな?

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

255 :
abstract classとtraitって
どう使い分ければいいでしょうか?

256 :
Context boundがよくわからないです。

257 :
>>255
コンストラクタに引数があるかどうかじゃない?
基本的にtraitで済むならtraitでいいかと
たまに引数はいらないけどimplicit paramaterが欲しくてabstract classになることもある

258 :
>>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 :
型クラスってやっぱり駄目だな(キリッ
そのmyMapがダメダメなのは分かるがね

260 :
同ダメなの?

261 :
どうせHaskellerだろ?
おつむもPureだから関係ないスレにしゃしゃりでてくるんだよなー

262 :
きもいimplicit paramaterで型クラスを模倣できる!とか言い出すからだよ
どんだけHaskellにコンプレックスあるんだか

263 :
こういう宗教戦争、嫌いじゃないわよ。

264 :
ていうか、>>258がサッパリ分かりませんわ。
ジャバ厨にスカラはむづかしすぎる(何故か変換(ry

265 :
ジャバ厨を名乗るのはgenericsを理解してからにしてください!

266 :
まあ、Javaのジェネリクスには型コンストラクタないでしょ

267 :
型クラスは、フレームワーク実装者の秘奥義くらいの扱いにしておいた方がいいと思う。
バンピーが扱うには高度過ぎる。

268 :
Map[String, Any]なマップに
ValueとしてInt、String、Doubleを混在して入れた場合
getOrElseだと型がBがAnyになっちゃうけどどうすりゃええの?


269 :
設計からやり直せ

270 :
>>258
def myMap[F[_]: Functor, A, B](a: F[A])(f: A => B) = implicitly[Functor[F]].map(a)(f)
なんでこんなに複雑に記述しないといけないの?

271 :
Scala逆引きレシピ すぐに美味しいサンプル&テクニック300
って、本、なかなか良いな。

272 :
カレントディレクトリにある全ての*.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 :
Scalaがどうとかいう以前にJavaの文字列のendsWithを使うといいと思います

274 :
>>273
ありがとうございます!

275 :
>>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 :
>>271
> Scala逆引きレシピ すぐに美味しいサンプル&テクニック300

だが、

277 :
どうした途中送信か?

278 :
>>275
それも出来ました、ありがとうございます!
scalaIOって良いですね

279 :
scalaの関数内関数って、普通の関数と比べてオーバーヘッドありますか?
外側のローカル変数の書き換えもできるようなので、何か特別な変換をしてそうなのですが。

280 :
小さなことだけどこの板って>>276こういう風に途中送信だかなんだか
よく分からないものが書き込まれても本人訂正しない奴が多い
PG/SEってその程度も出来ないくらいに衰弱しているって事なんかなってたまに思う

281 :
>>280
確かにこういう2chのレス一つからプログラマの力量は伝わってくるな

でも、

282 :
>>280
「多い」と主張するからには、多い根拠を示してもらおうか

それゆえ、

283 :
だがしかし、


284 :
>>279
普通の関数、というより、外側のローカル変数を利用しない限りオーバーヘッドは発生しない
逆アセンブルしてみるとわかるけど、通常のメソッドと衝突しないようなメソッド名のメソッドができる
外側のローカル変数を書き換える関数内関数では、オーバーヘッドが発生する。これは主に、
外側のローカル変数を書き換えられるように、mutableなセルで値をラップするため。まあ、
普通は気にしなくていい範囲のオーバーヘッド

285 :
外側のローカル変数を読む場合はその時点の値を引数で渡すんだっけ?

286 :
クロージャから自由変数に破壊的代入を行う設計ってどうなのって思う...
すなおに関数の戻り値で置き換えるかDynamicVariableかましたい

287 :
>>280
異論があるけど下手な発言すると総ツッコミ来るから怖いんだよ。
察してやれ。

288 :
近い将来に引数も型推論してくれる予定とかってありますか?

289 :
ありません

290 :
f(l: List, x: String, y: String)
g(l: List, x: String, y: String)
をf(g(x))みたいに書きたいです。どうすればいいの?

291 :
(f _ ).tupled compose (g _ ).tupled

292 :
日本人は マスコミ電波で動く ロボット人間
日本人は、先進諸国で飛び抜けてマスコミ報道を鵜呑みに
信じやすいことがこの動画で実証されています。
いわばマスコミ報道の「鵜呑度」を国際比較すると、
日本人は、先進国中ダントツに「鵜呑度」が高く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 :
鵜呑みにする率は同じだけど、他の国はマスコミの報道が多種類あるだけという説に一票

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

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

296 :
Javaのゲネリクスがく普及してるなら勝機はあると思うんだ

297 :
当分は、ハイスキルなバックエンドプログラマーの秘密道具、みたいな感じかなぁと思う。
例えば、SIとかの労働集約的な職場で普及するとは確かに思えん。
あとは、Play2がどこまで行けるかだなー。
RubyだってRoRが出てくるまでは(ry的なところがあったわけだし。

298 :
JVMとJavaAPIを使えるということ以外の利点が見つからない

299 :
雇う側が"Java PG(笑)"をフィルタできるのは利点だな

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

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

Scalaが本領を発揮するのって、DSLとか、もしくは科学技術計算じゃない?
http://mwongstyle.com/wordpress/?tag=scalalab
最近は、中流プログラマにさえ、ビックデータを行列計算して統計処理とかが必須になってきているし、
いまどきの情報工学出身の新卒プログラマは、そういうの得意だろ。


301 :
言語の良さを宣伝するのは勝手だけど、教育コストの高さも考えてくれないと困る
なんだかんだ言ってC言語が一番教育コストが低い

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

303 :
scalaがネイティブなら使ってもいいが・・・

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

305 :
利点がわからないなら普通にGroovyでも使えばええがな

306 :
ボスの命令でイヤイヤScalaで書かされてる僕ちゃんの泣きごとだろ
当人たちの能力の無さでどうこうなろうが知ったこっちゃないけど
エセScala使用実績に釣られて巻きぞえ喰う奴は悲惨だよな

307 :
嫌々Scalaやってるやつとか代わってくれよ

308 :
ですまとかぶらっくそうでとてもとても

309 :
本当に余裕なかったらScalaなんか使わんだろ
とてつもなく頭の悪い上司なら別だが

310 :
>>309
本当に余裕がなくなれば途中からJavaに移行できるから、仕事ついでに新パラダイム言語の教育させようと思ったらScalaは悪い選択じゃない

311 :
最初から関数型とかやる気ないやつに押し付けることないよ
わかる気がないやつには一生わからない
まあオブジェクト指向も同じだが

312 :
いつになったらVMじゃなくてネイティブ作れるようになるの?

313 :
もうバイナリでいいよ

314 :
>>312
javaでネイティブコードを生成するプロジェクトは、結局はC言語で開発することがほとんど
scalaを前提にした設計をC言語で実装する悪夢を考えてほしい

315 :
>>300
>下流プログラマは、知っている範囲だけでプログラムすれば十分なんだよ。
自分が書くだけなら問題はないが、他人のコードを読む・使うことまで考えると、
使われうる全てのパラダイムを押さえないと言語を使いこなせなくなってしまう
要するにC++ってこと

316 :
ネイティブならHaskellでいいじゃん
CはOOPはできるんだけど、クロージャがないから関数型はしんどい

317 :
針小棒大にScalaのここがわからんと騒いでるやつには、
だったらJavaで開発するときに言語やフレームワークの仕様を隅々まで把握して使っているのか?と言いたくなる

318 :
>>302
比較対象の問題でしょ
個々の機能に関してはシングルパラダイムの言語ほど
洗練されているわけがないので
型理論的にScalaは何か凄いかっていうと、先進的というほどではないし
並列性もそこまで目新しいわけではないし(Erlangみたいに古い例もある)
結局、Scalaに残る独自性は、それらがとりあえず一通り
詰め込まれて一つの言語になっているという事と
Javaとの互換性が考慮されていること

319 :
とりあえずJVMで動く静的型関数型言語が他にないという問題が大きいな

320 :
>>318
言ってる自体は一理あると思うけど、元のレスのぼかされてる比較対象は書き方からして、
そーいうシングルパラダイムの洗練された言語ではないだろう。
型理論的にScalaは凄い先進的、かはともかく、核となるは独自性強いというのが自分の見解
見た目的にはJavaの型システムに色々のっけた、ように見えるけど、核にあるのは型をメンバに持てる
オブジェクト、というもので(これはResearchのところみてもらえばわかるかと)、それほど研究されてたもの
じゃないと記憶してる。無論、Scalaが一番先に手をつけた、とも言えないが
並列性は、言語レベルでは特に目新しいことはしてないね。どちらかというとライブラリのレベル。
scala.actorsはもうAkkaに置き換えられるのが決まってるからそっちは念頭に置いてなかった。
Scalaという言語とプラットフォーム自体は、最初はそれほど独自性が無くて、既存の機能のうまい
組み合わせ、という面が強かったけど、最近は良くも悪くも独自性が出てきてる気がするよ。2.10とか
みてるとね…

321 :
>>317
Javaの言語やフレームワークの仕様を教育するコストと
Scalaの言語やフレームワークの仕様を教育するコストを比較すると、
Javaの方が低い
理由は、Scalaを選択しても、なんだかんだ言ってJavaAPIとフレームワークを利用させられることになるから
どちらにしろJavaを教育しなければならない

322 :
>>317への反論になってないぞw
>>317は、
Scalaわからんとか騒いでるやつはJava言語やフレームワークを熟知してんのか?してないんだろ?
ならScalaでわからんところあっても使えるだろうよ、と言ってるわけで、話ずれてる
教育コスト論としてはもっとも。最近はScalaのライブラリが増えてきたとはいえ、J2SEのAPIは知ってないと
実開発としては使えないし。フレームワークレベルでは、そろそろJavaのを直接使わなければいけない局面
は減ってると思う。「準」標準ライブラリを現状より増やすなり安定させるなりして、J2SEのAPIを直接叩かなければ
いけない場面をもっと減らして欲しいとは思うね。
ただ、Typesafeが先日1400万ドルの投資を受けたニュースのコメント見ると、そういう地味で重要な話より、性能的に
スケールするプラットフォームとしてのScalaに重点を置きそうな気がする。Scalaの大手顧客を考えると無理からぬ話
ではあるが…

323 :
>Scalaわからんとか騒いでるやつはJava言語やフレームワークを熟知してんのか?してないんだろ?
>ならScalaでわからんところあっても使えるだろうよ、と言ってるわけで、話ずれてる
それも大概極論だな。
知っていなければならないことがJavaよりScalaの方が多いってはなしだろ。
「使える」の範囲が狭けりゃ、そりゃあ「使える」だろうよ。

324 :
そんなこといいから未経験者が食いつくようなscalaのいいとこコードと共に列挙してくれ

325 :
どっかの宿題スレにactorつかったNP問題の近似解法が書かれてて
閾値とコンテキストを適切に定義できればActorでスケーラブルに問題を解ける良い例だなと思った

326 :
>>323
だからずれてるって。元のはJava知ってる奴がScala新しく始める前提の話なんだから
JavaプログラマがScalaを開発で「使える」ようになるために知らなければいけない部分と
Java未経験のプログラマがJavaを開発で「使える」ようになるために知らなければいけない部分を
比較しないといけないんじゃね?
俺が思うに、まともなJavaプログラマなら、better JavaくらいのScalaでよけりゃ数日あれば習得できるよ。better Java
を恐れるな(Scalaらしいコードがすぐ書けないことを恐れるな)って言葉をどっかのScala採用企業の技術者が残してたけど、
そういう心理的な側面は大きいと思う。あるいはコミュニティの問題かもしれないが。
知らない土地にいって、その土地らしい作法が出来るか不安がってるような、そんな印象をよくうけるわ

327 :
>>325 これか
http://toro.2ch.net/test/read.cgi/tech/1276873238/856
https://github.com/tono-nakae/package-loading-problem
なんでたった200行で出来るのかもう謎技術だ
ここまでくるとJavaの知識に付け焼き刃でどうこうなるレベルじゃねーな

328 :
関数型で200行あればかなりのことができるかなー

329 :
Scalaのいいとこ→ワイドモニターに適している

330 :
>>324
eed3signさんのtetrix連載でもあるようにテストを書くまでもないちょっとした確認なら
sbtのconsole/console-quickつかってREPLでパパっとできちゃうところ
んで、最終的には清書してテストケースにする
http://eed3si9n.com/tetrix-in-scala-day10

331 :
>>328
メガデモみたいなブームを作ろうぜ
200行でつくるFPSとか

332 :
>>322
基本的にプログラマはどの言語も熟知してないので、使う=教育 と同意
Javaすらも熟知してないのにScalaなんか使わせたくない

333 :
>>324 >>331
scalatron AI作成コンぺとか盛り上がってるな
http://geekblog.tv/2005
LEGOマインドストームによるデザイン駆動型開発入門講座とか参考にしてやれば
会社のセミナー費用をカモにしたビジネスモデルにあてはめれるんじゃね?

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

335 :
C++さん…

336 :
大学はポインタと関数でもう限界
C++は無理
Lispも無理

337 :
全くの初心者にとっては手続き型も関数型も似たような難易度じゃないかな?

338 :
>>334
君、大学行ってたの?
別にプログラミング言語なんてそんな教えんよ
せいぜい必修はCとFortranくらいで、あとはLispがあるかどうか

339 :
>>338
最近は Fortran も教えない
ただ、先生方が Fortran を使いたがる
Lisp系の場合は、最近はLispじゃなくてSchemeだと思う

340 :
ICOT出身の先生はPrologを教えたがる

341 :
手続き型の言語に乗っかってる関数型言語でプログラミング入門は嫌だな

342 :
もちろん大学による差はあるけど、CS専攻だとCとJavaを必修で教えてるところは多い
Pascalは教育用言語としてはもう大体駆逐されてる。第一デファクトな処理系がまともに無いし
後は教員によりけり。SMLやOCaml、Schemeの授業やってるところは国公立だと
そこそこある。Schemeは言語仕様がコンパクトでちゃんと定義されてるから、教える
側には扱いやすいってのがあるのかな。Haskellの授業やってる大学もあるけど、
こっちはまだ少ない気がする。
Prologは40代以上の先生だと時々教えてたりする
この辺の年齢の教員はPrologなどの論理型言語に馴染みの深い先生多いから
CSの授業でFortran教えてるところはかなり少ないと思う。どっちかというと他分野で
Fortran使った計算しなきゃいけないので教えてるってケースがほとんど

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

344 :
なんにせよScalaは無いわ

345 :
別にいくら流行っててもC#もRubyも大学じゃ教えないわ
そもそも大学では、プログラミング言語の習得なんていうことは
学生が自主的にやることであって、いちいち教わることじゃない
Scalaが難しいってぶつぶつ文句言ってるやつとか、
Haskellをやってドヤ顔で高尚なことやってる気になってるやつは、
そんなもんパソコンの使い方を覚えることと同レベルだってことがわかってない
仕事なり研究するなら、できて当然なんだよ

346 :
Scalaをやってドヤ顔

347 :
>>343
記号処理の定番テキストがscheme使ってるから、scheme教える大学は多い
MITの罪は重い

348 :
>>345
休み明けに投入されるプログラマの方々はプログラム言語などいちいち教わることじゃないどころか勉強すらするものじゃないと思ってるから、
こっちはいちいち教えなければならない

349 :
Scalaの弱点は得意とする問題領域があいまいという点
一番得意な問題領域がJavaとの連携というオチ

350 :
だから静的型関数型言語に何の利点も感じないやつはScala使わなくていいよ
Groovyでも使っとけ
Groovyですら覚えるの面倒臭いなら一生Java使ってろ
まあそうやって本当に一生Javaしか使わないやつなんてごまんと出てくるだろうが

351 :
長年プログラミング入門にC使われてたんだから
Scalaで入門だって十分有りだろう
誰得だが

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

353 :
確かにJavaのcodecsは意味フ

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

355 :
もうREPLみたいなのが無い言語は使いたくないってくらい便利だよね。
ただ初学者があれをメインで使うとプログラミングを勘違いしそうな気がする。
あくまで気がするだけだけど。

356 :
Scalaでおすすめの書籍はどれですか?
あと買ってはいけない読んではいけない書籍も教えて下さい。

357 :
REPLにコード補完機能追加きぼんぬ

358 :
>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 :
>>358
あと、Processingを使って大学で講義することも最近多いな。
情報というよりも、デザイン系の学科での話だけど。

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

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


360 :
あの・・・C++さんどこで教えてはるんですか・・・

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

362 :
C++を直接教えるところがあるかは知らんけど、
コンパイラの講義とか普通にC++知ってることが前提だったりするので、
言語系をやりたい人はC++の基本文法くらいは勉強しとるぞ

363 :
こんな広く浅くやる授業もある
http://www.csg.ci.i.u-tokyo.ac.jp/~chiba/lecture/11/#java

364 :
千葉先生は相当実戦的なほうだと思うけどね
しかし今東大だったのか…

365 :
そうか、FAで現役のC++を大学で教えないからFAが悲惨なことになってるんだな

366 :
有限オートマトン?

367 :
Factory Automation

368 :
>>362
ぶっちゃけると、教員もよく理解できてなくてC++を教えなかった
計算機プログラムの入門ならCだけでも十分だったし
実際、10年間の現場の混乱を見る限りC++なんか教えなくて正解だった

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

370 :
Scalaを教える場合もJavaを教えることになって、
Scalaが難しくてついてこれなくなるので、
結局Javaだけ教えて終わることになると思う

371 :
入門書はある。良書がない。

372 :
サードパーティライブラリを含めてエコシステムと捉える意味では、
「Scala逆引きレシピ」がいまのところ一番近いのかな<良書。

373 :
あと、ゆーじーんさんのテトリス連載は一冊の本になると面白いのではないか、と無責任に言ってみる。

374 :
>>372
最初から最後までScalaだけ使ってコンピュータ科学や計算理論や数値計算を解説する本が欲しい

375 :
期待してるよ

376 :
馬鹿には無理

377 :
>>369
教育者のレベルってどんなもんなの?
国立の情報システム科に居たけど、hello wolrd止まりの教授がドヤ顔で講義おしえてたよ

378 :
>>362
文法だけ知っててプログラムが組めるわけねーだろw

379 :
そんなのTA丸投げです
教授はソースコードなんて読みません

380 :
TAだって、ろくにプログラム書ける奴なんていないだろw
hackerあがりの準教が居ない研究室は全て行くだけ無意味な外れクジだよ
viの二画面分割でドヤ顔しているアホ教授のとこなんて特に最低だw

381 :
申し訳ないですが全く好感が持てません。
色々なスタイルや考え方がある中で、
このように自分の考えだけで言い切るような人は、ただのカタブツです。
突っ込みどころも多いため、全面的には信用できません。
しかも、聞かれてもいないのに、
いきなり話題を振り脳内豆知識を披露してきて何がしたいのか全く理解不能。
店の名前も出していないから宣伝だとは思えないですし、
すごいねーもの知りだねーって言われたいだけなのでしょうか?
2chではなく、あなたの信者だけで盛り上がればいいと思います。

382 :
とりあえず、C++の話題は以後禁止。
ここは、Scalaのスレだ。
ということで、この辺で、Scalaの話にもどろうぜ!

>374
計算理論って、オートマトンとかか?
数値計算って、ニュートン法とか?
今、流行なのは、データから特徴量抽出とか、信号処理とか、そっち方面じゃない?
で、信号処理関係には、Scalaは得意そうな気がするんだ。
FIRフィルタとか。

383 :
>>382
行列演算とパーサとコンパイラ自作

384 :
大規模データ分析を売りにするなら、まずはコレクションの性能改善からだねえ。
はやくjava.util.HashMapなどを使わずにすむようにならんかな。

385 :
>>384
今の「大規模」はギガバイトレベルだから、大規模データ分析はコンテナじゃなくて、ストリームで処理すべきだと思う

386 :
GBオーダーであればメモリに載るケースも多いんじゃない?
Javaの場合は何でもボックス化されちゃって
メモリ消費量が想定外に大きくなったりもするけど

387 :
メモリはJVMで限界が決まってるような…

388 :
>>383
>パーサとコンパイラ自作
これについては、本「実践プログラミングDSL」とかでScalaは大絶賛だな。

ところで、「Scala逆引きレシピ」は、NTTの中の人が著者らしいが、
NTTでは、Scala使っているのか?
> 著者の現場経験に基づいた実践的なノウハウ、レシピを提供します。
とか書いてあるぞ。

389 :
商用ならJVMでもっとメモリを扱うためのツールがあるようだ。
http://www.infoq.com/jp/news/2012/08/azul-zing-free
http://d.hatena.ne.jp/golb/touch/20101105/1288983622

390 :
-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 :
>>388
NTTの人なら、Erlang(かそれに似たアクターモデルの言語)を使ってるはずだから、その経験でScalaの解説をしてると予想
世間で30年くらいオブジェクト指向とか宣伝されてたけど、本当にメッセージパッシングしてるのはErlangやScalaのActorモデルだけだと思う

392 :
>>381
好感なんて持たなくて良いです。
教授である貴女方は無能でありゴミであり、税金泥棒で給料泥棒の人の屑です。
RRRRRRRRRRRRRRRRR
RRRRRRRRRRRRRRRRR
RRRRRRRRRRRRRRRRR
RRRRRRRRRRRRRRRRR
RRRRRRRRRRRRRRRRR
RRRRRRRRRRRRRRRRR
RRRRRRRRRRRRRRRRR
RRRRRRRRRRRRRRRRR
RRRRRRRRRRRRRRRRR
RRRRRRRRRRRRRRRRR
RRRRRRRRRRRRRRRRR
RRRRRRRRRRRRRRRRR
RRRRRRRRRRRRRRRRR
RRRRRRRRRRRRRRRRR
RRRRRRRRRRRRRR

393 :
NTTって下請けにパワポ送り付けて暇だからscalaとか弄ってるのかな

394 :
>>391
http://en.wikipedia.org/wiki/Actor_model
Actor Modelの考え方自体は1973年を起源としていて、
並列モデルとの間で人気が行ったり来たりしているみたいだ。
対応言語もけっこうあるな

395 :
Python版akka
_人人人人_
>Pykka─!!<
 ̄Y^Y^Y^Y ̄

396 :
アクターモデルが一番単純で教えやすい並列モデルだと思うんだけど、なんでMVarとかがスタンダードになっているのだろうか

397 :
Non-Blocking Lock & Semaphore はオーバーヘッドが無い分速いから

398 :
>>386
プリミティブ型を、プリミティブのまま格納するコレクションライブラリとかもあったりする。
最近の分散処理フレームワークは、Scala用のインタフェースを提供してるものもあるね。
手元でやるのは、軽くサンプリングして予備解析とか、集計済みのを分析とか、そういう感じかねぇ。

399 :
Scala で GUI しようと思ったら swing するしかないですか?

400 :
AWTでもSWTでもFXでもHTMLでも好きなの使え

401 :
そういやSparkなんてのがあったのを思い出した。
http://www.ibm.com/developerworks/jp/linux/library/l-sparkdataRysis/

402 :
おい、函数プログラミングの集いで何が起きてるんだ…

403 :
用事が無ければ行きたかったなぁ。

404 :
>>402
オレは今日のイベントには行ってないけど、
ksknac氏の関数型プログラミングの説明が面白かった。
http://www.slideshare.net/ksknac/120901fp-key
関数型なプログラミングは、どの言語でもできる。
関数型言語っていう言葉は適切でなくて、
たんに関数型でプログラムしやすい言語かどうかって話。

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

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


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

406 :
そりゃ、あの文化圏においてはScalaはゴミだからな

407 :
でも俺たちのリーダー水島氏はやってくれたよ
まず関数型と関係ないマクロについての発表
この時点でちょっとイベントに喧嘩売ってるのに、さらに当日いきなりボイコット
そして行かないかに見せかけてからの急遽参加でセッションを乱す
完全にこの腐ったイベントを馬鹿にしてるからね
そして発表スライド見るとどう見てもScalaのマクロをディスってるようにしか見えない
セッション参加者の時間を無駄に潰していくスタイル
水島氏は真のScalaテロリスト

408 :
約一名触りたくないのが居るんだが。

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

410 :
Javaよりオブジェクト指向関連の仕様が複雑になってるとか
どこがどうなのか具体的にいってほしいがね
っていうかErlangは関数型じゃないのかね

411 :
http://elixir-lang.org/
erlangをrubyっぽくした言語もあったな。

412 :
>>411
なんだよ、これ、シンタックスがRubyに似てるだけのErlangじゃねーか
よくこんな気持ちの悪いもの作ろうと思ったな

413 :
>>410
特にトレイトが余計だった
インターフェイスだけでいい
Javaのオブジェクト指向ですらマトモに理解させるの無理だったのに、なぜ複雑にしたし
オブジェクトプログラミング関係の糖衣構文も不必要に多過ぎる
わざわざJVMの制約入った言語を選んで使う人がタイプ数を少なくすることなんか望んでいない
Erlangは関数型持ってるけど、Scalaの関数型は何か変な言語の関数型を持ってきてる
特に代入
おかげで、似たような通信モデルなのに、自動変換できない

414 :
トレイトが余計とか自分はScala書けませんって言ってるようなもんじゃないか
Javaを理解できない人がいるように>413がScalaを理解できないだけ

415 :
理解できないのにScala触る必要は無い

416 :
仕様として複雑化してる部分もあるのは間違いないが
それによって表現力が増していたり記述が簡潔になっていたりする面もあるので
トレードオフではある
とりあえずBetter Javaの部分と、
一般的な関数型言語の部分(高階関数とか)を使う分には
おいしいところだけを得られて良い感じになるんじゃないの

417 :
kmizu氏のスライド見たけどdisじゃなくね?
Nemerleとの比較で△が多くて残念だけど。
割とフツーのマクロで地味に嬉しいと書いてるじゃん。

418 :
407はこのスレにはりついているアンチだから、気にしない。

419 :
kmizuフィルターを通してあの評価なら
ScalaのマクロはRって事

420 :
>>405
「参照透過性を満たしているかは値域で決まる」って話でしょ。
すげぇ重要な話だし勉強になったが。

421 :
>>414
書いた本人すら理解できないコードを保守する側の身にもなってくれとしか

422 :
むしろJavaからオブジェクトプログラミング関係の仕様を削除してもいいとすら思ってる
保守と理解と生産性と過去との整合性のバランスが一番いいのは、C言語からポインタとビット演算を削除した言語
C言語からポインタとビット演算削除して、ポインタとビット関係は関数で抽象化して、関数型とクロージャの代入を取り入れて、Erlangのアクターモデルを取り入れるという方向で言語作ってくさい

423 :
もうなんでErlang使わんの?としか

424 :
>>423
Javaの資産を利用したいから
逆に、JVMとJavaの資産を無視できるならScalaを使うメリットはない

425 :
クロージャ使えると言っても、プログラム全部をクロージャで表現できるわけじゃないんだよね
プログラム全部をクロージャで表現できるなら、schemeみたいに自分でグレードダウンした処理系を設計できるのに

426 :
for文を使えると言っても……

427 :
じゃあClojure使えばいいんじゃねーの

428 :
確かに、プログラム全部を代入できるなら話が変わる

429 :
>>427
Clojure はアクターモデルじゃないから
Scalaはアクターモデル採用したのに、何でだろ

430 :
ぶっちゃけ、Actorモデルでバリバリ並行処理書いてる例とか寡聞にして知らないのだが。
あと、OO理解できない人間ほどOO不要論を唱えるよね。
いまさら劣化Cで複雑なプログラム書くとか正気とは思えん。

431 :
Erlangを使ったエリクソンの開発事例が有名じゃないの
有名といってもたかが知れてる感はあるけど
非常に高度な無停止性を実現したケースだったはず
アクターとかCSPとかデータフローとかペトリネットとか
並行性を含んだモデルは昔からあるけど
少なくとも今のところメジャーになった言語には採用されてないね

432 :
アクターモデル採用したってなに?
言語本体じゃなくてライブラリで実装してる機能じゃん
Clojureもライブラリで実装すればいいじゃん

433 :
>>431
それは知らなかった。サンクス。
まぁでも、最近は大規模データ処理と言えば猫も杓子もMapReduceかCEPな感じがする。
何が普及を妨げてるんだろう。

434 :
>>430
OO理解できない人間が作ったプログラムを保守させられてきた人間ほどOO不要論を唱える
OO理解できない人間はOO不要論は唱えない

435 :
>>432
アクタごとにプロセス(スレッドではない)を生成するからAPIインクルードすれば使えるというわけじゃない

436 :
>>434
それはOO理解できない人間にプログラマを名乗らせて人月単価を上積みしてるビジネスモデルの問題だろ。

437 :
>>435
Actorはスレッドプールからのリソースを割り当てられて実行される計算コンテキストの単位なので
プロセスじゃないぞ

438 :
>>437
アクタモデルのプロセスはスレッドではない(OSのプロセスでもない)

439 :
>>436
つまり、日本の実務ではScalaを使ってはいけないということか…

440 :
メッセージとして送るオブジェクトはどこまでコピーされるん?
シャロウコピーで参照先は共有?

441 :
>>435
プロセスだとどうしてダメなのか説明してください。
現にscalaではActorはライブラリとして実装されているというのに。

442 :
>>432
言語によっては、専用構文とかを用意して
そのモデルの活用を支援している事がある
もちろん、より記述しやすくなることが多い。そういうのを指しての話

443 :
少なくともScalaのActorに専用構文なんてないけど?

444 :
中身がなんだっていいねん 使えればいいねん

445 :
一人言ってることが支離滅裂なやつが居るな

446 :
最近ScalaちゃんのTwitterゲスくなりすぎだろ…

447 :
>>440
アクターモデルだから当然ディープコピー

448 :
ディープコピーというか、なんか変なシリアライズしてないか?

449 :
そりゃ本格的な通信だなあ

450 :
アクターがアンダーグラウンドのサービスを呼び出すとエージェントになるです?

451 :
twitterも当たるから当たらないか分からないサービスなんて
最初からjavaでは書きたくなかったんだろうな

452 :
>>450
いいえ、こびとさん
それはアクターでなくて夜を往くアイドルなのでは?

453 :
http://mizuyoukan0809.bbs.fc2.com/ @kabayakiya1999 @10yenn @curtain_call1
scalaちゃんかわいいよ。スーハースーハー

454 :
そろそろ魔法言語リリカルscalaが出てきてもいい頃

455 :
時代は、スカラロイド だろ。
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 :
T -> m -> a
TMA完成でスカラロイドちゃんが3次元に!

457 :
JavaFXって、Scalaから簡単に利用できるようになる動きはあるのかな?
いままで、JavaはGUIが弱かったけど、JavaFX2.0でようやくまともなGUIが使える?

458 :
Rイドみてえだ・・・

459 :
>>457
JavaAPI直接使う以外にもScalaバインディングはあって簡便な記述できるらしい
でも現時点ではFX自体の完成度がいまいちって話も聞くんで短期的にはSwing/SWT使い続けるほうが

460 :
SWTはもういりません!

461 :
そもそもJavaの普及率に比べてJavaのAPIを使ったアプリケーションをあんまり目にしない
携帯やWebならもっと普及してるのだろうか

462 :
>>457
scalafxがある
http://code.google.com/p/scalafx/
でもまだ開発中っぽいね

463 :
生のjavafxでも簡単に扱えます
そう、scalaならね

464 :
>>461
もはやフロントエンドで使う言語じゃないしな。
JavaFXでRIAとして復権を目論んだものの失敗し、最近ではセキュリティホールの元凶扱い。

465 :
akka 2.0になってからリモート通信ができなくなった。
透過的な設計というのも善し悪しだな…
明示的制御機能がなくなって個人的には悪化した

466 :
>悪化した
これが言いたかっただけだろw

467 :
FXやるやつはクズ
汗水流して働いてお金稼げと

468 :
f(x)だと!?

469 :
確かにFXは高性能すぎる
オービタルぐらいに留めておくべき

470 :
>468
関数型ですねわかります

471 :
akka2.0は何故リモート通信ないのアホなの?
生産性10倍なんだろ?

472 :
何で無いと思ってるの?アホなの?ドキュメントも読めないの?

473 :
ところで、おまいら、
Scalaって、OpenJDKで動かしたりしてる?

474 :
うごかねーよw

475 :
そうなの?
何が違うのかな

476 :
何でOpenJDKで動かないと思ってるの?アホなの? 471 と同じ人なの?

477 :
たとえば、このスレでも >229 さんとかは、
Scala2.9をOpenJDKで常用しているみたいだし、
別に珍しくもなんともないだろ。

478 :
>>447
それおらだ Ubuntu で何も考えずに環境作ったら OpenJDK だったのでそのままにしてる
Sun環境も作ってるけどね

479 :
Functional Programming Principles in Scala
https://www.coursera.org/course/progfun
Scalaの作者Odersky先生による無料の授業とかやってるらしい

480 :
先生に後方互換性完全無視した夢のscalaを語って欲しい

481 :
そんなものは夢でscala

482 :
後方互換性完全無視ってJavaとかJVMを無視って意味?

483 :
JVMとJavaAPIを無視するなら、わざわざScala使う必要ないしな…

484 :
>>480
> 先生に後方互換性完全無視した夢のscalaを語って欲しい

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

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

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

485 :
むしろScalaがJavaへの発言力を高めてErasureで型情報が消えなくなるように改善させるという方向を目指します

486 :
JDKのExploitの多さってどうにかならんの?

487 :
Erasureで型情報が消えなくなるようになったら、Scalaに不都合もあるぞ

488 :
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 :
↓ 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 :
自己レス、やっぱりこのブログ記事のコード、バグあるよね…
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 :
>>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 :
補足。
{ println("foo"); x: Int =>; println("bar"); y: Int =>; println("baz") }
は解釈としては、ブロックの中で x: Int => が出てきた時点で、残りの部分全体がBlockになるので、実質的に
{ println("foo"); (x: Int) => { ; println("bar"); (y: Int) => { ; println("baz") } } }
のように差し支えない

493 :
>>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 :
>>499
ありがとうございます。自分でも書き込んだ後仕様書を見てて気づきました。
最初読んだときは
Block ::= {BlockStat semi} [ResultExpr]
の { を '{' と空目してわかんなかった。
便利だけど、少し奇妙な文法だ。

495 :
Ruby の {|x| ...} みたいに書きたい!
みたいな動機があってひねり出したんだろうか。

496 :
Odersky先生ってゴリラみたいな顔してるな

497 :
重要なのはヒゲ

498 :
スイスって、国の産業とかを大切にする国だよなあ。


499 :
こんな黒魔術言語・・・ 流行る?

500 :
[R][Scala]R履き替えさせようとする黒魔術なRubyistに対してScalaistが立ち向かう
http://d.hatena.ne.jp/razon/20111207/1323264726

501 :
吐き気を催す駄文

502 :
個人的にはもう十分流行ってる気がする
それはさておきIntellij使ってみたけどこりゃ便利だな
色々親切すぎてもうscala-modeには戻れんわ

503 :
気づいたらライセンス料払ってた

504 :
もう2.10.0-RC1でてるんだな

505 :
phpstorm(webstorm)は、一度買ったことあるけど(アップグレードしてない)、Intelijあいでぃあはコミュニティ版のヘタレだぜ。

506 :
IntelliJ派とIDEA厨の戦いが終わらない

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

508 :
言語としてはいいな。

509 :
後発だからJavaより良い点は多々あるが…
敢えて使う理由が無い。

510 :
Javaを長年使ってるとプログラマとしての資質が破壊されて
Java以外の言語を使いこなすことが困難になるからね
「敢えて使う理由が無い」というより「使いたくても使えない」が正しい

511 :
そこまでひどくなくても、サンマイクロの出方次第で大量のjavaプログラマが路頭に迷うのは確か

512 :
サン自体が既に消滅してるだろ・・

513 :
こういう話?
http://web.archive.org/web/20080727024157/http://local.joelonsoftware.com/mediawiki/index.php/Javaスクールの危険
http://d.hatena.ne.jp/gothedistance/touch/20070108/1168183689

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

↑あほくさ。
ここ数年、新卒の学生は、むちゃくちゃ優秀なのが多いので、何の話をしているのだかサッパリ。
自分が優秀でないのを、言語のせいにするとか意味不明。
COBOLを今だにやってるオッサンだったら、言語のせいにしても良いが。

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

515 :
Javaはスタンドアロンのマルチプラットフォームアプリ基盤として
独自の立ち位置を持ってるから、Scalaもなんとなく便乗できるんじゃね

516 :
>>513
POJO頼りならscalaなんて無理無理 w

517 :
その発言だけでお前がPOJOの意味を間違えて覚えているのがよく理解できました。

518 :
はい過疎

519 :
2.10はまだか

520 :
RC1出てるらしいしもうすぐじゃね

521 :
Scalaの勉強会って最近どうなの?
東北、関東、なごや、倉敷 とかでやってるみたいだが、
どこも遠いのでいけなくて残念。

522 :
>>498
> スイスって、国の産業とかを大切にする国だよなあ。
かつてスイス最大の産業は傭兵。

523 :
せっかくスルーされてた脱線ネタを掘り返すんじゃねェぞこのスカタンがァーッ!

524 :
POJOの奇妙な冒険

525 :
崖の上のPOJO

526 :
>>519
> 2.10はまだか
注目の機能は?

527 :
Macro
String Interpolation
Value Class
Implicit Class

528 :
spawnの廃止
akkaの統合

529 :
日経ソフトウェア12月号の特集の中に Scala入門があったぞ。
日経ソフトウェアは、結構な頻度でScalaを取り上げているなあ。

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

530 :
実用にならない何よりの証>入門ばっか

531 :
naruh

532 :
コンパイルが遅かったから最近使ってないんだが、改善された?
環境にもよる気がするが・・・。

533 :
使わなくなった時期が気になるところだが、
fsc とか sbt 使うぶんにはそれほど気にならないけど。
どうやってコンパイルしてんの?

534 :
コンパイル遅いのは、改善されてないと思うよ

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

536 :
たぶんこれ
http://www.quora.com/Scala/Is-Scala-compile-time-likely-to-improve-in-the-future

537 :
誰かtypesafeに就職して、コンパイル速度はやくしてくれよ
http://typesafe.com/company/careers

538 :
自分でフォークして改善したらタダみたいなもんやぞ

539 :
就職して給料で良いマシンあてがわれて課題を見失うオチが見える

540 :
>>533
2年くらい前かな。
2コアのしょぼいマシンでLINUXとかiMacでMacPorts経由とか。
>>539
エスパーか?5年前のラップトップなんだけど、最近の良いマシンがどの程度かよく知らないです。

541 :
当時小さいプログラムしか書かなかったから、fscでも立ち上がりの遅さが腹立たしかった。

542 :
>>539

こんな遅いの使えるか!とかさんざん愚痴を漏らしつつ、
重たいソフトを拒否して、古いソフトばっかり使っていたら、、、、
周りはふつうにi5,i7マシンを使っていて、最近のソフトでサクサク仕事をやっていた、、、、でござる。


543 :
最近はビルドの速度と実行速度はどうでもよくなっる
結局、開発速度だけがボトルネックになってる

544 :
実行速度がわりとどうでもいいのは、うちもそうだけど
ビルドの速度は開発速度の一部だったりしないかい?

545 :
バックグラウンドでテスト走らせて結果がNGの場合だけ手戻りが発生する
CPUでいう各ステージの並列動作と予測分岐みたいなものだからな
演算ステージが人間のおつむだからボトルネックになるってことだろ

546 :
replで動きを確かめながらコーディングするような状況を想像してた
出直してくる

547 :
>>545
いいな〜
日本の会社でそこまでテスト環境整備する余裕のある会社ってあるんですか?
IT業界でもそこまでやってるとは思えないんですが。
反射的に某G社しか浮かばない・・・。

548 :
技術職で食っていくつもりなら会社が優れた人材に育ててくれるなんてIT土方気質はいいかげん捨てろ
10年待たずに首を吊ることになるぞ
G社のように才能を持った人材が流動的に要職を担ってるのが現在の会社の形態なんだよ

549 :
10年前はビルドとテストのタスクを実行始めたら家に帰って、次の日出社するくらいにちょうど終わってたんだけど、今は昼飯食ってる間に終わるので、仕事量の密度がとんでもないことになってる

550 :
IT関連企業TOPに踊り出る方法教えます
「sbtで~test」
一部上場どころか全部上場する勢いだ!!

551 :
Java系だとテスト体制完備しないで開発するのは非常、っていう空気を感じる

552 :
>>547
"日本の会社でそこまでテスト環境整備する余裕のある会社ってあるんですか? "
いくらでもあるだろ。。。どんなひどい会社にいるんだ

553 :
>>552
WEB系は自動テストが難しいのでコンパイルが通るかだけチェックして、テスタに投げてしまう

554 :
そこで言うWEB系とは何のことだ。

555 :
ウェッブのインターネッツに散らばってるめちゃシコ画像をモリモリ探し出してくれる系です

556 :
>>554
HTMLコードを動的生成するヤツ
データベースと連携するヤツ
クライアントのクッキーもらうヤツ

557 :
>>556
違うだろ
>>554
ここでいうWEB系ってのはLiftやPlayやScalatraの事だ

558 :
Scalatraは知らんが、LiftとかPlayって自動テストできるように設計されてるだろ?

559 :
Scalatraもできるよ

560 :
>>532
だが、スレチのネタでここまで盛り上がるとは、最近話題ないんだな・・・。
ver3.0台の構想とかないの?

561 :
Scalazについて語るスレ。

562 :2012/11/02
>> 560
ver3.0の話は全くでてないが、2.10の後のことは少しだけ話出てるぞ
https://groups.google.com/forum/?fromgroups=#!searchin/scala-internals/next$20version/scala-internals/xvhvgqBXFtE/2hla7fCODMMJ
TOP カテ一覧 スレ一覧 2ch元 削除依頼
雑談スレ 4 (777)
小学生プログラマだけど質問ある (236)
OpenGLスレ Part18 (925)
なぜポインタで引っかかる人が多いのか (796)
メガデモを語る fr-08 (663)
Java低速GUI Swing & JavaFX 10 (371)
--log9.info------------------
【DS】 風来のシレン4 神の眼と悪魔のヘソ 105F (643)
【エディット専用】初音ミク -Project DIVA- 39 (278)
おいでよどうぶつの森【虫捕り439匹目】 (591)
【MHP3】チラシの裏スレ ★11 (505)
MH3G】MH3Gの質問に全力で答えるスレ101 (368)
【MHP2G】アドホック・パーティーfor PSP part13 (889)
携帯攻略版のコテ雑・交流スレPart20 (254)
【PSP】PSPo2の質問に全力で答えるスレ50 (560)
スーパーダンガンロンパ2攻略ネタバレスレ LEVEL22 (657)
【MHP3/MH3G】スラッシュアックススレ 82【剣斧】 (279)
【PSVITA】サムライ&ドラゴンズ 質問スレ part7 (801)
【3DS】世界樹の迷宮 IV 攻略質問スレ6 (640)
【MH3G】 大剣スレ 溜め24斬り 【MH4】 (701)
【3DS】とびだせ どうぶつの森 質問専用スレ Part2 (507)
【PSP】MHP3の質問に全力で答えるスレ218 (358)
【3DS】牧場物語 はじまりの大地 質問スレ その6 (888)
--log55.com------------------
★2ch.scは何故失敗したのか
★クロール批判要望スレ
★削ジェンヌに文句ある人集合
★迷惑行為報告担当 - 小さな親切募集中 2
★2ch.scへの要望スレ Part3
★かっこう観測所
★スレ立て人キャップ
★2ch.scニュース系板観測所