プログラミング言語 Scala 9杯目

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
The Scala Programming Language
ttp://www.scala-lang.org/

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

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

■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デフォルトの名無しさん:2013/03/30(土) 13:54:02.55
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。

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

                  京都大学霊長類研究所
3デフォルトの名無しさん:2013/03/30(土) 18:20:19.11
プログラミング言語「Scala」の日本初カンファレンスが開催、盛況で立ち見のセッションも
http://itpro.nikkeibp.co.jp/article/NEWS/20130329/467341/

JVM言語で生産性を向上させよう
http://itpro.nikkeibp.co.jp/article/Watcher/20130327/466368/?ST=develop&P=1
4デフォルトの名無しさん:2013/03/31(日) 03:34:03.35
おつ階梯
5デフォルトの名無しさん:2013/04/01(月) 01:58:56.00
scalaで作ったプログラムをexecutable jarで配布するときは、scala-library.jarも梱包しないといけないんだけど、そのときのscala-library.jarとscala-swing.jarの配布のライセンスを知りたいけど、英語が読めません
誰が和訳がどこにあるか教えてください
6デフォルトの名無しさん:2013/04/01(月) 07:52:13.15
http://www.scala-lang.org/node/146

バイナリ形式で再配布するなら配布物のドキュメントにこのライセンス全文載っけといてよね
って感じだろうか
たぶん
7デフォルトの名無しさん:2013/04/02(火) 18:38:02.94
>>3
itproの会員登録ってメアドの他に
何を入力させられるんですか?
8デフォルトの名無しさん:2013/04/03(水) 00:41:20.77
勝手ながらいつもお世話になっているページをリイク。
他にお勧めあったら、おしえてね〜。

プログラミング言語Scala 日本語情報サイト
https://sites.google.com/site/scalajp/

プログラミング言語 Scala Wiki
http://www29.atwiki.jp/tmiya/

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

Scala開眼
http://www.h7.dion.ne.jp/~samwyn/Scala/scalaindex.htm

ひしだま's 技術メモページ
http://www.ne.jp/asahi/hishidama/home/tech/scala/

15分で始めるScala
http://xerial.org/scala-cookbook/recipes/2012/11/29/scala-in-15-minutes/
9デフォルトの名無しさん:2013/04/03(水) 00:50:10.95
>>7
日経BP共通アカウントになるからITPro以外でも使える。
登録はメールアドレス、パスワード、名前くらいだったと思う
個人情報が気になるなら、偽名使えばいいじゃない

俺の場合メールアドレスは無料Web mail、名前は偽名
住所、電話番号、生年月日が必須なサイトでも架空のデータ
10デフォルトの名無しさん:2013/04/03(水) 18:04:04.22
圏論とかモナドなんて簡単だからscalaを使って説明してみた
http://rirakkumya.hatenablog.com/entry/2013/03/31/191056
11デフォルトの名無しさん:2013/04/03(水) 18:08:14.42
なるほどわからん
だがPythonのリスト内包とPHPのarray_*には殺意を覚えるほどには分かった
12デフォルトの名無しさん:2013/04/03(水) 18:41:45.09
概念的な包含関係気にせずに
「Scala的には関手はmapでモナドから値を取り出すのはflatMapです」
と言い切ってるから素人目には良い説明なのかどうなのか判断つきません
13デフォルトの名無しさん:2013/04/03(水) 23:19:01.65
限定的な側面だけを全体と勘違いしてる時点で理解してないだろうな
14デフォルトの名無しさん:2013/04/05(金) 17:49:36.02
"圏論とかモナドなんて簡単だからscalaを使って説明してみた"を検証してみた
http://d.hatena.ne.jp/hiratara/20130404/1365079419
15デフォルトの名無しさん:2013/04/05(金) 17:56:00.20
ブコメで空圏を引き合いに出して言い訳しているところが笑いどころですね
トリビアルな例だけ出してればそりゃ「圏論とかモナドなんて簡単」だろうとw
まー4月になると学術的権威主義を傘に来て新卒後輩を脅しつけるただの季節老害なんだろなと推察
16デフォルトの名無しさん:2013/04/05(金) 21:14:52.23
「モナドという表現を(無理して)使うと、けっこうたくさんのこと(全部ではない)が統一した枠組みで表現できる」
ということを「モナドで実装すれば何かいいことがあるはずだ」と勘違いしてはいけない
17デフォルトの名無しさん:2013/04/16(火) 00:54:48.37
AspectJみたいなかんじで
Function1とFunction2をhookしたいんだけどどうやって書けばいいの?
18デフォルトの名無しさん:2013/04/16(火) 09:37:22.11
前スレより
____
From: [863]
scalaでDIやAOPの話聞かないなって思ってたら
traitがAOPでcake patternがDIの役割してたんですね
____
From: [864]
traitがAOPの役割するってのがよくわからないので説明して
____
From: [865]
JavaだとAOPで横断的にlogの処理とかを突っ込むのにアノテーションつけて、コンパイル前に処理しないといけない。
あれ?scalaでそういう処理ってtraitで追加するのか?
____
From: [866]
http://eed3si9n.com/ja/real-world-scala-dependency-injection-di
http://jonasboner.com/2008/12/09/real-world-scala-managing-cross-cutting-concerns-using-mixin-composition-and-aop/
ここの話だよな。
____
From: [867]
コードを折り込む部分は、AspectJの機能を使ってるのか
> parser.parsePointcutExpression("execution(* *.bar(..))")
この記事の言いたいことはaspectの記述をtraitでもできると言っているのかな
aspectとtraitはコードの再利用に特化したクラスという意味で元々似ているので、そりゃそうかなあと思った
____
From: [868]
>>865
AspectJとかJVM系のAOP実装だと
クラスのロード時にバイトコードを書き換えるので、コンパイル時には何もしなくていい
C言語ベースとかだとコンパイル時にがんばる
19デフォルトの名無しさん:2013/04/16(火) 12:48:16.79
元々AspectJはコンパイル時に頑張るタイプだった
load-time weaveになったのはAspectWerkzと統合された後
(AspectWerkzは元々compile-time, load-time, runtime weave対応)
そのAspectWerkzの開発者だったのがAkka作者のJonas Bonér
これ豆な
20デフォルトの名無しさん:2013/04/18(木) 17:40:54.61
Manifestって実行時型情報なの?
使ったら負けだと思った方がいいの?
21デフォルトの名無しさん:2013/04/20(土) 11:30:00.65
おまえらは言語がどうのこうのと、グダグダ言っている間に、エロイ人は実用的なソフトをガンガン作っている。


【朗報】エロ画像を管理するソフトを作ってみた
http://www.nicovideo.jp/watch/sm20470790

→ Scalaで画像処理、画像認識して、Playで表示しているらしい。オープンソーす
22デフォルトの名無しさん:2013/04/20(土) 11:46:00.75
2chのスレ読み込んでスレの内容で画像の内容を解読してURLから画像をダウンロードして自動でファイルのタグ付して月ごとにフォルダ管理するソフトをjavaで作った
スレの内容を判別するルールベースの部分がscalaになってる

