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.
と表示されます。
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
CygwinでScalaやっている人って意外と多いな。
普通にWindows上でやるのと比べてどういうメリットがあるのだろう?
あと VirtualBoxとかでLinux立ち上げて、そこでScalaやるのじゃだめなの?
ckwとnyaosという手もある
10 :
デフォルトの名無しさん:2012/04/28(土) 10:51:00.99
>> 8
6 です。
VMPlayerでLinuxも使ってます。けど、エクセル等のMS-Officeでの作業をし
なきゃならない時に、CSVファイルにして、さくっと Cygwin で Linux 的に
終わらせる、のが第1の目的です。日本語ファイル名で苦労するのは嫌なの
です。Scala だとXMLファイルの処理が簡単にできそうで楽しみです。
Windowsアプリ間のファイル形式変換ツールが簡単に作れそう。
>>8 普段Cygwinを使ってるからそれに加えてちょっとしたスクリプトにScalaも使ってる。
Scala単体で使うなら別にCygwinはなくてもいいし、Eclipseたちあげて大物書くときも
Cygwinなくてもなんとかなる。
メリットっていってもgrepやsedと組み合わせられるとか/dev/や/procで
Windowsのクリップボードやプロセスと連携できるくらいかな。
コマンド群が使いたいだけならckwとnyaosで、Unxutils落としてきてパスを通しておくというてもあるでよ!
大事なことだから2回言いました
>>12 単純に、Windowsでは、コマンドラインが使いづらいってだけだったら、nyaosで十分解決するよね。
だけど、Cygwin使う人は、やっぱり、それなりのUnix環境がほしい人なんだろうかな、って思って。
ただ、数年前と比べると最近はCygwinを使っている人は減ったみたいで、
仮想環境にLinux入れてやるって人が最近増えてきているみたい。
15 :
デフォルトの名無しさん:2012/04/30(月) 08:48:50.33
>>14 同じ意見です。Scala REPL なら Cygwin, コンパイル後実行なら仮想環境
かなぁ。それに、Scala REPL を高機能関数電卓としても使ってます。
仮想環境の場合、ゲストである仮想環境内とホストのWindowsの間の
ファイルのやり取りがめんどくさい。
そういう時はHost onlyの仮想ethアダプタを用意してWindows共有フォルダをマウントしてるな。
最近のUbuntuはUser level file systemのGVFSが最初から動いてるから、
Nautilusからネットワークを表示>対象のフォルダを選択しただけで、$HOME/.gvfs下にマウントされるし
デプロイとかの仕組みが不要な場合はこれで事足りる。
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 になるようにしたい
本当にやりたい事が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))
}
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
>>18, 19
ありがとう。
実際には scala 標準ライブラリのクラス (具体的には scala.collection.mutable.BitSet) に機能を追加したい。
protected なメンバにアクセスする必要があるので継承して子クラスを作るといいのかな、と。で、親クラスに 3 つあるコンストラクタを子クラスでもそのまま使いたいというシチュエーションです。
と思ったんだけど、 trait 作って new BitSet() with TraitA みたいにするのがいいのかな?その場合 companion object (BitSet) によるインスタンス生成時に trait くっつけることできないですよね。。
ライブラリなど既存のコードへの機能追加するときの有益な手法として
「Pimp my Library」パターンというものがあります。
つづきはWebで
"pimp"というスラングはもともと「売春の斡旋人。売春婦に依存して生活する男。」
へぇー
>>21 ググル先生に聞いて来ました。 RichInt とかのあれだったんですね。
Pimp my Library pattern, protected なメンバにアクセスできる?
case class について質問です。
case class X(x: Int)の実体X(1)は、参照数が0になってもGCが走るまでの間
は存続していると考えていいのでしょうか?
既にどこからも参照されていないX(1)を再び生成しようとした際、GCに消され
ていなければ実体生成コストを省けるのか?という点が知りたいです。
想定している状況は、自己再帰関数内で case class X への map を行うけど、
条件にmatchしなければ作ったX(_)を捨てて、次の再帰関数呼出時にまた作り
直すといったもので、キャッシュされていると嬉しいなと思ったのです。
(そもそも小さいインスタンスを大量生成してもコストは軽微だという話はど
こかで読んだ気がしますが。)
Memoizeしようという話か?
>>24 実体はGCが走るまで存続してるけど、再利用はされないよ。
そういうしくみはないし、たとえあってもペイしない。
>>26 Javaのプリミティブラッパーはキャッシュしてるし
登場頻度や生成量やGC/エスケープ解析の具合いによってはペイしないとも言い切れない
とりあえずなんでもかんでもcase classにしてしまう病を発症してるわ
自分でキャッシュしとけ
キャッシュでくれ
ほえ?
欲しいです!でもお金ないです!
つセコム
いま気づいたんだけど、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 とかインタラクティブで面白そうだけど試したことない。
まあ、人それぞれかと。
僕は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 でもスピード出るね)
REPLでGUIってEDTで死ぬとばっかり思って試してなかった
lwjglお試しならgiter8でお手軽かんたんにできます
さんきゅーNicol (洞窟物語まだクリアしてないや
39 :
デフォルトの名無しさん:2012/05/12(土) 14:45:32.08
2.9.2にしてから,スクリプトでエラーになると操作不能,プロンプトが表示され
ないって状態になる時がある.
windows 64bit + cygwin(mintty) + scala 2.9.2
どうせ 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 の進歩を待つ方がいいかも。
>>46 の候補の話なのですが、たとえば
Double.longBitsToDouble(Long)
のことです。
scalaのドキュメントみても、そんなメソッドないし
java.lang.Double.(...)
で使うのが正しいのでしょうか?
>>48 うーん、本当に速いならどっちでもいいけどJVMは欲しいかな。
いま現状で最も速いのはfscなんですか?
sbt使えよ
REPLでcase classを入れ子にしてTreeつくって遊んでたら
toString()がNode,Leaf全部辿って文字列返してくれようとしてて
heap食い尽くしてた、よくばりさんめ
>>51 スクリプト言語でもよくネイティブコンパイルっていう人がいるが
ネイティブかどうかそれ自体は基本的に速度に影響ないぞ。
GCJがポシャッた経緯とか知らないんだろうな
Scalaを使う人の呼び方を調べたのですが定番がないようです。
子音で終わればerを付けるだけですが、aで終わるからそうは行きません。
Scalalianという提案も見かけましたが、
AustralianはAustra人ではなくAustralia人です。
そこでaで終わる国の人を何と言うのか調べてみました。
America → American (アメリカ人)
Australia → Australian (オーストラリア人)
Cuba → Cuban (キューバ人)
Guatemala → Guatemalan (グアテマラ人)
Scalaを使う人はScalanと呼ぶ事にしませんか?
スカラ←◎
カルト教団御用達(あいつらどうなったんだろ?
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
リストがソート済みかって判断しようとして詰まった・・・
val list = List(....)
list.sorted == list
なんか関数型の練習問題みたいだけど
@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)
}
短いのは誰かまかせた
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
>>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
関数化したもの
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
返答サンクス.できなくはないんだけどぱっとできなくない?
日本語でおk
エスパー回答すると、
>>65の解法は全ての要素を辿るわけではなくて、
大小関係を満たしていない組が見つかったらそこで計算を打ち切るから
速度面での心配はない。
slidingはIteratorを返すのだけどIteratorについての理解はもちろん済ませての質問ですよね。
違うな、
>>66 の暗号は「ぱっと(parと)できなくない?」と解読できる
つまり…並列処理コレクションで高速に問題が解けないかということを問うているんだよ!
ΩΩΩ<な、なんだってー!!
それママカリ
72 :
61:2012/05/18(金) 22:46:06.22
んなクソ遅いコード使い物にならん
おいおいニコ生中止かよ
どんだけチキンハートなんだよ
晒される覚悟がないやつはScala使うなよ
ustはするみたいだぞ
そんな頭の悪い一年生議員が吐くような安い野次じゃマサカリは飛んで来ないな(嘲笑
なんでScalaの標準ライブラリにはbinarySearchが無いの?
いや、Javaのを使えばいいのは判るんだけど、
敢えてScalaに入れていないのは何か狙いというかポリシーがあるんじゃないかと思う。
binary searchって関数言語的に美しくないとか?
でも、ポリシーの美しさにこだわって実用性を捨てるのはどうよ?
ScalaとJavaどっちから勉強するべきか教えてください
うわぁこれニコ生中止して正解だわ
15人くらいしか見てねえし
Scala知らないやつ多すぎ
言語知らないやつがFinagleで何作るんだよ
何も準備しないでこういうのに参加するやつなんなのまじで
>>77 まだソート絡みの課題が終わらないのかい?かわいそうに...
そーっとしておいてやろうぜ?
ソートー苦労してそうだ
>>81 そういうつながりだったのか
おまえよく気付いたな
>>80 Map遅えしメモリ食うだろ。
そもそも、sorted arrayを標準ライブラリに入れないセンスはいくらなんでも変だぞ、
とゆー、ポリシーの話。
ついでに言えば、なんで標準のPriorityQueueにはdecreaseKey操作が無いんだよ。
どういうセンスなんだ?
そんなもの欲しがるのはお前だけなんだって
常にソートされている状態が必要なら、生成時に最初からソートされた値を使うし
後から要素を追加されてもソートされている状態が必要なら Map, Tree を使う
仕様も決めないでコード書こうとしているからそんな下らないところでグダグダ悩むんだよ
ぼくのかんがえたさいきょうのコンテナ(笑)
>>86 ArrayにbinarySearchや、PriorityQueueにdecreaseKeyがあるのが
普通だと思えない感覚の持ち主だとしたら、
まず、初歩的な修行として著名なOSやコンパイラのコードを10万行ぐらい読んだ方がいい。
10万行って少なくね?
>>89 うん。まあ、初心者向けにはいいんじゃね?
Cしか知らないやつが一気に背伸びしてScala覚えた感がすごい
Scalaって背伸びして覚えるようなもんか?
なんでbinarySearchぐらいで、ぐだぐだ言われてるのか理解出来ない。
ScalaよりCの方が遥かに難しいだろ。ただし、言語の外まで含めればの話。
もちろん、言語仕様内ではScalaの難易度はCの100倍だ。
Scalaは選ばれた天才のみが触れることを許される試行の言語。
まあ、
>>78はScalaは百年早いからJavaを触るべきってこった。
言語外まで含めてもCのほうが簡単だと思うが
C++ならまだしも
Scala使うならJavaまで精通していなきゃいけないから
>>88みたいに漠然としたことを言っちゃう奴は大抵自分もろくすっぽ読んでない
Javaしか知らないやつが一気に背伸びしてScala覚えた感がすごい
うん、どこかで聞いたフレーズかと思ったら、これだった。
Mapは遅くてメモリ使うから使わない
binarySearchを入れないのはScalaのポリシーがおかしい
↓
普通だと思えない感覚の持ち主だとしたら、
まず、初歩的な修行として著名なOSやコンパイラのコードを10万行ぐらい読んだ方がいい。
背伸びしてる感すごいでしょ
デタラメ言い放つの流行ってるの?
kmizuさん滑舌悪すぎ
>>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)
}
短いのは誰かまかせた
さすがScala様!俺たちにできないことを平然とやってのけるッ!そこにシビれる!あこがれるぅ!!
大口叩く
心を慰めあう
両方やらなければならないのが
幹部の辛いところだ
いやだから、入れてない理由が知りたいのであって、コード例なんてどうでもいいのよ。
自分でメール出して尋ねてみれば
どうしてもMapを使いたくない、
配列で二分探索しないと気がすまないというやつは
Scala使うの向いてないってことだろ
その程度のオーバーヘッドは随所に発生してるぞ
>>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)
}
>>107 いいね!
IndexedSeqOptimizedをPimp my LibraryしてindexOfを拡張すればまったく違和感なくなるな
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
あえて無いことを選択してるんじゃないだろうからイシューあげてみれば?
>>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
>>110 あえてだと思うけどね
やっぱりソート済みなことを表現できないArrayに
binarySearchがないのはScala的に当然だと思うんだよね
静的言語がなるべく静的に表現しようとするのはポリシーの問題じゃなくて、実益の問題だと思う
メタファーとかアナロジーとか意外と精神世界にいきがちなプログラミングの世界で
実益を第一に考えて、その裏付けとして理論があるのが関数型の世界なんだよね
逆だと誤解されることが多いけど
if else return 使ってドヤ顔の手続き脳が関数型語られても
いや、構造分解とかしないのにmatch使っちゃ駄目だから
なんとなく関数型っぽいとか、行数が減りそうとかそういう理由で使っちゃ駄目
プログラムは全ての要素に意味を持たせないと
あと、内部関数にlambdaって名前をつける文化もScalaにはないから
Scalaのソース取ってきて検索したらすぐにわかることでしょ?
たった10行ちょっとのコードなんだからちゃんと書こ?
この調子で何千行、何万行って書いたらとんでもないプログラムが出来上がっちゃうから
と、会社に入ったらこういう説教かましてくる先輩とか出てくると思うけど
冷たくあしらわないでねw
>>115 > と、会社に入ったらこういう説教かましてくる先輩とか出てくると思うけど
> 冷たくあしらわないでねw
ワロタw
でも、先輩!
「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 */
> }
>>117 それはちゃんと意味あるから
部分関数って自分が処理しないものはスルーしなきゃいけないんだけど
publisher.subscribe {
case i =>
if isPrime(i) {
println("found prime", i)
} else if (i%2 == 0) {
count += 2
}
}
こう書いたらこの部分関数が全部処理しちゃうからね
だからガードを使って自分が処理できるところだけのコードを書く
ガードっていうのはパターンマッチの後ろについてるif文のことだけど
/* ignore the rest */ って書いてあるしね
かたなし先輩ェ...
scalaインタプリタで
e.
まで書いてタブを打つとeのメソッドやフィールド一覧を出してくれますよね。
だけどeの型が自前のJavaのjarファイル内のクラスの場合には
タブを打ってもpublicのメソッドやフィールドの一覧が出てきません。
なにが原因なんでしょう?
Javaの標準ライブラリクラスSystemなんかではうまくいくので
Javaだからというのが原因でない気がするのですが…
よくわかんないけど、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
>>121 ありがとうございます。
ただ、私の環境ではsbtでも駄目でした。
たぶんWindows 7 64bitだからとか何か環境問題があるのだと思いますが…
とりあえず補完はeclipseの方でやることにします。
123 :
デフォルトの名無しさん:2012/05/23(水) 08:27:43.65
>>122 sbt のバージョンが違うだけとか。
scala REPL の一部は、まだ古いバージョンの sbt を使って
作っているようですし。
部分関数って自分が処理しないものはスルーしなきゃいけない(
>>118)
sbtなら補完できるはず、やってないけど(
>>121)
なんだこれ?
部分関数は数学的な定義の話か?
実際の動作はそうじゃん
話がガードを使う必然性の話だからね
部分関数って何ですか?ってことならまた別の回答したと思うけど
下はどう見てもやってるじゃん
質問者がどういう実行環境なのかわからないから、
「sbtでやってないならわかんないけど」って書いたけど
っていうか実行しないでjoda-timeでどんな補完するのか把握してたらそっちのほうがすごいわ
結局何が言いたいねん
言いたいことはもっと直接来いや!
「馬鹿は死なねば治らないのであり、だからこそアナトール・フランスは
『愚かな者は、邪悪な者よりも忌まわしい』と言ったのだ。
邪悪な者は休むときがあるが、愚かな者はけっして休まないからである。」
(ホセ・オルテガ・イ・ガセット 1883~1955)
本人が手続き脳なだけで後輩にもそれを強制するとか害悪でしかない
末尾再帰できない再帰で、スタックオーバーフローが出る場合の対処って、どういうのがイケテるんすか?
今は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
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 上で動くだけなので。
def (v: => A)
の場合、vという引数にはA型の値が入っていて、メソッド内で参照したタイミン
グで評価される(遅延評価)ですよね?
def (v: => A => B)
の場合は、vにはA型の引数を受け取って、B型の結果を返す関数が入っていると
いうことで間違いないでしょうか?
上記の認識に間違いがない場合、
def (v: => A => B => C)
っていうメソッドの場合、引数の意味が分からない・・・
>>135 A => B => C は、A => (B => C) ってこと。
後は分かるな?
>>136 ありがとうございます!
ということは、
def (v: => A => B => C)の場合、
引数vには、
「B型の引数を受け取ってC型の値を返す関数」
という関数(これがA)が入る、ということでしょうか?
初学ですが、コップ本の1版がぶくオフで安かったのですが、とりあえず読み始めるならコッチでもいい?
それとも最新の2版?
>>138 問題なし。もし違いが分かるなら3版を待つべきだしw
実践プログラミングDSL ドメイン特化言語の設計と実装のノウハウ
第2部 DSLの実装(内部DSLの実装パターン
Ruby、Groovy、Clojureによる内部DSLの設計
Scalaによる内部DSLの設計
外部DSLの設計
Scalaのパーサーコンビネータを使った外部DSLの設計)
チラ見したけど、大半はDSLに関する本だが、
実装例が、他の言語よりScalaの扱いが大きかった。
mizさんの好きそうなネタだよなあ。今はいずこ。
水島さんのツイッターは顔やめてほしい
おい、水島さんが顔アイコンやめちゃっただろ
滑舌悪すぎとか顔出しやめろとか本人気にしてるみたいだからほどほどにしろよ!
あの人の発表は滑舌どうのより話す内容に補足事項や細かい例外を
全部正確に詰め込もうとして結果わかりにくくなってる気が
意味無くmatch使うなって?
>>111 的書き方より
>>109 の方が可読性が高い。
見やすくなってコードも短いというのは意味あることだと思うけど。
scalafxってgroovyfxよりイイものですか?
つーか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 は中途半端かと。
詳しい方のご意見希望。
レオナルド熊とjava太郎が握手画像のURL教えてください。
if (start > end) return -1
これって、Phython では最も嫌われる書き方だよね。
初めて聞いたな
しかも Python じゃないし
151 :
デフォルトの名無しさん:2012/06/30(土) 16:29:11.50
>>150 Python を書き間違った。すまん。
けど、Python の作者(Guido van Rossum)自身が、
Python でのインデントの位置づけで、そう言ってるんだけど。
有名な話(インタビュー)だと思ってた。
意外に知られてない?
えっ、インデントの話だったの?
Pythonはこう
if start > end: return -1
154 :
デフォルトの名無しさん:2012/06/30(土) 16:43:51.38
>>152 うーんw からかわれてるんだろうなぁw
「Pythonのグイド・ヴァンロッサム氏へのインタビュー」
で検索してくれ。ただ、読んだとしても、インデントの話
じゃない?と思うのかなぁ。
そもそもCやJavaでも「1行if」推進派の方だったら、何言って
も理解されないとは想像しますw
一行ifが嫌われるのはうっかり見逃したり
次の行が実行文と間違う人がいると思ってるからなのか?
だとしたら相当なfoolproofだな
そもそも何が問題なのだろう
Pythonのことはよくわからんからなー
Rubyの後置ifは許されるのかしら?
elseがないifとかありえんだろうという関数型的な話ではないよな
Cなら単体のifでも絶対に中括弧で囲むというコーディングルールはあると思う
これか
読みやすいという答えに何かご不満でも? 私は至極もっともな理由だと思うよ。 コードの読みやすさを気にしないだ
ろうか? 正しくインデントされていないコードは嫌では? インデントを文法の一部にすることで、すべてのコードが適
切にインデントされることを保証できる。 かっこを用いる場合だが、その置き方にいくつかの流儀がある。 つまり、
開きかっこをifと同じ行におくか、それとも次の行にか? 次の行だとして、インデントするか、しないか? 閉じかっこも同様。
もしどれかの流儀に慣れると、他の流儀は読みにくくなり得る。 コードをざっと読む場合、多くの人はいずれに
しろインデントを頼りにするので、 これはしばしば次のようなバグを見落とすことにつながる。
if (x > 10)
x = 10;
y = 0;
ifが式でさらに副作用をなるたけ嫌うscalaじゃ書かなそうなコードかな~?
158 :
uy:2012/06/30(土) 23:57:00.53
そもそもプログラミングにおいてIF文使ったら負けだと気づけ
>>156 Cで一行からでも{}付ける習慣があるのはは
ぶらさがりelse/elseifの問題があるからだな
>>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の続きだと思う香具師も馬鹿。
香具師って何?
162 :
デフォルトの名無しさん:2012/07/01(日) 10:32:33.93
>>161 こうぐし 工具 師
工具を使う職人、つまりココではプログラマの事を馬鹿にした表現
>>161 古語みたいなもんだから、気にしなくていいよ
香具師=ヤシ
>>161 奴 -> ヤツ -> ヤシ -> 香具師
こういう単語使う人って、10年後くらいにもまだScalaやってたりするのかな
10年後にはもう37歳になるのか
...早いな~
2002~2012と、2012~2022だと後者は前者ほど劇的な変化はコンピュータ的にはなさそうな気がする
プログラミング言語史的にはこの10年も大したことは起きてないでしょ
C#がうまくいったのと、JavaScriptとObjective-Cが墓から蘇ったくらいで
あとはRails人気でRubyが普及したとかか
Pythonは2002年には既にある程度人気あったはずだし
>>167 そもそも技術は既に開発されていて、知ってる奴は昔から知っている
知ってる奴からすればああようやく流行ってきたかおせーなって程度だろ
一般浸透してゴミッカスドカタ共がその利点を理解し
使うかどうか
人海戦術を嫌う奴は多いけど、結局最後は人の数
どんな優れた技術も理解する奴が少ないと流行らないから
ゴミカス共が理解できる範囲のレベルの技術が流行り、
なんかそこで意味わからない方法で、効率の悪いプログラミングを、効率をよくしようと努力したのが
C#.NET まさにドカタの為のドカタ言語
Scala(笑)
>>142 この本買った。DSLでScalaは真価を発揮、に同意。
1章冒頭の「ホイップをトッピングしたグランデサイズの
スキニーシナモン・ドルチェ・ラテ」の(自然言語と
しての)DSL具合に笑った。
今唐突に言うけど水島さんエバンジェとか言っていじってごめんなさい
また戻ってきてよ
戻れも何もkmizuさんは今でもここ見てるでしょ
単に話すことないだけでは
彼は忙しそう
パーサコンビネータの使い方が何度読んでも分からんとです。
int hoge, hage[3] = { 1, 2, 3 }, huge = 5;
をパースする例とか、どっかないですか?
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))~;)
修正
- lazy val parse = "int" ~> repsep((defIntArray | defInt), ",") ~ ";"
+ lazy val parse = "int" ~> repsep((defIntArray | defInt), ",") <~ ";"
>>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
モヤっとしてる部分はParsers.scalaのソース読んでちゃんと消化しておくといいね
typesでまとめ上げてしまったら後に続かないから詰む
def definitions = (defInt | defString).*
def defInt = "int" ~ ...
def defString = "string" ~ ...
>>179 あっ、なんか天啓来たかも?
頭から順番に自分が食べられる部分だけ食べたら残りを次の子へ渡して
次の子も頭から自分が食べられる部分だけ食べて残りを次へってバケツ
リレーみたくなってんのかな?
それで食べ残しがなくなったら、全部パースできてる的な?
そんな都合よくはいかない?まだモヤっとしてるけど、なんか取っ掛かり
がみつかった気がする。深く深く感謝です!
で、逆引きレシピの具合はどうなのさ?
銀色に光ってるよ
俺の隣で寝てるよ
締まり具合はどうなの?
まあ実戦本よりは実戦感あるよ
コップ本の次に読む本としてはいいかもしれない
Scalaで何ができるのかというのがわかる
個人的にはもっとカタログ的なライブラリの比較みたいなのが欲しかったかな
どのライブラリ使ったらいいか悩んだりするから
でもさ、本が出るたびに思うけど、前半のScala入門の話とかいる?
「varとvalの違いを知りたい」とかさ、
たぶん日本で出てる全部のScalaの本に書いてあると思うんだけど、まだ書く必要あるの?
186 :
デフォルトの名無しさん:2012/07/12(木) 01:27:31.65
Scalaが関数型言語とか...しっくりこねえ
んー Ensimeは英語がなんかだるいし、
Eclipseのプラグインの方はただInstall new softwareから引っ張ってきただけなんだけどエラー吐く。
どういうこっちゃ
英語がだるいやつはプログラミングなんてやめちまえ
いやいやw なにいってんの
函数モヒカンの集い 2012 in Tokyo
おまいら参加する?
なにそれ?
まあどうせHaskellの連中がデカい顔するだろうから行かないけど
Lisperのほうが強い
Lispはいいや
奴らはマクロしか取り柄ないし
異様なimmutable推しのClojureはちょっとやっかいだが
そのイベントは型付きラムダ計算が主流なので、erlang、lisp族は少し肩身が狭い
言語ディスとか気持ち悪いから消えてくれませんかね
the world is immutable.
なら新党結成だ「関数の扱いが第一」
>>198 よくできてるネタじゃないか
Twitterあたりでやるべきだったな
カカッと@functional2chをフォローしている俺に隙は無かった
scalaってなんなん
ナンではありません
雪花菜っておから?
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)
}
}
だと動作する。
>>205 上は def main(args: Array[String]): List[Int]
下は def main(args: Array[String]): Unit
あとはわかるな?
>>206 おうふ!セックス!
そっか、戻り値は最後のアレだっなー。
そっかそっかー。
= {にしなきゃいいのに
初学者ほど手を抜いて格好つけて、
つまらないところでハマる。
おまけにそれを他人のせいにする。
まぁ一度顔真っ赤にしたら次から慎重になるさ、誰もが通る道だろ
使い方をよく理解していない省略記法を使って節約できる時間と、
それでハマって無駄にする時間を天秤にかけたら、どちらがいいかは明らかだな。
212 :
204:2012/07/15(日) 19:59:11.38
カッコつけたも何も、サンプルプログラムなんだけどなぁ(^_^;)
= {
以外で便利な表記法あるっけ
=を省略して
foo() {
}
とすれば、
foo(): Unit = {
}
になるとマジレス。
某実践プログラミングでは、今回の件の逆の間違い
(なぜか最後の値が返らずにUnitになる)を防ぐために非推奨にしてたけどね
214 :
204:2012/07/15(日) 21:16:42.12
トンクス
慣れが必要だなぁこの言語。
楽しんでみるよ!
何のための型システムなんだ
そんなもん検出できるからどっちでもいいだろ
ここまでの流れをわかったうえで
そんなこと言ってるのか?
infoQでこんな長い記事初めて見た
右サイドにある特集記事はこんな感じじゃね
たまにはGroovyの事も思い出してあげてください
>>222 金融なんかは非プログラマがプログラミングを強いられる場面が多いんじゃね?
っで、これまでだと簡易言語を導入してたけど、今時はDSLに置き換わってる
のかな?って気がする。
scalaの導入事例増えてるよ
今年か来年頭には有名企業からも採用事例としてプレゼン資料というか、勉強会資料が続々でてくると思う
もちろんscalaエンジニアの募集もね
あきれるわ
なんでいつも求人がないのよ…?
来年っていつの来年よ?
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
>>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
パターンマッチでしたか
ありがとうございました、おかげですっきりしました
そういえばそんな決まりがあったな…
すっかり忘れてた。勉強になったわ。㌧クス
trait AttrHelper[+Holder[X]]
って表現のHolder[X]の部分がなんなのかよくわかりません
なぜそれを今知りたいんだ
個人で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とかやめとけ
メディアに金を払ってステマ宣伝してくるが釣られて手を出しても情報は少なく手間がかかり スパゲッティコード 未完成 デスマに陥る
コンパイルできないからパクられ 直接売る場所がないから企業に買い叩かれ金にならない 生きていけない奴隷仕様だ
ここから抜け出すには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
ステマ通報しといた
javaやlinuxは手間がかかる?
ここから抜け出すにはiPhone一択?
じゃあScalaでAndroidアプリ作ればいいんじゃないかな(´・ω・`)
言いたいことは、個人でアプリなりwebサービスを作って提供できるようになれ!ってとこか。
されに関しては同意だ。
SL4AScala
trait AttrHelper[+Holder[Z]]
って表現のHolder[Z]の部分がなんなのかよくわかりません
別スレで回答貰ったんで、もういいです
Scalaは関数型プログラミング言語ではない?
まず関数型プログラミング言語とは何か定義してください
ああーん?Wikipedia大先生に教えてもらってこいよ!!
泊稼働させないと本当は25%程度不足するよね。
北電社員乙
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]
}
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 *)
こう書けばわかるでしょ
>>252 別の型に適用させるにはどうすればいいの?
implicitを型別に書くのかな?
255 :
デフォルトの名無しさん:2012/08/09(木) 22:00:24.34
abstract classとtraitって
どう使い分ければいいでしょうか?
Context boundがよくわからないです。
>>255 コンストラクタに引数があるかどうかじゃない?
基本的にtraitで済むならtraitでいいかと
たまに引数はいらないけどimplicit paramaterが欲しくてabstract classになることもある
>>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もみんな忘れよう
型クラスってやっぱり駄目だな(キリッ
そのmyMapがダメダメなのは分かるがね
260 :
デフォルトの名無しさん:2012/08/10(金) 02:51:29.35
同ダメなの?
どうせHaskellerだろ?
おつむもPureだから関係ないスレにしゃしゃりでてくるんだよなー
きもいimplicit paramaterで型クラスを模倣できる!とか言い出すからだよ
どんだけHaskellにコンプレックスあるんだか
こういう宗教戦争、嫌いじゃないわよ。
ていうか、
>>258がサッパリ分かりませんわ。
ジャバ厨にスカラはむづかしすぎる(何故か変換(ry
ジャバ厨を名乗るのはgenericsを理解してからにしてください!
まあ、Javaのジェネリクスには型コンストラクタないでしょ
型クラスは、フレームワーク実装者の秘奥義くらいの扱いにしておいた方がいいと思う。
バンピーが扱うには高度過ぎる。
Map[String, Any]なマップに
ValueとしてInt、String、Doubleを混在して入れた場合
getOrElseだと型がBがAnyになっちゃうけどどうすりゃええの?
設計からやり直せ
>>258 def myMap[F[_]: Functor, A, B](a: F[A])(f: A => B) = implicitly[Functor[F]].map(a)(f)
なんでこんなに複雑に記述しないといけないの?
Scala逆引きレシピ すぐに美味しいサンプル&テクニック300
って、本、なかなか良いな。
カレントディレクトリにある全ての*.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");
}
何かもっとカッコ良く書く方法はないでしょうか?
Scalaがどうとかいう以前にJavaの文字列のendsWithを使うといいと思います
274 :
272:2012/08/11(土) 16:28:58.52
>>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"
>>271 > Scala逆引きレシピ すぐに美味しいサンプル&テクニック300
だが、
どうした途中送信か?
278 :
272:2012/08/11(土) 22:24:34.30
>>275 それも出来ました、ありがとうございます!
scalaIOって良いですね
scalaの関数内関数って、普通の関数と比べてオーバーヘッドありますか?
外側のローカル変数の書き換えもできるようなので、何か特別な変換をしてそうなのですが。
小さなことだけどこの板って
>>276こういう風に途中送信だかなんだか
よく分からないものが書き込まれても本人訂正しない奴が多い
PG/SEってその程度も出来ないくらいに衰弱しているって事なんかなってたまに思う
>>280 確かにこういう2chのレス一つからプログラマの力量は伝わってくるな
でも、
>>280 「多い」と主張するからには、多い根拠を示してもらおうか
それゆえ、
だがしかし、
>>279 普通の関数、というより、外側のローカル変数を利用しない限りオーバーヘッドは発生しない
逆アセンブルしてみるとわかるけど、通常のメソッドと衝突しないようなメソッド名のメソッドができる
外側のローカル変数を書き換える関数内関数では、オーバーヘッドが発生する。これは主に、
外側のローカル変数を書き換えられるように、mutableなセルで値をラップするため。まあ、
普通は気にしなくていい範囲のオーバーヘッド
外側のローカル変数を読む場合はその時点の値を引数で渡すんだっけ?
クロージャから自由変数に破壊的代入を行う設計ってどうなのって思う...
すなおに関数の戻り値で置き換えるかDynamicVariableかましたい
>>280 異論があるけど下手な発言すると総ツッコミ来るから怖いんだよ。
察してやれ。
288 :
デフォルトの名無しさん:2012/08/13(月) 23:50:24.96
近い将来に引数も型推論してくれる予定とかってありますか?
ありません
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
日本人は マスコミ電波で動く ロボット人間
日本人は、先進諸国で飛び抜けてマスコミ報道を鵜呑みに
信じやすいことがこの動画で実証されています。
いわばマスコミ報道の「鵜呑度」を国際比較すると、
日本人は、先進国中ダントツに「鵜呑度」が高く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
鵜呑みにする率は同じだけど、他の国はマスコミの報道が多種類あるだけという説に一票
御高説ごもっともです、佐藤先生
でも僕らはスイスアーミーナイフが大好きなんですよ
2012年7月28日
Scalaはまぁ好きな言語なのですが、普及するかというと正直いって否定的。
最大の理由はマルチパラダイムという点。Scalaはオブジェクト指向と関数型
の二つをパラダイムを融合させたマルチパラダイム言語ということになってい
ますが、これまでオブジェクト指向と論理型や、関数型と論理型などなどマル
チパラダイム言語は数多く提案されてきましたが、普及した言語は皆無。その
理由は簡単、多くのプログラマーは、ひとつのパラダイムでも使いこなせない
のが現実。そうなるとマルチパラダイム言語は身に付けないといけないパラダ
イムが複数あるわけで、使いこなせない。逆に言うと相当、優秀なプログラマー
でないと使いこなさないはず。Scalaが普及するとしたら、メニーコアプロセッ
サを前提に、関数型の特質をうまくつかって、副作用の少ない並行プログラミ
ングだと思います。というのは並行プログラミングも逐次プログラミングと比
べると格段に難易度が高いので、その難易度についていけるプログラマーなら
ばオブジェクト指向と関数型の二つをパラダイムを使いこなせるかも、という
のが理由。
こうかくとScalaに否定的に思われるかもしれませんが、普及する言語という
のは、できるプログラマーに好かれるだけでは十分ではなく、そうではないプ
ログラマーにも敷居の低いことは要件なんですよね。逆に言うと圏論や型推論
など、一般のプログラマーには難しい理論を要求する言語というのは普及は難
しいのではないでしょうかね。もちろん完全に隠し込めればいいのでしょうが、
コンパイルエラーやデバッグなどで顔を出す限りはなかなか難しい。というわ
けで頭の言い方々が推奨されるプログラミング言語については、その普及とい
う点では否定的に見ております。なお、アカデミアのプログラミング言語を専
門とする研究者(特に優秀な研究者)が設計した言語が大きく普及しないという
のも、この辺りに遠因があるのではないかと邪推しております。
Javaのゲネリクスがく普及してるなら勝機はあると思うんだ
当分は、ハイスキルなバックエンドプログラマーの秘密道具、みたいな感じかなぁと思う。
例えば、SIとかの労働集約的な職場で普及するとは確かに思えん。
あとは、Play2がどこまで行けるかだなー。
RubyだってRoRが出てくるまでは(ry的なところがあったわけだし。
JVMとJavaAPIを使えるということ以外の利点が見つからない
雇う側が"Java PG(笑)"をフィルタできるのは利点だな
>>294 > 理由は簡単、多くのプログラマーは、ひとつのパラダイムでも使いこなせない
プログラム言語って、全部の機能を使いこなしてプログラムする必要はまったくないのだが。
下流プログラマは、知っている範囲だけでプログラムすれば十分なんだよ。
フレームワークとかシステムまわりを設計する人だけ、難しい機能使えばよい。
Scalaが本領を発揮するのって、DSLとか、もしくは科学技術計算じゃない?
http://mwongstyle.com/wordpress/?tag=scalalab 最近は、中流プログラマにさえ、ビックデータを行列計算して統計処理とかが必須になってきているし、
いまどきの情報工学出身の新卒プログラマは、そういうの得意だろ。
言語の良さを宣伝するのは勝手だけど、教育コストの高さも考えてくれないと困る
なんだかんだ言ってC言語が一番教育コストが低い
302 :
デフォルトの名無しさん:2012/08/24(金) 22:59:23.27
>>298 ちょっとキツイ言い方になるけど、その認識レベルは色々やばい
現状日本国内ではScalaプログラマを集めるのが難しいっつう問題などデメリットもあるけど
言語レベルでは型安全性や簡潔性、並列性の扱いやすさなど、自明なレベルで利点が
色々あるわけで。その辺を認識した上で、「あえて」Scalaを使えないと判断するのは良いけど
scalaがネイティブなら使ってもいいが・・・
>>302 むしろ、JVMとJavaAPIを使うために、プログラマが型安全性や簡潔性や並列性理解できないというデメリットに目をつぶってる
最悪、scala無視してJavaでclassファイル作ればいいわけだから
利点がわからないなら普通にGroovyでも使えばええがな
ボスの命令でイヤイヤScalaで書かされてる僕ちゃんの泣きごとだろ
当人たちの能力の無さでどうこうなろうが知ったこっちゃないけど
エセScala使用実績に釣られて巻きぞえ喰う奴は悲惨だよな
嫌々Scalaやってるやつとか代わってくれよ
ですまとかぶらっくそうでとてもとても
本当に余裕なかったらScalaなんか使わんだろ
とてつもなく頭の悪い上司なら別だが
>>309 本当に余裕がなくなれば途中からJavaに移行できるから、仕事ついでに新パラダイム言語の教育させようと思ったらScalaは悪い選択じゃない
最初から関数型とかやる気ないやつに押し付けることないよ
わかる気がないやつには一生わからない
まあオブジェクト指向も同じだが
いつになったらVMじゃなくてネイティブ作れるようになるの?
もうバイナリでいいよ
>>312 javaでネイティブコードを生成するプロジェクトは、結局はC言語で開発することがほとんど
scalaを前提にした設計をC言語で実装する悪夢を考えてほしい
>>300 >下流プログラマは、知っている範囲だけでプログラムすれば十分なんだよ。
自分が書くだけなら問題はないが、他人のコードを読む・使うことまで考えると、
使われうる全てのパラダイムを押さえないと言語を使いこなせなくなってしまう
要するにC++ってこと
ネイティブならHaskellでいいじゃん
CはOOPはできるんだけど、クロージャがないから関数型はしんどい
針小棒大にScalaのここがわからんと騒いでるやつには、
だったらJavaで開発するときに言語やフレームワークの仕様を隅々まで把握して使っているのか?と言いたくなる
>>302 比較対象の問題でしょ
個々の機能に関してはシングルパラダイムの言語ほど
洗練されているわけがないので
型理論的にScalaは何か凄いかっていうと、先進的というほどではないし
並列性もそこまで目新しいわけではないし(Erlangみたいに古い例もある)
結局、Scalaに残る独自性は、それらがとりあえず一通り
詰め込まれて一つの言語になっているという事と
Javaとの互換性が考慮されていること
とりあえずJVMで動く静的型関数型言語が他にないという問題が大きいな
>>318 言ってる自体は一理あると思うけど、元のレスのぼかされてる比較対象は書き方からして、
そーいうシングルパラダイムの洗練された言語ではないだろう。
型理論的にScalaは凄い先進的、かはともかく、核となるは独自性強いというのが自分の見解
見た目的にはJavaの型システムに色々のっけた、ように見えるけど、核にあるのは型をメンバに持てる
オブジェクト、というもので(これはResearchのところみてもらえばわかるかと)、それほど研究されてたもの
じゃないと記憶してる。無論、Scalaが一番先に手をつけた、とも言えないが
並列性は、言語レベルでは特に目新しいことはしてないね。どちらかというとライブラリのレベル。
scala.actorsはもうAkkaに置き換えられるのが決まってるからそっちは念頭に置いてなかった。
Scalaという言語とプラットフォーム自体は、最初はそれほど独自性が無くて、既存の機能のうまい
組み合わせ、という面が強かったけど、最近は良くも悪くも独自性が出てきてる気がするよ。2.10とか
みてるとね…
>>317 Javaの言語やフレームワークの仕様を教育するコストと
Scalaの言語やフレームワークの仕様を教育するコストを比較すると、
Javaの方が低い
理由は、Scalaを選択しても、なんだかんだ言ってJavaAPIとフレームワークを利用させられることになるから
どちらにしろJavaを教育しなければならない
>>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の方が多いってはなしだろ。
「使える」の範囲が狭けりゃ、そりゃあ「使える」だろうよ。
そんなこといいから未経験者が食いつくようなscalaのいいとこコードと共に列挙してくれ
どっかの宿題スレにactorつかったNP問題の近似解法が書かれてて
閾値とコンテキストを適切に定義できればActorでスケーラブルに問題を解ける良い例だなと思った
>>323 だからずれてるって。元のはJava知ってる奴がScala新しく始める前提の話なんだから
JavaプログラマがScalaを開発で「使える」ようになるために知らなければいけない部分と
Java未経験のプログラマがJavaを開発で「使える」ようになるために知らなければいけない部分を
比較しないといけないんじゃね?
俺が思うに、まともなJavaプログラマなら、better JavaくらいのScalaでよけりゃ数日あれば習得できるよ。better Java
を恐れるな(Scalaらしいコードがすぐ書けないことを恐れるな)って言葉をどっかのScala採用企業の技術者が残してたけど、
そういう心理的な側面は大きいと思う。あるいはコミュニティの問題かもしれないが。
知らない土地にいって、その土地らしい作法が出来るか不安がってるような、そんな印象をよくうけるわ
関数型で200行あればかなりのことができるかなー
Scalaのいいとこ→ワイドモニターに適している
>>328 メガデモみたいなブームを作ろうぜ
200行でつくるFPSとか
>>322 基本的にプログラマはどの言語も熟知してないので、使う=教育 と同意
Javaすらも熟知してないのにScalaなんか使わせたくない
大学でも教えにくい
ただのプログラミング言語入門として Pascal
一番スタンダードな言語として C
オブジェクト指向言語のオモチャとして Smalltalk
就職に役立つという宣伝で Java
そのまま論文で使える関数型言語として Haskell
記号処理・人工知能用として Scheme
C++さん…
大学はポインタと関数でもう限界
C++は無理
Lispも無理
全くの初心者にとっては手続き型も関数型も似たような難易度じゃないかな?
>>334 君、大学行ってたの?
別にプログラミング言語なんてそんな教えんよ
せいぜい必修はCとFortranくらいで、あとはLispがあるかどうか
>>338 最近は Fortran も教えない
ただ、先生方が Fortran を使いたがる
Lisp系の場合は、最近はLispじゃなくてSchemeだと思う
ICOT出身の先生はPrologを教えたがる
手続き型の言語に乗っかってる関数型言語でプログラミング入門は嫌だな
もちろん大学による差はあるけど、CS専攻だとCとJavaを必修で教えてるところは多い
Pascalは教育用言語としてはもう大体駆逐されてる。第一デファクトな処理系がまともに無いし
後は教員によりけり。SMLやOCaml、Schemeの授業やってるところは国公立だと
そこそこある。Schemeは言語仕様がコンパクトでちゃんと定義されてるから、教える
側には扱いやすいってのがあるのかな。Haskellの授業やってる大学もあるけど、
こっちはまだ少ない気がする。
Prologは40代以上の先生だと時々教えてたりする
この辺の年齢の教員はPrologなどの論理型言語に馴染みの深い先生多いから
CSの授業でFortran教えてるところはかなり少ないと思う。どっちかというと他分野で
Fortran使った計算しなきゃいけないので教えてるってケースがほとんど
>>334 大学行ったことない人が想像で発言してるようなラインナップだな
記号処理・人口処理用でSchemeなんてまずやらないよ。どちらかというと関数型プログラミング
を教える題材だったりプログラミング入門だったりする。Smalltalk教えてる大学は相当希少
CとJavaは教えてるところは確かに多い。C教えるのは、後の課程でOSのシステムコールの話
とか教えようと思うと無いとどうしようも無いとか色々。静的型付け関数型言語で
Haskell/SML/OCamlのどれ教えるかは大体教員の得意言語による。NGY大はGarrigue先生
居るせいか、OCamlも教えてるみたいだね
なんにせよScalaは無いわ
別にいくら流行っててもC#もRubyも大学じゃ教えないわ
そもそも大学では、プログラミング言語の習得なんていうことは
学生が自主的にやることであって、いちいち教わることじゃない
Scalaが難しいってぶつぶつ文句言ってるやつとか、
Haskellをやってドヤ顔で高尚なことやってる気になってるやつは、
そんなもんパソコンの使い方を覚えることと同レベルだってことがわかってない
仕事なり研究するなら、できて当然なんだよ
346 :
デフォルトの名無しさん:2012/08/26(日) 01:03:53.98
Scalaをやってドヤ顔
>>343 記号処理の定番テキストがscheme使ってるから、scheme教える大学は多い
MITの罪は重い
>>345 休み明けに投入されるプログラマの方々はプログラム言語などいちいち教わることじゃないどころか勉強すらするものじゃないと思ってるから、
こっちはいちいち教えなければならない
Scalaの弱点は得意とする問題領域があいまいという点
一番得意な問題領域がJavaとの連携というオチ
だから静的型関数型言語に何の利点も感じないやつはScala使わなくていいよ
Groovyでも使っとけ
Groovyですら覚えるの面倒臭いなら一生Java使ってろ
まあそうやって本当に一生Javaしか使わないやつなんてごまんと出てくるだろうが
長年プログラミング入門にC使われてたんだから
Scalaで入門だって十分有りだろう
誰得だが
大学で Java を教えてるとファイル入出力が鬼門な学生たちがあまりに
多く、授業でも Scala を a better Java として使おうかと思ってた
私は異端かな(ちなみに情報処理専門の学科ではない)。
「初学者が躓く点は実は最先端でも難問/難題であることが多い」
のが信条。Scala の REPL とか高校生向きと思う。
確かにJavaのcodecsは意味フ
Scalaを第一言語として教える(必修)かはともかく、選択授業で教えるのは十分
アリだと思うよ。REPLのような対話環境の有無は少なくとも大学でのプログラミング
教育では重要で、ScalaはそのREPLがあるから。入力したプログラムが即座に
実行結果として反映されるかどうかってのは、学生のモチベーションを左右
したりする。
もうREPLみたいなのが無い言語は使いたくないってくらい便利だよね。
ただ初学者があれをメインで使うとプログラミングを勘違いしそうな気がする。
あくまで気がするだけだけど。
Scalaでおすすめの書籍はどれですか?
あと買ってはいけない読んではいけない書籍も教えて下さい。
REPLにコード補完機能追加きぼんぬ
>352
>大学で Java を教えてるとファイル入出力が鬼門な学生たちがあまりに多く、
鬼門というかいちいち説明に時間さくのが勿体ないので、東大京大ではRubyを採用している。
情報工学科で授業で使う言語って、
・Matlab (Scilab,Rの場合も)
・JavaやC (プログラム言語というのはこういうもの、という題材向け)
・Ruby (東大、京大の1年向け教養課程で、情報科学の宿題向けに)
が人気だろ。
言語の授業だったら、Smalltalk,Haskell,Schemとかも教えるかもしれないけど、あくまで言語の授業の題材としてだな。
大学で言語専門でなければ、言語は使うもの。
教えたいのは言語じゃなくて、 情報科学の方だからな。
Matlabでアルゴリズム開発して、速度のためにC言語で再実装するっていうのが多いだろ。
そういう用途では、Scalaで関数言語の特徴生かして、アルゴリズムも実装も一気にやっちゃうのは得策だな。
>>356 > Scalaでおすすめの書籍はどれですか?
・即実践なら、「Scala逆引きレシピ」
・入門なら、「Scalaで学ぶ関数脳入門」
他は、「Scala実践プログラミング」「ボクらのScala 」「プログラミングScala」など。
> あと買ってはいけない読んではいけない書籍も教えて下さい。
本代くらいケチるな。全部買え。
と言いたいところだが、ここでこんな質問するような>356には、通称「コップ本」はムリ。買うな。
>>358 あと、Processingを使って大学で講義することも最近多いな。
情報というよりも、デザイン系の学科での話だけど。
ProcessingもJVM系だから、Scalaとの親和性が高い。
AndroidにもScalaは使える。
Web開発にもScalaは使える。
でも、Scalaはまだまだ若すぎて、使っている人少ない。
5年以内にキラーアプリが出たら状況は変わると思う。
あの・・・C++さんどこで教えてはるんですか・・・
>>360 はい。質問が意味不明か、スレ違いのどちらかですね。
とりあえず、他へ行け!
C++を直接教えるところがあるかは知らんけど、
コンパイラの講義とか普通にC++知ってることが前提だったりするので、
言語系をやりたい人はC++の基本文法くらいは勉強しとるぞ
千葉先生は相当実戦的なほうだと思うけどね
しかし今東大だったのか…
そうか、FAで現役のC++を大学で教えないからFAが悲惨なことになってるんだな
有限オートマトン?
Factory Automation
>>362 ぶっちゃけると、教員もよく理解できてなくてC++を教えなかった
計算機プログラムの入門ならCだけでも十分だったし
実際、10年間の現場の混乱を見る限りC++なんか教えなくて正解だった
>>365 旧国立系の情報処理専門の学科がお隣の学科なのですが、(今日は
有給で自宅からなので書き込み可能)学部教育で C++ を教えようと
頑張った時期もあったけど、学生がついてこれず断念したそうです。
他からみてると C++ が好きな先生は、C++ はどう使うべきかに対し
個性が強く、C++ が好きな先生方同士で衝突してる感があります。
それに C++ が好きな先生の一部は C が C++ のサブセットであるべ
きと主張され、初学者が多い C の学部共通教育で困る場面も多々あ
ります(現在の C の規格は C++ とは別言語として定義されてます)。
スレ違い、すいません。
Scalaを教える場合もJavaを教えることになって、
Scalaが難しくてついてこれなくなるので、
結局Javaだけ教えて終わることになると思う
入門書はある。良書がない。
サードパーティライブラリを含めてエコシステムと捉える意味では、
「Scala逆引きレシピ」がいまのところ一番近いのかな<良書。
あと、ゆーじーんさんのテトリス連載は一冊の本になると面白いのではないか、と無責任に言ってみる。
>>372 最初から最後までScalaだけ使ってコンピュータ科学や計算理論や数値計算を解説する本が欲しい
期待してるよ
馬鹿には無理
>>369 教育者のレベルってどんなもんなの?
国立の情報システム科に居たけど、hello wolrd止まりの教授がドヤ顔で講義おしえてたよ
>>362 文法だけ知っててプログラムが組めるわけねーだろw
そんなのTA丸投げです
教授はソースコードなんて読みません
TAだって、ろくにプログラム書ける奴なんていないだろw
hackerあがりの準教が居ない研究室は全て行くだけ無意味な外れクジだよ
viの二画面分割でドヤ顔しているアホ教授のとこなんて特に最低だw
申し訳ないですが全く好感が持てません。
色々なスタイルや考え方がある中で、
このように自分の考えだけで言い切るような人は、ただのカタブツです。
突っ込みどころも多いため、全面的には信用できません。
しかも、聞かれてもいないのに、
いきなり話題を振り脳内豆知識を披露してきて何がしたいのか全く理解不能。
店の名前も出していないから宣伝だとは思えないですし、
すごいねーもの知りだねーって言われたいだけなのでしょうか?
2chではなく、あなたの信者だけで盛り上がればいいと思います。
とりあえず、C++の話題は以後禁止。
ここは、Scalaのスレだ。
ということで、この辺で、Scalaの話にもどろうぜ!
>374
計算理論って、オートマトンとかか?
数値計算って、ニュートン法とか?
今、流行なのは、データから特徴量抽出とか、信号処理とか、そっち方面じゃない?
で、信号処理関係には、Scalaは得意そうな気がするんだ。
FIRフィルタとか。
大規模データ分析を売りにするなら、まずはコレクションの性能改善からだねえ。
はやくjava.util.HashMapなどを使わずにすむようにならんかな。
>>384 今の「大規模」はギガバイトレベルだから、大規模データ分析はコンテナじゃなくて、ストリームで処理すべきだと思う
GBオーダーであればメモリに載るケースも多いんじゃない?
Javaの場合は何でもボックス化されちゃって
メモリ消費量が想定外に大きくなったりもするけど
メモリはJVMで限界が決まってるような…
>>383 >パーサとコンパイラ自作
これについては、本「実践プログラミングDSL」とかでScalaは大絶賛だな。
ところで、「Scala逆引きレシピ」は、NTTの中の人が著者らしいが、
NTTでは、Scala使っているのか?
> 著者の現場経験に基づいた実践的なノウハウ、レシピを提供します。
とか書いてあるぞ。
-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.
>>388 NTTの人なら、Erlang(かそれに似たアクターモデルの言語)を使ってるはずだから、その経験でScalaの解説をしてると予想
世間で30年くらいオブジェクト指向とか宣伝されてたけど、本当にメッセージパッシングしてるのはErlangやScalaのActorモデルだけだと思う
>>381 好感なんて持たなくて良いです。
教授である貴女方は無能でありゴミであり、税金泥棒で給料泥棒の人の屑です。
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
NTTって下請けにパワポ送り付けて暇だからscalaとか弄ってるのかな
Python版akka
_人人人人_
>Pykka─!!<
 ̄Y^Y^Y^Y ̄
アクターモデルが一番単純で教えやすい並列モデルだと思うんだけど、なんでMVarとかがスタンダードになっているのだろうか
Non-Blocking Lock & Semaphore はオーバーヘッドが無い分速いから
>>386 プリミティブ型を、プリミティブのまま格納するコレクションライブラリとかもあったりする。
最近の分散処理フレームワークは、Scala用のインタフェースを提供してるものもあるね。
手元でやるのは、軽くサンプリングして予備解析とか、集計済みのを分析とか、そういう感じかねぇ。
Scala で GUI しようと思ったら swing するしかないですか?
AWTでもSWTでもFXでもHTMLでも好きなの使え
おい、函数プログラミングの集いで何が起きてるんだ…
用事が無ければ行きたかったなぁ。
>>404 何が面白いのかさっぱり
関数型言語の定義とかどうでもいいし、そして強烈なHaskell史観
だからHaskellの連中がデカい顔するだけの集まりだから行かないほうがいいって言っただろ?
好きな言語アンケート、Haskellがほぼ全体、Clojureが1人とか終わってるだろ
所詮やつらはHaskellを好きな自分のことが好きなだけ
そりゃ、あの文化圏においてはScalaはゴミだからな
でも俺たちのリーダー水島氏はやってくれたよ
まず関数型と関係ないマクロについての発表
この時点でちょっとイベントに喧嘩売ってるのに、さらに当日いきなりボイコット
そして行かないかに見せかけてからの急遽参加でセッションを乱す
完全にこの腐ったイベントを馬鹿にしてるからね
そして発表スライド見るとどう見てもScalaのマクロをディスってるようにしか見えない
セッション参加者の時間を無駄に潰していくスタイル
水島氏は真のScalaテロリスト
約一名触りたくないのが居るんだが。
関数型にErlangのアクターモデルを足したまでは良かったけど、複雑なオブジェクトモデルを混ぜたせいで全部が汚水になった感じ
オブジェクト指向関係の仕様についてはJavaよりももっともっと簡素化すべきだったのに、なぜ複雑にした
Javaよりオブジェクト指向関連の仕様が複雑になってるとか
どこがどうなのか具体的にいってほしいがね
っていうかErlangは関数型じゃないのかね
>>411 なんだよ、これ、シンタックスがRubyに似てるだけのErlangじゃねーか
よくこんな気持ちの悪いもの作ろうと思ったな
>>410 特にトレイトが余計だった
インターフェイスだけでいい
Javaのオブジェクト指向ですらマトモに理解させるの無理だったのに、なぜ複雑にしたし
オブジェクトプログラミング関係の糖衣構文も不必要に多過ぎる
わざわざJVMの制約入った言語を選んで使う人がタイプ数を少なくすることなんか望んでいない
Erlangは関数型持ってるけど、Scalaの関数型は何か変な言語の関数型を持ってきてる
特に代入
おかげで、似たような通信モデルなのに、自動変換できない
トレイトが余計とか自分はScala書けませんって言ってるようなもんじゃないか
Javaを理解できない人がいるように>413がScalaを理解できないだけ
理解できないのにScala触る必要は無い
仕様として複雑化してる部分もあるのは間違いないが
それによって表現力が増していたり記述が簡潔になっていたりする面もあるので
トレードオフではある
とりあえずBetter Javaの部分と、
一般的な関数型言語の部分(高階関数とか)を使う分には
おいしいところだけを得られて良い感じになるんじゃないの
kmizu氏のスライド見たけどdisじゃなくね?
Nemerleとの比較で△が多くて残念だけど。
割とフツーのマクロで地味に嬉しいと書いてるじゃん。
407はこのスレにはりついているアンチだから、気にしない。
kmizuフィルターを通してあの評価なら
Scalaのマクロはうんこって事
>>405 「参照透過性を満たしているかは値域で決まる」って話でしょ。
すげぇ重要な話だし勉強になったが。
>>414 書いた本人すら理解できないコードを保守する側の身にもなってくれとしか
むしろJavaからオブジェクトプログラミング関係の仕様を削除してもいいとすら思ってる
保守と理解と生産性と過去との整合性のバランスが一番いいのは、C言語からポインタとビット演算を削除した言語
C言語からポインタとビット演算削除して、ポインタとビット関係は関数で抽象化して、関数型とクロージャの代入を取り入れて、Erlangのアクターモデルを取り入れるという方向で言語作ってくさい
もうなんでErlang使わんの?としか
>>423 Javaの資産を利用したいから
逆に、JVMとJavaの資産を無視できるならScalaを使うメリットはない
クロージャ使えると言っても、プログラム全部をクロージャで表現できるわけじゃないんだよね
プログラム全部をクロージャで表現できるなら、schemeみたいに自分でグレードダウンした処理系を設計できるのに
for文を使えると言っても……
じゃあClojure使えばいいんじゃねーの
確かに、プログラム全部を代入できるなら話が変わる
>>427 Clojure はアクターモデルじゃないから
Scalaはアクターモデル採用したのに、何でだろ
ぶっちゃけ、Actorモデルでバリバリ並行処理書いてる例とか寡聞にして知らないのだが。
あと、OO理解できない人間ほどOO不要論を唱えるよね。
いまさら劣化Cで複雑なプログラム書くとか正気とは思えん。
Erlangを使ったエリクソンの開発事例が有名じゃないの
有名といってもたかが知れてる感はあるけど
非常に高度な無停止性を実現したケースだったはず
アクターとかCSPとかデータフローとかペトリネットとか
並行性を含んだモデルは昔からあるけど
少なくとも今のところメジャーになった言語には採用されてないね
アクターモデル採用したってなに?
言語本体じゃなくてライブラリで実装してる機能じゃん
Clojureもライブラリで実装すればいいじゃん
>>431 それは知らなかった。サンクス。
まぁでも、最近は大規模データ処理と言えば猫も杓子もMapReduceかCEPな感じがする。
何が普及を妨げてるんだろう。
>>430 OO理解できない人間が作ったプログラムを保守させられてきた人間ほどOO不要論を唱える
OO理解できない人間はOO不要論は唱えない
>>432 アクタごとにプロセス(スレッドではない)を生成するからAPIインクルードすれば使えるというわけじゃない
>>434 それはOO理解できない人間にプログラマを名乗らせて人月単価を上積みしてるビジネスモデルの問題だろ。
>>435 Actorはスレッドプールからのリソースを割り当てられて実行される計算コンテキストの単位なので
プロセスじゃないぞ
>>437 アクタモデルのプロセスはスレッドではない(OSのプロセスでもない)
>>436 つまり、日本の実務ではScalaを使ってはいけないということか…
メッセージとして送るオブジェクトはどこまでコピーされるん?
シャロウコピーで参照先は共有?
>>435 プロセスだとどうしてダメなのか説明してください。
現にscalaではActorはライブラリとして実装されているというのに。
>>432 言語によっては、専用構文とかを用意して
そのモデルの活用を支援している事がある
もちろん、より記述しやすくなることが多い。そういうのを指しての話
少なくともScalaのActorに専用構文なんてないけど?
中身がなんだっていいねん 使えればいいねん
一人言ってることが支離滅裂なやつが居るな
最近ScalaちゃんのTwitterゲスくなりすぎだろ…
>>440 アクターモデルだから当然ディープコピー
ディープコピーというか、なんか変なシリアライズしてないか?
そりゃ本格的な通信だなあ
アクターがアンダーグラウンドのサービスを呼び出すとエージェントになるです?
twitterも当たるから当たらないか分からないサービスなんて
最初からjavaでは書きたくなかったんだろうな
>>450 いいえ、こびとさん
それはアクターでなくて夜を往くアイドルなのでは?
453 :
デフォルトの名無しさん:2012/09/07(金) 00:30:30.29
そろそろ魔法言語リリカルscalaが出てきてもいい頃
時代は、スカラロイド だろ。
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)
}
}
T -> m -> a
TMA完成でスカラロイドちゃんが3次元に!
JavaFXって、Scalaから簡単に利用できるようになる動きはあるのかな?
いままで、JavaはGUIが弱かったけど、JavaFX2.0でようやくまともなGUIが使える?
スカトロイドみてえだ・・・
>>457 JavaAPI直接使う以外にもScalaバインディングはあって簡便な記述できるらしい
でも現時点ではFX自体の完成度がいまいちって話も聞くんで短期的にはSwing/SWT使い続けるほうが
SWTはもういりません!
そもそもJavaの普及率に比べてJavaのAPIを使ったアプリケーションをあんまり目にしない
携帯やWebならもっと普及してるのだろうか
生のjavafxでも簡単に扱えます
そう、scalaならね
>>461 もはやフロントエンドで使う言語じゃないしな。
JavaFXでRIAとして復権を目論んだものの失敗し、最近ではセキュリティホールの元凶扱い。
akka 2.0になってからリモート通信ができなくなった。
透過的な設計というのも善し悪しだな…
明示的制御機能がなくなって個人的には悪化した
>悪化した
これが言いたかっただけだろw
FXやるやつはクズ
汗水流して働いてお金稼げと
f(x)だと!?
確かにFXは高性能すぎる
オービタルぐらいに留めておくべき
>468
関数型ですねわかります
akka2.0は何故リモート通信ないのアホなの?
生産性10倍なんだろ?
何で無いと思ってるの?アホなの?ドキュメントも読めないの?
ところで、おまいら、
Scalaって、OpenJDKで動かしたりしてる?
うごかねーよw
そうなの?
何が違うのかな
何でOpenJDKで動かないと思ってるの?アホなの? 471 と同じ人なの?
たとえば、このスレでも >229 さんとかは、
Scala2.9をOpenJDKで常用しているみたいだし、
別に珍しくもなんともないだろ。
>>447 それおらだ Ubuntu で何も考えずに環境作ったら OpenJDK だったのでそのままにしてる
Sun環境も作ってるけどね
先生に後方互換性完全無視した夢のscalaを語って欲しい
そんなものは夢でscala
後方互換性完全無視ってJavaとかJVMを無視って意味?
JVMとJavaAPIを無視するなら、わざわざScala使う必要ないしな…
484 :
デフォルトの名無しさん:2012/09/29(土) 12:22:02.04
>>480 > 先生に後方互換性完全無視した夢のscalaを語って欲しい
おまえ、分かり辛い書き方するから、勘違い君が増殖しちゃったじゃないか!
おまえが480で言いたかったことは
「Odersky先生に、 もしも、互換性無視で新たにScalaを作るとしたら、
どんなScalaにしますか?って聞いてみたいわ~キラキラ」
でしょ。
まさに、チラシの裏に書けって。
むしろScalaがJavaへの発言力を高めてErasureで型情報が消えなくなるように改善させるという方向を目指します
JDKのExploitの多さってどうにかならんの?
Erasureで型情報が消えなくなるようになったら、Scalaに不都合もあるぞ
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
とかとか。
自己レス、やっぱりこのブログ記事のコード、バグあるよね…
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
>>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 => ... }形式の無名関数は通常の形式より後で導入されたので、こんなわかりにくい書き方になってる
んだろうと思う
補足。
{ println("foo"); x: Int =>; println("bar"); y: Int =>; println("baz") }
は解釈としては、ブロックの中で x: Int => が出てきた時点で、残りの部分全体がBlockになるので、実質的に
{ println("foo"); (x: Int) => { ; println("bar"); (y: Int) => { ; println("baz") } } }
のように差し支えない
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| ...} みたいに書きたい!
みたいな動機があってひねり出したんだろうか。
Odersky先生ってゴリラみたいな顔してるな
重要なのはヒゲ
スイスって、国の産業とかを大切にする国だよなあ。
こんな黒魔術言語・・・ 流行る?
吐き気を催す駄文
個人的にはもう十分流行ってる気がする
それはさておきIntellij使ってみたけどこりゃ便利だな
色々親切すぎてもうscala-modeには戻れんわ
気づいたらライセンス料払ってた
もう2.10.0-RC1でてるんだな
phpstorm(webstorm)は、一度買ったことあるけど(アップグレードしてない)、Intelijあいでぃあはコミュニティ版のヘタレだぜ。
IntelliJ派とIDEA厨の戦いが終わらない
javaの延長としての使い方なら快適なんだけど・・・
passwordthing-scalaをテンプレートとしてアプリ作ろうと思ったら、ハマってしまった。 難解すぐる。
一応、仕上げたけど、javaハイレベル出身者でも、ハードルは高い。 scalaとplay2のマッチは頭痛が痛い。
508 :
デフォルトの名無しさん:2012/10/14(日) 18:31:50.50
言語としてはいいな。
509 :
デフォルトの名無しさん:2012/10/14(日) 20:10:56.64
後発だからJavaより良い点は多々あるが…
敢えて使う理由が無い。
Javaを長年使ってるとプログラマとしての資質が破壊されて
Java以外の言語を使いこなすことが困難になるからね
「敢えて使う理由が無い」というより「使いたくても使えない」が正しい
そこまでひどくなくても、サンマイクロの出方次第で大量のjavaプログラマが路頭に迷うのは確か
512 :
デフォルトの名無しさん:2012/10/14(日) 21:42:07.46
サン自体が既に消滅してるだろ・・
>>513 >私のような新卒でIT業界に入ってきてJavaでプログラムを覚えた人間、即ち大量生産されるJavaプログラマは、
↑あほくさ。
ここ数年、新卒の学生は、むちゃくちゃ優秀なのが多いので、何の話をしているのだかサッパリ。
自分が優秀でないのを、言語のせいにするとか意味不明。
COBOLを今だにやってるオッサンだったら、言語のせいにしても良いが。
Javaに関してはAndroidで息を吹き返したが、Scalaはキラーアプリがまだないかもね。
Javaはスタンドアロンのマルチプラットフォームアプリ基盤として
独自の立ち位置を持ってるから、Scalaもなんとなく便乗できるんじゃね
>>513 POJO頼りならscalaなんて無理無理 w
その発言だけでお前がPOJOの意味を間違えて覚えているのがよく理解できました。
はい過疎
2.10はまだか
RC1出てるらしいしもうすぐじゃね
Scalaの勉強会って最近どうなの?
東北、関東、なごや、倉敷 とかでやってるみたいだが、
どこも遠いのでいけなくて残念。
>>498 > スイスって、国の産業とかを大切にする国だよなあ。
かつてスイス最大の産業は傭兵。
せっかくスルーされてた脱線ネタを掘り返すんじゃねェぞこのスカタンがァーッ!
POJOの奇妙な冒険
崖の上のPOJO
Macro
String Interpolation
Value Class
Implicit Class
spawnの廃止
akkaの統合
日経ソフトウェア12月号の特集の中に Scala入門があったぞ。
日経ソフトウェアは、結構な頻度でScalaを取り上げているなあ。
でも、毎回入門ばっかりなんだけど、、。
530 :
デフォルトの名無しさん:2012/10/27(土) 13:20:10.79
実用にならない何よりの証>入門ばっか
naruh
532 :
デフォルトの名無しさん:2012/10/28(日) 21:53:54.48
コンパイルが遅かったから最近使ってないんだが、改善された?
環境にもよる気がするが・・・。
使わなくなった時期が気になるところだが、
fsc とか sbt 使うぶんにはそれほど気にならないけど。
どうやってコンパイルしてんの?
コンパイル遅いのは、改善されてないと思うよ
sbtだと差分コンパイルしてくれるからそんなに気にならないな……
まあ遅いのは確かなんだけど。
2.9.1.finalでコンパイル速度が改善されたって記事どっかで見た気がするから、
それ以前のバージョン使ってた人ならもう一度試してみてもいいんじゃないかね
自分でフォークして改善したらタダみたいなもんやぞ
就職して給料で良いマシンあてがわれて課題を見失うオチが見える
>>533 2年くらい前かな。
2コアのしょぼいマシンでLINUXとかiMacでMacPorts経由とか。
>>539 エスパーか?5年前のラップトップなんだけど、最近の良いマシンがどの程度かよく知らないです。
当時小さいプログラムしか書かなかったから、fscでも立ち上がりの遅さが腹立たしかった。
>>539 こんな遅いの使えるか!とかさんざん愚痴を漏らしつつ、
重たいソフトを拒否して、古いソフトばっかり使っていたら、、、、
周りはふつうにi5,i7マシンを使っていて、最近のソフトでサクサク仕事をやっていた、、、、でござる。
最近はビルドの速度と実行速度はどうでもよくなっる
結局、開発速度だけがボトルネックになってる
実行速度がわりとどうでもいいのは、うちもそうだけど
ビルドの速度は開発速度の一部だったりしないかい?
バックグラウンドでテスト走らせて結果がNGの場合だけ手戻りが発生する
CPUでいう各ステージの並列動作と予測分岐みたいなものだからな
演算ステージが人間のおつむだからボトルネックになるってことだろ
replで動きを確かめながらコーディングするような状況を想像してた
出直してくる
>>545 いいな~
日本の会社でそこまでテスト環境整備する余裕のある会社ってあるんですか?
IT業界でもそこまでやってるとは思えないんですが。
反射的に某G社しか浮かばない・・・。
技術職で食っていくつもりなら会社が優れた人材に育ててくれるなんてIT土方気質はいいかげん捨てろ
10年待たずに首を吊ることになるぞ
G社のように才能を持った人材が流動的に要職を担ってるのが現在の会社の形態なんだよ
10年前はビルドとテストのタスクを実行始めたら家に帰って、次の日出社するくらいにちょうど終わってたんだけど、今は昼飯食ってる間に終わるので、仕事量の密度がとんでもないことになってる
IT関連企業TOPに踊り出る方法教えます
「sbtで~test」
一部上場どころか全部上場する勢いだ!!
Java系だとテスト体制完備しないで開発するのは非常、っていう空気を感じる
>>547 "日本の会社でそこまでテスト環境整備する余裕のある会社ってあるんですか? "
いくらでもあるだろ。。。どんなひどい会社にいるんだ
>>552 WEB系は自動テストが難しいのでコンパイルが通るかだけチェックして、テスタに投げてしまう
そこで言うWEB系とは何のことだ。
ウェッブのインターネッツに散らばってるめちゃシコ画像をモリモリ探し出してくれる系です
>>554 HTMLコードを動的生成するヤツ
データベースと連携するヤツ
クライアントのクッキーもらうヤツ
557 :
デフォルトの名無しさん:2012/11/02(金) 02:13:11.20
>>556 違うだろ
>>554 ここでいうWEB系ってのはLiftやPlayやScalatraの事だ
Scalatraは知らんが、LiftとかPlayって自動テストできるように設計されてるだろ?
Scalatraもできるよ
>>532 だが、スレチのネタでここまで盛り上がるとは、最近話題ないんだな・・・。
ver3.0台の構想とかないの?
Scalazについて語るスレ。
scalazって触ったことないんだけどやっぱスーパーscala使いには必須なの?
>>563 必須ではない。Scalaをよりpurely functionalに使いたいなら便利。ただ、数名のチームで、全員がscalazのコンセプトを理解してる状況でなきゃ使えないと思う
アプリケーションよりライブラリ設計者に有用なライブラリというのが私見
Scalaのライブラリ/フレームワーク設計者でscalazを使ってる人は少なくないし
565 :
デフォルトの名無しさん:2012/11/05(月) 20:38:47.05
本体に統合される可能性ってある?
>>565 小田隙先生はScalazの人たちと少し距離を取ってる節があるし、たぶん入らない。Scalazそのものが悪いというわけ
でもないのだけど、Scalazの人の一部はしばしば過激な言説でもめたりするので、自分も少し苦々しく思ってる部分があったり
とはいえ、Specs 2の内部とか、縁の下の色々なところで使われてるのも事実
flatMapとOption型でモナディックにプログラムを書こうとすると
型推論の弱さに気が狂いそうになる
scalazのソース読んでるけどたまに型名の後についてる#λ←これ何なの?
こんな構文あったっけ
λという名前の内部クラスのように見えるが。
scalaはutf8(でASCII外)の演算子があったりする。
入力画面度過ぎるだろ・・
573 :
デフォルトの名無しさん:2012/11/06(火) 23:57:25.66
特殊なキーボード使ってるんじゃね?
たしか 2.8 で「->」を「→」で代替できるようになったはず。
>>572 入力が面倒ってか?
日本人だと、日本語IMEを使えばそんなに面倒でもないけど、
英語文化圏の人は、λ とかどうやって入力するんだ??
>>577 ありがとん、読んだ
コレ使えばtype Y[A] = X[A, Int]と部分適用するのにいちいち別名で定義しなくても
その場限りの無名な型コンストラクタが使えるぜ!!って感じなのね
>>577 >>578 どうでもいいツッコミだが、これって「その場で使い捨ててる」けれど、無名じゃなくて名前を一旦つけてるような
あれからもう1年か
前スレ眺めてちょっと思い出に浸った
はじめからJavaでやれよ、と
DBの回りはなんだかんだ言って結局Javaの資産を使うことになる
しかしただでさえ複雑なのに、2.10になってマクロとか入ったらさらに複雑になるな
カオスは人の印象に過ぎない
Scalaはすべて調和と秩序で成り立っている
モヒカンと戦うものは自らもモヒカンとならないように気を付けねばならない。
汝が混沌を覗き込むとき、混沌もまた汝を覗き込んでいるのだ。
女が混浴
に見えた
>>285 マクロはexperimentalなので、明示的にimportしないと使えない。
他にもhigher-kinded typesなど「高度な」機能はimportしないと
警告出る。将来的にはコンパイルエラーになる。2.10以降のScalaは
「高度な」機能をデフォルト状態でOFFにすることで、(普通のユーザにとっての)
複雑さを減らす方針
明示的にimportしないと使えない。
といっても、みんながそれやって使い出したら初心者も結局マクロ使われたコード目にすることになるだろ
初心者にとってはお先マックロだな。
【審議中】
∧,,∧ ∧,,∧
∧ (´・ω・) (・ω・`) ∧∧
( ´・ω) U) ( つと ノ(ω・` )
| U ( ´・) (・` ) と ノ
u-u (l ) ( ノu-u
`u-u'. `u-u'
>>591 明示的にimportすることで、
あ、このimport文があるってことは、これを使った文があるわけだ、
というのが分かる。
初心者にとってありがたいのは、検索するときのキーワードが分かるかどうかってこと。
ま、おまいさんが心配するほどのことじゃないってことだ。
import *
>>595 > import *
だから、そういう心配はしなくて良いって。
>595がScala書いたことないのは分かる
JavaFXって、
単なるGUIライブラリかと思っていたら、スクリプトっぽいな。
変数の型の指定とかって、Scalaに似ている。
バインドとかトリガーっていうのは言語として面白いね。
ScalaFxっていうのがあるけど、
Scalaから JavaFXを呼び出したりとかいう使い方は、しないものだろうか?
>>598 それは初代JavaFXの事で、既に(開発自体が)オワコンになってる
今JavaFXと言われてるのはJavaFX 2の事で、これはSwingの後継というと違うけど、単なるJava(JVM)用GUIライブラリ
ScalaFXはJavaFX 2のラッパー(ScalaFXはまだまだ開発中っぽいけど)
>>599 >
>>598 > それは初代JavaFXの事で、既に(開発自体が)オワコンになってる
なるほど、
昔は、JavaFxスクリプトって呼ばれてたものなあ。
今更、スクリプト(=言語)が増えるよりかは、JVM上のライブラリーが向上するほうが嬉しいよね。
>ScalaFXはまだまだ開発中っぽいけど)
GUI部分は、Javaで書いて、Model,Controller部分のScalaから classを呼び出すって使い方で十分な気がするけど。
602 :
デフォルトの名無しさん:2012/11/27(火) 19:37:47.82
2.10って年内にリリースされますか?
慎重にやっていって欲しいものだね。今のプロジェクト運営なら、さすがにScala 2.8 RC1のときのような事にはならんと思うけど…
Scala Days 2013(春頃)に合わせるくらいでちょうどいいんじゃないかなあ
605 :
デフォルトの名無しさん:2012/12/02(日) 19:41:54.43
コレクションライブラリによく出てくる
型パラメータ「Repr」って何ていう単語の略ですか?
どうもありがとうございます。
"hogehoge".contains("hoge")
こう書く代わりに
"hogehoge".contains(List("hoge"))
こう書いてしまったんですが、なぜかコンパイルエラーにならず、しかもfalseになったのですが?
Scalaさんの気持ちが解らないのですが、どういうことなんですか?
引数にAny取るんだな
Aでよくないかコレ?
つい最近ちょうどソース見て同じ事思ったんだけど、それ Nightly だと
def contains[A1 >: A](elem: A1): Boolean
になってる
なので、そのうちScalaさんの方が >> 608 の気持ちを解ってくれるようになるんじゃないかな
たぶん
実行しようとおもってコマンド打ち込んでもエラーになる
よく見てみたら、saclac と打ち込んでた
ずっと「サクラ」だと思ってました
さくらっく
プログラム言語って、どれも、検索しづらい単語ばっかりで困る。
CとかGOとか。
それはさておき、Java6のjrunscript と scala を組み合わせて使っている人いる?
>614
それだけじゃなくPHPが流行ってからCの検索がさらにやりにくくなった
616 :
デフォルトの名無しさん:2012/12/27(木) 20:27:37.12
てす
今さら言うのはなんだが、どのへんがスケーラブルなのかよく分からない
twitterのような大規模システムも書けるし
ちょっとした使い捨てスクリプトも簡単に書ける
スクリプトと大規模開発向けの言語のいいとこ取りしてるから使いこなすの難しそう
pythonで充分だと思うの
せめて型システムとパターンマッチは欲しい
622 :
デフォルトの名無しさん:2012/12/29(土) 03:42:49.63
Scalaはまぁ好きな言語なのですが、普及するかというと正直いって否定的。
最大の理由はマルチパラダイムという点。Scalaはオブジェクト指向と関数型
の二つをパラダイムを融合させたマルチパラダイム言語ということになってい
ますが、これまでオブジェクト指向と論理型や、関数型と論理型などなどマル
チパラダイム言語は数多く提案されてきましたが、普及した言語は皆無。その
理由は簡単、多くのプログラマーは、ひとつのパラダイムでも使いこなせない
のが現実。そうなるとマルチパラダイム言語は身に付けないといけないパラダ
イムが複数あるわけで、使いこなせない。逆に言うと相当、優秀なプログラマー
でないと使いこなさないはず。Scalaが普及するとしたら、メニーコアプロセッ
サを前提に、関数型の特質をうまくつかって、副作用の少ない並行プログラミ
ングだと思います。というのは並行プログラミングも逐次プログラミングと比
べると格段に難易度が高いので、その難易度についていけるプログラマーなら
ばオブジェクト指向と関数型の二つをパラダイムを使いこなせるかも、という
のが理由。
こうかくとScalaに否定的に思われるかもしれませんが、普及する言語という
のは、できるプログラマーに好かれるだけでは十分ではなく、そうではないプ
ログラマーにも敷居の低いことは要件なんですよね。逆に言うと圏論や型推論
など、一般のプログラマーには難しい理論を要求する言語というのは普及は難
しいのではないでしょうかね。もちろん完全に隠し込めればいいのでしょうが、
コンパイルエラーやデバッグなどで顔を出す限りはなかなか難しい。というわ
けで頭の良い方々が推奨されるプログラミング言語については、その普及とい
う点では否定的に見ております。なお、アカデミアのプログラミング言語を専
門とする研究者(特に優秀な研究者)が設計した言語が大きく普及しないという
のも、この辺りに遠因があるのではないかと邪推しております。
どっかで見た文章だな
マルチパラダイムなC++が普及してるんだから即論破
>>624 C++はパラダイムどころか設計思想をガン無視してもプログラミングできる
Cの資産もそのまま使えるので、普及の説得がしやすい
Scalaはパラダイムと設計思想を無視すると、ものすごく冗長になり、逆に難しくなる
Javaの資産が使えるという理由で普及させようとしたが、実はJava自体の互換性がCよりも低かったと言うオチ
どう冗長になるのかコード例出せ
パラダイムと設計思想を無視するとどう冗長になるのか聞いてる
>>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 関数型より手続き羅列の方が簡単だから、冗長になるにも関わらずわざわざ手続きをくどくど羅列する
>>625に冗長になり逆に難しくなるって書いてあるけど
>>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)
}
質問することによって逃げる
床に水を置けと言われたら、床に水をぶちまけるのが一番簡単
床に置いた水を使えと言われたら、床にぶちまけられた水を使うのは難しい
>>632 関数型より手続きを羅列する方が簡単だから、冗長になって難しくなるにも関わらず、わざわざ手続きをくどくど羅列する
C言語でfor文繰り返しによる抽象化というパラダイムにありがたみを感じない人がコピペの方が簡単だからという理由でprintf文を100行羅列するみたいな
という理解でよろしいでしょうか
ルフィが今更ギアと覇気を使わずに戦っているようなもの
for文がjava非互換で機能上あるいはパフォーマンス上for使えず
while使うしか無い箇所の記述見ると無駄だと感じる
enumも用途次第ではjavaより冗長になることも
どっちもパラダイムとは違う話だが
javaにパフョーマンス求めるなって
javaに求められてるのはサーブレットAPIだけ
GUIですら大して使われていない
643 :
デフォルトの名無しさん:2012/12/30(日) 12:41:32.78
>>643 再帰はプログラムそのものの実装方法とコンパイラのベンダー依存の最適化の影響をモロにうけるからベンチマークには向いていないと思う
もしやるとしても、実行時使用メモリの大きさを指定すべきだと思う
「プログラムそのものの実装方法とコンパイラのベンダー依存の最適化の影響」を測定するベンチマークなんでしょ?
>>645 プログラムそのものの実装方法とコンパイラのベンダー依存の最適化の影響を測定するなら、「同じ言語」でやらなきゃ
JVMのパフォーマンスいらないならあえてJVM言語選ぶ理由の半分は無くなる
積和演算の塊みたいなことをJVM言語でやりはしないがパフォーマンスと機能の
バランス取れるからわざわざJavaバイトコードをターゲットにしてんだろ
>>646 「プログラムそのものの実装方法とコンパイラのベンダー依存の最適化の影響をモロにうける」という主張を認めるなら、当然その影響を測定できることになる。
もちろん、
>>644の主張を認めないという立場はあっていいと思う。
>>648 具体的に言うと、例えば、再帰は、末尾最適化を言語仕様で定めてるモノと、ベンダーが勝手に実装してるモノがあるので、
フィボナッチみたいなベンチマークは畳み込みの実装が同一であるということが保証されているコードでないと何を比較しているのか分からない
下手するとプログラマのスキルの比較になってしまう
>>643のリンク先コードは末尾再帰で書いてないから
末尾再帰最適化は関係なくね?
>643 のScalaはコンパイル時間含めて計測されてるからはっきりいって無意味
>>649 あなたの言っていることは、
「言語仕様で定めてるモノ」と、「ベンダーが勝手に実装してるモノ」を区別して測定する必要があるが、
この実験ではそれを区別できていない、ということかな。
そもそも、その2つを区別するための実験ではないので、勝手に藁人形を作って批判しているように見える。
>>651 すべての場合で意味がないことを証明するのは難しい
やるべきことは
1)どういう性質があれば意味があって、どういう場合に意味がないのかを定義する
2)それに従い、意味がないことを証明する
ここでは1)が難しい
それは、あなたにとって意味がないだけでしょ?という意見に耐える必要がある
>>650 末尾再帰が仕様の一部の言語もあるから、末尾再帰を使わないということは、その言語では実際に使われないような効率の悪い実装で比較することになる
だったら、再帰やfor文を使わずに、=と+だけの式を100行くらい並べて計測すべきということにならないだろうか
>>652 まず、「フィボナッチ数を求める処理時間の計測」が目的と言っているが、やっていることは「フィボナッチ数を求める処理時間の計測」ではない
やってることは「フィボナッチ数を求める処理を空間効率の悪いアルゴリズムで実装したときの実行時間の計測」
しかも、ベンダごとにプログラマが意図しない最適化が存在することは、 -O2 オプションを確認していることから、本人も認めていると分かる
さらに、わざわざ空間効率の悪いアルゴリズムを選んだんだから、計測するのは実行時間ではなく、n=38の実行時間の比較ではなく、例えばn=38とn=50の実行時間の差の比較をすべきだと思う
効率的なアルゴリズムを採用すれば、
n=100000でも1秒かかるまい
「フィボナッチ数を求める処理を空間効率の悪いアルゴリズムで実装したときの実行時間の計測」を異なる言語間で比較したのだから、
この実験は「フィボナッチ数を求める処理を空間効率の悪いアルゴリズムで実装したときの実行時間の計測」を異なる言語間で比較できている。
アルゴリズムの効率という誰も主張していない論点を持ち出して批判するのは、存在しない藁人形を作り出して批判しているにすぎない。
>>654 もちろん、言語仕様にある機能をふんだんに使って結果どうなるかを比較するための実験ならば、
末尾再帰が仕様の一部の言語で末尾再帰を使わないということは、その目的を達成できていない。
しかし、そもそも言語仕様にある機能をふんだんに使ってどうなるかを比較するための実験ではないので、
あなたは存在しない藁人形を作り出して批判している。
>>653 他のコンパイル言語は実行時間のみで計測した数値なのに、Scalaだけscalacでコンパイルしたものを実行するのではなくscalaコマンドを使って実行した時間を並べている。
違う物を比べた結果を並べても「俺に取っては」無意味だ。そこに意味を見出す人がいてもいいが、考えが合わないな。
>>659 それでも十分速いという、Scalaの実装のすばらしさを示した実験だと思ったけど
そう思わない人がいてもいいと思うよ
他の言語もコンパイル時間込みでtimeで計ってるんじゃねーの?
わざわざ「gcc -O2 fib.c; ./a.out」みたいなコマンド載せてるんだし
> さて、ぶっちぎりで速いのが Scheme48 のコンパイルバージョン。なんと 0.004sec。
> ただこれはタネがあって、コンパイル時に関数を評価してフィボナッチ数を算出しているためです。
> したがって、コンパイルがインタプリタで実行するのと同程度の時間がかかります。
とあるので、コンパイル時間は含まれてないようだ
>>658 問題は、
・コンパイラが「勝手に」言語仕様に「ない」機能をふんだんに使って最適化する可能性があるということ
・言語によっては、言語仕様が推奨する実装方法を避けている(現実にやらない実装をしている)のに、「フィボナッチ数を求める処理時間を計測してみました」と主張していること
・計算空間を広げることを意図した実装なのに、n=38という小さい数だけの実行時間を比較していること
>>659 素朴な疑問だが、scalacでコンパイラしたモノって、同じ処理をする.javaファイルをjavacでコンパイラしたモノと異なるのだろうか
>>663 > ・コンパイラが「勝手に」言語仕様に「ない」機能をふんだんに使って最適化する可能性があるということ
可能性があるから、だから何なのか?
> ・言語によっては、言語仕様が推奨する実装方法を避けている(現実にやらない実装をしている)のに、「フィボナッチ数を求める処理時間を計測してみました」と主張していること
「フィボナッチ数を求めるアルゴリズムはいろいろありますが、今回は以下の再帰で求めるアルゴリズムで統一しました。」と、ある基準で統一していることを明示している。
この基準において測定し比較するという実験デザインは、完結している。
言語仕様が推奨する実装方法で実験をしたければ、やればいい。
今回の実験とは無関係だ。
あなたは、無関係な論点を作り出して批判しているだけだ。
> ・計算空間を広げることを意図した実装なのに、n=38という小さい数だけの実行時間を比較していること
もちろん完全無欠の実験など存在しない。
追加の実験をしたければ好きにすればいい。
また、n=38が小さいとは思わない。
例えば、10分以上かかったものも存在するし、実行できなかった環境もある。
もっと小さな数字でも試すべきだった。
しかし、n=38だけを測定したからといって、この実験の価値やおもしろさが損なわれているわけではない。
Scalaが遅いベンチマークは無意味なベンチマーク
実行速度だけでペイできるような仕事なんか世の中にはないだろ
キンキンにチューニングして最速謳ってても環境の変化に対応できなければお客は離れていっちゃうよ
だからぼくらには"Scalability"に対応できる言語が必要なんだ
そうScalaならね
ただJavaでの記述に改めるだけで速度が2倍になるとは素晴らしいな。
>>665 「フィボナッチ数を求めるアルゴリズムはいろいろありますが、今回は以下の再帰で求めるアルゴリズムで統一しました。」言っているが、
「特に再帰を利用したプログラムは」コンパイラが「勝手に」言語仕様に「ない」機能をふんだんに使って最適化する可能性があるので、アルゴリズムを統一するだけでは不十分
言語仕様にない最適化をオフにして、各言語各ステップの対応が1対1であることを保証しなければならない
(同じ言語だけを用いて、コンパイラごとオプションごとの最適化の違いを比較したと主張するなら、この実験はこのままでも意味がある)
n=38は数が小さいからおかしいのではなく、n=38という小さい数「だけ」で比較したから意味がない
実行時コンパイル時か実行時のメモリサイズ指定の有無でまったく別の結果になるから
メモリ指定をガン無視してるんだから、わざわざメモリをたくさん消費してそれが決定的に計算能力に影響するアルゴリズムを用いるべきではない
(2つの入力の結果の差同士を比較するなら、メモリ消費の効率を比較したと言えなくもない)
n=38だろ?そんなにメモリ使うか?
>>670 再帰するときに参照・値だけスタックする言語と、サンクみたいに計算をスタックする言語と、環境の大部分をスタックに積み上げてく言語がある
後者は再帰でメモリをバカ食いする
スタックを巻き戻すときに解放されるメモリを再利用しないの?
ポップした後に空いた領域を利用可能にするのは結構コストがかかる
C, C++, Java, Objective-C, Haskell, OCaml, Go, C#, D, Ada, Pascal
よりもScalaは遅いんだね
Javaより2倍遅いということは、メソッドそのものではなく、メソッドの呼び出しごとにスケルトンを作ってるということだろうか
1秒程度の実行時間で1回の測定なので、細かいことを言うのは不適切
実行時間のオーダーが違うのを見てフーンと言う程度にしておくのがいい
>>675 バイトコード見るとJavaはif分岐にScalaはテーブルジャンプになってるけど、
どっちもごく普通のコードに落ちてる
scala.Predefの初期化とinvokevirtualの呼び出しコストだな
>>669 "「特に再帰を利用したプログラムは」コンパイラが「勝手に」言語仕様に「ない」機能をふんだんに使って最適化する可能性"を比較できている
だから、"「特に再帰を利用したプログラムは」コンパイラが「勝手に」言語仕様に「ない」機能をふんだんに使って最適化する可能性"を比較する実験としては正しい
あなたの頭の中にある目的を達成できていないのは理解した。
その目的を無関係な実験に押し付けるのは間違い。
>>678 確認したいんだけど、それは言語や言語仕様の比較じゃなくてコンパイラの比較だよね?
>>643 はいろんな言語の複数のコンパイラの結果を一つにまとめた表が真ん中にあるからおかしい
コンパイラごとの結果を言語の数だけ用意した後半だけを用いて言語ごとに議論すべき
>>679 「それ」がなにを指しているのかよくわからないけど
>>643 は載っているコードを色々な環境で実行させたときの実行時間を比較している。
>>643 の実験の特徴は、具体的な目的を設定せずに、こういうことをしたらこうなりましたという結果だけを列挙している。
「言語や言語仕様の比較」や「コンパイラの比較」のような難しい目的を設定していない。
おそらくやっている人が優秀なので、これらの難しい目的を設定してしまうと、「XがYだから」目的を達成できていないという批判があると理解しているためだろう。
目的を設定せず結果だけを列挙するならば、「XがYだから」目的を達成できていないという批判に対して、そもそもそんな目的は存在せず、単に「XがYである」ことを含んだ実験なんだと反論すれば十分だから。
例えば、再帰を利用したプログラムはコンパイラが勝手に言語仕様にない機能をふんだんに使って最適化する可能性があるから実験は不十分だという批判に対して、
再帰を利用したプログラムはコンパイラが勝手に言語仕様にない機能をふんだんに使って最適化する可能性を含んだ実験だよ、と反論できる。
scalacで測らないと実験全体としては意味ないよなあ
あとは、scala 2.7.7って古っとかツッコんで終わりだと思うんだが
何故謎の論点でこんなスレ進むんだろ
>>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 でフィボナッチ数を求める処理時間を計測してみました。」
という文は間違い
なぜこんなことをクドクドここに書かなければならないかと言うと、仕事でクライアントが言語押ししてくるときに明らかに2chのスレをソースのひとつにしたと思われることが何度かあったから
特にベンチマーク系は逐一クドクドと間違いの指摘を残しておかなければらならない
具体的な目的を設定してない実験に対して、目的を仮定した批判は的外れ、というのはくりかえしておく価値はあると思う。
論理構造を理解できていないことが原因。
なぜこんなことをクドクドここに書かなければならないかと言うと、文章の論理構造を理解できていない人と会話はうんちゃらかんちゃら
>>681 単純なプログラムなので2.7.7程度のバージョンなら差はないと思う
素直なバイトコードになると思う
>>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速ぇええ! 」という結論は間違い
Scalaが遅いという結果は全部間違い
これ覚えておくように
scalac版も記載されたよ。良かったね
それでもクソ遅いけどww
>>680 このベンチマーク設定した人が優秀かはともかく私情入りすぎてるとは思う
特定の言語群だけくさすコメントが入ってたり、Schemeは思いいれがあるからたくさん結果載せてたり
「具体的な目標を設定してない」のかどうか。
あとさ、「もし Scala が Java より速かったら、「おおっ、Java の文法的制約を超越してバイトコードのポテンシャルを 100% 引き出しているっ」」
とか、「最適化でこんなに早くなって…」とかコメントが全体的にお粗末だわ。初心者が色々な言語でべんちまーくしてみました、だったら
わかるんだけど、処理系実装に詳しい人とはとても思えん、っつうのが正直な感想
そもそもマイクロベンチマークを
言語の速度の近似だとみなす事に
無理があるわけで
http://d.hatena.ne.jp/satosystems/20121228/1356655565#c1356894304 >生成されたバイトコードをみる限り、足引っ張りそうなのはinvokevirtualくらいで、しかも、これだけ同じメソッド
>呼び出しが多発すれば脱仮想化が働くと考えられるので、差がついた部分は
>scala-library.jar(Scala標準ライブラリのjarファイル)のロード時間部分ではないかと
>思います。
>裏付けをとるために、n=38ではなくn=40にしてみたところ、ほぼ予想どおりの結果が出ました。
scala-library.jar読み込み時間の差は固定値で実運用時にはどうでもいいんだから
実際はJavaとほぼ同じ性能だと見なしてよさそうだな
起動が遅過ぎて小物作成に向かないってのは
もう周知の事実だから、いまさらだな
>>692 実際がフィボナッチの計算程度しかしないなら、その通りだね
>>691 そもそも言語の速度という概念の測定は難しいし、おそらく不可能
だからこそ適当なベンチマークで妥協することが重要
スパコンのTOP500ですら連立方程式を解く性能で比較している
再帰やるならフィボナッチ数じゃなくて、状態探索を例題にすべきではなかろうか
play2.1さっさと出せや!
>>695 論旨は理解しているつもりだが、
測定が難しい事がトイプログムを正当化する理由にはならないだろう
フィボナッチのどこが適当な妥協なのよって事
少なくとも複数のプログラムを採用してベンチマークスイートを構成するべきだし
できることなら現実に用いられる比較的大きいプログラムが望ましい
SPEC CPUのような代表的なベンチマークは実際そうやっている
HPC分野はまったく知らんが、少なくともLINPACKがスパコン性能の全てだと
思ってる技術者はいないだろう
ちょっと誰かsbt + IDEAで幸せにテストがステップ実行出来る環境の作り方教えてよ
むしろJVMのデバッガ使った方がよくないだろうか
jdbのことか
scalaでコンパイルしても使えるのだろうか
squerylで、主キーに一致するデータがなければinsert、既にあればupdateになる処理は
どうやって書いたらいいですか?
704 :
703:2013/01/04(金) 14:10:55.36
自己解決しました
insertOrUpdateっていうそのまんまのメソッドがありました
Scala 2.10.0 now available!
>>705 > Scala 2.10.0 now available!
何が変わった?
707 :
デフォルトの名無しさん:2013/01/06(日) 12:27:38.73
値型はマジうれしい!!
2,10で追加された投射って何?
DBpress
今月号のWEB+DB PRESSとかいう雑誌にて
Scalaがチラリと紹介されているけど
そこで
Scalaは for文は遅いのでwhile文にしないと遅いとかいう例が載っていた。
(実際は、for文でなく、 (1 until 100).~ みたいな繰り返しとwhile文に書き換えたの比較)
そういうのって、どうにかならないのかな。
712 :
デフォルトの名無しさん:2013/01/07(月) 09:06:48.83
さてみなさん仕事ですよ
Scalaじゃんじゃん書いてください
誰かandroid向けのscala REPL環境を作ってくれませんか?
JSとかPython、schemeだとあるのに何でないのか不思議
>>709 解説を翻訳する機能が追加されたのかと思った
>>711 記事みてないけどその議論は1年以上前に通り過ぎた道
scalac内部とか、一部のほんとにチューンしなきゃまずいコードだとwhile使うのはありだが
それ以外でwhile使ったって性能向上の度合いは知れてる。それでも我慢できないなら、Scala 2.10のマクロ
使ってwhlieに展開するマクロ書いてもいいけど
コレクションライブラリの格操作の計算量一覧ありませんか?
ソース見るしか…
Vectorっていまいち影薄いよな
ケースクラスを継承して、別のケースクラスを定義する事って何故ダメなんですか?
>>719 docs.scala-lang.org の最近の充実ぶりは凄い。
非JVMな処理系が無いのはナンセンスだからなんでしょうか
>>723 JVMというより、JavaのAPIが使えるかどうかだと思う
JVMで動かすのでもない限りオダスキが型推論弱い言語作る意味無い
型推論はわざと弱めてあるんじゃなかったっけ?
強力すぎる型推論はエラーメッセージがよく分かんなくなったりするから
理論と実用の妥協点なのかなあと思ってた
727 :
デフォルトの名無しさん:2013/01/18(金) 11:12:07.42
思ってたね
>>726 ほんとのところはOderskyセンセに聞かないとわからないけど、多相型をサポートした
オブジェクトシステムを持った言語の完全ないしは完全に近い型推論は難しい(Principal
Typeがないので)。
Oderskyセンセの結構前からのテーマは、オブジェクト指向と関数型の融合で、彼は
Hindly-Milner型推論関連の研究もやってたことあるし、その辺の微妙な難しさは
よく知ってるはず。Scalaに関してはもう少し強くできるだろうけど、中途半端に型推論
強くても挙動が予測しづらくてあんましいいことないから、意図的に弱くした部分はあるだろうね。
理論的に無理な部分もあるだろうけど
ocamlの型推論もオブジェクト絡むと少し残念だしね
subtyping considered harmful
Java最新版に新たな脆弱性情報
www.itmedia.co.jp/enterprise/articles/1301/21/news022.html
# 米Oracleが脆弱性を修正したばかりの「Java 7 Update 11」に、新たな2件の脆弱性が報告された。
Scala終わったな…
ただユーザ数が多いからバグ見つけた人が隠しておけないだけだと思う
ユーザ数が少なければ、黙って穴を使い続けるだけ
Javaっつーか、Sandboxの脆弱性じゃないの?
Scalaの主戦場であるサーバサイドにはあんまり関係ない話だという理解。
この流れどっかでデジャヴ?
なんもかんもscaladocが日本語化されないのが悪いw
Java 7のjavadoc日本語化は見送られましたが何か?
scalaの場合単純にマンパワー足りない部分あるだろうけど
なんもかんも日本語で本家並のドキュメントほしいってのは
どんどん通用しなくなってくとオモウヨ
付け加えると、もう今の時代、英語は書けなくても英語の技術文書や
マニュアルくらいふつーに読めないと色々どーにもならん時期になってると思う。いい悪いじゃなくて、日本人でもgithubでそれなりのものツクッテル人たちとか英語マニュアルまず優先だし
え、なんでこの人ネタにマジレスしてんの
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
マニュアルの英語もおかしいと思う
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した時には動きました。
誰かわかる人がいたら教えてください。
745 :
743:2013/02/02(土) 20:11:23.73
>>744 ありがとうございます。無事動作しました
3/2は土曜です~
3/3はハッカソンになるのか
scalaはIO周りがクソなのは直った?今のところ何使うのでFA?
IOのどこら辺が不満?
>>749 scala.ioパッケージは糞なのは同意。この辺含むレガシーな部分は
Scala 2.11辺りでpaulpさんが大鉈振るってばっさりやる。
次善としては、scala-ioかな。Scala標準のちゃんとしたIOライブラリは…
Typesafeも何もしてないわけじゃないくらいしか今は言えない。その内
発表あるかもしれんので 待つしか
>>746,747
本家の人が来日する貴重な機会なので、不満ぶつけたい人も、ぜひぜひ
Windows番のMSIインストーラーとZIPの違いってなんですか?
ZIPのほうがサイズが小さいんですが
どっちを使ったほうが良いんでしょうか?
インストーラの方はサイズでかいし展開遅いしでいいとこないから
zip解凍して適当な場所に置いてPATH通せばおk
msiインストーラーは勝手に環境変数を書き換えられそうで怖い
どっち使えばいいか分からんなら
とりあえずインストーラ使っとけばいいと思う
zipで入れる経験が1回でもあればUSBメモリで別のマシンにscala持ち出せる
758 :
749:2013/02/05(火) 09:07:41.16
play2.1まだか
インストールできました
ありがとうございます
助けてくださいクラスの書き方についてお願いします
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")}}のほうはエラーは出ません
クラスで書くとエラーが出ます
レスの中のscala Test.scalaは
scalac Test.scalaのタイポです
>>762 mainメソッドを定義してないクラスは実行できないよ。
Play Framework 2.1.0 Finalキタ━━━(゚∀゚)━━━!!
>>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)
公式のドキュメントに乗ってるコードサンプルにもmainメソッドは書いてないのですが
2.10で仕様が変わったって事ですか?
そういうもん
そもそもなんでclassにしたいのさ?
classをobjectにするんだ
>>766 java でも public static void main(String[]) だし object Test で
勉強のためclassで書いたコードを動かしたいんです
objectのほうだとエラーは出ないんですがclassのほうでつまずいています
言ってる意味が全く分からないんだが
objectだと勉強にはならないの?
objectは書いて動かせるところまで確認できたのでいいのです
classを使って動かせるところが確認したいだけなんです
>>773 objectしかmainの起動はできない。
まずここ理解して。
objectのmainからclassを呼ぶコード書け。
何故か分かりませんがREPLから
class Test{
def a() = println("test")
}
var test = new Test
test.a()
って書くと正常に実行できるようなんですが、ファイルに保存してコンパイル後に実行する方式だとエラーが起きるようです
このへんよくわかりません
そもそも、そのコードの奴それ実行したって言わないから
>>775 REPLで実行してる内容は
objectのmainの中に書いてるモノと思えばいいよ。
本当に理解する気があるのか文句言いたいだけなのか分からなくなってきたけど。
本当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をそれなりにやってれば、ひたすらググるだけでもとりあえず組めるようになる
が、個人的にはやっぱりコップ本おすすめ(経験談)
ネットだけだと体系的に解説してくれるようなサイトは今のところ無いよな。
sage消えとる・・・すまん。吊ってくる
質問者はobjectのほうは問題ないって書いてあるのに何故そのサンプルを?
こうやって書いて実行できました
ようは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))
}
}
小学生もScalaを勉強する時代なんだな。
まあそんな煽らんでも
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))
}
}
でも同じ感じで動く。
def 関数名(引数リスト):返り値型 = {定義}
イコールを忘れるなよ
お願いします
val n = 1 //特に意味のない変数
n match {
case 2 > 1 => println("1") // 2>1のように比較するとエラー
case x: 10 => println(x) // 評価する部分で変数に代入して結果を出力したいけどエラー
}
エラーメッセージが読めなきゃどうにもならんね
それは言い過ぎ
>>787 val n = 1
n match {
case m if 2 > m => println("1")
case x => println(x)
}
こういうことがやりたいのか?
下のx: 10は何がしたいのか全く分からん
794 :
793:2013/02/07(木) 20:28:21.86
解説面倒だ、誰か頼んだ
>>792-793 うまくいきました。ありがとうございます
標準で取得できるものと思ってたのですがoverrideしないといけないのは敷居が高いですね・・・
C#だと同じクラスないならthis.Topとthis.Lefpいけるんですが
scalaは難しい
Haskell と Erlang やってる人は Scala が15分で隅々まで理解できる
それはちょっと無理がある
ちょっとしか無理がないのかよ
Haskell と Erlang と Java 知ってれば15分チートシート眺めて
任意のアプリを書けるくらいにはなるんじゃね?
隅々まで理解して任意のコードを読むには15分じゃ無理だろ
むしろ、15分で理解できない部分は理解しない方がよい部分
そういう痛々しい話題はHaskellスレでやってくれ
>>790 自分もわからなくなったので取り下げます
↓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に入れられたら楽なんですが方法ありますか?
var item: String = ~とか
var item: Int = ~とか
var item = (xml \\ "item").toString()
など試してみたのですが出来ませんでした
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>
val item = (xml \\ "item").text
// => item: String
val item = (xml \\ "item").text.toInt
// => item: Int
textで出来ました!
xmlから取得した値が空だった場合に数値に変換すると例外が発生するので、
ifで判定して空だったら0を代入、空ではなかったらそのまま代入したいんですが
xmlの値をtrueの位置に持ってくるのはどう書くのでしょうか?
val item = if ("" != (xml \\ "item").text) 数値に変換して代入 else 0
って聞いて気づいたんですが、数値に変換して代入の部分に(xml \\ "item").text.toIntって書くしかないですね
えっ?一度変数に代入しとけばいいじゃないの
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
代入!代入!
束縛!束縛!
>>809 util.Tryっていいですね
forall{_.isDigit}で数値チェックもしてたのですがこっちは負数は対応してないのでutil.Tryのほうを使いたいと思います
いろいろと教えていただいてありがとうございます
Try { Item.toInt } getOrElse 0
でいいよ
Process("C:\\editor.exe").run
↑これの引数と作業ディレクトリを指定する方法がわかりません
さんきゅ
ScalaとLiftフレームワークがかなり実績があるようなので気になってるんですが、
関数型っぽい書き方を使わずに、Scalaを使うことってできるんですか?
C#使っていたので、関数型のコーディングにいきなり変え
ることは(頭の切り替えが)難しいです。
scalaのフレームワークは何があるんだろうとググってもPlayFrameworkばっかりヒットするんですが
これダウンロードすると100MBあるんですよね
サイズ大きすぎませんか
10MB以下のフレームワークとかないですかね?
>>817 関数型っぽい書き方も当然出来ます
ってかJavaやC#をやってた人が普通にScalaで書くと
まず関数型のスタイルにはなりません
>>818 10MB以下のフレームワークが存在するかどうかはちょっと分からないんですが
100MBぐらいたいしたサイズじゃないと私は思いますがね
そんな事は聞いていません
あなたと私は意見が違います
「scala フレームワーク」でググると1ページ目にフレームワークを羅列したページが見つかる
あとは全部確認してみればいいんじゃない?
823 :
デフォルトの名無しさん:2013/02/11(月) 23:18:33.31
軽いフレームワークならScalatra辺りかなあ。
scalaのpermutationsメソッドはサイズが指定できませんが
scalaみたいな重複なしの順列を生成する場合にはサイズを指定したときの高速な実装ができないということなんでしょうか
scalaって本当クソだな
日付も扱えないじゃん
最初からjava使ったほうがいい
お前何言ってんの?
Javaの標準ライブラリ使えるんだからそれ使えよ
だからだ結局java使えばいいって話じゃん
ひと通り触った上で俺はjavaで充分だ、と思ったんなら無理して使う必要はないだろ
少なくとも俺はそう思わなかったからscala使ってるわけで
シームレスにjavaとやりとりできるってのも売りの1つなのに
javaのライブラリ使わないといけないからscalaはクソ!!って意味が分からんわ
ああそうかjava経由しないでscalaに来た場合は
scalaとjava両方について調べなきゃいけないわけだし確かにめんどくせーな
java知らずにScalaとか
そう
つまりJavaを知ってる人が多い今だけ価値があるスキマ言語
>>817 C#でも3.5くらいからはかなり関数型なコードかけるよ!
Scala学びながらC#にもフィードバックできるよ!!
まったくのプログラミング初心者(メモリモデルとかが頭に入っていない人)は
ScalaやJavaなんかよりHaskellから学んだ方が楽だと思う。
仕事があるかどうかは置いておいて、
プログラム独特のハードウェアから来る制約が少ない言語だし。
アクターモデルはErlangから入った方が理解が早いと思う
(´・ω・`)
なんだよ
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に戻ってしまうんじゃないかという気もするけどどうかな?
この先生きのこれる?
単にプログラミング言語の研究の成果が、ScalaとJavaのそれぞれに入っただけに見える
Scalaの良いところと言いかえるのはちょっとなあ
スカラの利点はまだ他にもあるし
Java8がリリースされる頃にはScalaもさらに進化してるだろう
ラムダを導入するとScalaの良いところを取り入れたと言われてしまうのかww
java8 のラムダ式が=>でなく->なのってなんで?
<= >=とまちがえやすいとかそういうの?
MLやHaskellだと -> だし言語によってどっちもある
数学の記号に似せようよ派と、気にしないよ派
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で使うのがベストなのかな
JavaはCの冗長なところ引き継いでるから簡潔性に欠ける
こういうのは言語の機能追加で解決できることじゃない
>>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
にはあまり興味をもたないだろうな
JavaでモダンなCollectionってあるの?
そう言えばplayframeworkの公式デモ動画で使ってるエディタ
いつの間にかtextmateからIntelliJに変わってるな
>>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より使いやすそうだ
文字列の集合Sの中にある文字列Xが含まれているかどうかを
O(|X|log|S|)時間(|X|は文字列長、|S|は集合の大きさ)で判定したいのですが
Set#exists使えば大丈夫でしょうか?
swing+scala の本でオススメはありますでしょうか
scsala.swingが本で解説されてんのは見たことねーな
使ってる人もあんまりいない感じ
今は分からんけど2.8の頃は主要なコントロールしかラップされてなくて
残りは自分でソース読んで同じ風にラップしなけりゃいけなくてめんどかった
Publisher(listenTo)とReacter(reactions)を理解したらあとはjavaのswingとだいたい同じ
ラップ元のjavaのコンポーネントに触りたかったら#peerで取得できる
数値計算の行列を利用するときは、クラス作るか Array[Array[Int]] みたいにするしかないですかね
>>859 行列の数値計算だったら、
scalala とか scalalab を使うのは?
計算がしたいわけじゃなくて、ガウスの消去法とか自分で実装して勉強した気になりたいので
外部のライブラリは使わない方向がいいんだけど、Matrix クラスは標準装備じゃないのね
Array.ofDim[Double](m,n) で2次元配列
scalaでDIやAOPの話聞かないなって思ってたら
traitがAOPでcake patternがDIの役割してたんですね
traitがAOPの役割するってのがよくわからないので説明して
JavaだとAOPで横断的にlogの処理とかを突っ込むのにアノテーションつけて、コンパイル前に処理しないといけない。
あれ?scalaでそういう処理ってtraitで追加するのか?
コードを折り込む部分は、AspectJの機能を使ってるのか
> parser.parsePointcutExpression("execution(* *.bar(..))")
この記事の言いたいことはaspectの記述をtraitでもできると言っているのかな
aspectとtraitはコードの再利用に特化したクラスという意味で元々似ているので、そりゃそうかなあと思った
>>865 AspectJとかJVM系のAOP実装だと
クラスのロード時にバイトコードを書き換えるので、コンパイル時には何もしなくていい
C言語ベースとかだとコンパイル時にがんばる
ScalaTestを導入してsbtでコンパイルしてるんだがどういうわけかsbt testがまるで終わらない
Test名に日本語が含まれてるんだがこれは大丈夫なのかな
[info] Compiling 1 Scala source to /Users/…/target/test-classes...
↓エスパーの方よろしくお願いします
テストクラスへのパスに含まれる日本語フォルダ名がログに出てきてるのを
Test名と勘違いしてアタフタしているだけで問題の本質は全く別だろ
流石にお前の実行環境までは透視できんからこれ以上はわからん
BEST SOFTWARE WRITING の中の1章に、ブルース・エッケルという人が書いた"強い型付け vs. 強いテスト"というエッセイがある。
ここでは、元々静的型チェックを支持していた著者が、どのような経験を経て動的型チェックの方が素晴らしいと考えるに至ったかが記述されている。
最終的に著者は、「テストされていないものは、壊れていると思え」、つまり、動的/静的に関わらずテストは行う必要があり、どちらも必ずテストを行う必要があるのであれば、動的型付け言語の方が柔軟性がある分優位である、としている。
873 :
デフォルトの名無しさん:2013/02/26(火) 17:48:04.91
つまり型推論があるScalaは静的言語の中でもかなり有利であるって事か
某ERP製品で、同じ数値でも管理会計上「混ぜるな危険」な項目とかあるから
細かく型が分けられてるのみて、金融でHaskellが好まれる理由ってこれかーと思った
でもそのERP製品は型厳密じゃないんだと。ドットダメじゃん
repl なんだけど、相互に依存するファイル3つくらいを同時に編集してプログラミングする場合、
どれが1つのファイルの更新を反映させるたびに
:load file1.scala
:load file2.scala
:load file3.scala
って3回ロードしなおさなきゃいけないのでしょうか、ひょっとして
そうだよ
そもそもそういう使い方するのなら
REPL直で使わずにsbtのconsole使うべき
全部一つのファイルに書き込んで、エラーがなくなったらファイルを分割する
Scalaはバージョンアップで後方互換性は保たれる言語ですか?
Rubyのように1,2年前に書いたコードが動かなくなることもよくありますか?
ある
しかしコンパイラエラー吐くからRuby程深刻では無い。
>>879 ありがとう
コンパイラのエラー検出でわかる程度なら
互換性は特に問題なさそうですね
>880
warning deprecated を放置しておかなければ通常は問題ない。
上の方で swing の話が出てきたけど、swingの問題って、scalaに問題があるのか、javaのswingそのものに問題があるのか分からん
Webで調べると javaだけに使えるような解決法だったりするから困る
883 :
デフォルトの名無しさん:2013/03/05(火) 22:47:43.28
例えばどんなの?
new Table(values, names) で values の型をどうすればいいのかとか、
Tableの TableRowsSelectedイベントは、すでに選択されてる行を選択しても何もイベントが起きてくれないこととか、
TableSelectionMode には Cell があるのに、TableCellsSelected イベントがないとか、
reactions += {} で Table の model や selection の説明が API doc にないとか、
BoxPanelで中のComponent を 右寄せしようと思って、xLayoutAlignmentに数値を代入しても何も変わらないとか
, ィェェェェェェェェェェ 、 / あ…
/彡彡=⌒゛゙亠亠ヾ\ | ごめんなさい
/彡彡´ `ヽ |
|;':;';';' _ - ―---´⌒ 、 ! ! それ Java
|;';'" _,,-‐=' `ー 、| | なんですよ
r'⌒ ,r'兪 ヽ 〃匍、.| \_ _______ノ
{(牙  ̄ノ {  ̄ | ノノ
\┐ イ ヽ | ´
Y / `ー‐´) |
| _ノ ゞ二ニヱ !
ト、 ー ノ
, ィ!\\ /}`ヽ、 __
_,.- ' { { : :.ヽ`_ー ____ ´ | | ` ヽ 、_
_,.- ' ヽヽ: : : : :  ̄`:><: : : :| | ヽ `
ノ \\: : : :./ |C \: :.| | ヽ ハ
scala.swingはjava.swingのうっすいラッパーだから
UIElement#peerで取得したjavaのコンポーネントを直接弄り回しても大体問題ない。event関連以外は。
そしたらjavaだけに使える解決法とやらも使えるだろ
一方俺はSWTを使った
swing 勉強してたら今度は fx が出てきた
scala fx の解説の日本語ってないですかね
というか、「scala fx」で検索してもjavaの解説ばっかり引っかかる
これスレを見ている人は、java のことを中心に書く人は、scalaという文字をページの中に表示しないでください
889 :
デフォルトの名無しさん:2013/03/09(土) 15:06:49.00
Javaで書けば万事解決じゃね?
>>889 scalaはjdk(javacコマンド)が必要ない
コンパイルから実行までjreだけでOK
大学や会社のマシンでプログラムのインストール禁止でjreだけ入ってる場合は、30MB解凍すればOKのscalaは楽
javaで実装されたjavac使えば問題ない
java使ってる部分が、全部classファイルになってればいいのか。
>>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を入れてファイルの重複を検査します。
def f(xs:List[Array[Byte]]) = xs.map(_.deep) diff xs.map(_.deep).distinct
今月号の日経ソフトウェアで、さいきんの10大人気言語としてまたScalaが紹介されているね。
>JavaScriptに変換できるようだ。
ふ~ん(
>>898 え?
同じ言語でサーバサイドとクライアントサイドの開発
ができたらWeb系開発者にとってメリット大きいだろう
>>897 現状のkotlinc & IDE 試してみればわかるけど、実用レベルに達するまではまだ何年もかかるわ、ほぼ間違いなく。普及云々はさらにその先の話
難しさ以前の問題で、処理系の品質が全体的に低い。buggyだし、速いコンパイルとか夢のまた夢でkotlincのコンパイルはかなり遅い
>>900 TypeScriptとかはサーバサイド開発できないし
できたとしてもJavaと同程度の速度はでないでしょ
Kotlinはコンパイル時はJava, Scalaと同じくらい速いから
サーバサイドに最適。
JVMで動くからサーバ側もクロスプラットフォーム
さらにJSへの変換もできるから、違いは大きいかと
もっとも、ScalaがKotlinと同様にJSへのコンパイル機能も
取り込んでくるかもしれないけれど
前に一度チェックしたけど、
本当にBetterJavaに過ぎなくて
言っちゃ悪いけどD言語みたいな始まる前からオワコン臭がきつい。
BetterJavaやるだけならScalaでも十分だし、
BetterJavaに過ぎないことが重要なんじゃね
>902
TypeScriptはNode.jsをばっちりサポートしているわけだが、
Node.jsはJAVAよりは遅いと言ってもrubyなんかよりは遙かに早い。
それに、ScalaもLiftなりPlayなりからいくらでも直接jQueryに触れるし
精密なことをやりたいなら、 WriteOnceとは行かなくなって、Kotlinで書けてバンザイではなくなるだろう。
Scalaが誕生2003で、アーリーアダプタ以外が実用可能なレベルに達したのがここ1~2年の話だというのを甘く見過ぎてる
Oderskyが現在のjavacの作者で、Pizza (1996) 等JVM上での静的型付き言語「処理系実装」の先駆者でもあるってのを忘れていやしないかと
ScalaがJava並に普及するとは思わないけど、KotlinやCeylonは期待寄せるにも早過ぎる
TypeScriptとかCoffeeScriptとかはJavaScriptへのトランスレータだから他の難しいことやらなくても実用できるけど
JVM上で動いて、既存ライブラリと相互運用性ある静的型付き言語の環境整備するのはどうしても時間やコストがかかるんだわ
そういう実装上の泥臭いところを知らない人たちがScala複雑だから新しい言語作ってみましたとやっても、まあ難しいねえというか。
>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をいじる必要が無い。
>909
最大の利点はそれかなぁ
haxejvmでもできそうだけど。
最近の流行だから、そのうちscalaからjavascript吐けるようになるんじゃないのかと思っている。
ちなみに、JetBrainsのScala Plugin作ってるチームは全く別で彼らは彼らでScalaサポート続けるだけなので(JetBrainsは元々
色んな言語のIDEを作ってる。コードベースはEclipseみたいに明らかに共通化されてるけど)、「JetBrains」というくくりでの開発リソースの
投入は期待できない
>>901 速いと書かれていたのは「コンパイル後」のサーバ上の実行速度。
「コンパイル」の速度はScalaもJavaより重い感じがあるね
Kotlinもクラスライブラリは大半はJavaのものを使うようだし
Javaのバイトコードに変換するだけと考えれば
5年以上かかったりすることはないと思うんだけど、
どうやらここの人たちは先行きに悲観的だね
ステータスはM5で正式版ではないから現時点での品質は
まだ心もとないのはわかる。
IntelliJ IDEAの開発元が作ってるから技術力はあるんじゃないかと
期待してる。
>>906 開発スピードはOSSの世界からどれだけの開発リソースが
投入されるか次第じゃないかな
>>903-904 904に同感で、Scalaの先進的な機能、関数言語的なものの習得は
平凡なJava開発者には重荷になっていて、
それがScalaがブレイクしない理由だと思う
単にBetter JavaならGroovyで良いじゃんとも思う。
基本的にJavaのコードがそのまま通るので、Javaで書いておいて楽をしたいところだけGroovy風に
書いたり逆に基本Groovyでカチッと書きたいとこだけJavaで書いたりと、Javaと混ぜやすい。
Groovyは動的だから遅い
Groovyの影の薄さは異常
Kotlinが普及するかどうかは分からんけど
ただのreadonlyなインターフェースを指してimmutableコレクションとか言い出した時点で自分が使うことはないと確信した
>>916 静的型検証のみならず静的型として扱うコンパイルも出来ますが、このコンパイルを通そうとすると
コードの記述量がJavaと大差無くなってしまうのが悩みどころ。
>>912 いや、少なくとも5年程度はかかるとやはり思う。静的型付き「ジェネリクスあり」の言語をクラスファイルにコンパイルしてIDEサポートして…
って時点で実装力もリソースも必要。s/IntelliJ IDEAの開発元/JetBrainsの一部のKotlinやってるチーム/。で、こっちは未知数というか信頼できるかびみょー
Scala PluginチームがKotlin作ったんだったら、技術力は信頼できるけどね
中の人ベースの方が正確だったり。KotlinチームとScala Pluginチームは全く別とかページみるとわかる
>>914 言語仕様まではともかく、stableな処理系作るのにかかる苦労はコピペできない。Kotlinは言うほど会社のリソース割かれてないし…
922 :
デフォルトの名無しさん:2013/03/24(日) 06:22:22.72
連投支援
Better JavaといえばJavaのコードを生成するEclipseさんちのXtend
そういやCeylonなんてのもあったな……
普段過疎過疎なのに今日に限って午前中だけで30レス弱付いたな
そりゃKotlilnごときと比較されちゃね……
927 :
デフォルトの名無しさん:2013/03/24(日) 13:57:24.26
そういうレスはHaskellスレに書いたほうがウケる
kotlinのwikipediaのページ、学生のブログみたいだな
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 です。
ことりんかわいい
>>930 class Test(val a:Int, val b:Int)
の時点でクラスの定義が完了しちゃってるから
{以降はただのブロックとして認識されてんだろうな
scalaでは下の改行スタイルは全く推奨されないので上使ってれば問題ない
scalacや:pasteではちゃんと1つのクラス定義として認識されるけど理由はよく分からんので詳しい人よろぴく
>>930 改行だけならバグじゃないの
こういう簡単なバグも直ってないの見ると、ことりんのこと笑えないな
C#みたいに開始かっこの前で改行したほうが美しいと思う
開始、終了のかっこがそろうと見やすいし
REPLだと改行ごとにevalされるから仕方ないだろ
>>934 だとすると、最終的に scalac でコンパイルが成功したコードを使って、 scala repl でそれを :load しつつ実験しながら新しいコードを書いていくというのはダメな開発手法ということでしょうか
sbtのconsoleを使うと幸せになれるよ
>>933 バグじゃなくてScalaのREPLの意図された挙動だから
case classとかREPLの一行でその場で書いたときにいちいち{}入れないとクラス定義されないのは困るわけで…
複数行にしたければ { 入れればいいわけだし。:pasteはまさに改行含めた定義をはりつけたいときに使う
コマンドだからそういう挙動するわけだ。
>>936 sbt はWindowsで使っててコマンドプロンプトでクラスパスを設定する場合は、コンパイルするたびにクラスパスをいちいち設定しないといけなくない?
scalac でコンパイルできるソースファイルは scala で :load できるとは限らない、と
>>938 俺普通にwindowで使えてるぞ
そんな面倒な話があるか
sbtのconsoleコマンドはプロジェクト内のソースのコンパイル結果と依存jarがクラスパスに入った状態で
REPLを起動できる超絶便利コマンドだよ
>>940 Windowsで環境変数に一切手を加えたくないから、scalaを起動する直前に作業用のコマンドプロンプトの画面で一回だけ set CLASSPATH=%CLASSPATH%;(必要なjarへのパス) を実行してる
sbtだと、コンパイルして実行する度にパスエラーになる
設定ファイルに書けばいいじゃない
土日に朝鮮(北朝鮮含む)に言ってバイトしてくるなんて普通なのに、一般人はプログラマの生活をあんまり知らないんだなと思った
この問題は、FAQだよ。結構、多くの人がハマる落とし穴。
Scalaは、文の区切りは ; または 改行 だけど、改行の扱いが少し複雑
改行による命令区切りの判定は、scalacとREPLで少し違う
scalacの場合
・改行にて、文が明らかにまだ途中であるならば、区切らない。
・改行にて、次の行も調べまだ文が続いていると判断できるなら次の行とつなげる。
・続かないならば、改行は、文区切りと判定する
みたいな感じ。
それに対して、REPLでは
・改行にて、文が明らかにまだ途中であるならば、区切らない。
・改行にて、そこで文がエラーなく終わるなら、そこで文を区切る
となっている。
~~~~~~~~~~~~
つまり、、、
コーディングスタイルを変えて、
class Test(~)
{
でなく
class Test(~) {
というように書けばOK.
~~~~~~~~~~~~
個人的には、コーディングのレイアウトが強制されるのは、少し残念。
この改行の問題は、たびたび議論にあがるし、バージョンアップ時の機能追加要望
としてあがってはいる(VBAのoption explicitみたいなオプション)けど、どうなるやら。
936は、
>>935 へのレスね。
コーディングスタイルを>946のように変えれば、一応できるかも。
だけど 935のやり方は
1. scalac MyClass.scala で文法チェックとかしてから
↓
2. REPLで :load MyClass.scala (→ ソースをREPL上での解釈となる )
なんだよね。
もっとよいやり方がありそう。
scalacで作ったclassファイルをimportすればいいんじゃね?
sbt consoleの方が楽だけど
どちらにせよ
REPLだと1パスでSCALACは2パスだからREPLで本格的なプログラムは無理じゃない?
REPLって日常的なちょっとした計算のためにあると思ってたけどマゾっているんだなあ
LispやHaskellだとインタラクティブで検証しながらコード書いて
うまく行ったらソースにまとめるってやり方はある
Scala REPLだとそういうふうに全力で使う気になれない
Lispは…うーん、どうなんだろう
HaskellのREPLというかインタラクティブモードは機能が制限されてるから、あれで検証しながらコード
書いてソースにまとめてる人が居るのかどうか。ScalaのREPLは機能的にはcompletion含めて
高機能な方だとは思う
scalacを実行すると .classファイルが大量に出てくるのが嫌だから、repl+:loadだけで開発をすすめてる
IDE使えよ…
emacs 上で sbt 最強ってことですね
scala界隈の人はもう皆intellijに行ってるものとばかり思ってた
2chにLiftのスレがないようだけど使ってる人いないのかな?
scalaでは一番有名なフレームワークだよね
>>956 公式サイトがScala IDE for Eclipseを推している感じがあるから
IDEA知らない人はそっちに行ってしまうと思う
scalaでintelljに慣れたせいで、javaもintellij使うようになってしまった
EclipseもIDE2.1(今は3.0)からはなかなかできが良いよ。
ここまでの流れでidea押す人が良いけど
EclipseならScalaごとインストールしてくれるしとっかかりにはおすすめ
Eclipse使っている人は、Sbtとの連携どうしてる?
・sbt側でsbteclipseというプラグイン
と
・Eclipseにesbtというプラグイン
と、どっちが良いか、、、。
あと、WindowsでCygwinを使っている人で、Exclipseもsbtも使っている人居るかなあ?
>>952 インタラクティブ単体というよりはemacsとslimeとの組み合わせで。
ScalaはREPL自体は強力だけどクラスの枠組みとコードブロック単位の
evalはちょっと相性悪いと思う。自分はIDEのほうが楽。
IDEはいちいちキーボードから手を放してマウスをクリックするのが嫌です
これはこれはなかなか立派な釣り針をお垂らしで
IDE否定派は絶滅してないらしい
同じことやらせても効率悪くて時間かかるだけなのにIDEを使おうとしない
Windowの大きさ、位置かえるのもキーボードという馬鹿さえいる
普段使ってるのがIDEでもvimでも何でもいいけど、
それ以外使えなかったり、ましてや否定するエンジニアがしょぼいのは分かる
Scalaは背伸びしたJavaドカタが
使ってみたりする言語だから
IDE好きな輩も多いよね
お前らホント喧嘩好きだよなw
スケルトンは自作のスクリプトで生成する
自分の目が届かないところで設定ファイルをいじられたくない
マウスでビューを切り換えるなら、Ctrl+矢印で画面を切り換える
集中してるときは仮想デスクトップ1つにterm 1つにコマンド1つだ
途中でファイル名を変える方法ごときで悩みたくない
キーボードから手を離すと集中が途切れる
ゆえにIDEは使いたくない
emacsと仮想デスクトップとtermで十分
emacs()
>>968 まとめると、「お前が使いこなせないのをツールのせいにするな」かな
ぐだぐだと書き連ねた内容は全てIDEでも解決出来る
これ以上はスレチなのでマ板でスレでも立てて叩かれて来いや
CUIを使いこなせない低能が
沢山並んだメニュー(それでもCUIで出来る事全てをカバー出来ない)からマウスで選んだり
ショートカットを丸暗記したり(低能は丸暗記が大好き)して
使うためのツールだからね > IDE
併用しておいしいどころどりするのが大抵だと思う。
たまにキーボードから手を離した方が腕が凝らなくいからIDE派かなぁ
次スレは「冊目」はなくしたほうがいいと思う
「冊目」を見るとScalaは実戦投入もできない段階の代物で
住人も本で勉強してるだけ、のイメージ
次スレ立てようとしたら無理だった
「ERROR:Lvが足りなくてスレッド立て(ら)れません。」
Lvは40なんだけどな
この板は有料会員以外はスレ立てられない規制入ってるの?
続きを読むには会員登録が必要です。
うめるね
うめるわ
残念立てられなかった
最近「このホストでは~」が良く出る
スレ立て乱立のときでも出てたから不思議
>>983 乙。いったい9杯目ってなんだ
リンクは日本のサイト以外は全部見れた
>>974が冊やめろって言うからコップ水かなって…
えっ、あんなの真に受けたの……?
>985
なるほど、コップ本からとったのか
>>976 Scalaの注目度はあがってるみたいだな
ちょっと前他スレでjava系の開発してるやつがscalaが如何に効率的か熱弁した話してて
当時はそんな無名言語推しまくるヤツ()とか思ってたけど着々と広まって行って意外だった
なんだその又聞きばかりで立ち位置の判然としないレスは
>>982 エラー出るのはこの板だけ?
俺はこの板でだけスレ立てができない気がする。
荒らしがいるからスレ立て規制されているのかもしれないがよくわからない
>>976 こういうイベントが開催された事知りませんでした。
どうして、ここでお知らせしてくれなかったんですか?
出れなかったじゃないですか!
もっと規模が小さくていいので情報交換できる勉強会の方がいいです
だれか名古屋で開催してください
会費は無料でお願いします
991
2chはおわってる
Scalaの開発者の映像はYouTubeにいくつかあったよ
新しいものかどうかは知らん
富ヶ谷の工事っていつおわんの?