次世代言語15 Go Rust Swift Kotlin TypeScript

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2018/11/04(日) 20:30:10.42ID:OF8fjEC1
スレタイ以外の言語もok

前スレ
次世代言語14 Elixir Crystal Julia Rust Swift
https://itest.5ch.net/mevius/test/read.cgi/tech/1536668904
686デフォルトの名無しさん
垢版 |
2019/04/04(木) 09:23:20.89ID:NLHdu954
Kotlin もよろしく
687デフォルトの名無しさん
垢版 |
2019/04/04(木) 09:29:42.90ID:vFGtgSry
コトリンなんてシングルトンおじさん量産言語じゃん
2019/04/04(木) 09:30:46.16ID:MhhM4cG2
static禁止の次の世代はimmutableではなく依存性注入だからね
class名をハードコードするだけでアウト
interfaceはセーフ
もちろんSingletonはアウト
689デフォルトの名無しさん
垢版 |
2019/04/04(木) 09:33:41.65ID:l5IgkZnr
Love≒依存性
690デフォルトの名無しさん
垢版 |
2019/04/04(木) 10:37:11.62ID:NLHdu954
>>687
え?そうなるか?
2019/04/04(木) 10:59:33.23ID:no/JRFUK
class名.static変数
class名.static関数
超便利じゃん
2019/04/04(木) 11:25:51.28ID:MhhM4cG2
class名がそのままファイル名になるじゃん
定義を変えてみたくなったらファイルを上書きするしかないじゃん
そういうとこだよ
2019/04/04(木) 11:31:19.04ID:Bp6OcKFp
>>685
この話題何度も出てるのか
staticおじさん云々に言及したのは初だわ
というか>>682はググって読んだ記事に対する感想な

staticメソッド:
 副作用無し → OK
 引数への副作用有り → 許容内
 標準出力などプロセスに1つのリソースへの副作用 → 許容内
 内部でstatic変数への副作用有り→ デバッグ等の特殊用途を除いてはゴミ

privateでないstaic変数
 → 論外のゴミ

これらをただstaticというだけで
その先にある局所性や副作用への悪影響を区分せず
ひとまとめに扱う雑な記事は、何かをdisるレベルに無いという考え
2019/04/04(木) 12:40:50.62ID:no/JRFUK
>>691
なんかIDEに怒られてstatic関数にできないときは
シングルトンのgetInstance作って
class名.getInstance.メンバ関数
で回避
2019/04/04(木) 14:01:55.30ID:t2REljhQ
>>693
私が勢いでレスしてしまったようだすまない
確かにstaticメソッドのみでみれば関数型的な副作用の切り分けとして見れるね

ただ
>>681 リンク先
> 共有変数も、pubulic static宣言していまう。したがってプロパティなんて作らない。
というアレがあるので『staticおじさん』とした時に関数型を持ち出すのは不適であると勢いづいてしまった
2019/04/04(木) 21:07:18.41ID:zCERpG8r
staticメソッド:
 副作用無し

↑これにめちゃくちゃ違和感がある
特定の言語は宋なのかもしれないけど…
2019/04/04(木) 21:24:47.26ID:g//GkyZ8
同じ機能を持った別個体のオブジェクト変数を持ちたい時にフィールドをstaticにしてたら何も出来ないけどね
2019/04/04(木) 22:06:34.27ID:Bp6OcKFp
>>696
どういう違和感か分からないが一応補足しておくと
staticメソッドのうち、副作用無しの場合 という意味な

