1read 100read
2012年09月プログラム18: プログラミング言語 Scala 8冊目 (562)
TOP カテ一覧 スレ一覧 2ch元 削除依頼 ▼
C#, C♯, C#相談室 Part76 (831)
Androidアプリ制作依頼スレ (618)
Ruby>>>>>Java (640)
OpenGLスレ Part18 (925)
【アンチ】関数型言語は使えない【玩具】 2 (407)
C++相談室 part98 (372)
プログラミング言語 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 : デタラメ言い放つの流行ってるの?
100read 1read
1read 100read TOP カテ一覧 スレ一覧 2ch元 削除依頼 ▲
Visual Studio IDE環境 (549)
【QBASIC互換!?】FreeBasic【GPL】 (512)
JAVAってこんなことも出来ないの? (473)
MFC、Win32++を超えるライブラリを作るスレ (944)
「コンパイラ・スクリプトエンジン」相談室15 (590)
NetBeans Part6 (864)
--log9.info------------------
WIRESってどうよ? (432)
【非合法】ハリーまるやま2【キロワッター!】 (835)
真のユーザーがIC-7700を語る! (347)
{倒産}ラジオクラ○○の被害者を救う会{金返せ} (467)
430MHz SSB DXerって誰? (840)
光波無線の思い出を語ろう! (447)
APRS 3局目 (256)
Yahoo!知恵袋・教えてGoo!などの質問をヲチする3 (220)
18歳YLです、何か話しましょう (229)
列島ピンクカラー<15>全国拳闘倶楽部〜3 (379)
PLC導入に賛成! (286)
何故粘着質が多い? (777)
仙台電子工作教室(寺子屋)はインチキ!(パート2) (467)
無線板のキモい人 (270)
帰ってきたYahooオークションネタNo??豊爺復活 (916)
■■■■■■*A1OJJ■■■■■■ (642)
--log55.com------------------
ミリオンゴッド〜神々の凱旋〜part195
ミリオンゴッド〜神々の凱旋〜part196
【撤去は】いろはに愛姫 part8【ボッタ店】
大都信者の俺が大都の曲で打線組んだ
【オリンピア】ラブ嬢U【デート7回目】
嘘だと思う解析情報・公表値
タバコ吸わない人間があと18日耐え抜くスレ
パチ屋こそ休業すべきじゃないの?自身がパチスロ機 Part4