このくらいのことなら、みんなやってる
23デフォルトの名無しさん:2013/04/20(土) 13:11:36.76
             ____
           /      \
          / ─    ─ \
        /   (●)  (●)  \   ない ない
        |      (__人__)    |
         \     ` ⌒´    ,/
 r、     r、/          ヘ
 ヽヾ 三 |:l1             ヽ
  \>ヽ/ |` }            | |
   ヘ lノ `'ソ             | |
    /´  /             |. |
    \. ィ                |  |
        |                |  |
24デフォルトの名無しさん:2013/04/20(土) 23:03:18.27
CUIの2chブラウザをscalaで実装した
25デフォルトの名無しさん:2013/04/21(日) 20:01:19.39
>>24

あ、それほしい。


べ、べつに、仕事しているふりして2ch見るつもりじゃないからね!
26デフォルトの名無しさん:2013/04/21(日) 21:23:55.07
プロポーショナルなAAはCUIではどう表示するんだろ
27デフォルトの名無しさん:2013/04/22(月) 01:27:25.68
端末の関係で文字全部をユニコードに変換してるからAAは表示どころか文字化けしまくってる
28デフォルトの名無しさん:2013/04/22(月) 09:25:55.33
じゃあもうしばらくはNavi2chで仕事してるふりして待つわ
29デフォルトの名無しさん:2013/04/22(月) 10:02:35.57
Scala使ってる人は、JavaのWebフレームワークと組み合わせて
Webの開発やってる人が多いのかな?

ScalaユーザはみんなLiftとか使ってるのかと思いきや
Liftはさっぱり人気ないことに気が付いた。
Liftもドキュメント読んでもよくわからないし使いづらそう。

Play!もセッション機能がなかったりして汎用性がない。
30デフォルトの名無しさん:2013/04/22(月) 16:07:39.43
俺はLiftでやっているよ。

railsから素直に来れないのが弱点と言うことになっているが
それ自体はたいしたことない。

それよりもドキュメントが貧弱なのがきつい
31デフォルトの名無しさん:2013/04/22(月) 19:31:03.98
>>30
ドキュメントが貧弱、に納得。
数時間、公式サイトを読んだけど簡単なCRUDさえ作れず挫折したw

ドキュメントは概要から順に説明していくのがふつうなのに、
少し読み進めるとアクターモデルとか高度な解説はじめちゃう始末。

Lift開発者は、Railsの元・開発者と聞いて期待してたけど、
LiftとRailsでアーキテクチャがぜんぜん違うんだよね
どうしてこうなった、という感じ。
ViewFirstってわかりづらい

ドキュメントも2011年のままで、長らく更新されてないし、
Lift開発者のやる気もなくなってきてる感じがするわ。
32デフォルトの名無しさん:2013/04/22(月) 21:39:28.71
>>29
自サーバならtomcatで問題ない件
33デフォルトの名無しさん:2013/04/22(月) 21:56:32.91
>>32
?どういうこと?
Play!はJava EEを使ってなくてJavaのSessionに該当する機能は
使えない、とどこかで読んだ。
Play!のフレームワーク自体がステートレスに設計されてるはず
34デフォルトの名無しさん:2013/04/22(月) 22:15:20.78
>>33
掲示板の書き込みと画像のアップロードとミニwikiとちょっとJDBC使うくらいなら、そもそもセッション使わない方が綺麗に実装できる
フレームワークに沿ってコーディングする利点がない
35デフォルトの名無しさん:2013/04/22(月) 22:44:03.59
最近出来たwebベンチマークに
scalaからUnfilteredってのが参加してた。
速度出てるのでシンプルな感じがする。
http://www.techempower.com/benchmarks/#section=environment

- Play(play-scala) 2.1.1
- Lift 2.5.0-RC2
- Scalatra 2.2.0
- Unfiltered 0.6.8
3630:2013/04/22(月) 23:17:05.81
>31
>数時間、公式サイトを読んだけど簡単なCRUDさえ作れず挫折したw
ご本尊のサンプル(http://simply.liftweb.net/)にはmodelが出てこないからな

だからこっちのサンプルを見てくれ
http://exploring.liftweb.net/master/index-2.html#toc-Chapter-2
lift-mapperの簡単な使い方が載っている。

CRUDについてはこれね
http://exploring.liftweb.net/master/index-8.html#toc-Subsection-8.2.4

で、こっちの方はsbt使っていないんで
環境はcookbookの方を見る必要がある。
http://cookbook.liftweb.net/#InstallAndRunning

俺も土曜に始めたばっかりなんで間違っていたらゴメン。
ただ、雰囲気的にDBについてはLiftはあまり関知しないつもりのように思える。
37デフォルトの名無しさん:2013/04/23(火) 02:54:04.39
javaで作ったサーブレットと共存させながら面倒臭い部分からscalaのコードに置き換えていってるから、当分はtomcatに毛が生えたサーブレットコンテナのままです

企業とかもたいして変らわない予感がする
38デフォルトの名無しさん:2013/04/23(火) 05:58:00.18
へ〜、ステートレスでセッションの仕組みが無いならログインとかはどう扱うのだろうと思って
調べたらSession IDを使うステートフルな認証認可モジュールが出てきた。
まぁ、そうなるかな。
39デフォルトの名無しさん:2013/04/23(火) 08:46:09.89
ステートレスってデータを全部DBとcookieに納めて、
アプリケーションサーバがステートを持たないって意味だから
全体としてはステート自体は持つから。

単にサーバを分散しても管理しやすいってだけなんで、
どうせサーバが一台しかない小規模用途なら
lift方式はラクチンでいいと思う
40デフォルトの名無しさん:2013/04/23(火) 10:49:12.50
>>18
↓でOdersky先生自らが DI を解説していた
http://channel9.msdn.com/Events/Lang-NEXT/Lang-NEXT-2012/Reflection-and-Compilers
17:13から 「Dependency Injection in Scala」
41デフォルトの名無しさん:2013/05/01(水) 22:17:52.43
関数(主にパターンマッチ)
OOP
Eclipse
vim plugin


軽いコンパイラ書くなら scalaが最適かな、と思いました
42デフォルトの名無しさん:2013/05/05(日) 01:22:26.39
そもそもscalacが重い件
43デフォルトの名無しさん:2013/05/07(火) 02:24:48.35
軽く、に訂正
44デフォルトの名無しさん:2013/05/08(水) 01:29:05.32
>35
finagleさんが、参加してた。
http://www.google.co.jp/search?q=finagle+scala
ってこれは単純にページ表示するためのものじゃない?
http://2012.8-p.info/japanese/2/18/tumblr
45デフォルトの名無しさん:2013/05/09(木) 23:30:30.69
>>35
akkaご推奨のPlay-miniのrouteはUnfiltered前提だな
46デフォルトの名無しさん:2013/05/09(木) 23:35:27.60
>>29
既存のjavaのフレームワークだと関数型っぽく書かなくなるんだよね
関数型なにそれ美味いの?ってなメンバーが多いときは取っ付きやすいからありだが
だったらscalaじゃなくてもよくね?になりがち
47デフォルトの名無しさん:2013/05/10(金) 22:13:12.02
>>44
次の計測で何位まで行くかたのしみ。
https://github.com/TechEmpower/FrameworkBenchmarks/pull/245
48デフォルトの名無しさん:2013/05/12(日) 15:01:07.56
object MainFrameSample extends SimpleSwingApplication{
def top = new Frame{
title = "Window Title"
minimumSize = new Dimension(250,400)
// cursor = new Cursor( Cursor.HAND_CURSOR)
resizable = false
menuBar = new MenuBar() {contents += new Menu("menu1")}
}

}


こういうウインドウを出すオブジェクトを別のオブジェクトから呼びたいんんですがどうすればよろしいのでしょうか?
eclipse でかいてるんですが 実行時に MainFrameSample オブジェクトを選ばないとウインドウが出てこないんです
49デフォルトの名無しさん:2013/05/12(日) 15:22:21.68
class F extends scala.swing.Frame {
title = "Frame test"

override def closeOperation() = dispose()
}



宣言をこうして呼び出すとき


val af = new F(); af.close(); af.size = new Dimension(200,300); af.title ="XHHHHtTH"
af.visible = (true)
println("xxxxxx")





こうしたらうまくいきました

ありがとうございました
50デフォルトの名無しさん:2013/05/14(火) 21:51:34.08
がっかりpattern matchに泣ける
51デフォルトの名無しさん:2013/05/15(水) 21:21:58.78
メモ sbt環境で -X:print オプションつきコンパイルしたいとき

> set scalacOptions in Compile += "-print"
> compile
52デフォルトの名無しさん:2013/05/16(木) 10:55:13.82
パターンマッチングで
string s1 を その場で定義した正規表現 r1でマッチするかどうか調べ、更にその際一部分を x,y,z に拘束しておき
マッチしていた場合 別のオブジェクトの関数 o1.f1(s,t,u )に 適用して o1.f1(x,y,z ) を評価する、ということをやりたいんですけど

scalaでできますか?
53デフォルトの名無しさん:2013/05/16(木) 16:41:57.38
とりあえずなんでもアルファベットの後ろに数字つけて変数名にしちゃうMS文化って滅びればいいと思います
54デフォルトの名無しさん:2013/05/16(木) 16:46:14.26
val s1 = "x=10,y=20,z=30"
val r1 = "x=([0-9]+),y=([0-9]+),z=([0-9]+)".r
object o1 { def f1(x: Int, y: Int, z: Int) = println(x, y, z) }
s1 match {
case r1(x, y, z) => o1.f1(x.toInt, y.toInt, z.toInt)
}
55デフォルトの名無しさん:2013/05/16(木) 23:27:42.46
>>54
ありがとうございます

r1 を無名関数なので match{ } の内側で定義するのは無理なんでしょうか?
56デフォルトの名無しさん:2013/05/17(金) 08:37:24.92
57デフォルトの名無しさん:2013/05/17(金) 09:25:37.98
object o1 { def f1(x: Int, y: Int, z: Int) = println(x, y, z) }
implicit class RitchRegex(sc: StringContext) {
def r = new util.matching.Regex(sc.parts.mkString, sc.parts.tail.map(_ => "x"): _*)
}
"x=10,y=20,z=30" match {
case r"x=(\d+)${x},y=(\d+)${y},z=(\d+)${z}" => o1.f1(x.toInt, y.toInt, z.toInt)
}
58デフォルトの名無しさん:2013/05/17(金) 09:46:27.55
typo
s/RitchRegex/RichRegex/
59デフォルトの名無しさん:2013/05/17(金) 22:48:57.67
>58
これを見て
「>57レベルの人でも、やはり正規表現を使った操作は/〜/〜/形式が一番直感的なんだな」
と思った。
60デフォルトの名無しさん:2013/05/18(土) 10:55:27.24
http://www29.atwiki.jp/tmiya/pages/136.html
ここにも RitchString のTypoを発見
61デフォルトの名無しさん:2013/05/19(日) 00:22:45.57
>>57
ありがとうございます
すごすぎて
すぐには理解できませんが精進に努めます
62デフォルトの名無しさん:2013/05/21(火) 22:09:26.00
parser combinator で

p ^^ f succeeds if p succeeds; it returns f applied to the result of p.

ってのは
f( (result of p) )



ってことですか?
63デフォルトの名無しさん:2013/05/21(火) 22:12:00.07
だとしたら
f applied to the result of p. って
文法がちょっとおかしいような
64デフォルトの名無しさん:2013/05/22(水) 01:03:29.80
>>62
コードで表現したいこと(意図)とScalaコードごちゃまぜにして書かれてもわからんので
せめて意図は //期待している挙動
みたいにコメントで分けて書いてくれ
65デフォルトの名無しさん:2013/05/22(水) 10:14:32.59
「pのパースに成功したらその結果がfに適用され処理される」ということだから何もおかしくない。

case class Vector3(x: Float, y: Float, z: Float)
object SampleParser extends scala.util.parsing.combinator.RegexParsers {
def parse(in: String) = parseAll(vec3.*, in)
def vec3 = number ~ number ~ number ^^ {
case v1 ~ v2 ~ v3 => Vector3(v1.toFloat, v2.toFloat, v3.toFloat)
}
def number: Parser[Double] = """\d+(\.\d*)?""".r ^^ { _.toDouble }
}
SampleParser.parse("""
1.1 2.2 3.3

4.4 5.5 6.6
""")
66デフォルトの名無しさん:2013/05/22(水) 10:19:09.38
^^はmap
>>はflatMap
67デフォルトの名無しさん:2013/05/23(木) 00:17:36.08
>>63
> だとしたら
> f applied to the result of p. って
> 文法がちょっとおかしいような
日本人的には違和感あるけど
f(x)のことをf applied to x(xに適用されたf)
ということもあるようだ。
68デフォルトの名無しさん:2013/05/29(水) 20:21:19.25
case classをextendしたcase classを作ると
applyとunappyがうまく自動生成されなくなる
(extractor書けとか言ってくる)んだけど
これはそういうものなの?
69デフォルトの名無しさん:2013/05/29(水) 23:13:24.48
case classをextendしたくなる状況が理解できないけどそういうものです
70デフォルトの名無しさん:2013/05/31(金) 23:45:49.48
++=

の意味がわからないです。
71デフォルトの名無しさん:2013/06/01(土) 00:55:31.83
x ++= yはx = x ++ yと同じ
72デフォルトの名無しさん:2013/06/01(土) 01:04:41.70
x ++ y もわかんないんですけど…
73デフォルトの名無しさん:2013/06/01(土) 01:27:05.26
何がわかるんだ?
74デフォルトの名無しさん:2013/06/01(土) 01:34:05.90
>>69
case class Employee(name:String, salary:Int)
みたいなのに
case class SalesRep(customers:List[C]) extends Empolyee
みたいなのってしたくないですか?
75デフォルトの名無しさん:2013/06/01(土) 02:46:11.84
>>74
したくないです……
その例だったら
case class SalesRepo(employee: Employee, customers: List[C])
とか、単に (Employee, List[C]) のタプルで済ますとか
76デフォルトの名無しさん:2013/06/01(土) 07:43:38.11
>>74
したいけど、それをやるとオブジェクトの等価性で問題がでるために禁止された
77デフォルトの名無しさん:2013/06/02(日) 01:04:57.89
>>75
したくない理由をもうちょっと詳しく教えてもらえる?
こういう継承って古典的なオブジェクト志向のよく出る例だけど
なぜscalaではダメなのか?
型情報も両方で基底の型としてEmployeeを使いたいときどうするの?

それともtrait使って混ぜ混ぜの方がscalaだと流儀なの?
78デフォルトの名無しさん:2013/06/02(日) 01:34:10.18
79デフォルトの名無しさん:2013/06/02(日) 02:22:20.49
>>77
Scalaではダメってわけじゃない。case classでダメなだけ
なぜならcase classは(オブジェクト指向の)抽象データ型ではなく(関数型の)代数データ型だから
80デフォルトの名無しさん:2013/06/02(日) 16:23:32.30
代数的データ型だというならML系やHakellの用に楽に定義出来る構文糖欲しい
81デフォルトの名無しさん:2013/06/02(日) 16:27:00.59
基底traitをsealedすればよくね?
82デフォルトの名無しさん:2013/06/03(月) 21:36:06.03
論理的にはそれで大丈夫なんだが字面的に面倒じゃない?
83デフォルトの名無しさん:2013/06/03(月) 21:51:14.41
慣れ
84デフォルトの名無しさん:2013/06/04(火) 19:06:38.63
scala盛り上がってるかい?
85デフォルトの名無しさん:2013/06/04(火) 20:52:52.65
ぷえーい
86デフォルトの名無しさん:2013/06/05(水) 21:17:06.53
Scala 2.10.1でManifestがdeprecatedになって
scala.reflect.runtime.universe.{ typeOf, TypeTag, Type }になったけど
おかげでtype erasure回避しやすくなってるね
87デフォルトの名無しさん:2013/06/06(木) 00:09:15.87
scalaのAndroid SDKが欲しい
88デフォルトの名無しさん:2013/06/06(木) 08:20:28.79
>>86 試してみた。これからはshapelessなくても生きていけるかも

class HMap {
import scala.reflect.runtime.universe.{ typeOf, TypeTag, Type }
private var m = Map[String, (Type, _)]()
def set[T: TypeTag](k: String, v: T): Unit = { m += k -> (typeOf[T] -> v) }
def get[T: TypeTag](k: String): Option[T] = m.get(k) flatMap {
case (t, v) if t <:< typeOf[T] => Some(v.asInstanceOf[T])
case _ => None
}
}
scala> var hm = new HMap
hm: HMap = HMap@272772b1

scala> hm.set("hoge", 1)

scala> hm.set("fuga", "moge")

scala> hm.get[Int]("hoge")
res76: Option[Int] = Some(1)

scala> hm.get[String]("fuga")
res77: Option[String] = Some(moge)

scala> hm.get[String]("hoge")
res78: Option[String] = None
89デフォルトの名無しさん:2013/06/06(木) 18:33:11.51
Scalaの何がいいのか産業で
90デフォルトの名無しさん:2013/06/06(木) 20:19:55.21
Haskellは難しすぎて僕にはむりだったけど
すカラならOOPを足がかりにして緩やかにFPへシフトできるから
きっと君もスキになれる
91デフォルトの名無しさん:2013/06/07(金) 10:54:25.44
>>89
そこそこ強力な言語だし、それに名前がかっこいい
名前がダサい言語は使う気になれん

F#とかさw
アルファベット1文字w + しゃーぷwwだっさ
エフシャープwwww恥ずかしくて口に出せない
92デフォルトの名無しさん:2013/06/07(金) 20:44:32.68
アルファベット一文字の適用範囲的最強言語C言語様がみえないのか?w
93デフォルトの名無しさん:2013/06/07(金) 21:11:12.21
Dの悪口はやめて
94デフォルトの名無しさん:2013/06/07(金) 22:11:35.64
D is disrespected always.
95デフォルトの名無しさん:2013/06/07(金) 22:26:10.75
Deprecated Language?
96デフォルトの名無しさん:2013/06/07(金) 22:58:01.94
D言語最強伝説
97デフォルトの名無しさん:2013/06/08(土) 00:49:51.48
ドヤ顔でDとか言ってるくせに、〜100行程度のトイコードしか書いたことのない馬鹿w
お前らがちゃんと貢献しないから、いつまで経っても5流言語なんだよ?
はやくC++を駆逐しろよ
98デフォルトの名無しさん:2013/06/08(土) 00:59:37.36
ScalaではClojureに勝てないことに気がついてしまった・・・
今までJavaプログラマをバカにしていたが、Clojureプログラマからはバカにされてる・・・

高校生になったから調子にのって中学生を見下していたら、それを見ていた大学生に苦笑いされた
そんな気分だ・・・情けない・・・さようならScalaプログラマ()・・・
99デフォルトの名無しさん:2013/06/08(土) 01:41:19.71
おう、じゃあな
100デフォルトの名無しさん:2013/06/08(土) 04:36:36.71
D(笑)
101デフォルトの名無しさん:2013/06/08(土) 15:28:34.33
http://www.techempower.com/benchmarks/
clojureってこれのことをいってるのかな?
このベンチは軽量さとキャッシュの設計とポイントが結構わかりやすく
scalaもセッティング整えてあがってくるんじゃないかな。
このベンチ、webAPIのみに焦点があたっているので
ページ生成のテンプレートエンジン部分があるといいなあ。
102デフォルトの名無しさん:2013/06/09(日) 23:24:23.34
Scalaって結局どこが良くて支持されてるんだ?
103デフォルトの名無しさん:2013/06/10(月) 02:33:46.70
かっこよさ
104デフォルトの名無しさん:2013/06/10(月) 03:02:59.31
JAVAからの敷居の低さ
105デフォルトの名無しさん:2013/06/10(月) 04:47:00.12
関数型言語の入門に丁度良いと思う、Java使ったことがある人が前提だけど
106デフォルトの名無しさん:2013/06/10(月) 14:32:20.62
javaのライブラリが使えてjavaよりもっとオブジェクト志向で、関数型で型チェックが強力
107デフォルトの名無しさん:2013/06/10(月) 21:28:15.56
標準コレクションライブラリの出来の良さ
108デフォルトの名無しさん:2013/06/10(月) 22:58:18.70
パターンマッチ
109デフォルトの名無しさん:2013/06/15(土) 16:11:52.03
ScalaJS
https://twitter.com/reactivex/status/345724190621581312
ocamljs, WebShaper(F#), ClojureScriptとあるけど、どんな統合具合なんだろ
110デフォルトの名無しさん:2013/06/16(日) 03:04:00.84
Scalaは名前がオリジナリティ無くてダサい。
むしろそれだけがネック。
111デフォルトの名無しさん:2013/06/16(日) 10:08:31.09
【IT】 「C言語やJavaを使う人は採用しない」「AGKやDarkBASICの方が生産効率が高い」就職活動
http://kohada.2ch.net/test/read.cgi/pcnews/1365242417/139-141

コンソール研究所は13日、C言語やJavaを使う学生を採用しない方針を固めた。

これは昨今のソフトウェア開発現場において社内研修期間を嫌う企業や官公庁の意向を取り入れたもので、
「 卒業=即戦力 」 が求められる新時代への突入を明確にしたものである。

たいていの面接官は ” 学生時代にどんな部活に所属していましたか? ” などと聞くが、それは時代遅れと
なったようだ。

また、C言語やJavaのスキルを問うものに対しても、「 実務経験がなければ意味がない 」 と言う現場の声も
反映した。

コンソール研究所の開発現場から一人の声を拾ってみた。
(以下ソース参照)
112デフォルトの名無しさん:2013/06/16(日) 16:39:03.59
俺はスカラよりスケーラのほうが良かったな
113デフォルトの名無しさん:2013/06/16(日) 19:52:09.07
class oneConvert(fst : Char,snd : Char){
val fst = this.fst;
val snd = this.snd;

}

みたいに書きたいんですが怒られてしまいます
おとなしく変数名と引数名を違えるべきでしょうか?
114デフォルトの名無しさん:2013/06/16(日) 20:02:10.82
class oneConvert(val fst: Char, val snd: Char) {
...
115デフォルトの名無しさん:2013/06/16(日) 20:02:36.85
逆でした

public Employee(string name, string alias)
{
this.name = name;
this.alias = alias;
}

↑みたいにしたかったんですがあきらめて


class oneConvert(arg_fst:Char,arg_snd:Char){
val fst = arg_fst;
val snd = arg_snd;

}

としますた
116デフォルトの名無しさん:2013/06/16(日) 20:06:18.53
>>114
すいません、ありがとうございます。
117デフォルトの名無しさん:2013/06/16(日) 20:32:50.63
いつのまにか2.10.2が出てた
118デフォルトの名無しさん:2013/06/16(日) 20:58:11.70
JavaScriptを殺せなかった(Ajaxで生きながらえさせてしまった)のは
今世紀最大の失敗だったと思うわ

TojiCode: A Tale of two Web Technologies
http://blog.tojicode.com/2013/06/a-tale-of-two-web-technologies.html

コメント欄など見てると、もう駄目だよこれ\(^o^)/オワタ
JavaScriptの置き換えも改善も期待しないほうがいい。
DartもPNaClも政治で潰される。asm.jsはどう考えてもLLVM→asm.jsの変換時間やマルチスレッド対応で躓く。

ウェブはJavaScriptと心中だ。

つかBrendan Eichの老害っぷりがぱない
というより、あれこれ理由をかこつけて自分が作ったJavaScriptを守りたいだけなんだろうけどさ。
JavaScriptやasm.jsに疑義を呈するブログやツイートに片っ端から突撃してくる必死っぷりが心底うざいw

そろそろHTML/CSS/JavaScript全部スクラップにして
第二のウェブを作ることを考え始めてもいい頃合いではないかと思う。
野心ある人はもう取り組んでいるかもしれん。
119デフォルトの名無しさん:2013/06/17(月) 09:08:25.35
Google speeds up its JavaScript alternative Dart compiler and VM, says no more core library breaking changes
http://thenextweb.com/google/2013/04/16/google-speeds-up-its-javascript-alternative-dart-compiler-and-vm-says-no-more-core-library-breaking-changes/

Dart Editor
https://www.dartlang.org/tools/editor/
120デフォルトの名無しさん:2013/06/17(月) 23:13:32.21
Scala終わったかもね。はじまってもいないけどw
121デフォルトの名無しさん:2013/06/18(火) 13:15:09.42
122デフォルトの名無しさん:2013/06/20(木) 13:56:05.08
IDEはまだストレスあるし、APIの日本語版もまだない
Javaからのステップアップが簡単と書かれてる本は800ページ近くあって、本当に簡単なのかと
実際これIT土方が使えるのかな、業務で取り入れてる人っている?
123デフォルトの名無しさん:2013/06/20(木) 22:25:08.55
API日本語版はなくてもいいけど、JavaのAPIとの関係と不具合をまとめた本がほしいです
124デフォルトの名無しさん:2013/06/21(金) 01:11:00.02
API日本語版は今後もなさそ。Typesafe社はそこまでやるマンパワーないだろうし
そもそも日本で普及するかする見込みがないとやる意味ない

Javaをちゃんと分かってればステップアップ簡単だと思うけど、>122の文脈でいうIT土方だとどうだろうね
逆に中途半端にJava知らない方がScala自体は簡単かもしれないが、ハマると結局Javaの知識も必要

日本で2chから近いところでいうとニコニコのバックエンドはScalaに切替中らしい
125デフォルトの名無しさん:2013/06/21(金) 03:05:14.52
関数型言語だから細かい部分まで手がとどかないって書こうとしたけど、よく考えたらjavaでも細かい部分まで手が届いてなかった
126デフォルトの名無しさん:2013/06/21(金) 03:09:58.60
java知らない土方なんていねーよ
127デフォルトの名無しさん:2013/06/21(金) 03:17:49.61
javaを使っているが、java6以降を触わったことすらない土方ならいる
128デフォルトの名無しさん:2013/06/21(金) 23:39:23.03
>>124

今時、英語くらい読めないとIT土方も難しいよね。
世界中に、英語読めるIT土方が居る時代だし。


> 日本で2chから近いところでいうとニコニコのバックエンドはScalaに切替中らしい

逆に現状のニコ動のバックエンドって何だろう?
129デフォルトの名無しさん:2013/06/22(土) 05:18:39.18
C++だったような気がする
130デフォルトの名無しさん:2013/06/22(土) 09:16:13.59
そんなとこいじるよりジョブスの遺言を守ってFlash Playerを何とかするべきなんじゃないの?
131デフォルトの名無しさん:2013/06/22(土) 13:32:08.75
なんでscalaスレでキモイ糞ップルの話が出てくるんだ
132デフォルトの名無しさん:2013/06/23(日) 00:16:59.15
>>128
わかんないけどたぶんPHPだと思う。
133デフォルトの名無しさん:2013/06/23(日) 01:25:00.35
WEB+DBなどで、C++にしている箇所の話はあったと思う。
134デフォルトの名無しさん:2013/06/23(日) 02:59:26.93
うちの会社は、プレゼン用のプロトタイプをscalaで作る
3時間で作ったプロトタイプだけど、C++で実装してリリース可能になるまでだいたい3ヶ月かかる
だからと言って、scalaで作ったモノを売ることはない
他の会社も同じだと思う

だから「scalaで作った」はあんまりまにうけない方がよいかと
135デフォルトの名無しさん:2013/06/23(日) 04:00:41.83
どの言語をどう使おうと勝手だけど
Javaならともかく最終的にC++で実装すること前提なら
Scalaでプロトタイピングってトータルでみて効率的じゃないような?
Scalaを使う効果ってどんなもん?
136デフォルトの名無しさん:2013/06/23(日) 04:03:22.51
Twitter「Scalaで作った」
137デフォルトの名無しさん:2013/06/23(日) 12:54:47.15
ソフトウェアプロトタイピングにおける、最終製品への開発にコードを流用しない
という制約を厳守できるという効果は大きいだろ
138デフォルトの名無しさん:2013/06/23(日) 14:53:21.60
ニコニコとScalaで検索するだけで製品コードレベルでScala使ってる資料が見つかるけどな
139デフォルトの名無しさん:2013/06/23(日) 18:27:35.76
C++をC++として使い倒す能力があるならば
Scala でプロトタイプするのは非現実的かもしれない
140デフォルトの名無しさん:2013/06/23(日) 18:45:39.08
C++でもラムダ式やら範囲ベースのforやらのあるC++11と
それ以前ではだいぶ違うと思うけど

とはいえまだC++11普及してないよね
141デフォルトの名無しさん:2013/06/23(日) 20:45:47.24
実務経験あるなら分かると思うけどプロトタイプをそのまま製品へ流用する誘惑に負けて、
結果プロジェクトが破綻することがままある
だからソフトウェアプロトタイピング手法ではプロトタイプコードを捨てろと明言してる
能力がどうとか言う話じゃないんだよ
142デフォルトの名無しさん:2013/06/23(日) 22:06:07.35
プロジェクトが破綻するのは
プロトタイプを流用していることが直接の原因じゃなくね?

プロトタイプコードを捨てるのが有効であるとして
Scalaが最終製品として使えない理由にはならないし
143デフォルトの名無しさん:2013/06/23(日) 22:16:42.87
プロトタイプで学習したことを生かして再設計しましょう、という話なら分かる。
Scalaで開発できる人間を必要なだけ集められるかは、重要ではあるけど別の問題。
144デフォルトの名無しさん:2013/06/23(日) 23:23:22.77
>>134
そういうのは、聞いたことのある範囲ではあまりないなあ。全面採用ではなく、APIサーバだけScalaとかそういうのはちょくちょく聞く
ただ、日本のいわゆるSIerでScala使ってるところは少なくて(SIerだと採用しづらい事情はわかる)、国内採用事例は
もっぱらWebサービス系のBtoCな企業に集中してる。特にWebサービス企業のバックエンドは技術選択の自由度高いことが多いし
日本以外の話でいうと、Twitterとか、LinkedInはいうに及ばず、Webサービス企業が普通にScala使うのはさほど特異なことでもなくなってきてる
ただ、日本でなくてもいわゆるエンタープライズとWebサービス企業(主にBtoC)の壁はまだ厚いようで…。その辺は、Scala Days 2013のKeynoteで
感じたことでもある
145デフォルトの名無しさん:2013/06/23(日) 23:34:38.44
ちなみに、著名なScala採用事例として語られるTwitterとか、実際どうコード書いてるのよとか知りたいならその企業のgithubリポジトリ覗くといいと思う
アピールのために一部公開という形じゃなくて、結構内部向けに書いたと思しき泥臭いコードを公開してるのは結構ある。あとは、Scala採用企業に
勤めている開発者のgithubリポジトリにも、微妙に内部向けっぽいコード(もちろん、秘密情報は入ってないけど)が公開されてることもある
146デフォルトの名無しさん:2013/06/24(月) 00:23:55.19
プレゼンした直後に、顧客の目の前でプロトタイプに顧客の要望を取り込めるのがscalaの利点
当然、プロトタイプどまりだが、その場はしのげる
147デフォルトの名無しさん:2013/06/24(月) 09:51:40.50
ブラックな顧客がプロトタイプをみて
「もうできてるじゃん!こんな簡単にできるならお金払わなくてイイヨネー」とか
「こないだできてたのに、まだできてないってどういうことなの?」とか
アホなことのたまったときどう対処しているのかぜひ教えてほしい
148デフォルトの名無しさん:2013/06/24(月) 21:22:06.89
スレチ
149デフォルトの名無しさん:2013/06/24(月) 22:36:27.71
プロトタイプにはないエラー処理と入出力の処理が製品化されたコードの97%になることをきちんと説明できるかがカギ
150デフォルトの名無しさん:2013/06/25(火) 15:00:27.08
物流管理システム「Solvo」がScalaとの連携をサポートしてるらしい。ロシア製

Solvo.WMS (http://www.solvo.ru/support/docs/docs_en/Solvo.WMS_en.ppt)

Integration (http://www.solvo.ru/en/products/wms/Solvo.WMS/wms_technologies_and_erp_integration.php)

Solvo.WMS provides integration features to interface it with ERP
systems, such as Monolith, Galaktika, Parus, Domino, AX, Microsoft
Dynamics Nav, Scala, JD Edwards, Oracle E-Busines s suite, SAP R 3,
etc.
151デフォルトの名無しさん:2013/06/25(火) 20:58:48.04
iScalaって紛らわしいERPシステムもあるな
(Google八分にしてほしい...)
152 ◆QZaw55cn4c :2013/06/25(火) 21:01:06.30
あくまで八分であって十分ではないんですよね
153デフォルトの名無しさん:2013/06/27(木) 20:25:16.83
>>147
これは張りぼての車を人が被って歩いてる状態です。
154デフォルトの名無しさん:2013/06/27(木) 22:11:41.24
>>153
座布団十枚。
155デフォルトの名無しさん:2013/06/28(金) 12:28:56.88
ハード系の顧客ならモックアップって説明すると通じる
156デフォルトの名無しさん:2013/06/29(土) 12:50:12.43
157デフォルトの名無しさん:2013/06/29(土) 13:06:23.78
>>156
> バカ向け言語 Scala
> http://rirakkumya.hatenablog.com/entry/2013/04/20/093044

別にディスっているページじゃなくて、リスペクトしているぺーじなんだが
次が分からん。
あっているのか?これ? それともバカすぎると無理なのか?

def f(x:Int)(implicit y:Int) = x + y
implicit val x = 10
f(10) //-> 20
implicit val x = 100
f(10) //-> 110
158デフォルトの名無しさん:2013/06/29(土) 13:23:51.38
【Java】Play framework【Scala】
http://kohada.2ch.net/test/read.cgi/php/1304277057/

過疎ってるなあ。
159デフォルトの名無しさん:2013/06/29(土) 14:22:12.63
>>157 あってる

暗黙変数の変数名は便宜上のものなので、例としてあげられているコードの文脈において implicit val x の"x"に意味は無い。
「Intという型に対して10という値が暗黙のうちに適用される」ことを示しているに過ぎない。
すなわち def f(x: Int)(implicit y: Int) の引数 x に適用されるのではなく y に適用される。

まあ、>>157が言いたいのは、だったら例として最初から implicit val y = 10 とでも書いておいてくれれば
理解の助けにはなるのにってことだろうけど、どのみち説明不足なのでこの資料だけから理解しようとするのはやめたほうがいいよ。
160デフォルトの名無しさん:2013/06/29(土) 14:48:58.60
WebフロントをScalaで開発「Scala.js」
http://www.moongift.jp/2013/06/20130625/

Scala.jsを使うとWebフロントエンドの開発においてもScalaを使えるようになります。そしてコンパイルしてJavaScriptを生成します。jQueryをはじめとするJavaScriptライブラリと連携できますので使い勝手は良さそうです。


、、、だって。 どうよ?
161デフォルトの名無しさん:2013/06/29(土) 16:34:45.37
俺のようなアホには使いこなせる自身が皆無なので、
V8エンジンで実行するとJava VMより10倍早くなるという
おもしろ逆転現象でも起きない限り静観する
162デフォルトの名無しさん:2013/06/29(土) 17:20:58.78
www.infoq.com/jp/articles/resilient-software-with-akka
AkkaについてのInfoQ記事がおもしろい
ActorやFutureを用いたモジュール疎結合についてと
Apache再起動に頼らないリカバリの仕組みを提供することの意義とか
Typesafe四天王だけあって方向性にブレがないのが好きだなぁ
163デフォルトの名無しさん:2013/06/29(土) 17:23:04.17
>>160
GWTが受け入れられない時点でお察し

>>162
Erlang/OTPでええやん
164デフォルトの名無しさん:2013/06/29(土) 18:19:46.69
>>162
ちょっと訳が意味不明なところがあるんだが。

これらの特性のお陰で、これらのコンポーネントの動作を完全に互いに独立に、
実行するのが可能になり、多分1つのスレッド上で一つづつ実行される
-- 入れ子になったコールスタックがない場合、同期メソッドの呼び出し中に通常起きる --
しかし、異なるスレッド上で並列に同様に起きる可能性があります。

-- 原文 --

These characteristics make it possible to execute the behavior of
these components completely independently of each other, possibly one
after the other on a single thread -- without the nested call stack
usually encountered during synchronous method invocations -- but
equally possible in parallel on different threads, which may in turn
be scheduled on the cores of a single server or even on different
network hosts.

-- 意訳 --

これらの特性のお陰で、コンポーネント同士の動作を互いに完全に独立に実行
できる。ともすればシングルスレッド環境で -- 同期メソッド実行中に通常起
こり得る「呼び出しスタックが入れ子になる(=deadlock)」事もなく -- 逐次的
に実行できる。さらに、単一サーバー上の複数コア間で実行がスケジュールさ
れたマルチスレッド環境や、異なるホスト間をネットワークで結んだ環境であっ
たとしても、異なるスレッド間で並列に実行できる。
165デフォルトの名無しさん:2013/06/30(日) 18:31:05.87
機械翻訳にちょっと手を加えただけみたいだな
まぁ、記事紹介してくれるだけもありがたいと思うべきか
166デフォルトの名無しさん:2013/07/01(月) 22:48:49.01
最近、世間では統計とかビッグデータの解析とかが流行中の流行だよね。
どこもかしこも、統計、統計って言っているな。
プログラミング言語も、ここ1,2年で R言語が人気急上昇らしい。

その辺、Scalaはどうよ?

Scalaとか、HadoopとかMahoutとかWekaとかJava系のライブラリとの親和性が高いのだから
もっと利用されても良いはずなのだが。

まあ、ScalaというかJVMは、Visualizationが不得意なんだよね。いまいち、GUIが垢抜けていない。
JavaFXがもっと発展していればよいのだけど。
167デフォルトの名無しさん:2013/07/02(火) 00:22:18.13
ScalaLabでどうよ
168デフォルトの名無しさん:2013/07/02(火) 02:43:15.60
Sparkだろ
169デフォルトの名無しさん:2013/07/02(火) 04:17:47.39
Information visualization系であれば今ならWebでUI作って簡単な可視化であれば
Google Visualization Toolkitその他、凝ったものであればd3がトレンドだと思う。
よほどのことでない限りWeb UIで大概は用が足りるようになってきたし、Web向けの
Infovisツールキットに関しては何となくd3で勝負がついた感がある。

Plot系やScientific visualizationに関しては確かにJVM系は弱いね。
というかこれらの分野はRとPythonとC以外はどれも弱いと思う。
170デフォルトの名無しさん:2013/07/02(火) 06:27:59.57
べつに無理に全部Scalaで固める必要ないやん
好きな言語でCSV出力してプロット用の環境へ渡せばいいだけ
171デフォルトの名無しさん:2013/07/02(火) 08:39:53.84
いわゆるビッグデータ解析の話でいうと、>>168 の言ってるSparkの注目度が去年から今年で急上昇してる

数年前登場した時点ではあくまで研究用途という感じだったけど、今はYahoo, Intel, ...とかindustrial
な事例が増えてきてる。Scala DaysでもSparkのセッションは満員お礼という感じで、Akka関連に次いで
注目されてた気がする。HDFSを簡単に活用できたりとか、Hadoopとの連携がしやすい点等はHadoop
使ってる企業にとっては魅力的なのかも
172デフォルトの名無しさん:2013/07/02(火) 12:31:00.89
>>166 Hadoop やるのに自分は Scala 使ってるよ。
Visualization ではさすがに使わないけどw

>>171 Spark いいね。ASF の incubation になったから、どんどん使われると思う。
173デフォルトの名無しさん:2013/07/03(水) 09:19:49.07
Visualizationといえば、JVM系であるProcessiingが有名だったな。

ScalaとSparkでデータ処理して、Processingでビジュアル化すれば最強か。
174デフォルトの名無しさん:2013/07/03(水) 09:35:10.04
Processing は名前くらいしか知らなかったけど、JVM 系なのか。評判とかどうかしらん。
175デフォルトの名無しさん:2013/07/03(水) 10:06:13.36
g8の作者が放置しているspdeのことも思い出してあげてください…
176デフォルトの名無しさん:2013/07/03(水) 10:32:42.15
むしろ忘れてやれ
177デフォルトの名無しさん:2013/07/03(水) 13:05:11.12
>>174

Processingは、オライリー出版から、たくさん本が出ているし、
いわゆるDataVisualizationの最初のブームのきっかけだよ。
立ち読みしてみれば、有名なサンプルがいくつものっていて、あ、これがProcessingか、となる。


だけど、ScalaからProcessingを連携するためのspdeが放置状態なのは、、、残念。
178デフォルトの名無しさん:2013/07/03(水) 13:18:24.84
>>177 丁寧に教えてくれてありがとう。興味あるので、本屋さんでチェックしてみるよ。

しかし、Scala からの連携がその様子では…惜しいな…
179デフォルトの名無しさん:2013/07/03(水) 23:07:03.57
>>178

SPDEは、Scalaの文法でProcessingを動かすためのフロントエンドであったり、IDEみたいな環境だったりする。

SPDEがなくとも、ProcessingはJVM系だからクラスレベルで連携できるよ。
もっといえば、ProcessingはSwing使っているので、Swing経由で。

、、、でも肝心のSwingが今時のGUIとして垢抜けないんだよなあ。
180デフォルトの名無しさん:2013/07/03(水) 23:12:22.39
swingとscalaの関係を書いた本がほしいです
181178:2013/07/03(水) 23:38:14.81
>>179 トン。なるほど、そういうことですか。それなら直接連携できそうですが、
Swing は確かに垢抜けない感じでしたね…出た頃に少し試しただけですが。

でも、なかなか面白そうなんで、Processing に少しさわってみようと思います。

spde には IDE も用意されてるなら、誰かメンテしてくれんかしらん…

>>180 Scala の入門書は多いけど、応用的な本はまだ見ないですよね。
日本語の本しかチェックしてませんが。
182デフォルトの名無しさん:2013/07/04(木) 12:33:10.32
scala の日本のユーザ会のサイトって、何でずっとお休み中なんだろ。
183デフォルトの名無しさん:2013/07/04(木) 13:11:40.74
windowsのL&Fを使っても微妙なんだよなswing
そうだ!SWTを使おう!!
184デフォルトの名無しさん:2013/07/04(木) 14:45:32.06
Linux でも cool に表示されるのかしらん。
185デフォルトの名無しさん:2013/07/05(金) 16:04:37.25
既に過去スレで話題にはなってますが、今の時点で
Scala 向けの Web フレームワークって何が良いでしょうか。

やはり Play が良いのでしょうか。(スレは過疎ってるようですが。)
Lift は流行ってる気がしませんし。というか難しい印象。
186デフォルトの名無しさん:2013/07/05(金) 16:29:33.31
tomcat最強
187デフォルトの名無しさん:2013/07/05(金) 16:43:57.21
仕事でも使いたいなら、Tomcat だろうなぁ。
188デフォルトの名無しさん:2013/07/05(金) 16:50:51.17
scalaをwarに固めてtomcatアプリ作れる方法知ったら、あとはずっとtomcat
189185:2013/07/05(金) 18:35:32.56
皆さん、ご意見ありがと。
Tomcat 最強でしたか。Scala 初心者で思いつきませんでしたが、勉強してみます。
190デフォルトの名無しさん:2013/07/05(金) 19:42:20.07
微妙に不親切なアドバイスだと思う。
191デフォルトの名無しさん:2013/07/05(金) 19:45:48.46
lift with scala on tomcat
192デフォルトの名無しさん:2013/07/05(金) 20:26:36.34
tomcatはコンテナであってフレームワークじゃなくね?
よっぽどプリミティブなサイトじゃなきゃtomcat使うにしても
もう一段レイヤー重ねないか?
193デフォルトの名無しさん:2013/07/05(金) 20:31:23.94
>>192
便利なフレームワークも半年たったら忘れるから、結局プリミティブ最強という話
下手すると半年後に公式が消えてる
194デフォルトの名無しさん:2013/07/05(金) 20:34:51.62
>>192 だよね。
tomcat だけだと、servlet を書くってことかしらん。それはさすがにキツイような。
195デフォルトの名無しさん:2013/07/05(金) 20:48:52.17
servletはjavaでフォロー入れれるのが好き
196デフォルトの名無しさん:2013/07/05(金) 21:01:51.13
Playってサーブレットコンテナ使わないの?
197デフォルトの名無しさん:2013/07/05(金) 21:06:34.99
scalaのwebフレームワークの本が出ないのは、javaのサーブレットで充分だからだと思う
198デフォルトの名無しさん:2013/07/05(金) 21:14:59.04
>>196
PlayはServletじゃないから

>>193
うちは今んとこJSやApplet向けのWebAPIにだけScala使っててsevletでやってたんだが、
普通にウェブサービス作るときも素のservletでやれるのか
199デフォルトの名無しさん:2013/07/05(金) 21:17:38.61
>>196 作者によれば、最初のバージョンは、servlet で実装してらしい。
けど、やめたとか。
200デフォルトの名無しさん:2013/07/05(金) 21:20:31.97
https://github.com/TechEmpower/FrameworkBenchmarks/tree/master/servlet
servlet直、javaだけど。

https://github.com/TechEmpower/FrameworkBenchmarks
servlet直でscalaはなかったと思うけど、ほかにおなじ処理をscalaのフレームワークで実装したのもがあるのでみてみたら。
201デフォルトの名無しさん:2013/07/05(金) 21:24:15.32
>>198
自サーバや趣味なら、tomcatにwarファイルを置くサーブレットで十分

業務用はscalaのフレームワークじゃ無理
せいぜいプレゼンで見せる程度
結局C++で実装されられてる
202デフォルトの名無しさん:2013/07/05(金) 21:25:59.45
http://www.techempower.com/benchmarks/#section=data-r6&hw=i7&test=json&l=6bk
WebAPI向けでhtmlテンプレート作るためじゃないものも入ってる。
203デフォルトの名無しさん:2013/07/06(土) 11:13:46.68
飯を食うためにしかたなくやるWeb系は
いろいろめんどくさくないweb2pyでいいわ
gaeへのデプロイも何も考えずにできるし
型付き言語を理解できないアホのメンテも不要だし

で、浮いた時間をScalaに費やす
204デフォルトの名無しさん:2013/07/06(土) 12:43:23.30
結局、業務では使えないんかい … 流行らんわけだw
205デフォルトの名無しさん:2013/07/06(土) 12:57:16.15
仕事で使うには、Scala 使いが少な杉。
206デフォルトの名無しさん:2013/07/06(土) 16:29:16.20
その仕事や業務の分野にもよるな
経験豊富なScala使い100人必要って分野には厳しいだろうけど
207デフォルトの名無しさん:2013/07/06(土) 19:12:02.45
http://2012.8-p.info/japanese/2/18/tumblr
基本、rubyやphpの導入と同じでweb系からじゃないかい。

業務系だと、DSL設計する側と利用する側のいるプロジェクトじゃないと取り入れづらいカモシレナイ。
http://d.hatena.ne.jp/mao_instantlife/touch/20120804/1344062659
http://www.asakusafw.com/techinfo/methodology.html

結局どういうことかというと、下記のようなことがやりたくて、jvmのライブラリとインフラが使えるのが利点のプロジェクトがあるかどうか。
http://itpro.nikkeibp.co.jp/article/COLUMN/20130112/449224/
http://d.hatena.ne.jp/camlspotter/touch/20101212/1292165692
208デフォルトの名無しさん:2013/07/06(土) 19:21:52.50
>>206 100人は論外だとしても、1プロジェクトで10人集めるのも厳しいと思うがねぇ。

しかし上の記事にある、Haskell 2万3千ステップに10人で半年、って笑うとこかいな?w
どんだけ人余ってるんだよ…
209デフォルトの名無しさん:2013/07/06(土) 19:24:11.75
>>207 Web 系の小規模なシステムで実績を作るのが良いでしょうね。
210デフォルトの名無しさん:2013/07/06(土) 20:12:47.16
>>205
scalaAPIが外部ライブラリに入ってるけど、ソースファイルにscalaのコードがないとかザラ
たぶん、納品レベルで、scalaを変な使い方してjavaのコードを自動生成してる連中がいる
211デフォルトの名無しさん:2013/07/06(土) 20:34:56.70
うわぁ、ありそうな話しだな…
212デフォルトの名無しさん:2013/07/06(土) 20:42:51.43
scalaのAPIは出典明記して警告的なヤツをコピーしとけばフリーだからな
213デフォルトの名無しさん:2013/07/06(土) 22:27:42.20
>>210
変な使い方しなくてもPlayのようにScalaで書かれたライブラリをJavaで使うことも出来るよ
214デフォルトの名無しさん:2013/07/07(日) 14:40:53.26
1. scalaAPIを使ってるjavaライブラリを使ってる。
2. javaから直接scalaAPIを使ってる
3.実装はscalaで作ってjarにして、手続きはjava
4. 手続きもscalaで作って、classをjavaに逆アセンブルして納品(javaだと問題になる関数名とかあった気がする)

直接関係ないけど、共通部分の実装はjava,scalaで、毎回書き換える手続きはclojureって話は聞くね。
215デフォルトの名無しさん:2013/07/07(日) 19:17:26.62
納品先の品質管理部門(FとかN)が低能でjavaしか受け付けないからそんなことしているの?
日本のソフトウェア産業ってほんと腐りきってるネ!
216デフォルトの名無しさん:2013/07/07(日) 20:21:22.59
>>215

海外のプログラマは、
言語がどうのこうの言う前に、とりあえず「使えそうだったら作ってみる」、ってスタンスだからな。

当時無名だったRubyを使って、RubyOnRailsが作られたて世界中で使われるようになったら、
ようやく日本のプログラマがRubyに興味持ち出して、日本発とかちやほやするようになったのは有名な話。


>>205

日本人は、自分で作る前に、世界で流行っているかどうかばかり気にするからねえ。

今流行の分散処理システムでビッグデータ解析みたいなのには、Scalaが一番適していると思われるので
この辺で誰かがキラーアプリつくってくれれば、日本でも皆がScalaを使い始めると思うよ。
217デフォルトの名無しさん:2013/07/07(日) 20:35:10.55 ID:r5R8vggV!
ビックデータというかHadoopを基盤としたソフトウェアスタックの上で何かをしたいのであれば
現状はScalaは使えるにせよScala単体ではなくJavaとScalaの両方が必要になるね。
218デフォルトの名無しさん:2013/07/07(日) 20:39:16.72
>>217

いまどき、言語は一つしか知らないプログラマなんてありえないんだから、
逆に考えて、Javaの資産が使えるっていうのは、Scalaの大きな強みのはず。


OracleがJavaを手放したらだいぶ世界が変わるだろうなあ。
219デフォルトの名無しさん:2013/07/07(日) 22:25:14.25
JavaFXでも、Data Visualizationで良さげなフレームワークあるなあ

Dex is a JavaFX application which aims to provide a general purpose framework for data visualization.
http://www.javainc.com/projects/dex/Dex.html

だれか、この辺のフレームワークとScalaを使って、カッコいいプレゼンしてくれないかなあ。
220デフォルトの名無しさん:2013/07/08(月) 10:24:37.75
rubyはrailsに名前変えようぜ
221デフォルトの名無しさん:2013/07/08(月) 16:48:26.19
俺に返すつもりならば 捨ててくれ
222デフォルトの名無しさん:2013/07/08(月) 17:44:29.27
223デフォルトの名無しさん:2013/07/08(月) 23:58:19.03
>>215
仕様書でインターフェイスを指定されてるから表面はjavaにせざるをえない
外国の注文もだいたい同じ
224デフォルトの名無しさん:2013/07/09(火) 00:50:24.41
受託は仕方ないだろうが…
225デフォルトの名無しさん:2013/07/10(水) 00:31:51.08
速報
後方互換性の問題でエンプラ断念!らしい

APIの変更はメジャーバージョンのみとなってるけど、そうなるか。
linuxのディストリビューションみたいにLTSがあればいいのかな。
10年20年になると難しいのかな。
226デフォルトの名無しさん:2013/07/10(水) 01:28:14.45
いつの話?
API変更はメジャーバージョンのみって2.10から既にそうだけど
227デフォルトの名無しさん:2013/07/11(木) 01:13:41.04
http://itpro.nikkeibp.co.jp/article/NC/20130705/489423/
scalaを業務で使えるようになるまで最長1ヶ月って

http://www.slideshare.net/ikeike443/scala-conf2013
こんなかんじで上手くいくんだろうか。とりあえずbetter javaなんだろうか。
228デフォルトの名無しさん:2013/07/11(木) 07:42:32.15
また無知蒙昧編集者の曲解フィルタがかかったのか
229デフォルトの名無しさん:2013/07/11(木) 15:35:49.08
>>227 最初は better java でもいいと思う。
でも、関数型の理解がないとすぐに行き詰まる。
230デフォルトの名無しさん:2013/07/11(木) 17:44:09.13
関数型を理解しようと他言語を知るとScalaの冗長さが気になる
231デフォルトの名無しさん:2013/07/11(木) 21:23:26.08
ハイブリッドというと聞こえがいいか、中途半端だからな。
232デフォルトの名無しさん:2013/07/11(木) 23:06:36.57
>>229

せめて、おまいさんがレスした >>227 の記事見てから、意見言えよ。

おまいさん、会議で発言するの禁止、とか言われたことあるだろ。
233デフォルトの名無しさん:2013/07/11(木) 23:24:00.11
>>232
> おまいさん、会議で発言するの禁止、とか言われたことあるだろ。

229 ではないが、この文必要か?あなたが言われたことがあるだけではありませんか?
234デフォルトの名無しさん:2013/07/12(金) 00:08:06.82
>>232 229 なんて一般論述べただけだろ。何でそんな攻撃的なのよ
おまいさん、スレで書き込むの禁止とか言われたことあるだろ。10万年ROMってろwww
235デフォルトの名無しさん:2013/07/12(金) 00:12:12.16
理はあんたにあるけどオウム返しはクールじゃないね
236デフォルトの名無しさん:2013/07/12(金) 00:12:55.37
その目気色悪すぎこっち見んな死ね。その目気色悪すぎこっち見んな死ね。その目気色悪すぎこっち見んな死ね。
その目気色悪すぎこっち見んな死ね。その目気色悪すぎこっち見んな死ね。その目気色悪すぎこっち見んな死ね。
その目気色悪すぎこっち見んな死ね。その目気色悪すぎこっち見んな死ね。その目気色悪すぎこっち見んな死ね。
その目気色悪すぎこっち見んな死ね。その目気色悪すぎこっち見んな死ね。その目気色悪すぎこっち見んな死ね。
237デフォルトの名無しさん:2013/07/12(金) 00:40:52.93
ゆるゆり始まらなかった、、、
238デフォルトの名無しさん:2013/07/12(金) 06:21:25.42
なぜだか自分でも理解出来ないけど、どうしてもScalaは難しいと感じてしまう。
だがらGroovyに浮気してみたけど、こっちを勉強したらしたで、Scalaの型が羨ましくなったり。
まぁ気長に両方やりますかね〜
239デフォルトの名無しさん:2013/07/12(金) 08:20:05.38
scala難しい難しい言われるけどどの辺が難しいのかさっぱり分かんない
ライブラリ書こうと思ったら難しいのは分かるけど使う分にはそんな難しいことないじゃん
みんなscalaに挫折して他言語行くときはscalaのこんな所がクソで愛想が尽きましたクソが!!ってblog記事書いてってよ
240デフォルトの名無しさん:2013/07/12(金) 09:33:39.18
2ch自動まとめをやるための文章要約エンジンをScalaで書いていたが
型とパターン網羅性チェックがあればテストは要らないと信じて2000行ほど突き進んだ所で挫折
241デフォルトの名無しさん:2013/07/12(金) 09:51:08.39
http://www.slideshare.net/ikeike443/scala-conf2013
途中で「breakableは例外で実装されているから駄目」って言われてるけどなんでなのかね?
C#と違って速度的にはJavaの例外はかなり速い(例:http://mihito.main.jp/?page_id=243
他になにか理由があれば知りたい
242デフォルトの名無しさん:2013/07/12(金) 10:52:05.97
>>240
それお前が勝手に変な勘違いしただけじゃねーか、テストは書けよ
はい次!
>>241
例で出してるコードtry/catchで囲んであるだけで例外投げてねえじゃん
例外が重いのってスタックトレース生成する部分だろ
243デフォルトの名無しさん:2013/07/12(金) 11:31:04.94 ID:LfRygb8i!
>>242
すまん例外の例は良くなかった
大域脱出にだけ使うJavaの例外は速いと思ってたけど、今調べると速い場合も遅い場合もあるのね
http://stackoverflow.com/questions/4838075/speed-of-exceptions-in-java
http://stackoverflow.com/questions/299068/how-slow-are-java-exceptions
244デフォルトの名無しさん:2013/07/12(金) 15:16:03.72
>>239
少し考えてみたけど、Scalaは難しい事をしようと思うと「難しい」って感じる。
で、今までの他のメジャーな言語(自分が使える言語)で同じようなことをしようとしたら、先に「めんどくさい」と感じてしまう。その「めんどくさい」の先にはやっぱり「難しい」が待っているけどね。
Scalaは「めんどくさい」を取り除いてくれたんだけど、その結果いきなり難しさと対峙しなければならなくなった。
だから難しさなインパクトが強いのかな〜って。
245デフォルトの名無しさん:2013/07/12(金) 15:38:07.20
例外をコンパイラが最適化する方法はMLで盛んに研究されてたよ、かなり昔に。
246デフォルトの名無しさん:2013/07/12(金) 18:23:07.31
Scalaが難しいって言われるのはやさしい本が無いせいじゃね?
特にコップ本がよくない
「○○について詳しくは○章で説明する」が延々と繰り返されてげんなりする
どこまで読んでもわかった気になれない→Scala難しい
誰かが「すごいScalaたのしく学ぼう!」を書けば解決するはず
247デフォルトの名無しさん:2013/07/12(金) 19:07:10.32
Javaは趣味程度の新卒でも、業務でScala使っているというのに、おまえらときたらw

ニコニコAndroid(サーバ編) - Scalaを業務で使って
http://www.slideshare.net/daichimashima/2013jjug-spring


難しく考えないで、使ってみると良いよ。
最初は、みんな初心者だよ。
248デフォルトの名無しさん:2013/07/12(金) 19:13:49.93
業務で使わせろや、つか仕事くれや!

これでいいですか?
249デフォルトの名無しさん:2013/07/12(金) 21:15:00.31
マ板行けよ
250デフォルトの名無しさん:2013/07/12(金) 22:02:12.71
JavaとScalaその他の言語混在プロジェクトのビルドどうしている? Maven?
251デフォルトの名無しさん:2013/07/12(金) 23:27:55.22
>246
「Scala逆引きレシピ」じゃダメなん?
252デフォルトの名無しさん:2013/07/13(土) 00:05:21.76
>>247
業務で使うならいくらでもできる

「納品」がcやjavaじゃないとダメなんだから、我々ではどうにもできない
253デフォルトの名無しさん:2013/07/13(土) 04:41:44.87
受託ではなく自社サービス開発でScalaを使い始めた部署に配属されたラッキーな例だね。
社内ノウハウのない新規技術を採用するにしても上手くプロジェクトの方向性を握って
マネージできる人が上にいたんだろうな。

あとAPIのドキュメンテーションがWikiなのはちょっと意外だった。
APIのデザインのたたき台を作るためにWiki上にAPIの仕様を一端書き起こすけれども
開発や運用のフェーズに入ったら基本的にはソースのコメント等から自動生成した
ドキュメントを参照するようにしている。
254デフォルトの名無しさん:2013/07/13(土) 06:36:19.23
>>251
あれ最初に読む本じゃなくね?
他の入門書読んだ後、手元に置いておくには最適だが
255デフォルトの名無しさん:2013/07/13(土) 08:51:53.37
>>253
「Scalaが廃れない」という前提付きの話ですな
256デフォルトの名無しさん:2013/07/13(土) 16:48:53.19
>>246 Scala の本が少ないからな、初心者が自分に合う本を見つけるのは難しいかも

俺もコップ本はくどくてだめだった。オライリー本はすんなり読めたんだが
257デフォルトの名無しさん:2013/07/13(土) 18:32:09.69
うちの部署は普通に Scala 使ってるけどな。一般にはまだなんかな
258デフォルトの名無しさん:2013/07/13(土) 20:36:05.78
表に出てこないだけかと。いちいちscala使ってます発表する会社ばかりじゃないから
259デフォルトの名無しさん:2013/07/14(日) 01:35:31.34
成果物そのものはscalaじゃないが、成果物を作るためにならscalaを極限まで使ってる
というか、使えるライブラリやコード片があるなら、ありとあらゆる言語を使ってる
260デフォルトの名無しさん:2013/07/14(日) 03:42:54.03
>>259 スレチですまんが、PrologやLisp も利用可能?これは茶化してはいない、好きな言語なので
261デフォルトの名無しさん:2013/07/14(日) 04:42:49.31
>>260
メモに nomi(20130506夜, 2000) みたいなデータを1万件くらい追加していって、prologで検索するならやってる
lispは学部の演習で作った雑用プログラムをいまだに使い続けてる
262デフォルトの名無しさん:2013/07/16(火) 21:46:41.70
trait Thing[-A, +B] {
type X

def source(a: A): X
def sink(a: X): B

def apply(x: X): X
}

def bippy(t: Thing[Int, String]) = {
val state: t.X = t source 42
val state2: t.X = t(state)
t sink state
}

これの意味がよくわからん。なんで.X使えるの?
263デフォルトの名無しさん:2013/07/16(火) 23:23:45.15
object o2 { println("constructor test"); def f1():Unit ={}; def f2():Unit = {}; }



この "constructor test" の表示がo2作成時一回しか出ないみたいなんです。
o2作成時には 実行しないで
f1() や f2() 呼ぶたびに逐一実行するようにしたいのです
メンバの関数を呼ぶたびに呼ばれる 所属オブジェクトの共通関数みたいなものって作れないんでしょうか?
継承使うべきでしょうか
264デフォルトの名無しさん:2013/07/17(水) 00:30:36.82
> この "constructor test" の表示がo2作成時一回しか出ないみたいなんです。

そりゃそうだろ … object の仕様なんだから
265デフォルトの名無しさん:2013/07/17(水) 01:26:51.18
>>262
dependent method types
266デフォルトの名無しさん:2013/07/17(水) 01:30:06.87
違った。ただのパス依存型
267デフォルトの名無しさん:2013/07/20(土) 21:41:28.36
def createTempDir = {
def dir(i: Int) = new java.io.File("/tmp", "foo"+i)
(0 to 10000).collectFirst {
case i if dir(i).mkdir => dir(i)
}.get
}

-------------------------
これ実行すると、

-------------------------
scala.MatchError: 3 (of class java.lang.Integer) # 3 は実行するたび増える
at scala.PartialFunction$$anon$1.apply(PartialFunction.scala:248)
at scala.PartialFunction$$anon$1.apply(PartialFunction.scala:246)
at Test$$anonfun$createTempDir2$1.applyOrElse(Test.scala:30)
at Test$$anonfun$createTempDir2$1.applyOrElse(Test.scala:30)
at scala.runtime.AbstractPartialFunction$mcLI$sp.apply$mcLI$sp(AbstractPartialFunction.scala:33)
at scala.runtime.AbstractPartialFunction$mcLI$sp.apply(AbstractPartialFunction.scala:33)
at scala.runtime.AbstractPartialFunction$mcLI$sp.apply(AbstractPartialFunction.scala:25)
at scala.collection.TraversableOnce$$anonfun$collectFirst$1.apply(TraversableOnce.scala:133)
at scala.collection.TraversableOnce$$anonfun$collectFirst$1.apply(TraversableOnce.scala:131)
at scala.collection.Iterator$class.foreach(Iterator.scala:727)
at scala.collection.AbstractIterator.foreach(Iterator.scala:1157)
at scala.collection.TraversableOnce$class.collectFirst(TraversableOnce.scala:131)
at scala.collection.AbstractTraversable.collectFirst(Traversable.scala:105)
at Test$.createTempDir2(Test.scala:30)


ってなるんだけど、なんで?
268デフォルトの名無しさん:2013/07/21(日) 02:07:28.66
>>267
ガード節で副作用を起こしてるから

collectFirstのソース見ればわかるが部分関数に適用する前にisDefinedAtで適用しても大丈夫か判断している
isDefinedAtの呼び出しでディレクトリが作成されてガードを通るが、
実際に部分関数を適用したら既にディレクトリが作成されているのでmatchしない、エラー
269デフォルトの名無しさん:2013/07/21(日) 03:37:39.76
なるほど・・・
270267:2013/07/21(日) 05:38:40.45
Stream 使うわ。

def createTempDir = {
def dir(i: Int) = new java.io.File(scala.util.Properties.tmpDir, "foo"+i)
Stream.range(0, 10000).map(dir).find(_.mkdir).get
}
271デフォルトの名無しさん:2013/07/21(日) 06:52:53.28
練習とかじゃなくてJava7ならFiles.createTempDirectory使えば?
272270:2013/07/21(日) 20:20:50.97
>>271
うん、それは正論なんだけど、いまだにJava5っていう糞環境サポートしなきゃならんのよ
273デフォルトの名無しさん:2013/07/23(火) 15:08:16.15
>>227
日経コンピュータ7/11号の紙面みたら
ここの部分、もう少し分かりやすく書いてあった。
274デフォルトの名無しさん:2013/07/24(水) 02:31:25.52
日経コンピュータとかまだ読んでる人いるのかw
275デフォルトの名無しさん:2013/07/24(水) 09:02:01.99
定期購読しなくても、取り扱いある本屋にいけば置いてあって立ち読みできるよ。
276デフォルトの名無しさん:2013/07/24(水) 09:14:52.39
輪ゴムとかで縛ってはいない?
277デフォルトの名無しさん:2013/07/24(水) 12:17:20.60
ビキニおねーちゃんのクリアファイルが付くと紐で縛られるな
278デフォルトの名無しさん:2013/07/25(木) 02:12:30.33
>>275 確かに日経コンは本屋においてあるな
279デフォルトの名無しさん:2013/07/25(木) 07:37:22.27
日経ソフトウェアは、ここ1,2年前から絶好調らしいよ。
毎回、広く浅いテーマでやっているけど、月刊誌としてはそのほうが買いやすいからな。
Scalaも頻繁に踏襲されている。
280デフォルトの名無しさん:2013/07/30(火) 23:05:53.07 ID:/0Pc6ORx!
val (a,b) = try { 1 / 0; (1, 2) } catch { case e => println(e) }
これがコンパイル通るscalaは糞
281デフォルトの名無しさん:2013/07/31(水) 02:07:26.88
>>280
どうなればいいの?


関係ないけど、

object A { val 1=2 }

のが衝撃的だよな。言語仕様上コンパイルできて正解だけど。
282デフォルトの名無しさん:2013/07/31(水) 04:03:19.38
>>280 コンパイル通るのはそんなに変じゃないと思うが…
283デフォルトの名無しさん:2013/07/31(水) 07:53:54.64 ID:BK2WUR4A!
scalatraでリクエスト元のIPを見たいんですけどどうしたらいいです?
284デフォルトの名無しさん:2013/08/01(木) 02:35:02.32
>>280
(絶対に失敗するけど)パターンマッチ式だからコンパイル通るんだよな。俺も
言語仕様書読んで始めて試したときは衝撃だった

>>280はたぶん、(1, 2)はTuple2[Int, Int]で、println(e)はUnitだから型エラーになって欲しかった
んじゃないかね。実際はTuple2[Int, Int]とUnitの共通の祖先型のAnyになって、んでもってval (a, b) = ...
は実際にはパターンマッチング+変数宣言の省略だから型エラーにならないわけだが。
285デフォルトの名無しさん:2013/08/01(木) 02:41:54.94
>>283
requestでHttpServletRequest取れるから
http://www.scalatra.org/2.0/api/index.html#org.scalatra.ScalatraFilter
あとは、HttpServletRequest#getRemoteAddr() で取得できる
http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html
Scalatra自体はServletの薄いラッパーだから、直接できない事があったらServlet API
調べたほうが早いと思う
286デフォルトの名無しさん:2013/08/17(土) 22:13:02.82
scala cookbook
http://scalacookbook.com/
8/1にレシピ本出てた。。

scala cookbookで検索したら、なんか別のやつも引っかかった。
http://xerial.org/scala-cookbook/
287デフォルトの名無しさん:2013/08/29(木) 11:37:26.50
またsubtypingで時間を無駄にした
if (List(("foo",1)).maxBy{case(_,x)=>x}==1){
println("何故か表示されない")
}
288デフォルトの名無しさん:2013/08/29(木) 11:50:17.05
maxByで返ってくんの(String, Int)だろ
REPLで実行してみたら親切に警告出してくれるじゃねーか
<console>:8: warning: comparing values of types (String, Int) and Int using `==' will always yield false
289デフォルトの名無しさん:2013/08/29(木) 12:18:41.57
レガシーコードでしかも警告数十個出てるから見逃した
テストやリファクタリングなどちゃんとしたいがなかなか現実は厳しい
scalaの型がこの状況を救ってくれるかと思ったらそうでもなかった
290デフォルトの名無しさん:2013/08/30(金) 00:21:28.11
> 警告数十個出てるから見逃した
救われる気のない奴が救われる訳ないって話?