副作用が無いメソッドというのは
引数以外に影響されず、戻り値以外に影響を与えないもの
具体例としては java.lang.Math.max
2019/04/04(木) 22:39:36.52ID:bWgxb2Xi
>>698
引数以外に影響されないことは副作用のないことの必要条件ではない
参照透過とごっちゃになってるぞ
2019/04/04(木) 23:09:47.59ID:ELt56IMR
副作用の定義によっては
参照透過と同義になってしまうかも?
2019/04/04(木) 23:20:58.18ID:qij6PJCK
定義によってはって、「副作用」の意味を変えちゃうってこと?
2019/04/04(木) 23:34:18.16ID:Bp6OcKFp
>>699
すまんその通り
オブジェクト指向に絡む話なのもあって
関数型に寄りすぎる単語を微妙に避けようとして変なこと言った
2019/04/05(金) 20:17:32.71ID:p2nz2EB6
副作用とは関数使ったら値を返すだけじゃなくて他のとこに影響出てしまうやつ

わかりやすい例で言えばファイル操作(write,read)関数とか画面に文字を出す関数(print)が
副作用があるとされている
2019/04/05(金) 22:40:10.47ID:nOvsDaXU
先生! ユーザー入力や乱数は副作用に入りますか?
705デフォルトの名無しさん
垢版 |
2019/04/05(金) 23:31:16.26ID:OJKC59P7
入ります。
706デフォルトの名無しさん
垢版 |
2019/04/05(金) 23:36:46.00ID:OJKC59P7
そう言う意味じゃHaskellはHaskell信者?は副作用は無いと言い張るが、確実に有る。
私がHaskellに注目してるのは副作用があっても参照透明性が保たれている。この一点だ。
2019/04/05(金) 23:56:50.87ID:lYJMaqmI
ブログやニュース記事ならhaskellだろうけど
ソフトウェアを書けといわれたらocamlで書くわ
2019/04/06(土) 00:31:00.91ID:fOYiDoB+
副作用があるのかないのかを型で宣言すればいいんだよ
副作用は無いと言い張るより、型は嘘をつかないと言い張る方が面白くなる
2019/04/06(土) 00:31:05.44ID:tSYMD8Eq
>>706
Haskellの世界ではないんだよ
まあトリックではあるんだが
でもそこを理解しないとmonadの意義もわからない
2019/04/06(土) 01:24:43.24ID:fOYiDoB+
モナドは外見上は引数がないけど値を返す
逆に引数はあるけど値を返さないとか、引数もない値も返さないとかの方が
副作用に関してはわかりやすいのだけどモナドの意義は副作用だけではないので
2019/04/06(土) 01:40:05.33ID:/WRt9p3o
モナドとかクソしょうもない型合わせごっこの遊び道具でしかない。
2019/04/06(土) 01:43:50.36ID:yyDZS6P1
関数型コミュニティのモナドをディスっちゃいけない空気嫌い
技巧に溺れて本来の関数型のメリットである見通しの良さや宣言性を完全に見失ってる
2019/04/06(土) 01:44:02.26ID:eNhmVT4m
トレートとインターフェースの違いは何なんだ?rust難しすぎ
2019/04/06(土) 02:56:29.83ID:Rn9Ldrv+
JavaとかC#のインターフェイスと似たようなもんだけど、後付じゃないジェネリクスと階層構造の無い型のおかげでむしろ使いやすい
OOPのインターフェイスの方がルール覚えづらいと思う。<? extends T>と<? super T>とかinとかoutとかもう覚えてないわ
715デフォルトの名無しさん
垢版 |
2019/04/06(土) 08:23:20.81ID:LfoN0yho
>>709
そのトリックに拘って純粋関数型言語と言う言葉に拘ってたら、
そこから話が進まなくなる場面を何度も見てきたから。
純粋じゃない言語から見れば「それもう副作用じゃん」「ただの方便じゃん」と。

だから私はHaskell使って何が嬉しいか聞かれたら、
参照透明性を保つことを徹底する所と答える。
2019/04/06(土) 08:33:11.58ID:/WRt9p3o
rustはc++に比べると一見学習コストは低いようにも見えるが
色々な機能の意義を理解するには結局c++やることになるという意味でc++以上に学習コストがかかる。
717デフォルトの名無しさん
垢版 |
2019/04/06(土) 08:37:35.86ID:LfoN0yho
>>710

モナドは常に引数あるよ。
doでしか使った事ないのかな。。。