警告全部潰したら救われるかというとそんなことないだろうけど
まずそこからじゃないの
291デフォルトの名無しさん:2013/08/30(金) 05:59:35.87
scalaでレガシーコードの保守とかモチベーション保ちにくそう。
292デフォルトの名無しさん:2013/08/30(金) 09:48:03.32
JavaからScalaへの自動変換ツール作る方がビジネスになるよな。
おれだったら、 IntelliJ IDEA の変換機能使いまくって
プロジェクトリーダーの幻想をぶちのめしてやる。
293デフォルトの名無しさん:2013/08/30(金) 13:03:34.18
ScalaからJavaは分かるけど、JavaからScalaは無理でしょう
むしろ、classファイルからScalaの方が簡単な気がする
294デフォルトの名無しさん:2013/08/30(金) 20:32:34.54
Twitter社によるScala言語のオンライン講座「Scala School!」
2013 年 8 月 20 日
http://www.softantenna.com/wp/software/scala-school/

ま、Scala以前に英語のできないオマエラには無理だがや。
http://twitter.github.io/scala_school/
295デフォルトの名無しさん:2013/08/31(土) 18:42:26.92
8/20どころか数年前からあるだろ
296デフォルトの名無しさん:2013/09/01(日) 01:55:23.35
scalaは関数型言語といえるの?
297デフォルトの名無しさん:2013/09/01(日) 03:23:35.91
いやマルチパラダイム言語であり非純粋関数型言語だけど
純粋関数型言語しか認めない主義?
Haskell厨なら巣にお帰り
298デフォルトの名無しさん:2013/09/01(日) 05:00:37.77
>>289
CコードやJava 5より前のコードの保守とかならともかく
Scalaの警告は基本潰すの前提で考えた方がいいよ
エッジケースはあるけど、scalacが出す警告のほとんどはあまり考えずに指示通りに
簡単に潰せるから警告潰しといた方が良い
299デフォルトの名無しさん:2013/09/01(日) 05:06:07.62
>>293
可読なScalaソースを吐くという前提が必要なければそんなに難しいこたーない
IntelliJ IDEAのJava to Scala機能が不完全なのは、ある程度可読なScalaコードに
変換しようと頑張ってるからであって…。ただ、protected staticとか言語仕様上
等価なコードに変換するのが無理ぽなものは一部にあるといえばある
300デフォルトの名無しさん:2013/09/01(日) 05:10:08.71
ただまあ、別の問題として非可読なScalaコード吐いてどうすんのよ、という話はある
こんなに簡単にScalaにmigrationできますというデモンストレーションで採用する説得力上げるとか?
301デフォルトの名無しさん:2013/09/01(日) 18:08:22.17
単にJavaのままで混在できますのほうがマシだと思う
302デフォルトの名無しさん:2013/09/01(日) 19:12:49.20
どんなに優れた自動変換ツールであっても
ドキュメントと人がそう簡単には対応できないんじゃ?
逆にそれに対応できるリソースがある会社にツール売っても儲からんだろうよ
303デフォルトの名無しさん:2013/09/01(日) 20:03:21.76
COBOLのようにくたびれたオサーンにしか扱えない言語には決してならないと
胸を張って言えるものだけが Intelli J IDEAの変換機能に石を投げよ
304デフォルトの名無しさん:2013/09/01(日) 20:32:04.15
>>302
javaのコードで納品するから問題ない
305デフォルトの名無しさん:2013/09/02(月) 18:21:41.57
>>303
COBOLとの比較する意味がよくわからないな
IntelliJ IDEAのJava to Scala機能は、人手でJavaから可読なScalalコードに書き換える手間を減らすための
補助ツールであって、変換したものをそのまま保守する前提の機能じゃないよ
306デフォルトの名無しさん:2013/09/03(火) 09:37:12.26
COBOL技術者の確保が難しくなって管理されなくなったレガシーコードをどうするかという問題が
かつてCOBOL->Javaトランスレータという製品を生んだ歴史的経緯のことを言ってるんじゃないの?

どんなに汚い実装だろうとプログラムなんて動けば一緒、という層には売れるんだろうな。
健康食品みたいね
307デフォルトの名無しさん:2013/09/04(水) 16:40:16.34
汚いより美しいコードがマシに決まってるだろ
プログラマならそう考えるべきじゃないのか
308デフォルトの名無しさん:2013/09/04(水) 18:52:17.89
>>307
は?そのレスはどの文脈から出てきたわけ?
309デフォルトの名無しさん:2013/09/04(水) 21:22:11.47
>>307
納入は汚いコードで
310デフォルトの名無しさん:2013/09/06(金) 01:00:33.65
こんな優秀な言語がなぜ普及しないのか不思議
311デフォルトの名無しさん:2013/09/06(金) 01:47:34.71
既にある種のニッチは抑えてると思うけど、それよりメジャーな路線というかSIerへの普及に行こうとすると
結局Javaがライバルとして立ちはだかるからねえ。おそらく、Javaと同じ程度に普及しようとしたらJava並に
なるしかないので、開発が継続されてそれなりに使われれば十分と最近思っている自分
312デフォルトの名無しさん:2013/09/06(金) 07:30:55.40
- 意識の高いSIerがいない(統計的観点)
- SIerは衰退しました(滅亡論)
- そんな業種なかったんや!(UMA説)
313デフォルトの名無しさん:2013/09/06(金) 07:48:48.15
Java8がかなり強化されるから逆に揺り戻しが来ると思う。
314デフォルトの名無しさん:2013/09/06(金) 10:37:29.05
Javaは土台が腐っているから無理
315デフォルトの名無しさん:2013/09/06(金) 13:48:25.08
なんでJavaで造ってしまったのだろう
316デフォルトの名無しさん:2013/09/06(金) 14:40:10.34
ソースコードを鑑賞するという文化を持たない未開人のせいだ
317デフォルトの名無しさん:2013/09/06(金) 21:13:31.73
>>315
あなたたちはJavaAPIやApacheCommonsの魅力を知らない
318デフォルトの名無しさん:2013/09/07(土) 20:20:18.84
Java/JVM資産の恩恵要らない分野ならHaskell/OCaml/F#が既にあるじゃん
319デフォルトの名無しさん:2013/09/07(土) 23:05:03.42
Javaと連携させる上ではJavaを意識せざるを得ないが
言語自体は言うほどJavaに縛られてないと思うんだが
320デフォルトの名無しさん:2013/09/07(土) 23:23:15.26
JavaというよりJVMに縛られてる気がする
末尾再帰なしとか
321デフォルトの名無しさん:2013/09/07(土) 23:48:52.07
末尾再帰なしってどゆこと?
322デフォルトの名無しさん:2013/09/08(日) 00:10:35.10
一般的な末尾再帰の最適化ができないことを言っているんだと思う
たとえば、f と g が相互に呼び出し合っていて相互に再帰的である場合に
それを単なるジャンプに書き換えるとか。でも、これ自体は実際には大して
問題にならんけど。
323デフォルトの名無しさん:2013/09/08(日) 00:23:00.55
ClojureやJRubyやOCamlJavaのようなのと比べると縛られてるというか
意図的にJavaに寄せてるよね
324デフォルトの名無しさん:2013/09/08(日) 00:29:12.78
ClojureはJVMに十分縛られてると思うぞ。自己末尾再帰の変わりに loop/recur使うところとか
Javaのメソッドを簡単に呼び出すためのspecial formとか。JRubyとかはgemとかも使えて、Java
はあくまでFFI的な感覚だけど。OcamlJavaは使ったことがないのでわからない
325デフォルトの名無しさん:2013/09/08(日) 01:34:22.95
末尾再帰最適化なしは、紙に書いたアルゴリズムを何も考えずにそのまま実装すると穴にはまる
326デフォルトの名無しさん:2013/09/08(日) 14:14:31.95
相互再帰とか何も考えずに実装できるほど頭良くねーよ
327デフォルトの名無しさん:2013/09/09(月) 08:49:05.28
Set#containsの実装がtraitで入り組んでて見つからない
328327:2013/09/09(月) 09:01:07.97
自己解決した
要素5個以上のSetはデフォルトでimmutable.HashSetが使われるのでHashSet.scala見ればよかった
329デフォルトの名無しさん:2013/09/09(月) 23:17:48.28
java だと
mac win linux androidに対して汎用性の高いコードを書きやすいと聞きました
scalaも同様どうでしょうか?
330デフォルトの名無しさん:2013/09/09(月) 23:34:36.46
>>329
OSやマシンの互換性はほとんど無視していい
アンドロイドだけはメモリとかを気にする必要があるかもしれない

それよりも、JVMやJREのバージョンを気にする必要がある
331デフォルトの名無しさん:2013/09/09(月) 23:39:15.35
>>330
ありがとうございます
332デフォルトの名無しさん:2013/09/09(月) 23:44:23.10
apache commonsとかの外部ライブラリを使ってる場合もjreのバージョンで使えなくなることがあるから要確認
333デフォルトの名無しさん:2013/09/11(水) 05:29:21.84
コンパイル時正規表現チェックを導入したいがmacroがまだ枯れてなさそうで躊躇してる
334デフォルトの名無しさん:2013/09/12(木) 00:11:21.09
IntelliJさんならコンパイル時チェックどころか編集時チェックですわ
335デフォルトの名無しさん:2013/09/14(土) 05:21:43.30
>>333
マクロが枯れてないのはその通りだがコンパイル時正規表現くらいならで心配せんでもいいよ。実際書いたことあるけど、それでおかしくなったりはしてない
色々なフレームワークやライブラリ作ってる作者たちも既にいくつもマクロライブラリや既存ライブラリのマクロ対応進めてるし
最新のマクロ機能を使えるようにするマクロパラダイスなんてコンパイルプラグインなんてのも公式にある http://docs.scala-lang.org/ja/overviews/macros/paradise.html
336デフォルトの名無しさん:2013/09/14(土) 12:41:30.42
マクロは廃止した方がいいと思うのは私だけでしょうか
337デフォルトの名無しさん:2013/09/14(土) 13:04:55.79
自分が理解できないから?
338デフォルトの名無しさん:2013/09/14(土) 13:26:18.98
マクロを廃止した方がいい理由

1. コード生成コードだから、抽象度が高く、本質的に難しい(展開されたコードと、そのコードの動作のチェックが必要)
2. 抽象度が高くなるパーツをマクロで表現するためではなく、タイピングが少なくする目的でマクロを使う(マクロ使用のガイドラインの不徹底)
3. 抽象度を無視したマクロ群は、後からまとめるのが困難
4. 外部の人が理解するときは、ごちゃごちゃしたマクロ定義を読む手間が必要
5. とにかくマクロ周りはバグを見つけにくい
339デフォルトの名無しさん:2013/09/14(土) 13:53:56.66
それは廃止した方がいいじゃなくて、(チーム内で)使用しない方がいい
じゃないのか?
340デフォルトの名無しさん:2013/09/14(土) 13:59:06.84
コードの8割はネットからのコピペという現実
341デフォルトの名無しさん:2013/09/14(土) 14:47:28.60
自己紹介乙
342デフォルトの名無しさん:2013/09/14(土) 15:14:01.79
普段使いでマクロを使おうとは思わないな。
343デフォルトの名無しさん:2013/09/14(土) 15:20:53.88
マクロを容認するとしても、ネットにアップしてOKしてくれるような、マクロの健全さを承認するシステムが欲しい
344デフォルトの名無しさん:2013/09/14(土) 15:22:01.70
普段使いが何を指すのか分からんが
ライブラリ作者以外は使わんでいいだろう
345デフォルトの名無しさん:2013/09/14(土) 15:25:27.50
バカほど使わなくて良い機能を見つけて使いだがる
346デフォルトの名無しさん:2013/09/14(土) 15:26:04.20
>>344
アプリケーション書くときとかね。
マクロ使いたいくらいなのだから、何か抽象度の高いことをしたい時以外に出番ないだろうし。
347デフォルトの名無しさん:2013/09/14(土) 15:37:48.88
23のタプル
348デフォルトの名無しさん:2013/09/14(土) 16:21:30.79
型()ありのマクロっていうと、C++ Templateだとおもうが、scalaのも型ありなんだよね?
http://eed3si9n.com/ja/metaprogramming-in-scala-210
349デフォルトの名無しさん:2013/09/14(土) 16:26:29.90
括弧の中に、総称型?って入れよと思ってスマホいじってる途中に送ってしまった。

clojureのコーディングルール
http://www.atmarkit.co.jp/news/200909/07/lltv02.html
https://github.com/totakke/clojure-style-guide/blob/ja/README.md#マクロ
350デフォルトの名無しさん:2013/09/14(土) 23:04:24.96
>>338
2, 3, 4., 5.は主にCのプリプロセッサマクロみたいにチームメンバが安易に使う事を危惧してるんだろうけど
Scalaのマクロは今のところ書くのが少々面倒だし、マクロ定義を別のコンパイル単位にしないといけないし
(sbtだとシングルプロジェクトだったのをマルチプロジェクトに分けないといけないということ)で
懸念してるような事態はそんなに起きないと思うよ。ライブラリ/フレームワーク作者が主に使うためにある機能

1.はライブラリ/フレームワーク作者がマクロをちゃんとデバッグしてくれないと困るとは言える
351デフォルトの名無しさん:2013/09/15(日) 11:06:44.83
scalaって、仕事で使うとしたらどんな場面で使うのでしょうか?
個人ツール?
適したプロジェクトがある?
352デフォルトの名無しさん:2013/09/15(日) 11:41:34.38
他人に聞いてるうちは無理
353デフォルトの名無しさん:2013/09/15(日) 13:39:15.71
>>351
大学
354デフォルトの名無しさん:2013/09/15(日) 15:03:11.13
>>351
頭の体操
朝や夕方にラジオ体操やる会社あるだろ
あれと同じだよ
355デフォルトの名無しさん:2013/09/15(日) 15:08:14.16
val s = 超長い文字列
List(s, s).distinct
これ文字列sに比例する計算量かかりますか?
356355:2013/09/15(日) 15:15:49.29
参照先が同じでも内容の比較までしてしまうのかという質問です
357デフォルトの名無しさん:2013/09/15(日) 17:49:52.57
>>356
apiで上がってるソース見てみたけど、ハッシュの比較して同じなら同じっぽいよ?
まあ、俺が読むより自分で読んだ方が信頼できると思うけど。

質問です。
ScalaのParsersでパース処理がしたいのですが、書き方が分からない部分があります。
普通のテキストの中にxml風のタグ部分が出現するのですが、
その部分をパースする方法がわかりません。
<tagA attr1="1xx" attr2="y2y">123<tagB>zzz</tagB></tagA>
このような感じで、tagAの中の123だけ取得したいです。
tagAの属性とtagBそのものはあったり無かったりなので、目標としては
"<tagA" ~> (anyString ?) ~> numbers <~ (anyString ?) <~ "</tagA>"
みたいな感じでパースしたいのですが、このままだと数値が来る前に
2番目のパーサーが全ての文字列を読みつくしてしまって上手くいきません。

「次の要素がくるまではどんな文字でも読み飛ばす」みたいに書く方法を教えてください。
358デフォルトの名無しさん:2013/09/15(日) 18:30:36.88
素直に">"で切ればええんちゃう
というかそれ以前にSAXかPullParserでも使った方がいいんじゃ
359デフォルトの名無しさん:2013/09/15(日) 19:04:33.81
何一つ頭を使わずに
isTagABegin~isNum~isTagAEnd | isTagABegin~isNum~isTagBBegin~isStr~isTagBEnd~isTagAEnd
360デフォルトの名無しさん:2013/09/15(日) 19:23:22.84
>>357
ハッシュ関数と同じ長さの文字列の比較はそれぞれ文字列の長さ分の時間かかるから
つまるところ356の言うとおりになるな
361デフォルトの名無しさん:2013/09/15(日) 19:25:36.07
ワロタwせめて再帰構造使って差し上げろw
362デフォルトの名無しさん:2013/09/15(日) 19:33:04.74
>>360
ならないだろ。
Hash計算は最初の一回だけ。
363デフォルトの名無しさん:2013/09/15(日) 20:05:29.59
みなさん返信ありがとうございます。

>>358
全然フォーマットの違うテキストの中にxmlっぽい構文が出てくるので、
そもそもその構文かどうか自体が"<tagA"が来たらって感じで判断したいんですよ。
「Scala PullParser」で検索してみたんですがxmlっぽいのしか見つかりませんでした。
すみません。

>>359
isTagABeginってどういう感じで定義したらいいでしょうか?
そもそも難しい使い方が分からないので scala.util.parsing.combinator.Parsers しか使えてないのですが、
"<tagA"で始まって ~ 0文字以上の連続があって ~ ">"が出てくるまで
っていうパーサーってどうやって作るんですか?
もしかしたら凄く見当違いな事を言ってるかもしれませんが、
宜しくお願い致します。
364デフォルトの名無しさん:2013/09/15(日) 20:06:31.38
あぁすまん356読み落とした
インスタンスごとに1回はhashCodeの計算走るからsの長さには比例するけど、同一インスタンスに対するhashCodeはキャッシュされるし
比較はまず参照比較されるな
365デフォルトの名無しさん:2013/09/16(月) 00:26:22.42
始めたばっかりだけど、なんかこの言語、類推が通用しにくい気がする
これがいけるならこう書けるだろうと適当に書いてみるとエラー連発
他の言語だとここまで気にならなかったんだけどなあ
366デフォルトの名無しさん:2013/09/16(月) 00:32:51.27
マルチパラダイムで、色んな書き方が出来るためじゃない?
使ってればすぐ慣れるよ
367デフォルトの名無しさん:2013/09/16(月) 08:19:32.70
マルチパラダイムはやろうと思えばC言語でも実現可能
それを文法レベルで採用したのが成功するかは、まだ分からない

個人的には、教育コストで挫折して、文法仕様でパラダイムを絞り込む方向に行く気がする
368デフォルトの名無しさん:2013/09/16(月) 08:46:01.50
>>363

試しにStandardTokenParserで考えてみたけど詰まった
tagに囲まれたtextをマッチさせるためにはStandardTokenParserを拡張しないとダメなのか
そこだけRegexParserをもってきたいけど、造りが違うのでいいとこ取りできないような

-------------
import scala.util.parsing.combinator.syntactical.StandardTokenParsers

object TagParser extends StandardTokenParsers {
lexical.delimiters ++= List("<", "</", ">", "=")
type Tag = Parser[(String, (Seq[(String, String)], Seq[_]))]
def expr = tag.*
def tag: Tag = "<" ~> ident ~ attr.* ~ ">" ~ tag.* ~ "</" ~ ident <~ ">" ^^ {
case name ~ attrs ~ ">" ~ tags ~ "</" ~ end if name == end => name -> (attrs, tags)
}
def attr = ident ~ "=" ~ stringLit ^^ { case name ~ "=" ~ attr => name -> attr }
def parse(s: String) = phrase(expr)(new lexical.Scanner(s))
}

// TagParser.parse("""<tagA attr1="1xx" attr2="y2y">123<tagB>zzz</tagB></tagA>""")

TagParser.parse("""<tagA attr1="1xx" attr2="y2y"><tagB></tagB></tagA>""")
/****
scala> :load Tag.scala
Loading Tag.scala...
import scala.util.parsing.combinator.syntactical.StandardTokenParsers
defined module TagParser
res1: TagParser.ParseResult[List[(String, (Seq[(String, String)], Seq[_]))]] = [1.51] parsed: List((tagA,(List((attr1,1xx), (attr2,y2y)),List((tagB,(List(),List()))))))
***/
369デフォルトの名無しさん:2013/09/18(水) 00:22:06.38
Java8でよくない?
370デフォルトの名無しさん:2013/09/18(水) 00:39:45.96
よくないにゃ
371デフォルトの名無しさん:2013/09/18(水) 00:59:01.40
そうだにゃ
372デフォルトの名無しさん:2013/09/18(水) 01:20:21.75
>>369
このスレで劣化Scalaを勧める意味がわからない
373デフォルトの名無しさん:2013/09/18(水) 02:00:47.25
8のコレクションやinterfaceの改善とラムダ式だけで十分ってことはないが
コンパイル速度、メモリやディスク消費、IDEサポート等で劣化Scalaでもないな
374デフォルトの名無しさん:2013/09/18(水) 02:23:57.60
>>373
ディスク消費ってなんだよド素人
375デフォルトの名無しさん:2013/09/18(水) 21:41:51.10
rubyのnokogiriみたいなライブラリありますか?
376デフォルトの名無しさん:2013/09/18(水) 23:24:36.53
Scalaはdisk footprintもmemory footprintも気にしてねぇじゃないか
377デフォルトの名無しさん:2013/09/19(木) 04:41:25.66
disk footprintはどっこいだろう。scala-library.jarがデカいのはあるにせよ(2.11でかなり分割されるが)
memory footprintに関してはscalacはメモリ食いなのは確か。ユーザが作った普通のScalaプログラム
がメモリ喰いになるかは作り方しだい
378デフォルトの名無しさん:2013/09/19(木) 04:46:57.98
Rubyのnokogiriみたいなのというと、HTMLパースしてスクレイピングしたいとか?
Scalaでやるならdispatch + Java用のHTMLパーサライブラリ(のラッパ)使うのが無難かな
LiftにはHTML5パーサあるけど単独のモジュールになってないしな…
379375:2013/09/19(木) 22:55:46.11
ありがとございました
380デフォルトの名無しさん:2013/09/21(土) 18:44:04.95
Scala の Emacs開発環境 ensimeを使えている人はいます?
https://www.dropbox.com/sh/ryd981hq08swyqr/V9o9rDvxkS/ENSIME%20Releases
から最新のensime をダウンロード・インストールして、
sbt で、generate ensime して、.ensime ファイルを生成して、
M-x ensime で接続してみたのですが、*inferior-ensime-server* にて、

Starting up Ensime...
Environment:
OS : Mac OS X
Java : Java HotSpot(TM) 64-Bit Server VM 23.25-b01, Java(TM) SE Runtime Environment 1.7.0_25-b15
Scala : version 2.10.0
Ensime : 0.9.8.9
Project waiting for init...
Server listening on 51186..
Wrote port 51186 to /var/folders/85/d7y_wt8n2rl40h74fsl6gcx00000gq/T/ensime_port.1928.
Got connection, creating handler...