main = do
print (1 + 1)
print (2 + 2)



main = print (1 + 1) >> print (2 + 2)

のdo表記だし、(>>)は

main = print (1 + 1) >>= \_ -> print (2 + 2)

の(>>= \_ ->)部分の略記。(print (1 + 1)の戻り値IO()からIOを外した()がラムダ式の引数に入るが使わない)
2019/04/06(土) 08:37:59.39ID:LXikOU7p
>>711 >>712
でもSwift, Java, JavaScriptとかの関数型がメインじゃない言語にも
実質モナド操作であるflatMapが入ったじゃん
719デフォルトの名無しさん
垢版 |
2019/04/06(土) 08:43:32.56ID:LfoN0yho
>>712
そうなん?
Haskell信者は兎も角、OCamlとかLisp系とか他の言語の人もそんな空気なん?
まあモナドをディスる理由も無い気はするが。
見通しの良さや宣言性も見失ってると思わないので、参考までに聞きたい。
2019/04/06(土) 08:48:46.26ID:/WRt9p3o
そんなクソみたいなものでIOの実行を表現するくらいなら実行タスクのチェーンを作ってますって
意味をもっと明示的に取り扱った方がマシだわ。
2019/04/06(土) 08:56:14.69ID:fOYiDoB+
>>717
printはモナドを返す関数だ
printの引数は関数の引数であってモナドの引数ではない
だからprintに引数を渡しただけでは副作用が発生しない
722デフォルトの名無しさん
垢版 |
2019/04/06(土) 09:10:31.05ID:LfoN0yho
>>721
モナドと言ったら>>=とかの演算子の方だと思ったんだが、IOな関数(アクション)の方なの?
それなら、getLineみたいなアクションは圏論的にはある種の変数扱い。

n = 1 ― 圏論では変数であり、引数無しの関数

値も、Haskellでは出来ないが強いて書いてみると

1 = 1 ― 1という名前の変数(値は1)、もしくは1という名前の1を返す引数無しの関数

そう考えると

getLine ― 外部からの入力(IOな値)が入った変数、もしくは(ry


>>711 の言う通り、型がIOなだけで、何も特別な関数というわけじゃ無い。
少なくともHaskellから見た扱いは純粋な関数と変わらない。
(それにも関わらず、main表層にアクションが自然と集まるというだけ)
2019/04/06(土) 09:13:29.66ID:LXikOU7p
以下は個別に分けられる話

(1) 純粋関数型ではそれ自体の制限からIOにモナドなどを必要とする
(2) Haskellでは実行タスクのセマンティクスを明示しやすくするためdo構文がある
(3) モナドの有用性はIOの表現用に限らない (他言語にも関連する)

>>720
それは(2)を考慮してもなお(1)に納得してないということ?
より良い方法があるんだろうか?

それ以前の、純粋関数型は要らないということかもしれないけど
2019/04/06(土) 09:17:48.36ID:LXikOU7p
>>722
その文脈のモナドは、それらを持つ型あるいは値では
725デフォルトの名無しさん
垢版 |
2019/04/06(土) 09:55:46.82ID:umTWflC6
これだから関数型の連中はいやなんだよ
2019/04/06(土) 10:04:05.89ID:fOYiDoB+
Rust「静的型はいいぞ」
Haskell「静的型はいいぞ」
迷探偵「これだから関数型は」
2019/04/06(土) 12:47:15.25ID:TkGMaDeW
Innullableな世界で仕事がしたい
2019/04/06(土) 13:11:50.28ID:hBfZV6UD
学習がしたい
2019/04/06(土) 13:33:25.41ID:fOYiDoB+
学習の難易度と速度を上げると壊れる
やばい全然勉強してないと感じる程度に勉強すれば壊れない
そういうやつほど無駄に成績が良い
2019/04/06(土) 14:03:55.76ID:hBfZV6UD
あのさ、この世界で学習と言えばAIだろ。 機械学習だよ。
2019/04/06(土) 14:35:38.07ID:eNhmVT4m
なぜ深層学習は深いんだい?
2019/04/06(土) 15:22:47.45ID:0N4TKw3/
>>715
そのとおりだよ
参照透過性だとどっから評価しても結果同じなわけで数学的に扱いやすいわけさ
だからそこにこだわるのがHaskell
プログラミングにも理論的なアプローチは重要だよ
ちなみにおれは普段c++使ってるから
実用性重視してる方だけどな
2019/04/06(土) 16:48:06.36ID:fOYiDoB+
関数型の世界でAIといえば記号処理でその成果が型推論
2019/04/06(土) 17:53:47.62ID:7tGee9uO
>>733 なんか全く的を外していないかい?
2019/04/06(土) 19:17:55.07ID:8WC9KsB7
社畜の世界でAIといえばアクションアイテムでその成果はない
2019/04/06(土) 22:51:30.58ID:5uCwXBh8
>>731
昔はせいぜい2・3層だったからとか?
737デフォルトの名無しさん
垢版 |
2019/04/06(土) 23:03:26.36ID:qQhidKgX
さんまの世界ではAIと言えばエッチの後
738デフォルトの名無しさん
垢版 |
2019/04/07(日) 06:55:03.83ID:DafnpbK7
圏論だ参照透明性だと出て来て難しそうに見えるけど、Haskellの裏でそう言う論理に基づいて処理系が動いてるってだけで、
プログラマーは意識する必要はない。
(必要無いのに知らなきゃダメみたいな雰囲気作ってる純粋関数型言語信者がプログラマーからHaskell触る機会を奪ってるだけ)

もっと言えば純粋関数型言語だからとか、関数型言語だからと肩肘はる必要もない。

型に気をつければ動く算数・数学のエミュレータみたいなもの程度で良い。
変な言語だけど、そう言う言語というだけの意識で良い。
2019/04/07(日) 07:15:45.34ID:c9qO7NyZ
いやさすがにHaskelをその評価戦略を理解せずに使いこなすのは不可能だ
Haskelが初心者を阻んでいる最大の壁はそれ
2019/04/07(日) 08:18:35.92ID:OFkYw0l7
だよな
それで使えたら誰も苦労せんだろ
理論知らずにあの型エラーどうやって直すんだ?

つーかHaskell使えない人がそういう知ったようなこと言うのがそそもそもおかしい
そりゃ話が噛み合わないさ
2019/04/07(日) 08:20:55.34ID:ObuUWG1X
評価戦略と型エラーは関係ないぞバーカ
2019/04/07(日) 08:34:15.00ID:/9bq+rwa
せやな、デフォルトの遅延評価だと空いてる時間に先読みさせておくとか出来ない。
Deepseqみたいなのを使ってワザと何か変数を明示的に評価したりBangパターン使ったりと少し工夫が要る、、よね?

こと速度云々やり始めるとFusion的なのは強みだけど、評価戦略の理解も必須。
2019/04/07(日) 09:19:17.34ID:GYBhj6UR
haskellプログラマがすごいと思えるところはその辺の最適化についてしっかり理解してるところだろうな。
決してモナドでドヤるところではない。
2019/04/07(日) 09:35:57.59ID:uhpyC8M8
初心者はPython以外意識する必要はないぞ
近い将来Pythonに代わる言語が出てくるのを知らなきゃダメみたいな煩悩を捨てろ
それと煩悩は信者の陰謀で作られたのではなく人間なら誰でも持っているものだ
2019/04/07(日) 09:41:31.61ID:I8qUkc8+
>>743
評価順を意識することなく気持ち良く数学オナニーするための遅延評価のはずが、
結局みんな評価戦略のハックを競ってるの草
2019/04/07(日) 09:57:40.07ID:uhpyC8M8
重要なのは起動時に変数を初期化する順序
C++ならグローバル変数のコンストラクタを呼ぶ順序
Javaならとりあえずnullで初期化して後で代入することになる
この問題をHaskellは遅延評価で解決する
2019/04/07(日) 10:12:31.86ID:KWJ+xksL
>>746 Pythonだって遅延評価を取り入れてるぞ。
range 関数やジェネレータでは遅延評価する。
2019/04/07(日) 10:35:27.16ID:PWWywgBM
「遅延評価 *も* できる」と「ぜんぶ遅延評価でやる」の違いの大きさ(良くも悪くも、だが)
が理解できてないPython使い
2019/04/07(日) 11:08:03.83ID:uhpyC8M8
ジェネレータは疑似マルチタスクを意識する
遅延評価は無意識というか自動運転のようなものを目指して猛反対されている感じ
2019/04/07(日) 11:10:17.55ID:BQvGqFhC
haskell使うのが適してるのってなんなの?大きなプロダクト?小さなプロダクト?高速動作が求められるプロダクト?生産性が求められるプロジェクト?
2019/04/07(日) 11:11:16.13ID:BQvGqFhC
煽りっぽい書き込みになってしまってすまん。
よく名前聞くのでGWに勉強してみようか悩み中なんだ。
2019/04/07(日) 11:24:49.64ID:uhpyC8M8
人工知能プロダクトではなく人工知能ブームのようなものを作るのに適している
2019/04/07(日) 11:42:16.35ID:b5J7R/uS
>>751
Haskellは時間と気持ちに余裕があるときにやっておいて損はない

LISP(Common Lispの特にCLOSとScheme)、Prolog、APL、Io あたりも同じ
2019/04/07(日) 11:51:03.48ID:libAZ4Hy
広く普及してる言語で必死に仕事してる人達に対して、俺はhaskell理解してるってドヤ顔するのに適してる
2019/04/07(日) 12:04:12.17ID:h90p5IeD
>>754
そしてドヤったところで、で?と返されるだけだったりする
2019/04/07(日) 12:37:30.68ID:/9bq+rwa
このスレ、Haskellにコンプレックスのある人が多いのな。スレタイからいつの間にか締め出されててワロタ。
2019/04/07(日) 12:57:29.07ID:FeHvfrjY
Haskellって次世代言語か?
2019/04/07(日) 13:28:39.65ID:uhpyC8M8
互換性を残して何年も再チャレンジするやつは減点するスタイルだな
互換性を捨てるインセンティブ
それでも互換性を捨てないC/C++が勝ち続ける仕組み
2019/04/07(日) 13:34:43.01ID:/9bq+rwa
>>757
ああ、そういうことか。知ってる人からすると古いのね。なる。
2019/04/07(日) 13:50:53.75ID:HWuq8CQ1
Python3は、現状では互換性捨てて
成功だったんじゃないかな。
2019/04/07(日) 14:36:36.46ID:pahFUo3A
>>748 良いところだけ取り入れた Python が利口。
>>749 ソースを教えて。

>>758 C系は現代のアセンブラだからな、必要だが積極的に使おうとは思えない言語。

Haskell みたいに読みにくい言語は支持されない。 LISP でやれる事は殆どPythonで出来る。だからLISP は消えた。
2019/04/07(日) 14:51:40.26ID:YrS1j1OB
PythonやるならCは必須
2019/04/07(日) 15:13:13.54ID:/57iNm6y
>>761
>Haskell みたいに読みにくい言語
え!?
2019/04/07(日) 15:39:31.20ID:OFkYw0l7
Haskellが気になってしょうがないのはわかる
知能試されてるからな
2019/04/07(日) 15:47:13.09ID:pahFUo3A
ところで Haskell って誰がどんな場面で使ってるの?
2019/04/07(日) 16:22:12.12ID:Y0LlEYhJ
どうせお前には扱えないんだから気にすんな
死ぬまでPythonやってれば幸せだろ
2019/04/07(日) 16:36:29.82ID:/9bq+rwa
Pythonは我が世の春ですな。
2019/04/07(日) 16:56:12.85ID:pahFUo3A
>>766 自分はどんなものに使ってるんだよ。 ほぼ30年も経って実用的なアプリケーションはあまりお目にかからないだろ。
2019/04/07(日) 17:08:23.58ID:pahFUo3A
>>766 どこも珍しがってちょろっとだけ触ってみるがみんな逃げだしてるじゃないか。
生産性が悪い証拠だろ。

資金力のないWeb系ベンチャーがHaskellを採用したらどうなったか
https://qiita.com/arowM/items/25b7740ca0f31cc1be15
悲鳴が聞こえる。
2019/04/07(日) 17:33:42.20ID:OFkYw0l7
だから気にすんなよ
2019/04/07(日) 17:58:08.83ID:pahFUo3A
>>770 じゃ宣伝すんなよ。目障り
2019/04/07(日) 18:02:29.32ID:OFkYw0l7
宣伝だそうで
2019/04/07(日) 18:16:51.87ID:uhpyC8M8
perl python2 python3全部インストールしても全く問題ないのが勝因ではないか
2019/04/07(日) 18:23:13.37ID:/9bq+rwa
流行りの機械学習のデータ整形とかHaskellは相性良さそうな気がするけどな
2019/04/07(日) 18:25:44.16ID:dh/+Mumy
>>769
>生産性が悪い証拠
生産性が悪いかもしれないし道具を使いこなす力が足りない人や組織が
手を出したという仮説も成り立つだろうし…。他にも転職が多いIT業界
で更に Haskeller の絶対数が少ないとか軍事・金融関係といった秘匿が
重要な産業分野での応用が多いとかいろいろ候補理由が挙げられそう。

「資金力のないWeb系ベンチャーがHaskellを採用したらどうなったか」
で言及されている ”Beating the Averages” の一節にこんな表現がある。

> ベンチャー企業はライバルになるべく情報を漏らさないもの

言い得て妙。
2019/04/07(日) 18:45:56.29ID:DgqF8SFg
そういうのだいたいろくなもんじゃない

メンテできるのがその会社しかなくなって客が依存せざるを得なくなるとか
どっかの資本家のサポート得られやすいとか
かっこいいから国が金払ってくれやすいとか
そういうの
2019/04/07(日) 18:51:43.78ID:/9bq+rwa
他社に追従させず依存させるのが金儲けでないのん?
2019/04/07(日) 19:03:25.42ID:HWuq8CQ1
>>765
FBやCSV、Excelの簡単なデータ加工用の
1000行いかないくらいのコマンドラインツールを
PythonとHaskellで作って使ってるよ。

ExcelはPythonの方が楽なんでPython使って、
あとは、使い捨てかとか、人に使ってもらうかで、
使い分けてる感じ。
2019/04/07(日) 19:04:22.67ID:PFYq1oCr
結局ハスケルの良さがさっぱりわからん。
むしろそれを知るために勉強したくなってきた。仕事に生かされる可能性は限りなく低いんだろうけど。
2019/04/07(日) 19:05:41.01ID:kcIqkU8W
>>778
特定のプロダクトに対しては生産性が良いってことか。
2019/04/07(日) 19:35:40.60ID:pahFUo3A
>>777 今時そんなの古いよ。 オープンソースの時代だぞ。
オープンにして人からも助けてもらう事でスピードを加速できる。
秘匿なんてしてたら時代から取り残されるだけ。
2019/04/07(日) 20:15:25.82ID:T2rqGc5k
>>687
staticおじさんは世界の全てがstaticに見えるってマジやったんやね
こわこわ
2019/04/07(日) 20:28:27.13ID:YrS1j1OB
>>780
特定のプロダクトというよりもネイティブなライブラリをキックさせるにはPythonが楽ってだけだろ
VBAから置き換わるには本当に都合が良い
2019/04/07(日) 20:46:47.54ID:pahFUo3A
>>778 なんか無理やり使ってそう。
2019/04/07(日) 20:49:47.56ID:OFkYw0l7
このHaskellコンプレックスの人、目障りなんだけど
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況