Handling RPC: (swank:connection-info)
Writing: (:return (:ok (:pid nil :implementation (:name "ENSIME-ReferenceServer") :version "0.8.6")) 2)
`)' expected but `(' found
Writing: (:reader-error 203 "nil")

となってEmacs側がエラーになります。原因が分かる人はいますでしょうか?
381デフォルトの名無しさん:2013/09/21(土) 22:48:36.12
>>368
ありがとう。結局StandardTokenParserで">"以外の繰り返しを取る事にしました。
もっといい方法があるんだろうなぁ。
382デフォルトの名無しさん:2013/09/22(日) 03:23:24.45
http://www.infoq.com/jp/news/2011/02/lift-jruby

私は Scala が好きです。Scala は私のお気に入りのプログラミング言語なのです。
これまで数多くの開発組織で,Scala に関する話をしてきました。
しかしその後の Scala の普及状況を見たとき,私はこの言語が Ruby や,
あるいは Python の採用レベルにさえも達しそうもないことに気付いたのです
383デフォルトの名無しさん:2013/09/22(日) 05:44:52.79
いまさらそんな古い話持ってこられても…
まあその後、Pollakさん、Typesafeが公式にPlay 2推しした影響か色々あってScalaコミュニティの中心とは
距離置いた感じだけど、なんだかんだで今もLiftにコミットし続けているのであった
384デフォルトの名無しさん:2013/09/22(日) 07:03:48.84
2年以上前じゃねえか
もう何回貼られてんだろこれ
385デフォルトの名無しさん:2013/09/22(日) 15:16:26.90
Scalaが2.7とかだった頃だっけ
懐かしいなw
386デフォルトの名無しさん:2013/09/28(土) 20:47:08.81
頻繁に使用するclassをnewを書くのが面倒くさいという理由だけで
case classにするのは間違っていますか?
ちなみにそのclassはパターンマッチには全く利用しません
387デフォルトの名無しさん:2013/09/28(土) 21:39:11.17
そろそろタイピングが面倒臭いという理由でコーディングスタイルを変更するのはやめにしませんか?
388デフォルトの名無しさん:2013/09/28(土) 22:45:01.22
objectにapply書けばいいじゃん
389デフォルトの名無しさん:2013/09/28(土) 23:07:10.35
マルチパラダイムって、ようするに、varとvalがあるってだけだよね
390デフォルトの名無しさん:2013/09/28(土) 23:46:56.10
戻り値のあるメソッド内で例外をスローしようとしたら、
メソッドの戻り値の型と一致しないというエラーが出る
どうせthrowで抜けるから本来は戻り値の型なんて意味ないはずだよね
とりあえず(throw e).asInstanceOf[[A]にしてるけど、普通はどうやるの?
391デフォルトの名無しさん:2013/09/29(日) 00:30:10.01
おい>>292あたりからだべってたJava to Scalaコンバータが本当に出てきたじゃねーか
http://javatoscala.com/
392デフォルトの名無しさん:2013/09/29(日) 00:57:31.04
>>390
throw で抜けるときは戻り値の型は Nothing になる。
Nothing は型階層の最下位 (もちろん最上位は Any) だから
戻り値の型が一致しないというエラーは普通は出るはずがない。
何か別に変なことしてるんじゃないの?
393デフォルトの名無しさん:2013/09/29(日) 02:00:29.36
>>391
必要なのはjava2scalaじゃなくて、scala2javaだと何度言えば…
394デフォルトの名無しさん:2013/09/29(日) 06:50:05.48
こいつインテリジェイのより強いん?
395デフォルトの名無しさん:2013/09/29(日) 12:08:41.46
>>390
エラー起こして本来の期待する値を返さない場合のあるメソッドならEitherつかうわ
ttp://xerial.org/scala-cookbook/recipes/2012/11/16/either/
396デフォルトの名無しさん:2013/10/06(日) 02:02:36.02
Scalazってマニュアルとかチュートリアルみたいなのないのかね
eedesi9nのとこは見たんだけど実務的なのが知りたいなあ
397デフォルトの名無しさん:2013/10/06(日) 03:18:33.18
実務的には、直接使うのではなくscalazで実装されたライブラリを使えばいいのかね?
それと、FP in Scalaって本はscalazに関係ある?
http://manning.com/bjarnason/

とりあえず、モナドのプログラム言語的意義はここのスライドが参考になった。
http://www.slideshare.net/tanakh/monad-tutorial
398デフォルトの名無しさん:2013/10/06(日) 03:22:34.42
そのうち、同じ様な実装がJSRになるみたいだけど、変更あったクラスを読み直してくれるjrebel(のscala用)使ってる人っている?
http://cookbook.liftweb.net/#jrebel
399デフォルトの名無しさん:2013/10/06(日) 13:34:45.14
java用のライブラリにこんなものが。
totallylazy: Another functional library for Java
http://code.google.com/p/totallylazy/
lazyrecords: Think LINQ for Java
http://code.google.com/p/lazyrecords/

実用性どうこうより、使ってるツールやライブラリがいろいろあって面白い。
jcompilo: A pure Java 6+ build tool with advanced compiler features and strong opinions
https://code.google.com/p/jcompilo/
400デフォルトの名無しさん:2013/10/06(日) 19:24:30.05
>> 397

FP in Scalaは、直接Scalazには関係ないし、Scalazはでてこないぞ。
ただ、Scalazに関係ある概念の説明はあるから、役に立たないこともないけど
401デフォルトの名無しさん:2013/10/07(月) 23:17:36.02
Akkaの話題はここでいいのかな?
他に聞くところもなさそうだし
402デフォルトの名無しさん:2013/10/12(土) 02:51:51.60
この言語これから伸びるよ
403デフォルトの名無しさん:2013/10/13(日) 00:31:16.32
と言われ続けてはや10年
404デフォルトの名無しさん:2013/10/13(日) 10:09:08.64
むしろ今が最盛期
405デフォルトの名無しさん:2013/10/13(日) 15:11:29.75
地味に一番伸びてる時期が今だと思う。コンパイル速度の問題はあるとはいえ、コミュニティライブラリはそこそこ整ってきたし
バイナリ後方互換性の問題への対処、言語仕様の安定化、(色々言われてるけど)Typesafe Stackの整備とか
あとは、Sparkみたいな(ほぼ)Pure Scalaで書かれたいわゆるBig Dataを処理するフレームワークの実用とか(国内だとまだSparkはあまり知られてないっぽいが)

high throughput, low latencyなシステムのバックエンドのための言語としてはある程度立場を確立できた感じだが、後は「ふつーの」Webプログラミングでどこまで頑張れるか
じゃないかねえ。
406デフォルトの名無しさん:2013/10/13(日) 16:14:52.43
"ふつう"のwebサービス置き換えるには、
devopsが何倍も楽になるようなwebサービスについて新人教育にも使えるような本があればいいんだろうな。

バックエンドをスケールさせることが必要であれば、どんどん使ってるみたい。
http://2012.8-p.info/japanese/2/18/tumblr
http://wazanova.jp/post/62669811482/twitter-gtac-2013

http://wazanova.jp/post/63449778024/node-js-ui
407デフォルトの名無しさん:2013/10/13(日) 17:39:20.80
Spark、ある領域の問題に関して例えばHadoop MRに差し替えて使えるものであって
Hadoopのインフラ自体を置き換えるものじゃないからね。
これだけでScalaブレイクかと言われると対象ユーザー数が厳しいかなとw
408デフォルトの名無しさん:2013/10/14(月) 03:18:30.14
会社のワークステーションならともかく、自宅のシングルコアのちょっと型落ちのマシンだと詠み込みやコンパイルが遅くてイライラする
ちょっと性能を限定してもいいので、REPLでファイルの詠み込み→実行をサクサク回せるようにならないだろうか
409デフォルトの名無しさん:2013/10/14(月) 13:40:59.67
>>401
http://s.ameblo.jp/principia-ca/entry-11568834319.html
javaから使おうとした形跡が。

https://www.google.co.jp/search?q=finagle+akka&ie=UTF-8&oe=UTF-8&hl=ja
Akka使う用途が分からないけど非同期分散フレームワークとしては、Finagleと比較されているようだ。
410デフォルトの名無しさん:2013/10/15(火) 02:17:32.02
デフォルトで入ってるアクターモデルとの関係がよく分からない
411デフォルトの名無しさん:2013/10/15(火) 03:25:35.64
scala-actorsは既に本体から分離されてるし、アクター使いたいならAkka使えって話でしょ
412デフォルトの名無しさん:2013/10/15(火) 09:24:57.10
ActiveRecordのsave並に簡単に永続化できる何かをください
413デフォルトの名無しさん:2013/10/15(火) 21:33:18.40
サードパティーのJavaライブラリを使うのって無理なの?
414デフォルトの名無しさん:2013/10/15(火) 21:37:23.05
むりなひとにはむりです
415デフォルトの名無しさん:2013/10/15(火) 21:39:12.70
できるということですね?ありがとうございます、がんばります
416デフォルトの名無しさん:2013/10/16(水) 11:07:40.54
ナイスポジティブ
417デフォルトの名無しさん:2013/10/17(木) 07:45:01.14
http://itpro.nikkeibp.co.jp/article/NEWS/20130927/507363
Rails使ってた人向けかわからんけど、SquerylラッピングしてAR作ったそうな
418デフォルトの名無しさん:2013/10/17(木) 09:10:39.89
http://www.slideshare.net/fungoing/type-safe-mongodb-with-scala-montotokyo
mongoさんならモデルのsaveできるんじやないか
419デフォルトの名無しさん:2013/10/17(木) 19:36:32.56
eclipseのJavaでの快適感に慣れてたらScalaプラグインけっこう苦痛なんですね・・・
やはりここのみなさんはInteliJを使ってるんでしょうか?
420デフォルトの名無しさん:2013/10/17(木) 21:34:58.16
IntelliJは販売代理店の奴がキモいから使いたくない
421デフォルトの名無しさん:2013/10/18(金) 00:36:45.89
JetBrainsから直接買えば?
422デフォルトの名無しさん:2013/10/18(金) 00:50:02.17
英語サイト苦手なん?
423デフォルトの名無しさん:2013/10/18(金) 01:01:31.56
JetBrainsのWebサイトからそのまま買えばいいやん。Ultimate版先にインストールしておいて、
ライセンスキーはWebサイト上からPayPalか直接クレカかどっちか忘れたけどそれで決済すれば
ライセンスキーが送付されるので、IntelliJ IDEA起動した後ライセンスキー入力すればいいだけ

今のところというかしばらく以上前から、IntelliJ IDEA + Scala >> Scala IDE for Eclipseな状態
特にIDEAの方は最近、IDEA上からのビルドがsbt(正確にはzinc)ベースになったから直接sbt叩く
場合との不整合が出なくなったし、ユニットテストも簡単に実行できる。補完はimport補完も含めて
大体の場合うまく効く
424デフォルトの名無しさん:2013/10/20(日) 17:34:41.58
空かもしれないListを処理してOptionを返したいのですが、

list match {
case lis if lis.isEmpty => None
case lis => optionDeriveringFunction(lis) // Option[T]が返る
}

このような泥臭い処理になります。

あたかもListをOptionのように使えたりしないのでしょうか。
Listが空のときは自動的にNoneを返し、空でない場合は関数を適用してSomeで返してほしいです。
Scalazは勉強中なのですが、モナド変換子を使えばよいのでしょうか?
425デフォルトの名無しさん:2013/10/20(日) 18:02:37.12
やってること同じだけど
Option(list).filter(_.nonEmpty).map(optionDeriveringFunction(_))
optionDeriveringFunctionはTを返すように変更
426デフォルトの名無しさん:2013/10/20(日) 22:42:14.75
// Scala 2.10.3
trait Holds1[A]
trait Holds2[A,B]
trait Fn[F[_]]
object Fn {
&nbsp; implicit def fn[F[_]] = new Fn[F] {}

&nbsp; implicitly[Fn[Holds1]] // 1: OK
&nbsp; new Fn[({ type λ[a] = Holds2[Unit,a]})#λ] {} // 2: OK

&nbsp; type Holds2_[a] = Holds2[Unit,a]
&nbsp; implicitly[Fn[Holds2_]] // 3: OK

&nbsp; // 4: compile error
&nbsp; // implicitly[({ type λ[a] = Holds2[Unit,a]})#λ
}

4: のケースでエラーがでる(implicitの解決時にF[_]にマッチしない)のはどういうことなんですかね、、
427デフォルトの名無しさん:2013/10/20(日) 22:46:03.65
サーセン、コピペミスってた・・・貼り直し
http://ideone.com/EjtMvL
428デフォルトの名無しさん:2013/10/21(月) 21:06:23.43
C++だと、テンプレート(ジェネリクスのようなもの)で指定した型に対する操作は
かなり自由にできる(コンパイル時にエラーになる)のですが

Javaだとジェネリクスの型パラメタであるTに対して
例えば

class Foo<T> {
 public T t;

 public Foo() {
  t = 100; //エラー
 }
}

とすると型Tがなんであろうとコンパイルエラーになってしまいます
(C++であれば、intの100が代入可能な型であればコンパイルOKになります)

このような書き方はscalaでは可能なんでしょうか?
scalaではJavaのNumberクラスのようなモノがデフォルトで
スタックメモリを使うと聞いているので気になっています
429デフォルトの名無しさん:2013/10/21(月) 23:59:08.01
>>424
あえてパターンマッチ使うなら

list match {
case _::Nil | Nil => None
case xs => optionDerivingFunction(xs)
}

とかかな。パターンに or(|) が使えるのがポイント。
430デフォルトの名無しさん:2013/10/22(火) 00:02:32.76
>>428
そのままの形では無理。Scalaのジェネリクスは機能的にはJavaのジェネリクスと同じような原理で
より強力なだけだから。Javaのジェネリクス設計者の一人でjavac(1.5)の作者な人がScalaの作者だから
というのもあるけど、C++テンプレートみたいなのをJVM言語でやるのは分割コンパイルで激しく問題を生む可能性がある
431デフォルトの名無しさん:2013/10/22(火) 01:00:35.00
>>426
implicitlyのシグニチャを見てみよう。
http://www.scala-lang.org/api/current/index.html#scala.Predef$

def implicitly[T](implicit e: T): T

この、Tはいわゆる普通の型(value type)を表してるので、
({ type λ[a] = Holds2[Unit,a]})#λのような、高カインド型は突っ込めない。これはある意味
当然で、Scalaでは高カインド型を型引数として書くことができるけど、
「高カインド型の値」はどこにも存在しないので、そのようなimplicitlyは定義しようがないんだ
Haskellでもその辺の事情は同じ
432デフォルトの名無しさん:2013/10/22(火) 01:02:39.12
ちなみに、「高カインド型の値」を定義できるもっと強力な型システムを持つプログラミング言語
もあるけど、そっちの方向に行くと、型で証明を書くことが目的になってたりして、普通のプログラミング
言語としては逆に制約が強くなるので難しいところ。
433デフォルトの名無しさん:2013/10/22(火) 01:52:33.83
>>431
レスありがとうございます
いまさら見返して気づいたのですが implicitly[Fn[({ type λ[a] = Holds2[Unit,a]})#λ]] のタイポでした・・・

ところが、修正しても
could not find implicit value for parameter e: Fn[[a]Holds2[Unit,a]]
というエラーが出てしまいます。
Fnはパラメーターを1つだけ取るHK型を取るように宣言しているので、これはマッチしてもいいと思うのですが、、
(そういう意味で 3: の例をあえて書きました。マッチングのルールがimplicit解決時と差異があるように思えたので)
434デフォルトの名無しさん:2013/10/22(火) 01:55:47.84
× 3: の例 → 2: の例
435デフォルトの名無しさん:2013/10/22(火) 16:10:01.30
>>430
ありがとうございます

んー、やはりジェネリクスの型が消去されてしまうJVM上で動く言語の宿命なのでしょうか

やや面倒ですが、値型を扱うクラスを作る場合はJavaのクラスライブラリのDimensionや、
vecmathライブラリの各種クラスのように、それぞれの値型(int、doubleなど)の種類の
数だけ対応するクラスを作成するべきなんでしょうねぇ
436デフォルトの名無しさん:2013/10/22(火) 22:07:38.59
>>435
型消去うんぬんよりコンパイル時のコード生成の有無じゃないか
C++でもテンプレートをDLLやsoでダイナミックロードは出来ないでしょう
437デフォルトの名無しさん:2013/10/23(水) 01:22:53.69
>>435
それは違う。Java「言語」は型消去方式を後方互換性、コードサイズの肥大化、分割コンパイルの容易性などの観点から「選んだ」
のであって、JVM言語としてC++ Template的なものを実現するのは難しいことではない。ScalaもJavaライブラリとの
interactionを簡単に行うためにJavaのジェネリクスに合わせてるってのが主な理由。

副作用として、型システムの拡張がよりやりやすくなった。Javaは言語自体の後方互換性の問題から、
raw typeだのなんだの変てこりんな制約を付けざるをえなかったけど(GJの時に既にあった制限)。
438デフォルトの名無しさん:2013/10/23(水) 01:24:57.16
ScalaはライブラリレベルでJavaとのinteractionはちゃんとできないといけなかったけど、raw typeとかは
持ち込まずに済んだ。というか、これはGJの教訓がScalaにフィードバックされたと見るべきだろうけど
439デフォルトの名無しさん:2013/10/23(水) 02:23:25.94
>>435
後段、それだけなら@specialized使えばいいんじゃ?手でやる必要ないよ
440デフォルトの名無しさん:2013/10/23(水) 16:04:25.62
Numeric[T]でもイケそう
441デフォルトの名無しさん:2013/11/08(金) 19:48:59.40
scalaからプログラミングを学び始めて、
やっと知り合いに見せることができるようなプログラムが組めたのですが、
コンパイルで一纏めにするというか、手軽に人に渡せてそのまま動く形式にはできないのでしょうか
.classがズラーっと出てきて動かすにはターミナルでscala 〜としないといけない状態です
442デフォルトの名無しさん:2013/11/08(金) 20:44:33.31
scala jarで検索すると、なんか出てくる
443デフォルトの名無しさん:2013/11/08(金) 20:59:37.57
環境にjavaはインストールされてるならsbtでfat jar作るのが手軽かな
444デフォルトの名無しさん:2013/11/08(金) 21:48:02.63
たしかに、コンパイルしてclassファイルが250個出てきたときは吹いた
445デフォルトの名無しさん:2013/11/08(金) 22:14:27.10
>>442
調べてみます。ありがとうございます

>>443
笑えることにsbt入れてないんです
446デフォルトの名無しさん:2013/11/09(土) 01:06:32.04
>>445
sbtは入れとけ。悪いこと言わないから。
これからもう少し大きなプログラム作ろうと思うと、知っておいて損は無い。
447デフォルトの名無しさん:2013/11/09(土) 02:09:34.03
sbt-assemblyでおk
448デフォルトの名無しさん:2013/11/13(水) 23:47:23.50
>>439を見て思ったんですが
型パラメータを[@specialized T] とするのと [T <: AnyRef] の違いってあります?

前者は後者を含んでいる。と考えていいのでしょうか?
449デフォルトの名無しさん:2013/11/13(水) 23:50:24.32
すみません、AnyRefじゃなくてAnyValです><
450デフォルトの名無しさん:2013/11/14(木) 03:59:32.54
>>448
全然別物だよ

[@specialized T] は各値型に特化したクラスを生成する機能
[T <: AnyVal] はTの型を制約している

[T <: AnyVal] にAnyRefを渡すことはできないが、[@specialized T] には何の制約もないのでできる
[@specialized T] にIntを渡せばIntに特化したクラスが使われる

@specializedを何も考えずに使うと.classファイル数が爆発するので注意が必要
trait A[@specialized T, @specialized U, @specialized V] とかコンパイルしてみるといいよ
爆発を避けるには@specializedをつける数を減らすか、@specialized(Int)等で対象を限定する
451デフォルトの名無しさん:2013/11/14(木) 17:43:52.02
>>450
なるほど!ありがとうございます

すごく便利そうですが、数値計算クラスを作る場合はNumericを利用した方がよさそうなんですね
452デフォルトの名無しさん:2013/11/15(金) 04:01:18.17
>>451
別に片方しか使えない訳じゃないから
必要なら class A[@specialized(Int, Long, Double) T : Numeric] とかやればいーやん?
453デフォルトの名無しさん:2013/11/15(金) 20:04:09.13
>>452
うひょー! Scala最強すなぁ
454デフォルトの名無しさん:2013/11/15(金) 23:08:52.10
コレクション扱いまくるプログラム書いてるんだけど、
処理速度を上げる、下げないためにはここに気をつけた方がいいってのがあったら教えてくれ
455デフォルトの名無しさん:2013/11/15(金) 23:15:43.20
>>454
foreachを使わない
456デフォルトの名無しさん:2013/11/16(土) 00:15:59.88
for式を使えって事?
457デフォルトの名無しさん:2013/11/16(土) 00:23:31.92
再帰を使えってことじゃないの
458デフォルトの名無しさん:2013/11/16(土) 01:07:09.33
再帰ってパフォーマンス良いの?
459デフォルトの名無しさん:2013/11/16(土) 01:13:17.22
再帰はforeach以上にうんこ
460デフォルトの名無しさん:2013/11/16(土) 01:43:37.77
話が色々混じってる。まず、コレクションの操作にかかるコストが支配的なプログラムを書いていると仮定して話進める

その上でいうと、コレクションのメソッドのforeach/forは、AnyValの値を格納するなら、boxing/unboxingのコストを考慮して多用しない方がいいのは確か
specializedについての話があったけど、Scalaの標準コレクションライブラリでは、コードサイズの爆発も考慮してspecializedは限定的な利用になってる
だから間違ってはいない…のだけど、特定の状況でしか使えないテクニックになる。重要なのは、ヒープへのメモリ割り当て(new)がどのタイミング
で起きるか意識しておくこと(特にboxing/unboxing)
461デフォルトの名無しさん:2013/11/16(土) 01:52:18.84
関数を呼ばないようにする工夫ってのは現代的なというかOracle JVMだとそんなに効果的じゃない。クリティカルな程
呼び出し回数が多ければインライン化される可能性が高い。ヒープへのメモリ割り当て(new)もそれ自体は高速なんだけど、多発した
場合GCによる性能低下は避けられないから、こっちを注意する事は意味がある。foreachをどれくらい避けるべきかってのも
メモリ割り当て(この場合boxing/unboxing)のコストという観点からみるとすぐわかるわけだし。ある意味JVMがまだそこまで賢く
ない(処理系としてはかなり賢いけど)部分を人間が補ってあげるという事になるけど、仕方ない
462デフォルトの名無しさん:2013/11/16(土) 01:59:28.41
一つ言えるとしたら、AnyValを格納するコレクションを利用する時は、挿入/削除/要素へのアクセス、の度にboxing/unboxingが発生するので
注意かな。AnyRef、つまり参照型扱う場合はそんなに注意しなくてもいい。計算量の話は、docs.scala-lang.orgの「性能特性 - Scala Documentation」
http://docs.scala-lang.org/ja/overviews/collections/performance-characteristics.html
は¥読んどくと良いかも
463デフォルトの名無しさん:2013/11/16(土) 02:05:41.22
forの変わりの再帰ってtailrecだろうからバイトコード的には
唯のループになるよね
464デフォルトの名無しさん:2013/11/16(土) 03:31:43.05
我々に必要なのは唯のループなんだ!
465デフォルトの名無しさん:2013/11/16(土) 11:07:56.74
>>463
そうだね。javapするとわかるけど、メソッドの先頭にgotoするバイトコードが吐き出される
466デフォルトの名無しさん:2013/11/16(土) 11:09:05.83
>>460
あー、つまりどういうことだ?
467デフォルトの名無しさん:2013/11/16(土) 11:24:08.34
>>466
Scalaのコレクションを多用したプログラミングで細かいチューニングをしたいなら
メモリ割り当てのタイミングを意識するという一般的な原則を理解しとけばだいたい十分という話
多くの細かいテクニックは必要に応じてそこから導出できる

コレクションの性能特性は理解しといた方が良いのは言うまでもない
468デフォルトの名無しさん:2013/11/16(土) 16:54:46.49
foreach使うなって話が出てたが、関数型っぽく書くと遅くなっちゃうのか?
469デフォルトの名無しさん:2013/11/16(土) 17:15:12.71
>>468
関数型だけでプロトタイプ作って、小さいデータでデモして、OKなら、速度改善
速度改善のときに適切なコレクション選んだり、foreachを別のループにしたりする
場合によってはjavaに置き換え

経験上は、1万超えるループを繰り返すときに foreach を納品版に入れておくとマズい
470デフォルトの名無しさん:2013/11/16(土) 17:35:19.59
たった1万?
471デフォルトの名無しさん:2013/11/16(土) 17:56:36.53
P6200 2.13GHz

(0 to 10000).foreach(i=> (0 to 10).foreach(j=> j+j))
0ミリ秒
(0 to 100000).foreach(i=> (0 to 10).foreach(j=> j+j))
16ミリ秒
(0 to 1000000).foreach(i=> (0 to 10).foreach(j=> j+j))
281ミリ秒

ヤバイと見るか余裕と見るか…
472デフォルトの名無しさん:2013/11/16(土) 18:28:44.19
ところで、foreachは副作用前提だから、関数型的な機能じゃなくて手続き型的な機能なのだが…
473デフォルトの名無しさん:2013/11/16(土) 18:33:02.80
>>472
実は、scalaはmapも副作用前提なんだ
474デフォルトの名無しさん:2013/11/16(土) 18:37:53.95
>>473
全く違う。mapに渡す関数オブジェクトの中で副作用が使えるだけの話。foreachでは副作用を使わないと意味のある事ができない
mapの内部実装の話は、外から使う時に観測できないから別の話だし
475デフォルトの名無しさん:2013/11/16(土) 18:43:44.49
Unit を副作用とみるか外界での実行を表現する返り値とみるか…
476デフォルトの名無しさん:2013/11/16(土) 18:45:07.09
未だに副作用がないってことがよくわからない
副作用を起こさないでどうやって処理するんだよ
477デフォルトの名無しさん:2013/11/16(土) 18:50:23.23
>>476
C言語で言うと、scanf文そのものには副作用があるが、"scanf("%d",&n);"という文字列を出力するyaccコードには副作用がない
478デフォルトの名無しさん:2013/11/16(土) 19:43:32.95
>>471
うちのところだとそれだと人命に影響でる
479デフォルトの名無しさん:2013/11/16(土) 20:36:17.95
>>478
そんなものにscalaは使わんだろ
…使わないよな?
480デフォルトの名無しさん:2013/11/16(土) 20:41:31.75
>>479
ハハハこやつめ^_^
481デフォルトの名無しさん:2013/11/16(土) 21:19:06.39
Scala以前にそんなハードリアルタイム性が必要な場面で普通のJVM自体使えない…よね?
482デフォルトの名無しさん:2013/11/16(土) 21:21:00.85
世の中は不条理で満ち溢れている
それだけの話なんだよ
483デフォルトの名無しさん:2013/11/16(土) 22:17:54.73
1000 x 1000 を走査して 0.3秒はかなりきつい感じ
484デフォルトの名無しさん:2013/11/17(日) 00:31:30.55
死人が出てもいいから楽な言語を使いたいです
485デフォルトの名無しさん:2013/11/17(日) 02:05:26.54
>>481
javaが出てきた当初は家電含むすべての機械がjavaで動くようになるとか宣伝してたのに…
486デフォルトの名無しさん:2013/11/17(日) 07:04:16.69
3 0 億 の デ バ イ ス で 走 る J a v a
487デフォルトの名無しさん:2013/11/17(日) 10:52:44.66
実際はPCで動かすのにも一手間必要です
488デフォルトの名無しさん:2013/11/17(日) 15:09:58.69
>>485
全てはかなり誇張入ってたにしても、それなりに色々なところでJava 「SEじゃない」Javaは動いてはいるんだろうけどね…
BDプレーヤには全てBlu-ray Disc Javaが入ってるらしいし。でも、ライブラリやら機能がかなり制限された「Java」は同じJavaの
くくりで扱っていいのかどうか
489デフォルトの名無しさん:2013/11/17(日) 15:18:04.64
リアルタイム性を必要とする高速な処理はJavaには無理って話から
処理自体動作不可みたいな話になってないかね
490デフォルトの名無しさん:2013/11/17(日) 21:14:22.73
>>489
わざわざjavaに切り替えるメリットがあったのか、という話かな
491デフォルトの名無しさん:2013/11/18(月) 22:21:42.04
swingでGUI頑張ってるけど泣きそう
C#と戯れたい
492デフォルトの名無しさん:2013/11/18(月) 22:37:17.94
ScalaFXにしようぜ
493デフォルトの名無しさん:2013/11/19(火) 00:49:35.29
Windowsじゃないなら、C#も不便
494デフォルトの名無しさん:2013/11/19(火) 10:07:04.97
>>492
資料が少ないしFX使ったことないので
495デフォルトの名無しさん:2013/11/19(火) 13:39:24.46
あり金全部溶かしそうな名前なのでー
496デフォルトの名無しさん:2013/11/19(火) 16:02:28.23
FXで死んだらあり金溶かすだけじゃ済まないけどな
497デフォルトの名無しさん:2013/11/20(水) 13:20:32.78
>>22
亀だけど俺が今作ろうとしてるものにソックリ!
498デフォルトの名無しさん:2013/11/20(水) 23:15:21.83
>>497
俺は、スレの内容というか、スレごとに画像保存してるわ
499デフォルトの名無しさん:2013/11/22(金) 00:27:07.43
>>489

もともとは、Javaって組み込み用途を意識したもので、
Javaアクセラレータ(Jazelle)を内蔵したARMマイコンとか出てたよねえ。
当時のARMは遅かったし、Sunも開発遅いから、勢いに乗る前に、つぶされたって感じだけど。

出てくるのが早すぎたのだろう。腐っていた。

今から出せばまだましになるかも。mRubyみたいなのも出てきているわけだし。
500デフォルトの名無しさん:2013/11/22(金) 08:41:39.93
ARMアーキテクチャ上でネイティブJavaバイトコードを実行する
Jazelle機能のこともたまには思い出してあげてください
501デフォルトの名無しさん:2013/11/22(金) 10:04:34.44
JVMバイトコードネィティブ実行の先見性には当時から懐疑的な意見が多かったような
現状だとJIT,AOTが確立されているし、今後HSAでヘテロ構成コンピューティングの基盤が
出来上がったら、そっち経由で各計算リソース上へ振り分けられた上でネイティブ実行
されるようになるらしいから、今後もなさげだが
502デフォルトの名無しさん:2013/11/23(土) 17:50:55.12
val f = future { 長い処理 }
f onComplete { case Success(x) => ちょっと長い処理 }
Await.ready(f, Duration.Inf)
// main終わり
これを実行すると、ちょっと長い処理が終わる前にプロセスが終了してしまうようです
ウェイトを入れる以外のまともな対処方法を教えてもらえないでしょうか
503デフォルトの名無しさん:2013/11/23(土) 18:03:32.70
そのちょっと長い処理が複数の関数を連鎖させてる場合は、はじめのUnitを返す関数しか実行されないとかなんとか
504デフォルトの名無しさん:2013/11/23(土) 21:41:28.48
アクターモデルってのに興味を持ってscalaをやり始めようと思ったけど使い勝手とか考え易さとかはどんなもんですかね
反復動作を並列化して少しでも速度を早めたいのですが
505デフォルトの名無しさん:2013/11/23(土) 22:38:20.23
アクターはサードのライブラリに任せることになったので標準ライブラリからは廃止予定だ
でも特定のループを速くしたいだけならアクターなんて使わなくてもOpenMP的な単純なループ並列化で十分だよ
scalaの並列コレクションを使ってもいいけど、parallel forくらいなら自分で作るのも簡単
506デフォルトの名無しさん:2013/11/23(土) 22:44:32.75
>>505
ありがとうございます。
調べながらscalaを学んでみます、
507デフォルトの名無しさん:2013/11/24(日) 00:15:36.29
>>502
val f1 = future { 長い処理 }
val f2 = f1 andThen { case Success(x) => ちょっと長い処理 }
Await.ready(f2, Duration.Inf)
508デフォルトの名無しさん:2013/11/24(日) 00:40:53.92
>>505
ちょっとしたツッコミだが、Akkaは別チームだが結構前からTypesafeで開発(合流)、JonasはTypesafeの共同創業者かつ現CTOだからサードのライブラリというと違和感覚える
間違ってるというほどじゃないが
509デフォルトの名無しさん:2013/11/24(日) 00:43:48.11
>>505
parallel for自作は、少しめんどさいような。ナイーブに全要素に対してスレッド割り当てる方法なら簡単だけど、スレッド使いすぎになるし
素直に.par.foreach使うのがいいような気がする
510デフォルトの名無しさん:2013/11/24(日) 21:25:21.23
String型の変数の中身がDoubleで表せるものか、それとも普通の文字列なのかを判別する方法ってない?
511デフォルトの名無しさん:2013/11/25(月) 01:37:08.84
>>510
超手抜き実装

scala> implicit class StringExtension(self: String) {
   | def isConvertibleToDouble: Boolean = try { self.toDouble; true } catch { case e:NumberFormatException => false } }
defined class StringExtension

scala> "100".isConvertibleToDouble
res2: Boolean = true

scala> "hoge".isConvertibleToDouble
res3: Boolean = false
512デフォルトの名無しさん:2013/11/25(月) 05:38:50.23
こんな超手抜きはいかが
Try(string.toDouble).isSuccess
513デフォルトの名無しさん:2013/11/25(月) 14:21:51.06
おお、なるほどな
ありがとうございます
514デフォルトの名無しさん:2013/11/26(火) 00:02:29.63
import scala.collection.mutable.ArrayBuffer
import scala.math.Numeric.IntIsIntegral

abstract class Queue[T] { def get(): T; def put(x: T) }

class BasicQueue[T] extends Queue[T] {
private val buf = new ArrayBuffer[T]
def get(): T = buf.remove(0)
def put(x: T): Unit = buf += x
}

trait NM[T] { protected val iv: Numeric[T] }

trait Doubling[T] extends BasicQueue[T] with NM[T] {
abstract override def put(x: T) { super.put(iv.times(iv.fromInt(2), x)) }
}

class MyQ extends BasicQueue[Int] with Doubling[Int] { val iv = IntIsIntegral }

コップ本のtraitの章のキューをIntからNumeric[T]に一般化しようとしたのだけどうまくいきませんでした
MyQを定義する時にNMを使わずにivを自動的に導出させる方法があれば教えてください
515デフォルトの名無しさん:2013/11/26(火) 01:05:05.83
>>512
こんなんでどう?

import scala.collection.mutable.ArrayBuffer
import scala.math.Numeric.IntIsIntegral

abstract class Queue[T] { def get(): T; def put(x: T) }

class BasicQueue[T] extends Queue[T] {
private val buf = new ArrayBuffer[T]
def get(): T = buf.remove(0)
def put(x: T): Unit = buf += x
}

trait Doubling[T] extends BasicQueue[T] {
protected val iv: Numeric[T]
abstract override def put(x: T) { super.put(iv.times(iv.fromInt(2), x)) }
}

class MyQ[T](protected implicit val iv: Numeric[T]) extends BasicQueue[T] with Doubling[T]

val x = new MyQ[Int]

x.put(1)
x.put(3)

println(x.get())
println(x.get())
516デフォルトの名無しさん:2013/11/26(火) 14:34:41.35
>>515
ありがとうございました
MyQ[Int]()で生成できるようにobject MyQ { def apply[T](implicit iv: Numeric[T]) = new MyQ[T]}を書くと
intelliJのtype aware higlightningが混乱したりする以外はうまく動きました
この場合はclass MyQ[T]のivをpublicにすると大丈夫なようでした
517デフォルトの名無しさん:2013/11/27(水) 17:49:09.74
そいえばAkkaの質問ってこのスレでいいの?いろいろ聞きたいこと有るんだけど。
518デフォルトの名無しさん:2013/11/27(水) 18:34:21.06
scala版のなら良いよ
519デフォルトの名無しさん:2013/11/27(水) 19:18:40.39
初歩的な質問で申し訳ないのですがお願いします。
配列の要素を走査していって条件に当てはまったらそれを返すような動作をしたいのですが
他の言語で使ってきたbreakが使えなくてループから抜けられず困っています。
scalaや関数型言語特有の方法があるのしょうか。
520デフォルトの名無しさん:2013/11/27(水) 19:36:31.89
find
521デフォルトの名無しさん:2013/11/27(水) 20:16:44.92
>>519
val arr = Array(1, 2, 3, 4, 5)
arr.find{e => e % 2 == 0} // 普通の形。ここでは、最初に見つけた偶数の値を返す(e % 2 == 0がtrueになる最初の要素)。
arr.find{e: Int =>e % 2 == 0} // 型を書きたいなら
arr.find{_ % 2 == 0} //省略形

返り値はOption[Int]でラップされてる。Optionの扱い方はこの辺参照。わからんかったらScala Optionとかでぐぐれば情報はいくらでもある
http://www.scala-lang.org/api/current/index.html#scala.Option
522デフォルトの名無しさん:2013/11/27(水) 20:26:59.34
ありがとうございます
523デフォルトの名無しさん:2013/12/01(日) 20:45:24.77
この言語を業務としてやろうかどうかを悩んでるんだけど安定性とかどう?
あと、実際に使ってる人の意見として長所短所を教えていただけないでしょうか
524デフォルトの名無しさん:2013/12/01(日) 20:54:03.65
個人用のツールやスクリプトで、実際の仕事で1週間くらい使ってみればいいと思う
525デフォルトの名無しさん:2013/12/01(日) 21:05:31.05
androidに使うのはやめた方が・・・
利点は簡単に(関数型的に)かけること。
欠点はコンパイル後のクラス数がめちゃくちゃ増えることかなぁ。
コンパイル後のクラスを全て申請書書かなきゃならない現場では使い物にならない。

あとはあれだね、破壊的な操作も簡単に書けるから、
実装する人の間でのレベル差が大きいとどちらも苦労することになるかと。
526デフォルトの名無しさん:2013/12/01(日) 21:48:06.41
関数型的に書けるって利点が調べてもいまいちわからないです。
不勉強で申し訳ないのですが、行数が少なくなるってことでいいんですかね
527デフォルトの名無しさん:2013/12/01(日) 21:57:38.04
>>526
・数学的な記述を素直にコードにできる
・変数の中身を考えるときに、実行順序を無視できる
・コードの取り替えが簡単
・テストを、「引数と返り値の対応のチェック」で統一できる
・どの言語で実装しようが、結局は関数型みたいなモノを使うシステムになる
528デフォルトの名無しさん:2013/12/01(日) 23:03:41.75
よくScala評で言われる「良い物もあるがゴミも多い」というのはまさにそうだと感じる
同じことするのに色んなやり方がありすぎるし、その中でも「好ましいやり方」というのが
毎年のように変わる
529デフォルトの名無しさん:2013/12/01(日) 23:25:02.11
ありがとうございます。
あまりレベルの高い職場じゃないので周りへの教育が大変そうですね…
自分が学んでから考えてみます。すみませんでした
530デフォルトの名無しさん:2013/12/01(日) 23:31:29.63
よく検討もせずに標準ライブラリに重要なものブチ込むのは勘弁してほしい
531デフォルトの名無しさん:2013/12/02(月) 02:57:29.82
>>528
C++もそうだけど、マルチパラダイムの宿命だなあ
しかも結局、どれが良いか悪いという議論ではなくて
一通りのパラダイムを全部押さえておかないと使いこなせないという
532デフォルトの名無しさん:2013/12/02(月) 03:24:09.22
なんとか利点を引き出そうと、オブジェクト指向と関数型プログラミング、うまく混ぜられないんだよなあ
今のところクラスのメソッドの中で関数型記述を使ってるけど、他にやり方があるのかなあ
533デフォルトの名無しさん:2013/12/02(月) 04:18:49.39
関数型とよく言われるがせいぜいリスト操作を短く書いてるくらいの意味でしかないのが泣ける
534デフォルトの名無しさん:2013/12/02(月) 16:43:10.32
最近勉強始めたんだけど、C++みたいに暗黙キャストできるのすごいですね。
使いこなせるかは別として、記述するのが面白すぎます

それと質問なんですが、Scala-IDEなどで作成したプログラムを
手軽に「実行可能jar」 化したい場合は、いったんScala-IDE側でクラスファイル化しておいて
Java側(eclipseのJDT)で、それらのクラスファイルとscala-library.jarにパスを通して、
JavaのmainからScalaクラスを実行するjarにエクスポートするのがラクですかね?
535デフォルトの名無しさん:2013/12/02(月) 17:08:00.64
assembly-sbt plugin
536デフォルトの名無しさん:2013/12/02(月) 17:19:41.54
>>535
やっぱsbtできた方がいいですかね?
正直Gradleとどっち勉強するか悩んでます
537デフォルトの名無しさん:2013/12/02(月) 18:30:23.39
maven ササッ
538デフォルトの名無しさん:2013/12/02(月) 23:37:58.21
成果物として納品するのがclassファイルで、データサイズが比較的小さいなら、scalaでやる
539デフォルトの名無しさん:2013/12/02(月) 23:44:56.15
関数型の利点はスレッドセーフな処理を簡単に書けることに尽きると思う。
いや、他にも色々あるんだろうけど、実感できるのがこれぐらいなんだよなぁ。

クラウド上とかのいくつスレッドが動くのか分からない環境で作る時に、
この特徴ほど役に立つ物は無いと思う。
逆にシングルスレッド専用ならJavaの方がプログラミングっぽく書けると思う。
540デフォルトの名無しさん:2013/12/03(火) 00:00:52.68
それだけならミュータブルなオブジェクトをスレッド跨いで共有しなきゃいい話じゃね
それが不便だと言うなら関数型は同様に不便だよ
541デフォルトの名無しさん:2013/12/03(火) 12:14:49.43
ScalazでStateモナド+Future使った実装にするのも、AkkaでActor+STM使った実装にするのも自由だ!
542デフォルトの名無しさん:2013/12/03(火) 20:02:34.07
>>540
プログラムは大学でC言語を習ってきた他人が書くモノだということを忘れている
「○○しなきゃいい」は、○○することの方がかえって難しい言語があってはじめて成り立つ
543デフォルトの名無しさん:2013/12/03(火) 20:23:58.05
>>542
その理屈だと細心の注意を払ってストイックなコーディングをしないと
関数型にならないScalaは失格じゃないですか
544デフォルトの名無しさん:2013/12/03(火) 20:47:41.24
>>543
var と scala.collection.mutable の存在を教えなければ解決する
545デフォルトの名無しさん:2013/12/03(火) 23:53:17.01
Scalaのプログラミング体験は「使おうとするライブラリが提供する抽象度が適切か」に
大きく左右される、ってばっちゃが言ってた。
546デフォルトの名無しさん:2013/12/04(水) 20:51:25.48
2つ質問したいです
1つ目、scalaでlinuxのネットワーク系のサービスデーモンみたいなのを簡単に実装しようと思ったらAkka使えばいいの?

2つ目、googole guiceのような仕組みってScalaにないのでしょうか?googole guiceは記述が冗長でコーディングを複雑化させちゃうけど設計方法としてはメリットあるので採用したいです
547デフォルトの名無しさん:2013/12/05(木) 08:32:45.94
僕の○○は純粋強いられ系
548デフォルトの名無しさん:2013/12/05(木) 17:12:25.59
クラスAが持つメソッドにクラスAのインスタンスを生成する動作を載せることは可能でしょうか
ふと思いついたアイディアに使えそうなのですが一週間近く試せる環境に身を置けないのです
勝手なことで申し訳ないですが教えてください
549デフォルトの名無しさん:2013/12/05(木) 21:54:55.89
scalaも盛り上がらないななんか…
550デフォルトの名無しさん:2013/12/05(木) 22:55:34.17
>>548
class A {
 def copy: A = new A
}
こういうこと?別に問題無く可能だと思うけど。
551 ◆QZaw55cn4c :2013/12/05(木) 23:00:48.12
いろいろ縁があってscalaデビューも間近、いや、マジか?
552デフォルトの名無しさん:2013/12/06(金) 00:09:06.12
>>550
可能ですか。ありがとうございます。
脳内で色々試してみます。
553デフォルトの名無しさん:2013/12/06(金) 00:13:15.40
scalaの良いところは何でも簡単にできるところ
scalaの悪いところは何でも簡単にできるところ
554デフォルトの名無しさん:2013/12/06(金) 20:18:54.58
scalaはWindowsでのGUI開発がどうにかなったら本当に最強
ならないけど
555デフォルトの名無しさん:2013/12/06(金) 20:29:51.83
ユーザーからのキーボード入力をString型として読み込みたいのですがどのような方法がありますか?
556デフォルトの名無しさん:2013/12/06(金) 20:38:12.94
読み込んでからString型にするんじゃ駄目なの?
557デフォルトの名無しさん:2013/12/06(金) 20:41:20.39
>>556
文字列の読み込みの方法自体がわからないのです
readIntや、readCharがあるのは調べてわかったのですがreadStringはなかったので困っています。
558デフォルトの名無しさん:2013/12/06(金) 20:48:39.53
BufferedReaderを使うんだよ
Java キーボード 入力 とかでググればサンプルは腐るほど出てくる
ググるときのキーワードはScalaじゃなくてJavaな
559デフォルトの名無しさん:2013/12/06(金) 20:51:14.16
コアのマニュアルぐらい全部読んでから作業しろ...
560デフォルトの名無しさん:2013/12/06(金) 20:53:20.31
ありがとうございます。調べてみます。
すみませんでした
561デフォルトの名無しさん:2013/12/06(金) 21:27:40.95
意思決定法の本を読んでて、CDROMの付属ソフトがあったんだけど、本の最後の免責事項のところをよく読んだらscalaで作ってあった
残念ながらコードはなかったが
562デフォルトの名無しさん:2013/12/07(土) 21:28:21.23
scalaを業務に使ってる人はどういう風に使ってるの?
やっぱりサーバーサイド?
563デフォルトの名無しさん:2013/12/07(土) 23:02:29.19
scala使ってる人に質問
Javaじゃいかんのか?
564デフォルトの名無しさん:2013/12/07(土) 23:32:22.56
java使ってる人に質問
c#じゃいかんのか?
565デフォルトの名無しさん:2013/12/07(土) 23:48:45.89
いかんでしょ
566デフォルトの名無しさん:2013/12/08(日) 00:56:49.54
わざわざマイナーな言語を選ぶのは言語仕様以外はデメリットしかないわけで、
メリットとデメリットのどちらが勝るかだな
個人的にはJavaを書く精神的苦痛が大きいからScalaが勝るけど、仮にJava言語がC#相当程度ならScalaは選ばないな
567デフォルトの名無しさん:2013/12/08(日) 01:34:50.89
Javaがクソすぎる割に市民権を得ていることがこの世の不幸の5%の原因
568デフォルトの名無しさん:2013/12/08(日) 02:11:01.05
だってJavaは何するにしても面倒くさいから・・・
使っていて楽しい言語の方がやっぱり良いよね。
大きい会社だとそんな理由で選べない!っていうのはもちろん分かるけど。
569デフォルトの名無しさん:2013/12/08(日) 03:52:58.10
Javaは様々な分野の開発基盤が揃った、ぶっちゃげインフラ言語だからね。
現代のCOBOLと呼ぶ人も多いけれども、むしろCの立ち位置に近いと思う。
JavaEEはもちろん、SpringとかHadoopとかLuceneとか、Javaで書かれた基盤の上に
育ったソフトウェアスタックがいろいろな分野にある。
570デフォルトの名無しさん:2013/12/08(日) 05:50:39.19
571デフォルトの名無しさん:2013/12/08(日) 09:11:02.70
そして相変わらずscalaは無視
572デフォルトの名無しさん:2013/12/08(日) 11:19:37.90
>>569
あくまでその上で現代のCOBOLを動かすためのインフラだけどね
573デフォルトの名無しさん:2013/12/08(日) 12:26:17.49
scalaをsqalaに改名したら一気に普及するよ
574デフォルトの名無しさん:2013/12/09(月) 22:51:39.12
なんか面白い話題ないのかよ
575デフォルトの名無しさん:2013/12/10(火) 17:08:54.42
地味においしい言語ですね。
576デフォルトの名無しさん:2013/12/10(火) 17:21:19.36
オブジェクトとして定義して使うのと、
クラスとして定義してインスタンス作って使うのでは実行速度に違いはありますか?
577デフォルトの名無しさん:2013/12/10(火) 20:35:22.36
>>576
ある。
578デフォルトの名無しさん:2013/12/10(火) 23:05:36.92
クラスのnewのコストが無視できる状況であるという前提なら、
objectで関数に毎回いちいち多数のパラメータを渡すくらいなら
クラスのインスタンスにまとめた方が速いと思われ
579デフォルトの名無しさん:2013/12/11(水) 13:30:27.94
ScalaもAparapiでスケールするん?
580デフォルトの名無しさん:2013/12/14(土) 09:14:10.32
どう書く?org ってサイト今はどうなってるの?
http://ja.doukaku.org/
GitHubに移行中ですって、GitHubの方みたら、全然移行されてないし。

数多くのScalaコードが有志によって投稿されていたのが、全部消えちゃっているってショック!!
もちろん、Scalaだけでなく、他の言語も多数投稿されていたのに、有志の投稿結果を無にするなんて。
581デフォルトの名無しさん:2013/12/14(土) 09:57:13.13
個人のWebサービスなんてそんなもんだろ
当てにしたのが間違ってる
582デフォルトの名無しさん:2013/12/14(土) 13:29:16.73
GitHub も危険だと思う俺は異端か…
583デフォルトの名無しさん:2013/12/14(土) 16:52:26.73
まぁ、それを言い出したらキリがないわな
584デフォルトの名無しさん:2013/12/14(土) 23:19:11.59
Google Codeとかいうのも知らない間になくなったし。

最近でいうと、「日本Scalaユーザーズグループ」というのもいつ消滅するか心配。w

いや、もっというと Scala自体 (ry
585デフォルトの名無しさん:2013/12/15(日) 00:13:41.94
大して数いないのになんでもかんでも「日本〜ユーザーズグループ」立ち上げるのやめてほしいわ
どうせScalaなんて英語避けてたら使いものにならないのに、コミュニティが無駄に分散するだけ
586デフォルトの名無しさん:2013/12/15(日) 14:39:32.00
結局、流行らなかったね
587デフォルトの名無しさん:2013/12/15(日) 15:10:56.92
世に出るのが遅かった
588デフォルトの名無しさん:2013/12/16(月) 22:59:56.69
>>584
えっ
589デフォルトの名無しさん:2013/12/16(月) 23:33:17.39
バックアップとれるサービスなら問題なかと
590デフォルトの名無しさん:2013/12/17(火) 00:34:25.27
>>587

1990年代に出ていればねえ。

あと、Javaがオラクルに買収されなかったら。とか。
JavaFXがもっと早くでていれば、とか。

最近Python人気がすごくて、何がなんでもPythonに集約しつつあり、それはそれでうっとおしい。
Pythonは好きじゃないから、Scalaにもっとがんばって欲しいところだが。
591デフォルトの名無しさん:2013/12/17(火) 00:41:51.60
こういう無茶苦茶な言語で痛い目を見ると、Pythonのガチガチ仕様も意義があるんだと実感する
592デフォルトの名無しさん:2013/12/17(火) 01:15:27.01
Pythonに集約しつつあるってどの分野かな?
うちはまだまだJVM言語強い。
593デフォルトの名無しさん:2013/12/18(水) 01:40:38.57
>>592
オライリーのプログラムサンプル付きのコンピュータサイエンスの本はほとんどpythonに集約されつつある
594デフォルトの名無しさん:2013/12/18(水) 16:16:53.60
Java書くならScala経由でやりたいけどclassがアホのように出てくるのは何とかならんのか
595デフォルトの名無しさん:2013/12/18(水) 16:34:30.07
ならない
ちなみにアホみたいにクラスが出てきて困る事ってあるの?
596デフォルトの名無しさん:2013/12/18(水) 19:42:10.50
Javaのプロジェクトはクラスの塊だものねぇ
597デフォルトの名無しさん:2013/12/18(水) 19:47:11.68
まあ1学年に100クラスもあったら困る。
598デフォルトの名無しさん:2013/12/18(水) 19:48:01.10
でっかい構文糖だもんね
599デフォルトの名無しさん:2013/12/18(水) 21:52:17.76
>>595
どの名前のファイルがいくつできるのかが事前の想像を超越してるので、ためして使ってみただけのときに、classファイルを消すときに他の必要なファイルも消してしまう
600デフォルトの名無しさん:2013/12/18(水) 22:00:54.87
>>599

ためしに使うときも、Jarで固めちゃうのを癖にすれば?
601デフォルトの名無しさん:2013/12/18(水) 22:19:07.97
>>595
Java8に移ればinvokedynamicでSAMと同じ方式で減らせるんじゃね?
602デフォルトの名無しさん:2013/12/18(水) 23:14:32.69
Javaの時点で少々のメモリ消費とか起動時間とかは気にしても仕方ないよな
サーバー専用なんだから問題にもならんし
603デフォルトの名無しさん:2013/12/18(水) 23:30:49.78
あくまでもプロトタイピング用であってサーバ用ではないと思う
604デフォルトの名無しさん:2013/12/18(水) 23:43:18.47
Rubyと同様に、趣味言語として作ったはずがドカタが使うようになってしまって
弄りたくても互換性壊したらボロカスに叩かれるから弄りづらくなるコースだな
605デフォルトの名無しさん:2013/12/19(木) 07:45:40.44
広まった段階で文法いじれなくなるわけではなく、python3のように新しい方言が出来たぐらいの扱いで使わないだけだとおもう。
scalaの場合はコンパイラのプラグインで、部分選択的に出来る気はするが。
606デフォルトの名無しさん:2013/12/19(木) 08:29:45.25
ソーシャル系webサービスの会社では、RESTサーバやバックエンドサービス、Java API作るのに使われてるみたいだけど、
どうもErlang/OTPアプリのJVMクローンをつくりたいという需要があったらしい。
型チェックがあって軽量化されたRailsのJVMクローンってのも、自社サービスの管理画面適当につくる需要を満たせそう。
(Groovyにもあったかもしれない、、、)

まとめると、JVM上でひとりでつくるには面倒だったツールが一部作りやすくなって増えてきた。
607デフォルトの名無しさん:2013/12/19(木) 08:55:43.56
管理画面をサクサク作るとかならGroovy(Grails)の方がScalaよりは良いのかな?
GORMでのマスタメンテナンス系は凄く便利だからな〜
Groovyの場合は動的だから実行時に型に関するエラーが発生する可能性はあるけど、メソッドとかクロージャの引数に型を指定しておけば、
実際の中の処理に入る前に例外が出るからPHPとかみたいに型に関するチェックを自前で書く必要は無い。
608デフォルトの名無しさん:2013/12/19(木) 09:01:42.21
表現力がその言語の全てとは言わんが
管理画面作るのが簡単という理由で言語選定するのは近視眼的すぎでは
609デフォルトの名無しさん:2013/12/19(木) 09:23:06.82
Hadoop/HBase使ったバックエンドのまさに管理画面の類いを作るのにGrailsを使って
いるけど、まあ正解だったかなと言う感じ。
JavaのAPIを直接叩けて他方でView周りは手を抜けるのは確かに楽。
ただGroovyの型検定はメソッド引数はGroovy2.0になってかなり強化されたけれども
クロージャーの引数はまだイマイチ。

あと別件でJavaで分散処理フレームワークを開発しているパートナーがあって、先日
話を聞いたところ次期リリースではワークフローを記述するDSLとしてScalaを使うと
言う話だった。もちろんSparkはすごく意識しているらしい。
610デフォルトの名無しさん:2013/12/19(木) 12:56:14.28
管理画面作るのが簡単という理由で言語選定するのが近視眼って
目的に合わせて言語を変えるのは至極真っ当だと思うが
611デフォルトの名無しさん:2013/12/19(木) 16:15:56.23
配列に格納されている個数が不明の要素を出来る限り同じ個数になるように10分割して、
分割したものを10個の配列などにそれぞれ格納していきたいのですがどうにかscalaっぽく綺麗に書けないですか?

170個の要素があれば、17個の塊を10つ
175個の要素があれば、18個の塊を9つ、13個の塊を1つ
のようにしたいんです
612デフォルトの名無しさん:2013/12/19(木) 16:25:23.83
175この場合は18個の塊が5つ、17個の塊が5つじゃダメなのかな。
613デフォルトの名無しさん:2013/12/19(木) 16:39:32.88
>>612
極端に要素の数が変わらなければ大丈夫です。
ただ、この175は場合によっては179になったり、場合によっては2万、3万になったりします。
後付けで申し訳ないですが、並列コレクションなどで高速化出来ると凄いありがたいです。
614デフォルトの名無しさん:2013/12/19(木) 16:50:56.11
最初の塊は1配列の先頭から数えて1個目から18個目、次の要素は19個目から36個目・・・
と元の配列の並びの区間で分割する必要があるのか、あるいは元の配列内での順番は
どうでも良く、単に18個、18個と塊に要素を埋めていけば良いのか。
615デフォルトの名無しさん:2013/12/19(木) 16:55:01.07
>>614
10分割出来れば元の順序は気にしません
バラバラになってもいいです
616デフォルトの名無しさん:2013/12/19(木) 17:16:05.28
ばらした後何をやるのか書いたほうがいいんじゃねーの?
分割数も10以外に変えていいのか?
617デフォルトの名無しさん:2013/12/19(木) 17:23:37.62
分割数は10が絶対です。
バラしたあとにどうするってのは上手く言えないです。どういう情報が必要ですか。
618デフォルトの名無しさん:2013/12/19(木) 17:29:48.83
m個目の塊のn個目の要素にアクセスするのには元の配列内でn*10+m番目の要素にアクセスすれば良い。
619デフォルトの名無しさん:2013/12/19(木) 17:51:04.44
こんな感じ?

def partition[A](x: List[A], N: Int): Iterator[List[A]] = {
val len = x.length
val n = len / N
val r = len % N
val prefix = r * (n + 1)
x.take(prefix).grouped(n + 1) ++ x.drop(prefix).grouped(n)
}

Range(10, 100) foreach { n =>
println(partition(Range(0, n).toList, 10).map(_.length).toList)
}

x が短いときは考えてない。
620デフォルトの名無しさん:2013/12/19(木) 18:43:53.53
>>619
上手く動きました
本当にありがとうございます
621デフォルトの名無しさん:2013/12/19(木) 18:57:29.75
List の長さが N (今回は 10) の倍数になるように
無害のダミー要素を追加しておいてから、

x.grouped(x.length / N)

とするチートもあります(ダミー要素が許容できれば)。

この方法なら List でなく Array or Vector にして >>618 さんの方法で
並列アクセスも簡単でしょう。
622デフォルトの名無しさん:2013/12/19(木) 19:10:54.64
↑ ああでもこれでは均等にはならないか...
623デフォルトの名無しさん:2013/12/20(金) 07:51:56.82
別解

行列の転置みたいなのを使う方法。
リストをN個ずつに分けたリストのリストを「転置」すればいい。

転置: 要素のリストの n 番目のものだけ集めたリストのリスト。
まあ zip のようなもの。

def transpose[A](matrix: List[List[A]]): List[List[A]] = {
@scala.annotation.tailrec
def r(m: List[List[A]], a: List[List[A]]): List[List[A]] = {
m.filter(_.nonEmpty) match {
case Nil => a
case x => r(x.map(_.tail), a :+ x.map(_.head))
}
}
r(matrix, List.empty[List[A]])
}

def partition[A](x: List[A], N: Int): List[List[A]] = {
transpose(x.grouped(N).toList)
}
624デフォルトの名無しさん:2013/12/20(金) 19:31:20.42
最近になって好奇心でやり始めたけど書きやすいなこれ
ライブラリ全然ないじゃんと思ってたらJavaから引っ張ってこれたし
なんで流行らないの
625デフォルトの名無しさん:2013/12/20(金) 19:41:40.17
Pythonこそが唯一無二の最強言語だから
626デフォルトの名無しさん:2013/12/20(金) 20:34:10.13
流行ってる方だと思うんだけどなあ
627デフォルトの名無しさん:2013/12/20(金) 22:15:50.62
浸透度は当たり前だがCとかJavaとかとは比べ物にならないし、Ruby、Python辺りにも負けてる
わけのわからない有象無象には確かに勝ってる
628デフォルトの名無しさん:2013/12/20(金) 23:15:53.62
アクターモデルおいしいお
629デフォルトの名無しさん:2013/12/20(金) 23:31:18.52
出てきた時期を考えたら健闘してる方だろ
630デフォルトの名無しさん:2013/12/21(土) 00:53:49.23
正式版で安易にいろいろ実験するもんだから後発の割に無茶苦茶散らかってて
それが敬遠される大きな理由になってる
マルチパラダイムに甘えてないで一回全部リセットして必要な物だけ残して綺麗にするべき
631デフォルトの名無しさん:2013/12/21(土) 01:41:24.68
experimentalな機能のこと言ってるんだったらそれで敬遠とかバカじゃねーの?と思うがどうか
SIPのリスト眺めても最近採用されたのは今使いまくってるしSIP-18以外必要だから残してくれ
xml(リテラル含む)とパーサーコンビネータは次で標準から分離されるな
632デフォルトの名無しさん:2013/12/21(土) 02:30:18.86
それを馬鹿で済ませられるならどんなに幸せか…
633デフォルトの名無しさん:2013/12/21(土) 03:10:07.44
>>630
んなことしたら、現在Scala採用してる海外有名Web系企業(Twitter, Foursquare, LinkedIn, Klout, ...)はブチ切れるだろうし、Web系以外のところはさらに悲惨になる
そもそも、Scalaは海外では、実用方面でそこそこバッシングが来るくらいまで成長してるのに(どの程度正しいかは別として、「使われてる」事の指標になってる)
そんな理由で敬遠する企業のためにリセットしないだろ。というか、実験的な機能をそのまま「正式に」取り込まないためにSIP-18 - Modularizing Language Features
があるわけで。まあ、標準ライブラリに「研究室」言語だった頃の名残は確かにあって、2.11以降そういう部分は削除か別jarに分離されていく
634デフォルトの名無しさん:2013/12/21(土) 03:16:49.51
あと、2.11の動きみてるとわかるが、言語機能の大幅な追加は当面はない(experimentalなマクロの安定化はやってるけど)。2.12はまだ先だけど、限定継続
コンパイラプラグインが標準添付からはずされる予定だし、Scala言語と処理系は当面、安定化路線で行くだろう。実験的なことしたい人はマクロ使って書けばいいので
(実際、最近はそうなってる)言語機能そのものを拡張する必要性がだいぶ薄れてるが
635デフォルトの名無しさん:2013/12/21(土) 14:54:43.73
>>632
それを幸せと感じるなら転職でもしたら?
636デフォルトの名無しさん:2013/12/21(土) 15:10:15.36
>>624
・REPLに記述するときと、コンパイラ言語として構造上読みやすく記述するときで、コードを変えなければならないから(コンパイルが通ったコードをそのままREPLで確認できない)
・複数のファイルがあるときに、REPLがめんどいから
・とにかくコンパイルが遅いから
637デフォルトの名無しさん:2013/12/21(土) 17:05:40.93
???
1,2行目ちょっとよく分からないんで具体例挙げて
638デフォルトの名無しさん:2013/12/21(土) 17:36:59.30
>>637
class Test(val s:Int)
{
}
はコンパイルできるけど、replで読むとコケる
class Test(val s:Int) {
}
としなくてはならない

replでは、クラスの定義は使うコードよりも前に定義が書いてないとコケる
コンパイルの場合はそこまでシビアじゃない

replで複数のコードを読み込んでテストするときには、一つのファイルを更新するたびに、いちいち全部のファイルを順番通りに読み込みなおす必要がある(しかも遅い)
639デフォルトの名無しさん:2013/12/21(土) 18:56:10.61
sbt consoleでいいじゃん
640デフォルトの名無しさん:2013/12/21(土) 19:44:55.17
>>638
>>636

どちらも、
最近のLL言語がかかえる問題だね。
改行を構文区切りとして認めると、 記述時に ; を書かなくて良い反面、
構文区切りじゃないところで、構文を区切ってしまうという欠点がある。

このせいで、
> class Test(val s:Int) {
> }
みたいに、構文スタイルに制限をつける必要がある。
こんなことなら、最初から、Pythonみたいに、字下げも構文に含めてしまって、
コーディングスタイルガチガチに固めてしまって不自由言語として再出発しても良いかもね。


ただ、これらを、Scalaが流行らないことの理由として挙げる>636 はただのヒレクレ者。
641デフォルトの名無しさん:2013/12/21(土) 21:53:19.23
>>636
コンパイル通ったコードをそのままREPLにコピペしたけりゃ:pasteコマンド使えばいいだろ
642デフォルトの名無しさん:2013/12/21(土) 23:33:23.05
実行環境的にC++代替やJavaScript代替はまず不可能で
Javaや.net、Perl、PHPの置き換えってあたりで一定以上は流行らんだろ
しかもJavaや.netやPHP使ってる層の過半数はこの手の言語やらないだろうし
643デフォルトの名無しさん:2013/12/22(日) 01:17:38.99
Scalaを説明しようとすると、まずJVMから説明しなければいけないからなあ。

そういう意味で、 >642 の逆で、
今、Java , .net ,PHP 使っている人にとっては、Scalaは敷居低いと思う。

JavaFX がうまく流行すれば、デスクトップ系の開発やっている人にもアピール度が高いのだが。
644デフォルトの名無しさん:2013/12/22(日) 01:21:53.50
そこそこ受け入れられたのは敵がJavaだったからでしょ
スクリプトならPythonやRuby、デスクトップならC#という超優秀な敵が相手だからなあ
645デフォルトの名無しさん:2013/12/22(日) 04:12:36.29
そもそもscalaをスクリプトで使ってる人いるのだろうか…
事務処理系の雑用スクリプトとしてはストレス溜まるし、scalaの納品物で見たことがあるのはjarだけだし
646デフォルトの名無しさん:2013/12/22(日) 08:51:23.13
サーバーサイドとしてしかマトモに使えないよね
デスクトップ用にGUI付きのを開発するなら各OSにもっと簡単に出来るのがある
647デフォルトの名無しさん:2013/12/22(日) 10:31:58.95
そもそもGUI目的ならJavaそのものが死んでいる。
648デフォルトの名無しさん:2013/12/22(日) 10:47:30.32
やはりC#こそが最強
649デフォルトの名無しさん:2013/12/22(日) 11:14:35.19
C#はPython系だよな
理論や一貫性よりもユースケースを重視するタイプ
650デフォルトの名無しさん:2013/12/22(日) 13:29:03.36
たまには F# のことも思い出してあげて下さい
651デフォルトの名無しさん:2013/12/22(日) 16:42:29.23
>645
オレはスクリプトとして使っているよ。
普段あんまりしないことをするときには静的言語の方が
早くライブラリを使えるようになるから。

それと、数年ぶりに昔作ったスクリプトを動かしてもトラブルが少ないのがいい。
652デフォルトの名無しさん:2013/12/22(日) 17:18:32.02
そもそもjavaに互換性がないしな…
3年前のclassファイル動かないぞ
653デフォルトの名無しさん:2013/12/22(日) 17:29:53.10
昔のjavaで今のclassは動かないけど、今のjavaで昔のclassは動くだろ
654デフォルトの名無しさん:2013/12/22(日) 17:43:06.58
>>653
APIがコロコロ変わったり、非推奨が消えたりしてるから動かない
だから納品するときはJREも添付してる
655デフォルトの名無しさん:2013/12/22(日) 17:58:02.87
javaでDeprecatedなものが削除された事なんてよくあったっけ?
656デフォルトの名無しさん:2013/12/22(日) 18:53:17.96
>>654
外部ライブラリじゃなくてJREでそこまで変わってるか?

メジャーバージョンアップごとに非互換ちまちまはあるが
未だに1.0の頃のクソAPI残ってるくらいのレベルの変更を
コロコロ変わると言う人は初めて見た
657デフォルトの名無しさん:2013/12/22(日) 18:53:40.73
>>655
非推奨関数は残っているけど関数の中身が空になってることはある。
658デフォルトの名無しさん:2013/12/22(日) 19:12:28.76
JREの変更で困った具体例を知りたいところ。
659デフォルトの名無しさん:2013/12/22(日) 19:37:33.20
Java6が出てから7も経つんだな。
Javaの互換性が気になるのはここ数年は無いかなぁ。
最悪、複数バージョンのJRE入れればいいし。
Scalaの変更も落ち着いたし、今は良い時期だと思うよ。

Pythonは昔は好きだったんだけど、
アップデートでライブラリが動かなくなるのはザラだし
エンコード関係のトラブルもしばしば。
あと、エコシステムがつぎはぎで不完全なのがきつい。
最近はPython3000(笑)だし

Scalaが出た以上は使い処が無くなった感じ
660デフォルトの名無しさん:2013/12/22(日) 19:44:09.32
もう大体Python3への移行は終わった
とはいえ、Scalaと競合する感じでもない
661デフォルトの名無しさん:2013/12/22(日) 22:12:17.34
> もう大体Python3への移行は終わった
そうなのか、でももうPython環境維持するコスト払いたくないから
Scalaでいいや。
scala.sys.processが優秀だから当面は雑スクリプトはScalaで済ませるよ。
662デフォルトの名無しさん:2013/12/22(日) 23:32:29.42
>>647
> そもそもGUI目的ならJavaそのものが死んでいる。

まあまあ。
以外と、JavaFXっていけてるよ。
触れてみると意外にも良いから、流行しそうな予感。



これが、4,5年前に出ていれば。
663デフォルトの名無しさん:2013/12/22(日) 23:39:32.57
業務クライアントならWindowsやOfficeとの緊密な連携ができないと意味がない
Webでいいやってなっちゃうからな
664デフォルトの名無しさん:2013/12/23(月) 00:30:07.36
ScalaFXって一時期死んでいた気がするけど、今はどう?

>これが、4,5年前に出ていれば。
WPFもそうなんだけど、今更感が強すぎる。
結局クライアントが重くていいならWEB、
軽さが必要ならC++で書くほか無いからね。
665デフォルトの名無しさん:2013/12/23(月) 01:05:08.11
>>653
コード片生成してサーバで動的コンパイルするタイプのやつは完全に死ぬ
666デフォルトの名無しさん:2013/12/23(月) 01:41:22.17
30分でプロトタイプ作って、最悪の場合はプロトタイプの雑なコードをコンパイルして穴埋めして納品する
という使い方ならpythonでもC++でもなくscalaではないかと
667デフォルトの名無しさん:2013/12/23(月) 03:06:32.31
AWTが死んでてSwingがメンテモードで新機能対応止まってるから
枯れてなくてもFX行くしかないのがな
668デフォルトの名無しさん:2013/12/23(月) 05:29:26.80
javaのGUIで必要なのは新機能ではなく既存機能の高速化
669デフォルトの名無しさん:2013/12/23(月) 07:35:48.66
JavaFXの仮想敵はVCや.NetではなくQtだと思う。
670デフォルトの名無しさん:2013/12/23(月) 08:31:24.04
2年前の記事だけど

http://www.atmarkit.co.jp/ait/articles/1107/22/news141_2.html
>●Scala
>残念ながら、ScalaにはC#のイテレータ・ブロックや、Pythonのジェネレータに当たる機能はない。

これって、そうなの?
671デフォルトの名無しさん:2013/12/23(月) 09:12:50.34
ジェネレータはストリームかも(遅延評価)
672デフォルトの名無しさん:2013/12/23(月) 10:52:43.57
QtはQMLで迷走しているのがちょっと。
商用ライセンスがゲロのように高額なのも
確かによくできたライブラリではあるんだけど。
673デフォルトの名無しさん:2013/12/23(月) 12:40:09.56
これってListにラムダ関数押し込めるんじゃダメなの?
674デフォルトの名無しさん:2013/12/23(月) 12:43:44.49
Javaクライアントはまだ業務特化なら需要はあるのにな
何十年間も現実から目を逸らしてクロスプラットフォームなんて幻想に拘り続けたからこうなった
675デフォルトの名無しさん:2013/12/23(月) 12:46:21.57
>>673
条件分岐はどうするんだよ
C#のイテレータやPythonのジェネレータは完全なステートマシンを自然なコードで書けるの
676デフォルトの名無しさん:2013/12/23(月) 12:57:03.75
それを自然じゃないコードで書くアプローチがscala-machinesやhano
677デフォルトの名無しさん:2013/12/23(月) 13:12:45.99
ゴミですな
678デフォルトの名無しさん:2013/12/23(月) 13:21:38.77
関数型的じゃないし実装が非常に面倒だから嫌なんだろうけど
ステートフルな部分を簡単にストリームに押し込んでしまえるから
総合的に考えれば、より関数型に近いコードを書くのに役立つ機能だと思うわ
679デフォルトの名無しさん:2013/12/23(月) 13:41:50.21
こういう、Haskell的なアプローチは
なんでもオブジェクト指向で解決時代の迷走を思い出させる。

ステートは普通にオブジェクト指向的に実装して、
関数型的な部分と独立させるのが好みだわ。
680デフォルトの名無しさん:2013/12/23(月) 19:18:41.73
>>638
> >>637

REPLのPasteモードじゃダメなの?

https://gist.github.com/gkojax/7782764
REPL上で「:paste」と打ってみて下さい。pasteモードに入ります
681デフォルトの名無しさん:2013/12/23(月) 20:17:47.42
限りなく純粋だったあの頃が忘れられずに
ScalazでStateモナドつかってコード書く人もいるんですよ!
682デフォルトの名無しさん:2013/12/23(月) 20:34:09.95
683デフォルトの名無しさん:2013/12/28(土) 11:03:06.31
Array("aaa-bbb.txt", "ccc-ddd.txt", "eee-fff.txt")
から
Array("aa", "dd", "gg")
を関数型的に作成するには、どんなコードを書けば良いでしょうか?
684683:2013/12/28(土) 11:07:17.19
欲しいのは"aaa", "ccc", "eee"を含むコレクションです
Array以外でも構いません、間違てすみません
685デフォルトの名無しさん:2013/12/28(土) 11:18:29.06
>>684
Array("aaa-bbb.txt", "ccc-ddd.txt", "eee-fff.txt").map(_.substring(0, 3))
686デフォルトの名無しさん:2013/12/28(土) 11:22:29.74
Array("aaa-bbb.txt", "ccc-ddd.txt", "eee-fff.txt").map(_.split('-').head)
687683:2013/12/28(土) 11:27:05.26
>>685,686
ありがとうございます!
688デフォルトの名無しさん:2013/12/30(月) 11:53:52.42
Scalaでspecializedアノテーションを使って作成したクラスを
Javaから使用することはできるのでしょうか?
また、できる場合はクラス名とかメソッド名に$などが付いたものを
直接指定したりするのでしょうか?
689デフォルトの名無しさん:2013/12/31(火) 00:51:15.86
scalaのmacrosについて勉強を始めるとしたらどのバージョンからが良いんだろう
690デフォルトの名無しさん:2013/12/31(火) 15:48:49.93
HEAD + macro paradise
691デフォルトの名無しさん:2014/01/01(水) 22:29:17.03
不変クラスって限界があると思うんだけど線引きの目安とかってあるん?
692デフォルトの名無しさん:2014/01/03(金) 10:08:43.74
ビルダクラスなんかは無理に不変にすると無駄に複雑になるだけだからやめたほうがいいかも
クラス自体がいくら不変でもクラスの外から見たら不変ではない場合もあるな
DB使ってたりとか
693デフォルトの名無しさん:2014/01/03(金) 10:42:14.54
あとは性能面だな
1億要素のコレクションを毎回コピーするのは無理があるし
1億個のインスタンスを作って捨てるのも無理がある

Listを受け取ってListを返す関数でも内部では一旦配列に変換して
処理するようなことはよくある
694デフォルトの名無しさん:2014/01/03(金) 11:23:13.00
scalaってC++に組み込むluaみたいに使える?
695デフォルトの名無しさん:2014/01/03(金) 11:39:46.27
無理
ガチガチの静的言語だから融通利かないしコンパイルも起動もクソ遅いし
何よりわざわざホストを別の言語で書く意味が無い
696デフォルトの名無しさん:2014/01/03(金) 12:26:12.42
C++のプログラムにJVM組み込んでScala動かすこと自体はできる
すでにC++とScalaの資産が山ほどあるって状況じゃない限り
695のように旨みはほとんどない
697デフォルトの名無しさん:2014/01/03(金) 12:50:19.82
旨みは必要ない
そこに山があるから登るだけ
698デフォルトの名無しさん:2014/01/03(金) 13:13:46.22
アルピニストのお方だったか
699デフォルトの名無しさん:2014/01/03(金) 18:43:09.91
最近分散処理とかでよく聞くけどAkkaフレームワークの処理能力ってどんなもんなん?Javaのスレッドより速い?
700デフォルトの名無しさん:2014/01/03(金) 18:50:29.24
処理能力よりも記述の容易さを評価したい
701デフォルトの名無しさん:2014/01/03(金) 19:42:57.55
>>699
速くないけど考えるのが楽で安全
もしミスなく大して変わらない時間でマルチスレッドで書けるならそっちのほうがいい
702デフォルトの名無しさん:2014/01/03(金) 19:43:04.87
AkkaはErlang相等のスレッドプールとノンブロッキングなメッセージ通信、
ノード障害対応などに重点を置いたフレームワーク。

単一マシン上のスレッドで対処できなくなっても、コードそのままで
複数ノード方向へスケールできるのがAkkaのコンセプトであることから
Javaのスレッドと性能差を比較するのはあまり意味が無いといえるよね
703デフォルトの名無しさん:2014/01/03(金) 19:46:33.17
Futureとアクターの有効な使い道がいまいちわからん
コードはいらんから考え方だけでもだれか具体的に教えてくれ
スレッドでやることとの違いもあれば嬉しい
704デフォルトの名無しさん:2014/01/03(金) 21:31:16.74
使い道というか、相互通信の組合わせ数などで見た並列処理の複雑性や、
将来発生する(かもしれない)リソース排他バグ、性能問題等に対して
どれくらいコストを掛けれるかでそれぞれ適用範囲が異なる。

自分がScalaアクターを使う場合のポイントは
- Scalaは関数を第一級オブジェクトとして扱える
- 関数型の参照透過性は、並列処理においてしばしば再現が難しいバグを引き起こす想定外の副次的な悪影響を避けることができる
- 並列処理部分を引数から結果を求めて返す純粋な関数にブラッシュアップし、Futureやアクターに実際の計算をさせる
- Futureやアクターへの非同期メッセージは、仕事を依頼しておいて結果が出るまで他の処理ができる
- 複雑なやりとりなら並列コレクションでべた書きするより、役割としてコードに明記したい
- Akkaアクターなら負荷が増大してもノード増やして対処可能
- Typesafe謹製のツールが使える
- あと、Scala命名の由来が「スケーラブル」だってのにわざわざ低レベルのスレッド&排他処理でガシガシ書くのはなんだかなーって気持ちの問題
705デフォルトの名無しさん:2014/01/03(金) 23:56:20.82
現実問題、複数ノード構成クラスタにまで発展するような問題だと
ビッグデータソリューション(MapReduce)を相手にすることになるから
最初からHadoop使って見積りマシマシ案件でいこうぜってなりがち(アホSIer絶滅しろ)

そんななか、Scala+Actor+Sparkで頑張ったよというレポートがこちらになります。わーパチパチ
http://www.slideshare.net/knoldus/unicom-ppt-big-data-delhi
706デフォルトの名無しさん:2014/01/04(土) 00:11:26.54
でかい処理でコア使い切るのが目的なら、アクタ使うよりも
なるべく外側のループを並列実行するのが確実安全高速
安易にアクター使わないで、まずはもっと確実な予測しやすい方法でシンプルにやれないか検討した方がいいよ
707デフォルトの名無しさん:2014/01/04(土) 00:58:21.33
外側のループを並列実行ってどういうことですか?
708デフォルトの名無しさん:2014/01/04(土) 01:45:13.66
>>707
Scalaと関係ない話だが
お前のHDDにある大量のエロ画像全部に対してぼかし処理(自分と周囲の画素の平均が結果の色になる)をかけたいとする
この処理は処理対象の各画素について独立なので、並列化の最小単位は画素になる
並列化するとしたら、「x方向の繰り返し」「y方向の繰り返し」「各画像ファイルに対する繰り返し」のどれかになるだろうな
この場合、汎用性を考慮しないなら「各画像ファイルに対する繰り返し」を並列化するのが正解だ
一般に、並列化はなるべく大きな単位で行うのが望ましい
その方が並列化できる部分が増えるし、スケジューリングやら同期化やら通信やらのコストも小さくなるし、プログラミングも容易だからな
709デフォルトの名無しさん:2014/01/04(土) 02:16:58.90
Scalaのレベルでいわゆるparallel forってサポートしてたっけ?
710デフォルトの名無しさん:2014/01/04(土) 06:52:11.44
ParSeq
711デフォルトの名無しさん:2014/01/04(土) 10:21:14.22
>>708 その構成だと結局File IOがボトルネックになる問題だし
最初からそれ以上スケールしないという前提の問題なのだとして例を挙げたのなら
そもそもアクターを採用する必要の無い例題を挙げているわけでScalaと関係ないどころか
話の流れにすら関わっていないと思う
712デフォルトの名無しさん:2014/01/04(土) 10:30:18.42
>711
横だけど、

アクターが必要なケースはリモートサービスで粒度の細かいリクエストが
数万単位で降ってくる場合以外はまずないわけで
708は、アクターは過半数のプログラマには必要の無い機能だと言いたいんじゃないの?
713デフォルトの名無しさん:2014/01/04(土) 10:36:22.40
アクターは並列というか非同期処理だよな
バカでかい処理の並列化なんてもしあってもだいたいデータ並列だから並列コレクションで足りてしまう
714デフォルトの名無しさん:2014/01/04(土) 12:19:52.61
結局、並列コレクションがあればアクターは使い道がほとんどないってことなの?有用なのはどういうときなんだよ
715デフォルトの名無しさん:2014/01/04(土) 12:49:02.10
問題領域を限定しないまま適用範囲が異なるツールを比較することになんの意味があるんだ?
道具を使うために問題があるんじゃないんだよ、本末転倒だってことにいい加減気づけよ
716デフォルトの名無しさん:2014/01/04(土) 12:52:43.61
元のスレッドをブロックしたくないとき
717デフォルトの名無しさん:2014/01/04(土) 14:11:31.69
> 結局、並列コレクションがあればアクターは使い道がほとんどないってことなの?有用なのはどういうときなんだよ
HDDのエロ画像のように処理開始時点でやるべきことが全部わかっているときは
並列コレクションの方がよい

どんどんエロ画像がウプされるサーバだと、
エロ画像がウプされる度に(非同期的に)処理をするから
並列コレクションが使えない。
こういうときにはアクター。

艦これのゲームサーバなんかはアクターに向いている。
つまり、java.NIO2を使うような局面ね。
718デフォルトの名無しさん:2014/01/04(土) 14:15:24.15
>>717
並列コレクションは使えないけどFuture系のなら使えるよね
719デフォルトの名無しさん:2014/01/04(土) 14:20:49.45
使ったことないけどアクターは仕事の違う人間による流れ作業みたいな感じなんじゃないの
自分の担当することをやって次の人に仕事の続きを任せるみたいな
720デフォルトの名無しさん:2014/01/04(土) 14:37:58.63
>718
Futureは後で計算結果を回収するために機構だから、

エロ画像をフィルタした後データベースに書き込むのは
投げっぱなしジャーマンでかまわないから
Futureは不要。
721デフォルトの名無しさん:2014/01/04(土) 17:04:11.10
>>720
すまん、Executorって言いたかった
例に挙がってるような状況だと
Concurrency in Scala ttp://twitter.github.io/scala_school/concurrency.html
のやり方で足りててAkka Actor使おうとしたら
むしろ前準備や制御が面倒に感じた
722717:2014/01/04(土) 17:23:44.23
使いたいだけなら
scala cookbookの説明がわかりやすかった。
http://alvinalexander.com/scala/scala-akka-actors-ping-pong-simple-example

> どんどんエロ画像がウプされるサーバだと、
> エロ画像がウプされる度に(非同期的に)処理をするから
> 並列コレクションが使えない。
> こういうときにはアクター。

正直このような場合でもネットワークIOはブロッキングにして、
エロ画像にフィルタをかける処理を並列コレクションで記述した方が書くのは楽。
速い可能性が高い。
723デフォルトの名無しさん:2014/01/04(土) 18:08:47.69
なんかのネットワークとか木構造みたいなのでノード一つ一つをアクターにすればいいんじゃないの(適当)
724デフォルトの名無しさん:2014/01/04(土) 18:11:39.49
そもそもマルチスレッドでもどこが早くできるのかよくわからんし
725デフォルトの名無しさん:2014/01/04(土) 19:03:33.26
アクターもスレッドも、ともに並行性(Concurrency)を扱うためのメカニズム
並列コレクションは名前の通り、並列性(Parallelism)を扱うためのメカニズム
並行性と並列性の意味はぐぐればでてくるので省略

もちろん、アクターもスレッドも複数のCPUが割り当てられる限り、処理の並列度を高めるのに使えるが
並列コレクションは逆に並行性を(通常は)取り扱えないというか取り扱うのに使ってはいけないという
根本的な違いは理解しておいた方がいい
726デフォルトの名無しさん:2014/01/04(土) 19:45:04.52
将来もずーっと、単一ノードのマシン構成で計算可能な問題ですよーという
設計書でクライアントが納得するんなら好きな実装で書けばいいけど

そんなクライアントでも、「急な負荷増大で処理能力追いつきませんでしたー(アハハー)」
なんて言い訳はまず許されないからな。
727デフォルトの名無しさん:2014/01/04(土) 19:53:30.25
アクターは割と安全で簡単に作れるんだから小物なら実装してみて早くなればそのまま使えばええねん
大抵早くなる
728デフォルトの名無しさん:2014/01/04(土) 20:04:53.24
Akkaは導入コストの安さとメンテナンスへの備えバランスが魅力
最初から象を相手にできる富豪ハンターばかりじゃないんだし
729デフォルトの名無しさん:2014/01/04(土) 20:38:55.70
この流れに便乗してひとつお尋ねしたいのですが、
マルチスレッドに対するアクターの利点を同僚に説明しないといけなくなりました。
しかし、自分の並行(並列?)プログラミングへの入り口がScalaのアクターでそれ以外を勉強しなかったため、
いまいちマルチスレッディングの面倒臭さや怖さがわかりません。
よろしければ教えてください。
730デフォルトの名無しさん:2014/01/04(土) 21:00:18.48
- 複数リソースに対するロック取得順序を間違うとデッドロック
- 必要なロックの取得を忘れていたら処理結果が破綻
- ロックの開放が抜けていたらデッドロック
- ロック範囲が不適切に長いと性能低下を引き起こす
- スレッド間のメッセージ通信はセマフォやメッセージキューなどのスレッドセーフな仕組みで適切に実装されていなければならない
- バグの再現が困難
731デフォルトの名無しさん:2014/01/04(土) 21:08:15.90
マルチスレッドだと複数人で材料をこねくり回すように、データを弄っていく
この複数人間で上手くやり取り出来ていれば早いんだが少しミスるとわけのわからないものになる

アクターだと自分の担当部分をしたら次の担当にそれを渡していくってのを繰り返していくイメージ。アクターはメッセージを受け取った順序はどうでもいいとしてるけど、Scalaのはキューでメッセージを受けるから順番も再現されるのかな

間違ってるかもしれんが例えるとこんな感じ
732デフォルトの名無しさん:2014/01/04(土) 21:10:06.90
佐藤先生の日記 2010年2月26日 のActorモデルの盛衰に関する考察も興味深い
http://home.att.ne.jp/sigma/satoh/diary/diary100331.html
733デフォルトの名無しさん:2014/01/04(土) 21:27:16.96
マルチコアCPUになってきて並列並行の処理が使えた方がいいって流れで大衆的なものが必要になったのかな
マルチスレッドは使いやすいとはとても言えない
アクターや並列コレクションは適当でいいから楽
734デフォルトの名無しさん:2014/01/04(土) 21:29:31.21
良いところはバカでも簡単に使えて、よほど使い所を間違えない限り早くなることが多いってところかな
マルチスレッドで考えられるならそっちの方が絶対にいい
735デフォルトの名無しさん:2014/01/04(土) 21:35:09.75
> マルチコアCPUになってきて並列並行の処理が使えた方がいいって流れで大衆的なものが必要になったのかな

ちがう、プロセッサの細密化に限界が来てムーアの法則にタダ乗りできていた
今までとは別のソリューションが必要になったということ。
すなわち、これからはソフトウェア側でも頑張って並列処理を書いてねというパラダイムシフト
736デフォルトの名無しさん:2014/01/04(土) 21:38:50.66
ScalaのActorはそんなご大層なもんじゃ無くて

ネットワークIOの多いアプリで
問い合わせごとにActorを生成して
ActorがDBにトランザクション発行してクライアントにレスポンスするって
流れにするんで良いんじゃ無いかな。

Actorの長所は
ActorSystemがメッセージキューも兼ねるから、
実スレッド数を気にしないでポンポンActorを作成しても問題ないって
ことだと思う。
Actor同士の通信とかは、使う機会あんまり無いと思うよ。

それと万が一パフォーマンスが厳しくなったら
複数マシンに分散しやすいと

DBにsqlite使うも、Spark使うもその辺は御勝手に
737デフォルトの名無しさん:2014/01/04(土) 21:51:34.10
> マルチコアCPUになってきて並列並行の処理が使えた方がいいって流れで大衆的なものが必要になったのかな
アプリを速くしたいだけなら
まずはC++に書き直したり、余計な中間レイヤーを抜き、データをオンメモリで持つ方向が良い。
POCO C++とかboost::asioとか使いやすいライブラリ増えてきているし
さっきのエロ画像処理なんかはSIMDも使って相当速く書ける。

Actorは逆にプロセッサがシングルコアでもお手軽にノンブロッキングIOが使えるようにするためのものだと思う。
738デフォルトの名無しさん:2014/01/04(土) 22:00:44.73
>>737
>アプリを速くしたいだけなら
>まずはC++に書き直したり、

これを言っていいのか
書きやすいからscalaを使うんだろうし、その中で速さを求めるならアクターも考慮に入れるべきだろう
739デフォルトの名無しさん:2014/01/04(土) 22:09:40.83
>>737 >>734 >>731 はスルー力が試されていると思ってた
740デフォルトの名無しさん:2014/01/04(土) 22:13:47.48
並列コレクションと同じでリスクがほとんどなく使えば少し速くなるってことで良いと思うんだけどねえ
akkaのはまた話が違うのかもしれんが
741デフォルトの名無しさん:2014/01/04(土) 22:16:52.62
scalaにくっついてるアクターについてはオライリーもコップ本もそんな風にしか触れてなかった
742デフォルトの名無しさん:2014/01/04(土) 22:24:01.15
2.11.0からScala本体のActorはDeprecatedになるんですよ

http://docs.scala-lang.org/overviews/core/actors-migration-guide.html

Starting with Scala 2.11.0, the Scala Actors library is deprecated.
Already in Scala 2.10.0 the default actor library is Akka.
743デフォルトの名無しさん:2014/01/04(土) 22:27:51.15
akkaが代わりになるからそうなるんだろうけど、
アクターを入れた元々の理由はなんなんだろうか
744デフォルトの名無しさん:2014/01/04(土) 22:32:42.49
オリジナルアクターとAkkaアクターの違いが理解できないクラスタ
745デフォルトの名無しさん:2014/01/04(土) 22:36:37.59
akkaのは違うコンピュータやサーバー同士で遠隔地で連携できるんじゃないのたぶん
746デフォルトの名無しさん:2014/01/04(土) 22:38:54.60
イミュータブルで状態を持たないでやろうっていうscalaの方針に、マルチスレッドよりアクターのがしっくり来たんじゃね?
747デフォルトの名無しさん:2014/01/04(土) 22:47:01.77
Scalaアクターのメンテナ Philipp Hallerさんのサイト
(http://lampwww.epfl.ch/~phaller/actors.html)にOdersky先生との共著論文があってー
Scalaアクターの基礎と方向性はこれで固められていてー
AkkaはJavaもサポートするフレームワークとして開発されていたのをTypesafeに吸収されてー
Philipp HallerさんもTypesafeのコンサルタントでー
Scalaアクター→Akkaアクター移行ツールも用意されていてー
違い気にする必要あるんか?
748デフォルトの名無しさん:2014/01/04(土) 23:01:03.15
みんながみんな違うことを言ってる
結論はなんなんですか
749デフォルトの名無しさん:2014/01/04(土) 23:14:13.68
最近はOSとコンパイラがなんとかしてくれるから放っとけばええねん
750デフォルトの名無しさん:2014/01/04(土) 23:25:38.59
本当に知りたいならツイッターとかで捨て垢で偉い人を質問攻めにしたればええねん
751デフォルトの名無しさん:2014/01/04(土) 23:27:47.72
マサカリ飛んでくるような挑発ワードを適当に散りばめておくのがコツやで
752デフォルトの名無しさん:2014/01/04(土) 23:29:37.68
おまえら...
ちゃんとScala日本ユーザーグループに本アカウントで礼儀正しく質問しろや
753デフォルトの名無しさん:2014/01/04(土) 23:29:56.04
どこを見てもマルチスレッドより安全です!しか書いてない
754デフォルトの名無しさん:2014/01/04(土) 23:30:28.25
日本のscalaユーザは口だけの無能ということやね
755デフォルトの名無しさん:2014/01/04(土) 23:43:28.86
>>751
例えばどんなワードや
Scalaは所詮オモチャ、とかそんな感じか
756デフォルトの名無しさん:2014/01/04(土) 23:46:09.28
Clojure >>>>> 越えられない壁  >>>>> Scala
757デフォルトの名無しさん:2014/01/05(日) 00:38:07.35
>>756
Clojureは圧倒的なクリーンさが魅力だよな
Scalaみたいな魔窟にはならないでほしいわ
758デフォルトの名無しさん:2014/01/05(日) 00:42:29.75
なんでこんなに複雑怪奇な言語になっちゃったんだろう
C++を軽く超えてるよね
759デフォルトの名無しさん:2014/01/05(日) 01:04:30.47
>758
C++と違ってpitfallはほとんど無いからそれは感じないかな。
複雑なのの半分はシンタックスシュガーだしね。

海外勢のscala論者がどんどんclojureに乗り換えて行っているのは気になる。
760デフォルトの名無しさん:2014/01/05(日) 05:36:40.98
>>732
佐藤先生の日記は興味深いこともあるのだけど、アクターモデルという言葉だけから
ErlangやScala Akkaなどのアクター(佐藤先生はこれらについては、個別にどれだけ調査されたか若干微妙に思える)が
昔のアクターモデルと同じようなものという感想を持たれている節があるからその辺は割引いて考えた方がいいかも。
761デフォルトの名無しさん:2014/01/05(日) 05:48:03.91
>>759
どっちかというと、ホビーでScalaやってた層が、(次の流行を狙って?)Clojureに手を出してる傾向が強いように見える
(dppは最近Clojure推しだけど、Play 2推しの裏でLiftがハブられたという政治的事情もあるし)

Clojureの人気が伸びてるのはClojure関係なしに使えるStormが出てきたのが大きい。一方ScalaはSparkの人気が
急速に高まっていて(正確にいうと、SparkコミュニティはScala製だからというより、機械学習等の特定用途でHadoopより性能が
出るから)、Spark Summit(有料イベント)で400名超埋まってたりする
762デフォルトの名無しさん:2014/01/05(日) 05:56:16.93
>>758
Scalazみたいな(元来は特殊であった)ライブラリ使わなければそうそう怪しげな挙動にひっかかることはないと思う
implicit parameterの解決方法は実際のところ複雑ではあるんだけど。Scalaはコアの部分はかなりちゃんとしてるんだけど
それとシンタックスシュガー(どこまでをシンタックスシュガーを呼ぶかは考える必要が有るけど)を混同しがちなので、複雑怪奇にみえるという側面はあると思う
763デフォルトの名無しさん:2014/01/05(日) 15:26:41.39
Sparkの使い方とかを日本語で書いてくれてる本とかサイトとかないですかね
やっぱり英語のドキュメントを読むしかない?
764デフォルトの名無しさん:2014/01/05(日) 15:48:54.61
今月号の日経ソフトウェア、Scalaの紹介の特集記事があるぞ。

日経ソフトウェアって、近所の全ての本屋で、発売から2週間以内に売り切れる。
765デフォルトの名無しさん:2014/01/05(日) 15:59:33.03
立ち読みしたけど大したこと書いてなかった
766デフォルトの名無しさん:2014/01/05(日) 17:04:17.29
Sparkって何するもの?
767デフォルトの名無しさん:2014/01/05(日) 17:22:35.15
clojureもrubyと同じように、関数の入り口で壮大なスイッチ文になるのだろうか
768デフォルトの名無しさん:2014/01/05(日) 17:58:53.84
マルチメソッドか、失礼
769デフォルトの名無しさん:2014/01/05(日) 20:02:47.04
Sparkがビックデータを使って何かをするのは知ってるし興味はあるけど、
どうやって扱うのか、そもそも何なのかもわからない
770デフォルトの名無しさん:2014/01/05(日) 20:07:06.91
ドキュメント読めよwww
771デフォルトの名無しさん:2014/01/05(日) 20:10:09.92
理解するだけじゃなく、翻訳も同時にしないといけないとか面倒だから誰か翻訳しろ
772デフォルトの名無しさん:2014/01/05(日) 20:14:44.36
Apache Spark is an open source cluster computing system that aims to make data analytics fast ― both fast to run and fast to write.

アパッチ スパークはオープンソースのクラスターコンピューティングシステムです。データ解析を高速に行うこと(高速に動く、高速に書き込む)を目標としています。
773デフォルトの名無しさん:2014/01/05(日) 20:20:36.30
To run programs faster, Spark offers a general execution model that can optimize arbitrary operator graphs, and supports in-memory computing, which lets it query data faster than disk-based engines like Hadoop.

プログラムをより高速に動かすため、スパークは任意のオペレータグラフ(よくわからん)を最適化し、
Hadoopのようなディスクベースのエンジンよりも高速にデータをクエリできるインメモリコンピューティングをサポートする
一般的実行モデルを提供します。
774デフォルトの名無しさん:2014/01/05(日) 20:26:07.67
To make programming faster, Spark provides clean, concise APIs in Scala, Java and Python. You can also use Spark interactively from the Scala and Python shells to rapidly query big datasets.


プログラミングをさっさと終わらせるために、スパークは綺麗で簡潔なScala、Java、そしてPythonのAPIを約束します。
A calaとPythonのシェルで対話的にスパークを使うことで早くビッグデータセットをクエリできます。

なるほどわからん
775デフォルトの名無しさん:2014/01/05(日) 20:33:02.59
見事にbuzz wordsが並んでいるだけで内容0の説明だな。
かくいう俺も、原文見に行ったけどなんなのか理解できなかった。
776デフォルトの名無しさん:2014/01/05(日) 20:40:53.75
要するに高速で高速で高速だからスパークなんですってことだろ
777デフォルトの名無しさん:2014/01/05(日) 20:43:15.88
faster使いすぎだろ
バカにしてんのか
778デフォルトの名無しさん:2014/01/05(日) 20:47:20.92
他のところ見てきたけどバカみたいな量のデータから語句を探してきたりするのに、メモリにデータを展開してから並列処理でやれば早いんじゃね?ってことだった
実体がどうなってるかは使う気ないのでわかりません
779デフォルトの名無しさん:2014/01/05(日) 21:12:25.50
BIGDATA持っていないとまったく意味が無さそうだな
780デフォルトの名無しさん:2014/01/05(日) 21:16:03.81
しかも日本だと持ってる企業はScalaなんて使わないだろうし
781デフォルトの名無しさん:2014/01/05(日) 21:33:43.18
HadoopはディスクI/Oを並列化することで、大規模データを実用的な時間で処理するためのフレームワークだけど、
毎回「ディスク読み込み→処理→ディスク書き込み」ってやるので、機械学習みたいな「同じデータセットを繰り返し
処理する」ようなタスクには不向き。

Sparkは、全データをオンメモリに展開するので繰り返し処理に向いてる。開発者達は「次世代Hadoop」っていう売り
込み方をしていて、実際に次のバージョンのCDHではSparkがサポートされるので、これから流行る可能性はかなり
高いと思う。

書き方は、Scalaのコレクション操作と同じやり方で書けるので直感的(SQLの文法で書けるようにするSharkってプロ
ジェクトもある)。

 file = spark.textFile("hdfs://...")

 file.flatMap(line => line.split(" "))
   .map(word => (word, 1))
   .reduceByKey(_ + _)

あと、Hadoopは基本的にバッチ処理だけだけど、Sparkはストリーム処理 (Spark Streaming)や、Scala REPL上での
対話型処理なんかもサポートしてる。

先日、Spark Summitっていう初の大型カンファレンスがあって、かなり人が集まったみたい。発表資料を見ると分かる
けど、Yahooがすごく熱心にコミットしてるし、IntelやAdobe、RedHatみたいな有名どころも発表者に名を連ねてる。

http://spark-summit.org/summit-2013/

日本語訳を待つのもいいけど、たぶん向こう一年くらいはまとまった日本語文献は出てこないだろうから、この発表
資料を辞書を引き引き読んでみるのもいいんじゃないかな。

とりあえず試してみたい人には、スタンドアロンモードで動かしてみるという手もあるよ。

http://spark.incubator.apache.org/docs/latest/spark-standalone.html
782デフォルトの名無しさん:2014/01/05(日) 23:42:00.37
sqliteすら使い切ったこと無いからパスするわ
783デフォルトの名無しさん:2014/01/06(月) 01:54:20.46
Sparkのおおまかな説明は>>781な感じでいいと思う(RDDsの説明としてははしょり過ぎな気がするけど…)
面白いのは熱心な企業は、Yahoo, Intel, Adobeをはじめとして、従来Scalaの採用パターンでよくある、急成長したWeb系
スタートアップ企業「ではない」ところ。開発者/ユーザコミュニティも、従来のScalaコミュニティと違ったものになってる感がある

次のCDH(Cloudera’s Distribution including Apache Hadoop)にSparkが入ることで、Hadoop使ってるユーザ企業はSparkをかなり導入しやすくなる
だろうし、Sparkはうまいことやってるなーと思う
784デフォルトの名無しさん:2014/01/06(月) 01:59:45.90
もちろん、Hadoopなんて知らねえよというかそもそも使わない企業にとってみればどうでもいい話だけど
Hadoopが実際にどんだけ使われてるかを考えれば、そういう企業がSparkも採用することで、結果的にScalaが
より広まるという面があってまあ悪くないと思う。Sparkの用途だとScalaのコンパイル速度の遅さとかのデメリットとされてる
ものがほとんど問題にならないし
785デフォルトの名無しさん:2014/01/06(月) 02:15:57.46
786デフォルトの名無しさん:2014/01/06(月) 06:08:41.23
ありがてぇありがてぇ
787デフォルトの名無しさん:2014/01/06(月) 15:03:22.44
結局、このスレの多くの人間には関係ない代物か
788デフォルトの名無しさん:2014/01/06(月) 20:14:04.17
そうともいえるが、Scalaの裾野の広がりって意味では悪くないと思うよ
AMPLabという研究室発プロジェクトなのに、現在はYahooやIntelのような、特別Scalaを重視してるわけでもない大企業のエンジニアが
コードにコミットしてる状況はこれまでのScala界隈では少なかったし(Twitterは中でScala使いまくってるからあれだけの内製ライブラリ
ができたわけでちょっと状況が違う)いい傾向だと思う
789デフォルトの名無しさん:2014/01/06(月) 21:11:31.40
コモディティ化する前の技術を簡単に切り捨てて
さっさと自滅していってくれるのは正直ありがたいわ
790デフォルトの名無しさん:2014/01/06(月) 21:54:33.26
n○○○○○さんは、新しい技術をディスってる暇があったら少しは勉強に時間を使ったらどうか。
手持ちの古い技術が陳腐化して、おまんま食い上げになっても誰も助けてくれないよ?
791デフォルトの名無しさん:2014/01/07(火) 00:37:13.31
.
792デフォルトの名無しさん:2014/01/07(火) 00:38:27.59
日経ソフトウェア最新号によると今年の予想としてscalaがかなり普及するらしい
793デフォルトの名無しさん:2014/01/07(火) 08:01:06.44
いやー…ないでしょそれは
極一部では使われるようになるかもしれんが
794デフォルトの名無しさん:2014/01/07(火) 08:21:07.63
Scalaを10年保守とか悪夢だわ
795デフォルトの名無しさん:2014/01/07(火) 08:47:53.48
>>794
どんな言語なら10年保守しても構わないんだ?
動的型付け系は言うまでもなく悪夢だし、JavaとかC#とかなら大差ない気もするが
まあScala普及は自分もあり得ないと思うけど
796デフォルトの名無しさん:2014/01/07(火) 10:17:10.01
c,PHP,Erlang以外は難しそうだから全力で避けたい
797デフォルトの名無しさん:2014/01/07(火) 10:31:34.34
10年保守なんてどんな言語でもやりたくない
日本語で書かれてても嫌だ
798デフォルトの名無しさん:2014/01/07(火) 12:16:43.30
3年生き延びたら10年でも大して変わらん
799デフォルトの名無しさん:2014/01/07(火) 13:29:08.02
俺は一ヶ月前のコードも見たくない
800デフォルトの名無しさん:2014/01/08(水) 05:15:28.08
>>795
10年前と同じ環境をデフォルトで構築できるという意味で、 C なら構わない
scala は、scala自身よりも JRE の方がどうなるか分からなくて不安
scala自身は、JREさえOKなら、最悪、20MBくらいのjarを手元においておけばいいんだし
801デフォルトの名無しさん:2014/01/08(水) 05:35:21.02
Cでも10年前と今じゃ使われてるライブラリに差があったり、昔のライブラリがメンテされてない可能性とか色々あるしそう簡単でも
ない気はする

Javaはまあここまで普及しちゃったから、ここ10年くらいでJRE含めて廃れることはあんま考えなくて良さそう。未だにJava 1.5より前の
コード保守してる人はしんどそうだなあとは思う。Scalaはまあ、バージョン固定でいいなら最悪>>800のような方法で保守可能かなとは思う
あとは、バイナリ互換性に関する保証が今後どれだけ強くなるか、あるいは現状のポリシーのままいくかは問題かな。
802デフォルトの名無しさん:2014/01/08(水) 07:14:46.60
明るい話しよう
803デフォルトの名無しさん:2014/01/08(水) 09:16:50.56
後先考えずにトレンドを追い続けようよ!
どーせ、皆、10年後には「Code HTML For Food」
って書かれたダンボール掲げてんだしさ
804デフォルトの名無しさん:2014/01/08(水) 12:23:56.92
Cとscalaじゃ得意分野が違いすぎるだろ…
Cでwebアプリ開発とか保守以前に心折れそうだわ
805デフォルトの名無しさん:2014/01/08(水) 14:03:34.25
>>803 ダンボール産業は安泰やな
806デフォルトの名無しさん:2014/01/08(水) 15:10:05.11
cでPHPかRubyの保守まで考えることが出来れば技術者として心が休まるのではないか
scalaでやりたいことって、もっとシンプルなerlangでも出来そうと妄想してみる
807デフォルトの名無しさん:2014/01/09(木) 16:28:02.52
import java.io._
import java.net._
val url = new URL("""http://www.news-us.jp/article/384731699.html""")
val in = new BufferedReader(new InputStreamReader(url.openStream()))
var line = in.readLine()
while (line != null) {
println(line)
line = in.readLine()
}
in.close()
これだと表示されるのに
println(io.Source.fromURL("""http://www.news-us.jp/article/384731699.html""").mkString)
これだとjava.nio.charset.UnmappableCharacterException出るんですけど
バグってんですか?
808デフォルトの名無しさん:2014/01/09(木) 18:59:07.27
809デフォルトの名無しさん:2014/01/10(金) 07:33:44.73
マジでこれ>>807誰か頼む!
810デフォルトの名無しさん:2014/01/10(金) 08:27:39.15
もうちょい自分で調べてみた方が良いよ。
ScalaのバージョンもどのOSで動かしてるかもREPLかスクリプトかも全然環境書いてないし。

ちなみにGroovyだとコレだけでいけた。
"http://example.com/".toURL().text

Scalaは3年くらい前に基本的な部分をちょろっとなめてPlayで遊んでみたレベル。
そもそも3年くらい前の時点でio.Sourceは問題だらけ見たいな話しが出てたと思ったけど何か改善とかあったのかな?
811デフォルトの名無しさん:2014/01/10(金) 08:35:20.02
文字コード指定しろってだけじゃない?
812デフォルトの名無しさん:2014/01/10(金) 13:17:39.83
813デフォルトの名無しさん:2014/01/12(日) 00:11:52.71
C++がCの割と分かりやすい、自然な拡張と言えるものだったのに対し、
ScalaってJavaに自然に関数プログラミング持ち込んだという感じには
なってなくない?
これなら最初から作るというか、HaskellとかF#の方がいいのでは?

Javaからも移行できますよ、という宣伝文句を作りたかったのかもしれ
ないが、なんか中途半端なJava親和性。
814デフォルトの名無しさん:2014/01/12(日) 00:46:15.63
誰がScalaはJavaを拡張したものだと言ったんだ?
そういうのは他にあっただろ。名前は覚えてないし、それこそ何の役に立つのかわからない言語だったが
815デフォルトの名無しさん:2014/01/12(日) 00:50:48.70
名前の通り、スケーラブルな言語を作るのが第一の目的だったんだろうし
Javaからの繋がりは結構どうでもよかったんじゃないの
816デフォルトの名無しさん:2014/01/12(日) 01:09:45.28
ScalaはJavaにはそんなに依存してないから
Javaが使われることが少なくなっても生き残れるんじゃない
817デフォルトの名無しさん:2014/01/12(日) 01:19:23.20
それは絶対にない
JVMが消えたら確実に跡形もなく絶滅する
818デフォルトの名無しさん:2014/01/12(日) 02:09:51.52
twitterが採用したのは知っているが、そもそも何に使われてるんだ?
どんな人がscalaを使うと幸せになれるの?
819デフォルトの名無しさん:2014/01/12(日) 02:25:28.53
>>817
どっかの大学が作ったモノみたいだから、JVMが消えてもscalaは教育用に最小セットだけ残して開発が続く気がする
820デフォルトの名無しさん:2014/01/12(日) 02:31:38.16
>>818
JVMを使う必要があって仲間内だけで完結する開発で長いこと保守する必要がないとき
821デフォルトの名無しさん:2014/01/12(日) 02:53:43.04
誰得
822デフォルトの名無しさん:2014/01/12(日) 03:02:55.17
そういや少し昔はJavaの次はScala!みたいにわめく人いたけどいなくなったよね。
そんなの無理にきまってるもんね
823デフォルトの名無しさん:2014/01/12(日) 03:21:13.92
>>810
scala.io._ は改善するというか、ぶっちゃけいつ削除するかレベルのAPIなんで、production readyなライブラリ
やアプリケーションコード書いてる人はまず使ってない。scala-io http://jesseeichar.github.io/scala-io-doc/0.4.2/index.html#!/getting-started/index (名前ややこしいね)
使うのが次善

>>813
ScalaはJava(言語)の上位互換は最初から目指していないので、それが必要なら現時点で実用に耐えうるのはGroovyくらいかな(動的型付けだが)
824デフォルトの名無しさん:2014/01/12(日) 03:26:53.55
Scalaにおける正解は明日の不正解で明後日のdeprecated
825デフォルトの名無しさん:2014/01/12(日) 03:48:55.29
>>818
Twitterの至るところで。Effective Scala http://twitter.github.io/effectivescala/index-ja.html みると、現在のTwitter社にとってScalaで書かれたコードベースが大きいことがわかる

採用事例でいうと、Twitterが最古参の1社で、Foursquare、LinkedIn辺りも早いうちに採用している。Tumblrは http://2012.8-p.info/japanese/2/18/tumblr な事があってScala採用することに
なったとか(FinagleがあるからScala使うってのは面白い話ではある)
826デフォルトの名無しさん:2014/01/12(日) 04:04:52.09
javaAPIを使えるのは利点だが、javaの文法の上位互換は何の利点でもない気がするのは俺だけか…
827デフォルトの名無しさん:2014/01/12(日) 04:09:55.93
>>824
そういうわけではなく。
研究用言語だった頃の名残の腐ったAPIが放置気味だったのが、2.10で言語仕様拡張に一区切りついたのもあって
Faster, Smaller, Stablerが目標であるScala 2.11(以降)でいくつもdeprecatedにされる(予定)という経緯がある
あと、腐ってはいないけど利用者が少なくてあまりメンテナンスされていないライブラリが別jarに切り離されたりとか
これまで皆問題だと思ってたけど優先度が低かったものが、利用者層が増えるにつれて優先度が高くなったという事かと思う
828デフォルトの名無しさん:2014/01/12(日) 07:24:04.31
scala-swingたん……(´;ω;`)ウッ
829デフォルトの名無しさん:2014/01/12(日) 10:26:54.06
>>816
>ScalaはJavaにはそんなに依存してないから
>Javaが使われることが少なくなっても生き残れるんじゃない

でも入門書でもなんでもやたらメリットとしてJava親和性みたいなものを
強調しているの多くね?
あれらは単に名前が広まればいい、という根拠なしの宣伝なの?
830デフォルトの名無しさん:2014/01/12(日) 11:45:47.48
JVMと関係ないならScalaの価値なんてHaskellに遠く及ばない
831デフォルトの名無しさん:2014/01/12(日) 13:58:31.80
Scalaの発案者かつ現在大学教授で開発者でもあるMartin Odersky氏のことが分かってないな。

・ドイツ人、スイスの大学で博士号を取得。
・IBMとか米イェール大学時代に、Java Genericsを設計した。また現行世代のJavacの開発者でもある。
・現在は、スイスの EPFL大学の教授。 Functional Programming Principles など。
Coursera に公開している講義もあるから、興味ある人は世界中のだれでも講義を受けることもできる。
・Scala言語をサポートのための会社 Typesafe Inc. を起こし運営もしている。

つまり、現行のJavaの功績者でもある人が開発・運営している言語だからというのが大きい。
あと、新しい言語だけあってもだれも使わなくて、ライブラリが充実してないと使えないので、
まずは既存のJavaのライブラリをシームレスに使える言語にすることで、
今現在Javaを使っている人にメリットを提供していると思われる。


ただ、Java使ってない人にとってはJVMは足かせなので、ローカルバイナリ版も作って欲しいなあ。
でも、それって、Javaの使えないScalaなんて、って感じだな。

この辺、次スレでは、FAQに入れておくべきだな。
832デフォルトの名無しさん:2014/01/12(日) 15:01:29.22
>>820
CSPがどうとか、並行プロセスがどうとか、そういう話ききたいの
833デフォルトの名無しさん:2014/01/12(日) 16:01:15.87
何故すごいのか説明できなくなると、作った人の学歴がすごい、経歴がすごい、
とか言い出すと末期だよね。
834デフォルトの名無しさん:2014/01/12(日) 17:11:44.93
・IBMとか米イェール大学時代に、Java Genericsを設計した。
余計なことを。
835デフォルトの名無しさん:2014/01/12(日) 17:23:12.67
.NET版やLLVM版に参加するしかないな
836デフォルトの名無しさん:2014/01/12(日) 17:36:29.78
>>833
作った人の経歴が凄くないと叩くくせに…
837デフォルトの名無しさん:2014/01/12(日) 18:32:00.43
>>836
え?
838デフォルトの名無しさん:2014/01/12(日) 20:53:27.23
839デフォルトの名無しさん:2014/01/12(日) 21:20:55.71
Scalaのいいところは書きやすい割に速いところ
コンパイルの速度とJVMの足枷さえどうにかなれば最強なんだが
840デフォルトの名無しさん:2014/01/12(日) 21:32:40.69
REPLでスクリプト読み込むときにストレス感じるけど、それでも速い部類なのかな?
841デフォルトの名無しさん:2014/01/12(日) 21:34:30.10
それが直ればって書いてあるやん
じっこ
842デフォルトの名無しさん:2014/01/12(日) 21:35:25.92
REPL読み込みで支配的なのはコンパイル速度で、早い部類ってのは実行速度の話だろ
843デフォルトの名無しさん:2014/01/12(日) 21:41:10.70
動き出せば当たり前なんだけど、Pythonなんか目じゃないぐらいに速い
動き出すまでの時間が短縮されれば言うことなし
844デフォルトの名無しさん:2014/01/12(日) 21:50:45.04
>>825
ホントに、この手の文章は何度よんでも胸がトキメク
そして、今では何よりもPHPが大好きになった
845デフォルトの名無しさん:2014/01/12(日) 21:51:00.26
>>834
Java Genericsは複雑になり過ぎた面はあるけど、言語/バイナリの下位互換性を維持しなければいけないJavaへの拡張としてはあの辺が限界だったと思う
ちなみに、OderskyがGJ売り込んだわけじゃなくて、Pizza(1996)のGenericsに注目した当時SunのGilad Bracha(現MS Research)らがコンタクトとってGJチームが結成された
その後、Oderkyの書いたGJ組み込まれたjavacが1.3からGenerics Off状態で公式のものになって、さらにその後、Wildcardの機能追加(これはOdersky関わってない)を経て
現在のJava Genericsに至る
846デフォルトの名無しさん:2014/01/12(日) 22:04:16.79
初心者にオススメできる言語ですね
847デフォルトの名無しさん:2014/01/12(日) 22:13:00.83
>>831
重要なポイントが抜けているような。Oderskyの研究者としての業績はあるけど、それは主要因じゃなかろう
一から再設計した静的型付きOO/FP言語でありながら、Javaの型システムとの親和性を重視して、結構妥協した言語仕様にしたこと
型クラスとかモナドとか、学術的な文脈を持ち込むと恐怖の対象になる機能をひっそりと入れて、ユーザ向けには「堅い」説明
をしないようにせず、かつ、学術研究の場ではちゃんとimplicit parameterがOO版型クラスだという事を説明してたりと、言語として
も説明の方法としても現実的なところに落とし込めたのが大きい
848デフォルトの名無しさん:2014/01/12(日) 22:22:22.77
>>846
ああ、それが良い。
二度と新しいものに興味なんか持たず、素のJavaで生産的なことしてくれる
849デフォルトの名無しさん:2014/01/12(日) 22:33:47.70
ScalaはJavaより短く綺麗に書ける
それだけで俺にとっては十分だ
850デフォルトの名無しさん:2014/01/12(日) 22:44:10.78
>>845
プラットフォームの制限は仕方ないとしても、ワイルドカードとかあのへんの
C#なんかに比べてかなり非直感的なセンスは確かにScalaに通じるものがある
Scalaではよくても土方言語であれじゃあなあ
851デフォルトの名無しさん:2014/01/12(日) 22:57:24.69
土方にscalaを使わせたら、土方以上の作業が出来るようになるのか?
852デフォルトの名無しさん:2014/01/12(日) 23:00:40.31
どうだろうな
開発環境が微妙だからね
853デフォルトの名無しさん:2014/01/12(日) 23:21:22.22
なぜ誰もが理想の言語を目指すのに誰もそれを作ることができないんだ
854デフォルトの名無しさん:2014/01/12(日) 23:23:46.09
>>853
作りはじめることはできるが、最後の残り10%の実装が理論的にできなくてつまづく
そんな俺言語が7つくらいある
855デフォルトの名無しさん:2014/01/12(日) 23:31:03.18
俺版「7つの言語 7つの世界」かw
856デフォルトの名無しさん:2014/01/12(日) 23:37:36.90
多くの人に使われていなければそれは理想的な状態ではないからな
MSが言語作るのが上手いのは技術オタク/数学オタクと土方の両方の感覚を理解しているから
857デフォルトの名無しさん:2014/01/12(日) 23:40:46.73
>>853
研究者はトップダウンで地に足がついておらず、ビジネスマンはボトムアップでいつまでも低い目標を追いかけているから。
858デフォルトの名無しさん:2014/01/13(月) 01:09:25.28
>>850
いや、JavaのワイルドカードはOdersky関わってないので。2002年のIgarashi先生の研究が元になっていて、さらにそれに改造を加えたのがワイルドカード(この中間で色々あったみたい)。ScalaにJavaのワイルドカード相当のexistential typeが入ったのは
Javaのワイルドカードを利用するために仕方なくそうなったという経緯がある(ほんとは不要なのだけど、Scala 2.7辺りでJava Genericsとの互換性を持たせるためにそうなった)
859デフォルトの名無しさん:2014/01/13(月) 01:17:54.66
>>856
んなこたーない。.NET以前のMSが言語作りうまかったとはお世辞にも言えんが(開発環境込みでいうとVB 6は良く出来てただろうけど、言語としてのVB 6は駄目方向だよね。C#はどちらかといえばHejlsbergの功績が大きいだろう
VC++ 6は言うまでもなく。だからこそ、開発環境も言語も筋が良かった当時のBorlandというかDelphiの商売が成り立ってた(ちなみに、DelphiのアーキテクトはHejlsberg)。
860デフォルトの名無しさん:2014/01/13(月) 01:27:55.01
>>859
>C#はどちらかといえばHejlsbergの功績が大きいだろう

こういう言い方はへんじゃね?
誰が作ったか、誰を使ったかも含めMSの製品なわけだから。
861デフォルトの名無しさん:2014/01/13(月) 01:36:14.49
外面的視点はうすっぺらくてあまり意味がないんだよ。
プログラマならコードの作りやすさという内側から見るべき。
862デフォルトの名無しさん:2014/01/13(月) 01:44:24.65
さらに言うと、C#も1.0は賛否両論、というか、ぶっちゃけあんまり評判良くなかったよね。Java支持派の人からはJavaのパクリ、劣化Javaとさんざんな評価だったし、言語ヲタや研究者から
も、Javaを根本的に改善したものではなくマイナーチェンジでしかないような評価が多かった。本格的に改善/支持されるようになったのがC# 2.0からで、.NETのCLR(ランタイム)の刷新と合わせて
ランタイムのサポート込みのGenericsの導入、匿名メソッドの導入等が入った。C# 3.0でさらに改善されて…という事があったわけだ。
863デフォルトの名無しさん:2014/01/13(月) 01:48:32.54
確かに初期にあったよねC#はJavaのパクリみたいな安易な批判。
まあMSがやることは叩いとけみたいな人はいつもいたからだろうけど。
864デフォルトの名無しさん:2014/01/13(月) 01:56:05.53
>>860
確かに、誰に任せたかも含めて当然会社としての戦略ではある
ただ、MSが言語作りが上手いと主張するには、会社の戦略としてMSが従来から優秀な言語アーキテクトを抱えることを重視してたという事の状況証拠がないといけないだろう
VB 6は開発環境と言語の統合重視という路線でみればいいんだけど、言語としてはまあ良くなかったよね。で、言語自体の筋がよくなったのはHejlsbergのBorlandからの移籍辺りが鍵になってるん
じゃないのか、という話。時期と断片的な状況証拠からの推測ではあるけど。
865デフォルトの名無しさん:2014/01/13(月) 02:01:25.81
なんでMSにばかりそう厳しいの?
会社をなんか人格持つ個人みたいに考え過ぎじゃね?
866デフォルトの名無しさん:2014/01/13(月) 02:06:45.91
経緯はどうあれ、現在トップクラスに普及している言語のうち最後発のものを生み出したわけだからなあ
設計者個人のセンスやMSの金だけでどうなるもんでもないよ
867デフォルトの名無しさん:2014/01/13(月) 02:27:32.71
C#が評価されるべきなのは、かなり過激な拡張を繰り返してるのに
下位互換性が保たれてて目立った破綻や失敗がないこと
まあMSのレベルまではいかなくても(ユーザーもそこまでは望んでないだろうし)、
Scalaを広く普及させたいんなら少しは見習わないとな
868デフォルトの名無しさん:2014/01/13(月) 02:49:32.17
>>865
うーん。会社を人格持つ個人とは考えてないけど。「MSが言語作るのが上手い」に反応してのレスとして、特段MSが上手いわけじゃなかろうというか、偶発要因が多分にあるだろうという話
別にMSに厳しいつもりはない。というか、特にR&Dも基礎研究(短期的な利益に結びつかない)もちゃんとやってるMS Researchに継続して投資してることは素晴らしいと思ってるよ
ちなみに、MS Researchは、急成長した企業にありがちななんちゃって研究じゃなくて、学問的な意味でもかなりちゃんとした研究所
869デフォルトの名無しさん:2014/01/13(月) 03:12:18.94
OSの仕様を確認するたびに金とられるのを経験すればMSが嫌いになるのも無理はない
Linuxとかでも同様のサービスを得ようとすると結局同じくらい金がかかるんだけどね
870デフォルトの名無しさん:2014/01/13(月) 03:14:45.12
MSが悪いときはMSの悪口をいい、MSが良いときは、いやMSがいいせいじゃない、〜という個人のおかげなんだ、みたいな話をされればそりゃどっかバイアスかかりすぎじゃね、と指摘したくもなる。
871デフォルトの名無しさん:2014/01/13(月) 03:47:26.01
>>863
まぁ、MS は Java に「塩を混ぜた」っていう前科があったからね。
その延長線上に C# があって、登場時には Java vs. C# って記事
が結構でてた。当然、日本の雑誌では C# が Java に比べて如何に
優れているかって事を滔々と述べていたっけ
872デフォルトの名無しさん:2014/01/13(月) 08:00:12.91
>>870
「MSがいいせいじゃない」なんてどこで言ってるんだ?
873デフォルトの名無しさん:2014/01/13(月) 09:26:34.07
HaskellもF#もMSRなんだよな
874デフォルトの名無しさん:2014/01/13(月) 10:14:45.03
Javaは昔から叩かれ続けてきたプログラム言語だけど
それでもここまで来た
Scalaもこれからが正念場
875デフォルトの名無しさん:2014/01/13(月) 11:00:04.14
スーダンが北と南で分裂してるけど、南ってキリストなんだってな
で、北がイスラム
Linuxのディストリが色んな種類あるのに、Windowsは1個しかないところとか
力をつけさせない為には団結させない事が大事だと分かる
876デフォルトの名無しさん:2014/01/13(月) 11:06:33.32
WindowsもXP派とか7派とか8派とか色々いるぜ
877デフォルトの名無しさん:2014/01/13(月) 11:51:10.56
scalaとC#を機能比較するならまだしも、ただ単にC#はいいMS最高!とscalaスレで布教してるだけだもんなw
878デフォルトの名無しさん:2014/01/13(月) 11:53:18.61
Scalaは廃れそうだよねえ
879デフォルトの名無しさん:2014/01/13(月) 12:03:27.83
>>875
いまでもVBやPerlを使い続けたい?
880デフォルトの名無しさん:2014/01/13(月) 12:05:45.86
prologで99problemを解いた方が賢くなれると思うんだ
881デフォルトの名無しさん:2014/01/13(月) 12:43:08.68
廃れそうも何も、流行っていた・流行りそうというのは単なる幻想であった
882デフォルトの名無しさん:2014/01/13(月) 17:57:52.92
>>878
頭の良い人たちが使い続けるからコミュニティは続くと思う。私は素のJavaを使う
883デフォルトの名無しさん:2014/01/13(月) 20:16:34.34
個人的な話だとScalaを使わない理由は特にない
上から使えと言われないから使わないだけで
884デフォルトの名無しさん:2014/01/13(月) 22:00:09.18
>>879
仕事のプロジェクトのメインの言語はいまだにCOBOLです
885デフォルトの名無しさん:2014/01/15(水) 01:27:39.84
関数型COBOLを作れば売れる!
886デフォルトの名無しさん:2014/01/15(水) 07:54:59.88
COBOL開発って設計はわりと関数型的なところがあるけどね
887デフォルトの名無しさん:2014/01/15(水) 10:46:33.60
質問です。
変数Aを持っているクラスの複数のインスタンスがあり、
インスタンスごとにAの値が違うときに
最小(最大)のAを持つインスタンスを返すみたいな関数はどうやって書けばいい感じになりますか?
現在はforとifでやっています。
888デフォルトの名無しさん:2014/01/15(水) 10:56:09.34
>>887
list.minBy(_.A)
889デフォルトの名無しさん:2014/01/15(水) 11:04:17.90
>>888
ありがとうございます。

コレクションを扱うメソッドの種類が豊富でいい感じなんですけど、覚えるのが大変ですねこれ…
890デフォルトの名無しさん:2014/01/15(水) 14:05:24.96
メソッド繋げていって上手くいったらすっきりするけど、
悩み抜いた末に汚く書くしかないことに気づいたら最悪
891デフォルトの名無しさん:2014/01/15(水) 22:18:45.74
Scaloid使っているアホいる?
892デフォルトの名無しさん:2014/01/16(木) 18:58:39.53
コレクションのメソッドの引数に度々、
n => n %2 == 0
みたいなのが入ってますがこれが関数を引数として渡すということなんですか?
893デフォルトの名無しさん:2014/01/16(木) 19:14:31.56
はい
894デフォルトの名無しさん:2014/01/16(木) 20:08:45.50
はい
895デフォルトの名無しさん:2014/01/16(木) 20:31:44.90
ありがとうございます。
896デフォルトの名無しさん:2014/01/16(木) 20:35:08.77
形は引数 => 本体
返りの型はBoolean
897デフォルトの名無しさん:2014/01/16(木) 20:45:36.70
コレクション.メソッド().メソッド()…って何個も書いてるコードがあるけど
あれはscala特有のものなの?
898デフォルトの名無しさん:2014/01/16(木) 21:54:42.59
書いてあることの意味がわからない
899デフォルトの名無しさん:2014/01/16(木) 22:02:17.28
javaにもあるじゃん
流れるような〜って奴
900デフォルトの名無しさん:2014/01/16(木) 22:03:17.52
>>897
ぜんぜん
あのスタイルを流行らせたのはRubyで、さらに遅延評価でスケーラブルにするのを流行らせたのはC#かな
901デフォルトの名無しさん:2014/01/16(木) 22:05:32.30
メソッドチェーンはjsの御家芸だと思ってたよ
902デフォルトの名無しさん:2014/01/16(木) 22:25:37.25
jsくらいなら毎度コピーでいいけど、
スケーラブルな言語を標榜するならコレクションの演算はストリームのみにするべきだったよなあ
903デフォルトの名無しさん:2014/01/16(木) 22:34:55.97
scala練習してるから書いたコード見てくれって渡してくるやつで
コレクション弄るときに毎度毎度forでやってるやつがいるんだがこれは指摘した方がいいのか
推奨の書き方はどんななんだよ
904デフォルトの名無しさん:2014/01/16(木) 22:37:57.11
Cしかやったことがないか、頭が腐ってるかのどっちかだから関わるな
905デフォルトの名無しさん:2014/01/16(木) 22:57:40.94
Java8もストリームで同じようになるね
906デフォルトの名無しさん:2014/01/16(木) 23:49:45.52
>>903
結果をコレクションで返す場合
for(i <- (0 to 10)) yield i

手続き(結果がUnit)の場合
(0 to 10).foreach(i => print(i))
907デフォルトの名無しさん:2014/01/17(金) 00:35:59.28
map使った方がいい気がしないこともないけどな
908デフォルトの名無しさん:2014/01/17(金) 00:40:18.92
>>907
要素の並びを、「手続き, リスト」 じゃなくて、「リスト, 手続き」 にしたいという理由だけで for類を使っている
909デフォルトの名無しさん:2014/01/17(金) 12:01:27.27
>>908
コッペロンナーwwwwwwwwwwwwwwwwwwwwww
910デフォルトの名無しさん:2014/01/17(金) 13:20:56.23
>>904
Linusがscalaを使えば最強のOSが作られるな
911デフォルトの名無しさん:2014/01/17(金) 14:00:04.04
クラスで自分自身が持ってる変数を指したり、自分自身が持ってるメソッドを使用したりするときに
this.って付けたほうがいいですかね?
912デフォルトの名無しさん:2014/01/17(金) 14:15:09.11
つけなくてよろし
913デフォルトの名無しさん:2014/01/17(金) 14:37:01.46
ありがとう
914デフォルトの名無しさん:2014/01/17(金) 16:35:18.21
貴方たちは心が弱いから、書きやすさを追い求めるのです
915デフォルトの名無しさん:2014/01/17(金) 16:46:53.49
同意。しかし心の強い奴は限りなく脳を硬直させていってしまうんだ。完全に石化したときには寿命がきてるから助かってるだけで。
916デフォルトの名無しさん:2014/01/17(金) 16:56:09.20
そうやって、皆、何者にも成れず死んでいくんだ
917デフォルトの名無しさん:2014/01/17(金) 17:11:25.83
思ってよりここ人多いね
自演かな?
918デフォルトの名無しさん:2014/01/17(金) 20:23:06.08
なんでタプルだけ扱いが違うんだよ面倒くせえなおい
919デフォルトの名無しさん:2014/01/17(金) 22:50:56.14
不自由な構造体が必要なんです
920デフォルトの名無しさん:2014/01/18(土) 10:29:18.62
タプルが()で要素の指定ができないで、番号は1からなのはなんか理由があるの?
921デフォルトの名無しさん:2014/01/18(土) 12:16:28.49
最近お腹がタプルタプルしてきたなり
922デフォルトの名無しさん:2014/01/18(土) 13:21:48.06
>>920
()じゃ型安全にやれない
1からなのは他言語からの歴史的経緯
923デフォルトの名無しさん:2014/01/18(土) 13:42:49.73
なるほどな
時々使うけどいつも0から始めてエラー吐かれて一瞬思考が停止するんだよ
924デフォルトの名無しさん:2014/01/18(土) 13:49:35.33
普通のコレクションだと同一の型しか入れられないけど、タプルは何でも入れられるからおかしな感じになる
絶対に同じ型しか入らない場面でコレクションに変換できないのは辛いけど
925デフォルトの名無しさん:2014/01/18(土) 14:52:24.78
def toList[T](t: Tuple2[T, T]) = List(t._1, t._2)
みたいなの延々定義しとけば?
926デフォルトの名無しさん:2014/01/18(土) 15:49:15.32
>>924
(Int, Int)にはIntの組しか入れられないし、(Int, String)にはIntとStringの組しか入れられないけど?
927デフォルトの名無しさん:2014/01/18(土) 15:57:09.88
(Int,String)(0)と(Int,String)(1)でコレクションと同じようにで中身が取り出せるとあかんやろ
928デフォルトの名無しさん:2014/01/18(土) 15:59:42.35
いや全然
929デフォルトの名無しさん:2014/01/18(土) 16:10:24.58
> 普通のコレクションだと同一の型しか入れられないけど、タプルは何でも入れられるからおかしな感じになる

タプルはコレクションじゃない。同列に語れない。
930デフォルトの名無しさん:2014/01/18(土) 16:30:13.48
正直、束縛すればいいだけだよな
931デフォルトの名無しさん:2014/01/18(土) 20:40:57.08
932デフォルトの名無しさん:2014/01/18(土) 21:22:36.22
タプル=簡易クラス
ってことになってるけど本当にそれでいいのかい?
933デフォルトの名無しさん:2014/01/18(土) 21:47:27.22
いいんじゃない
934デフォルトの名無しさん:2014/01/18(土) 22:09:38.33
>>932
クラスよりも、Cの構造体に近いと思う
935デフォルトの名無しさん:2014/01/18(土) 23:15:56.34
タプルなんて要素数は精々4個ぐらいだろ
中身が予測不可能のグチャグチャになることなんてないんだからおとなしく._1使っとけ
936デフォルトの名無しさん:2014/01/19(日) 00:49:16.69
タプルは要素ごとに次元が違うものだからループ回して添字でアクセスしたりするのは間違い
そういう意味で、単なる識別子だというのを強調するために1ベースなんじゃね
937デフォルトの名無しさん:2014/01/19(日) 03:58:10.52
おっけー
938デフォルトの名無しさん:2014/01/19(日) 12:24:06.69
> 単なる識別子だというのを強調するため

いや、単なる歴史的経緯。
939デフォルトの名無しさん:2014/01/19(日) 21:53:40.97
項数で識別したいこともある
940 ◆QZaw55cn4c :2014/01/20(月) 06:17:42.73
>>938
主流言語の発展と、タプルの採用状況からみると、とても歴史的経緯とは思えないが‥‥
使えるとして多値返しのからくり用途くらいにしか
941デフォルトの名無しさん:2014/01/20(月) 15:37:48.21
>>854
わかるわ。エベレストも残り10%が困難。
942デフォルトの名無しさん:2014/01/20(月) 19:21:15.14
引数に複数の型を取れるようにしたいんだけどどうすればいいですか?
943デフォルトの名無しさん:2014/01/20(月) 20:23:34.35
できません
944デフォルトの名無しさん:2014/01/20(月) 20:23:42.97
エイサー型使え
945デフォルトの名無しさん:2014/01/20(月) 20:47:52.24
>>940

Wikipedia によれば、Scala は Java, Haskell, Standard ML, OCaml, Smalltalk, Erlang から
影響を受けているとされているから、それらについて「歴史的」と言っている。(ただし Java はタプルがないから除外)
(何が主流言語なのかわからないけど、それについて言っているわけじゃあないよ。)
そして、その「歴史的」な言語は、どれもタプルの最初の要素を fst や 1 としてアクセスする。

1行目と2行目のつながりがよくわからんが、勝手に想像して補足する。 >>938 の言っていることは
「歴史的経緯からタプルの要素は 1 から始まるべきである」ってことであって、
「歴史的経緯からタプルの実装は必須である」ってことじゃあないよ。
946デフォルトの名無しさん:2014/01/20(月) 21:52:21.48
リレーショナルデータベースとの連携を考えるとタプルがあると超便利なんだ
947デフォルトの名無しさん:2014/01/21(火) 02:11:44.26
ORMないの?
948デフォルトの名無しさん:2014/01/21(火) 02:16:49.68
RDBはデータをアリティでも区別してて、それをタプルでそのまま表現できるっていう、理論の表現とコードの見た目が近いというただそれだけの話ではなかろうか
949デフォルトの名無しさん:2014/01/21(火) 07:48:05.04
せっかくSQLという素晴らしい宣言型言語があるのにORMなどという糞に頼るな
950デフォルトの名無しさん:2014/01/21(火) 08:29:10.25
どっちがいいのかねぇ。仕事ではSQL使ってるけどORMも捨てがたい。
951デフォルトの名無しさん:2014/01/21(火) 11:49:03.21
>>945
むしろ1オリジンは「自然」で、C系言語の0オリジンが特殊なのでは?
配列へのアクセスa[i]を*(a + i)で定義しちゃったから、これはこれで合理性があるわけだが
要するにメモリアドレスを意識しているかどうかだと思う
952デフォルトの名無しさん:2014/01/21(火) 13:00:20.05
SQLとORMは二択じゃないだろ
953デフォルトの名無しさん:2014/01/21(火) 19:11:50.07
この言語が流行らない理由ってなんだろうね
純粋関数型言語よりは取っ付きやすいし、betterJavaとしてもいい感じだし
954デフォルトの名無しさん:2014/01/21(火) 19:31:04.25
インスコが面倒
955デフォルトの名無しさん:2014/01/21(火) 20:28:05.01
クエリは普通にSQL書くから、ORMは余計なことしないでselectとvaluesのマッピングだけやってくれ
956デフォルトの名無しさん:2014/01/21(火) 20:35:28.30
>>953
better JavaといえるのはGroovyとかC#みたいなのだろ
JavaとScalaは良くも悪くもCとC++の関係に近い
957デフォルトの名無しさん:2014/01/21(火) 21:22:53.22
書きやすいから自分1人でやる分にはいいんだけどねえ
958デフォルトの名無しさん:2014/01/21(火) 21:46:38.63
コレクションをどうにかやるメソッドってScalaはやっぱり多いの?それとも他の言語もこんなもん?
人に勧めるのにこのことを言っていいのかよくわからないから教えてほしい
959945:2014/01/21(火) 21:56:02.48
>>951

うん、完全に同意
960デフォルトの名無しさん:2014/01/21(火) 22:43:14.94
>>958
Ruby/C#と同等
961デフォルトの名無しさん:2014/01/21(火) 22:54:20.19
>>953
コンパイルとREPLでストレスがたまる
962デフォルトの名無しさん:2014/01/21(火) 23:37:32.31
>>961
けど、時間が経てばそれも解決するのかな?
昔のCやJavaのコンパイラだって遅い遅いと言われていたけど
ハードが進化してそうでもなくなったように。
963デフォルトの名無しさん:2014/01/21(火) 23:55:24.50
自動ビルドしてくれるからコンパイル時間は気にならないかな。
C++よりは速いし。

流行らないのは世間のJavaプロジェクトはウォータフォールがっちりの
融通聞かない案件が多いからだと思っている。
それとunix好きのマッチョたちがJVM言語を敬遠する傾向にある印象がある。
964デフォルトの名無しさん:2014/01/22(水) 00:17:14.09
彼らは幾度となく人に裏切られて、己すら信じることが出来なくなった人です。
全ては心の問題。
965デフォルトの名無しさん:2014/01/22(水) 06:17:56.19
コンパイル時間の話になってるから俺も不満に思ってる話をしようとして
その前に使ってないeclipseのscala IDEを試したんだけど
これコンパイルから実行まで超早いな
って言うかIntelliJ超遅いな
速度に関して言えば、scala IDE>>>コマンド直打ち>IntelliJ くらいの差があるように思う
なんか今までIntelliJ使ってて損した気分だわ

でもスクリプトファイルの実行はscala IDEでは出来ないのね
個人的にはこっちが早い方が助かるんだけど…
966デフォルトの名無しさん:2014/01/22(水) 07:01:50.89
コード編集はintellijでやってるけどコンパイルと実行はsbtでやってるわ
967デフォルトの名無しさん:2014/01/22(水) 14:25:14.52
並列コレクションってどんなときには使えないの?
968デフォルトの名無しさん:2014/01/22(水) 17:19:50.05
オブジェクティブに、関数型に近づけていくほど遅くなるんだが
969デフォルトの名無しさん:2014/01/22(水) 19:29:24.57
>>967
ある要素に対する処理が他の要素に対する処理結果に依存しているとき(データ並列性がない)
処理が細かすぎるとき(使えてもクソ遅くなる)
これらに当てはまらなくても、基本的には普通にシングルスレッドでやるより遅くなるケースがほとんどだよ
並列処理は同期を減らして処理の粒度を上げて計測して試行錯誤してやっとパフォーマンスが出る
970デフォルトの名無しさん:2014/01/22(水) 21:08:50.21
>>968
気合入れて綺麗に書き直したら遅くなることあるよね
使いやすさは最高なのに、遅いと泣きたくなる
971デフォルトの名無しさん:2014/01/22(水) 21:13:25.87
特に関数型に特化した高度な最適化とかあるわけじゃないからな
所詮Java
972デフォルトの名無しさん:2014/01/22(水) 21:32:59.47
C++とかJavaとかの延長で書くのがなんだかんだで1番速いから困る
読みづらいけど
973デフォルトの名無しさん:2014/01/22(水) 23:29:38.58
>>965
もしかして、eclipseが使いづらいのって俺だけ?
emacs+コマンドプロンプトの方がいい
974デフォルトの名無しさん:2014/01/23(木) 00:55:37.12
eclipseが使いやすけりゃ、PHPなんぞ流行らん
975デフォルトの名無しさん:2014/01/23(木) 02:28:29.19
PHPの流行について言えば、HTMLが書けるデザイナから見た時にハードルが低そうってのが主な要因じゃね。
976デフォルトの名無しさん:2014/01/23(木) 02:31:14.69
というか、使いやすいと思ったIDEに出逢ったことがない
977デフォルトの名無しさん:2014/01/23(木) 03:16:36.81
俺はnotepad.exeで頑張ってるよ
978デフォルトの名無しさん:2014/01/23(木) 08:53:01.15
御老体乙
979デフォルトの名無しさん:2014/01/23(木) 09:42:03.91
>>977
あんな編集効率の悪いゴミエディタを使ってるとか、あんまり言わないほうがいいよ。
プログラマとして恥ずかしいことだから。
980デフォルトの名無しさん:2014/01/23(木) 10:43:56.50
981965:2014/01/23(木) 12:47:21.46
>>973
コンパイルから実行までの速度に「限っては」eclipseが最高なんじゃないかって事ね
俺も全体としてはeclipseはちょっと使いづらいって思ってるし
正直誰かに「こっちの方が早いぞ」って他の例を出して欲しいよ
982デフォルトの名無しさん:2014/01/23(木) 20:32:35.02
twitterではデータ処理はScalaで、htmlとかの出力は他言語でってどこかに書いてたけど
そういう言語間の連携はどうやってるんですか?
大量の計算をする部分をC++、他をScalaでやりたいと思ってるんですができるんですかね
983デフォルトの名無しさん:2014/01/23(木) 20:56:14.57
俺はcsvとかsqliteを経由して連携してる
JNI使うともっとシームレスにできるかもね
984デフォルトの名無しさん:2014/01/23(木) 20:57:19.23
FinagleでRPCじゃない?
985デフォルトの名無しさん:2014/01/23(木) 21:20:10.17
ありがとうございます。それらを調べて勉強してみます。
986デフォルトの名無しさん:2014/01/23(木) 21:22:27.31
連携のオーバーヘッドが無視できる程度に計算にそこそこ時間がかかるんなら
JNIみたいなデリケートな仕組み使うよりばっさり分けちゃったほうがいいよ
987デフォルトの名無しさん:2014/01/23(木) 22:50:29.89
988デフォルトの名無しさん:2014/01/23(木) 23:01:13.24
989デフォルトの名無しさん:2014/01/24(金) 02:18:55.12
>>982

Twitterって、フロントエンドは JRubyで、他はJavaとScala じゃなかったっけ?
つまり、JVM系で連携している。
990デフォルトの名無しさん:2014/01/24(金) 11:48:31.02
OSXのターミナル?で作ったプログラムテストしてるんだけど、
進捗を表示する時に上に流れていかず、その場でどんどん更新されるようにはできないですかね?
上手く説明できなくてすみません。
991デフォルトの名無しさん:2014/01/24(金) 11:58:21.82
キャリッジリターンやバックスペースで行頭に戻してから出力するとか?
992デフォルトの名無しさん:2014/01/24(金) 12:52:22.83
>>991
キャリッジリターンというのを初めて知りました。ありがとうございます。
993デフォルトの名無しさん:2014/01/24(金) 23:40:52.84
http://jumble-note.blogspot.jp/2013/07/scalaslick-slick.html
こういうのが怖いから生SQLから抜け出せない
994デフォルトの名無しさん:2014/01/24(金) 23:49:56.10
>>990
sbtでも使ってる(た?)JLineはどうだろう。
https://github.com/jline/jline2
995デフォルトの名無しさん:2014/01/25(土) 00:32:33.68
あんまりよくないプラクティスかも知れないけど、
RDBはmapを永続化するものとしか使っていない。
SQLをちゃんと吐けてもRDB側が突然変な処理をし始めることがしばしばあるんで
996デフォルトの名無しさん:2014/01/25(土) 06:25:09.04
それは普通に吐いたSQLの方をまず疑うな。
なんかかんかいいつつデータの整合性を保つ点に関してはRDBが実装もノウハウの
蓄積も一番しっかりしている。
997デフォルトの名無しさん:2014/01/25(土) 14:41:41.70
.
998デフォルトの名無しさん:2014/01/25(土) 14:45:05.98
.
999デフォルトの名無しさん:2014/01/25(土) 14:45:37.57
.
1000小倉優子 ◆YUKOH0W58Q :2014/01/25(土) 14:46:08.88
  ∧,,,∧ 
 (  ・∀・) 1000ならジュースでも飲むか
  (    ) 
  し─J 
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。