次世代言語9[Haskell Rust Kotlin TypeScript Dart]

■ このスレッドは過去ログ倉庫に格納されています
2018/03/06(火) 10:09:15.60ID:x/Au45rc
スレタイ以外の言語もok

前スレ
次世代言語Part8[Haskell Rust Kotlin TypeScript]
http://mevius.5ch.net/test/read.cgi/tech/1512137301/
2018/03/27(火) 23:16:27.79ID:iLpxT8od
DDDとかだとDSLを作るって言うけど
それって変数名とかメソッド名に日本語を許容するってこともありえんのかな?
2018/03/27(火) 23:35:51.57ID:O0jMKDc6
最近の言語って識別子に日本語使えるの増えたよな。まあ日本語っていうかUnicodeなんだけど。
654デフォルトの名無しさん
垢版 |
2018/03/28(水) 05:56:44.07ID:LrPDAu7h
絵文字を駆使したハンガリアン記法時代の幕開けだ
2018/03/28(水) 07:22:48.81ID:lXnJ1NTY
ようやく時代がSmalltalk-72に追いついたかw
https://pbs.twimg.com/media/DDhrUoSXkAAtvJO?format=jpg
2018/03/28(水) 10:43:26.92ID:Pilbwiej
時代を先取りしすぎるのも考え物
2018/03/28(水) 10:45:01.89ID:qnpV2Jxp
APL…
2018/03/28(水) 10:53:19.54ID:yjlej8xR
正直APLは今なら流行ると思う
2018/03/28(水) 10:55:53.02ID:qnpV2Jxp
統計とか各種データの集計に良さそうだもんな
660655
垢版 |
2018/03/28(水) 11:29:22.55ID:ng8CxZVM
>>657
たしかにそうなんですが…APLの方は記号を読みやすくするために用いているように思えなかったので…

ピタッとはまれば驚愕の短さで書けますけどね

例: Conway's Game Of Life in APL
https://www.youtube.com/watch?v=a9xAKttWgP4
2018/03/28(水) 16:41:04.69ID:Lb32PKeB
>>654
むしろ文字使用禁止な言語
(コーディングルールじゃなく言語仕様でemojiと記号を強制)
次世代言語感がいっぱいw
2018/03/28(水) 17:21:22.86ID:4ymmJVEB
そういう次世代感か…
文法エラーにも優しくどう書いても何らかの動作をすることが望ましいな。
「プログラマになろう」というサイトを開いてみるか
2018/03/28(水) 22:26:11.70ID:CTFOdrqh
チューリング完全になろう系じゃないか
C++とHaskellの親戚みたいな言語がいっぱいだぞ
2018/03/28(水) 23:09:42.27ID:yjlej8xR
C++とHaskell の親戚ってなんだ
2018/03/29(木) 02:16:30.07ID:Hc4kPWXM
テンプレ(異世界転生or転移、チート、ハーレムあり)小説が量産されるみたいなノリで
テンプレ(手続き型or関数型、型推論あり)言語が量産されるわけか

その傾向はあるよね
2018/03/29(木) 02:37:14.12ID:tc7M6rRR
Fortranのサブルーチンみたいな感じで副作用は全部intent(out)の引数にのみ許すことで実質純粋手続きみたいな言語って他にある?
2018/03/29(木) 07:56:15.41ID:plQi1Ped
COBOLとかPLIとか汎用機時代の主役はだいたいそうでしょ
まさかCOBOLプログラミングは全部グローバル変数でデータのやり取りをするみたいな話を真に受けてる?
そんなの汎用機全盛時代の超規模開発において一山いくらのPG達に管理しきれるわけないだろ
コンパイル単位を分割して、サブプログラムに明示的に構造体の参照を渡す形でリンクするか、別の実行ファイルにして間に一時ファイルを挟むんだよ
Cがヘッダのincludeを覚えてしまったことで業界がダークサイドに堕ちたけど、昔のプログラムは今よりずっと疎結合で単体テストしやすかったんだよ
2018/03/29(木) 08:11:58.91ID:xXxQyZNu
グローバル変数を使うのはパソコンのbasicの時代ではないか
プロがどんな美しいコードを書こうが
ネットで検索できるオープンソース以外は知ったことではない
2018/03/29(木) 08:13:12.45ID:9BLtoEOh
以前の俺含め今時は一時ファイルなんかダサいAPIやメッセージキューにしろなどと抜かす人が多いけど、汎用機を経験するとみんなバッチ信者になるよ
単体テストしやすく、開発規模面でもパフォーマンスス面でもスケーラブルで、運用も容易
汎用機のバッチ処理の設計は現代のプログラマ全員が学ぶべき素晴らしい技術
2018/03/29(木) 08:25:29.74ID:xXxQyZNu
ダサいというのは建前で、JITコンパイラ言語でそれをやりたくないのが本音ではないか
2018/03/29(木) 08:28:00.50ID:Hc4kPWXM
Linux でも良くやってるぞ
2018/03/29(木) 09:11:24.31ID:r+OSvbaK
>>669
モックライブラリがこんなに発達してるのに何言ってんだ
2018/03/29(木) 09:27:39.99ID:pztT5rJU
>>672
バッチならファイル作って放り込むだけやぞ
結合状態でのリグレッションテストとかもdiff取るだけだし
2018/03/29(木) 10:09:08.49ID:CZF8yyoA
バッチ処理で何してんの?
システム運用中に流せるもの?
停止してから流すとしたら、想定時間内に終わらないように作んないといけなかったりするんじゃないの?
2018/03/29(木) 10:18:06.32ID:r+OSvbaK
>>673
モックならインスタンス作って放り込むだけやぞ
結合状態でのリグレッションテストとかも状態比較するだけだし
2018/03/29(木) 10:48:51.83ID:pztT5rJU
>>675
結果が意図しないものになってるときにどうやって途中経過を調べるの?
バッチならファイル見れば一発だけど、全サービスクラスにログ出力入れるの?
2018/03/29(木) 11:16:09.01ID:r+OSvbaK
>>676
ログ出力も何もオブジェクトのスナップショットとって状態比較するだけ
てか、結合テストで途中結果見てる時点で、それモジュールテストだろっていう
2018/03/29(木) 11:18:13.25ID:r+OSvbaK
結合テストでは通常おのおののモジュールが期待した結果を出力することを前提に振る舞いテストのみを行うだろ?
結果の比較なんかしてる時点で、考え方がズレてる
2018/03/29(木) 11:26:16.78ID:r+OSvbaK
てか>>674も書いてるけど、バッチ処理なんて前提条件厳しすぎるし、障害対応もめちゃくちゃ大変だろ
今どき、そんなシステムどんな業種で開発するんだ
680デフォルトの名無しさん
垢版 |
2018/03/29(木) 16:52:27.07ID:wUGa4G8N
>>666
純粋手続きってのがわからん。
引数にin outだったらadaも付けれるぞ。
2018/03/29(木) 17:13:18.86ID:mREgEFij
>>680
Fortranのpure subroutineのことや。まんま訳して純粋手続きって書いたけど、分かりにくいなら以後pure subroutineって書くわ
2018/03/29(木) 17:55:25.23ID:d3FuArtt
>>680
Fortran等の昔の言語には、サブルーチンと関数の区別があって
サブルーチンは副作用あり、関数は副作用なしって使い分けがあったんだよ
(その区別はAdaにもあったんだが、2012年の改定で関数もoutパラメータを持てるようになってしまった)
2018/03/29(木) 17:57:17.44ID:mREgEFij
>>682
intent(out)さえつけといたらsubroutineにもpure修飾子をつけれることを俺は>>666で言ったの
2018/03/29(木) 18:04:24.92ID:d3FuArtt
>>683
あーすまん、話の流れを追いきれてなかった
2018/03/29(木) 18:42:15.80ID:mREgEFij
言ったのと言いつつ言ったつもりになってただけだわ。謝られるとこっちが申し訳ない
686680
垢版 |
2018/03/29(木) 22:25:28.48ID:wUGa4G8N
>>682
なるほどわかりやすい説明サンクス。
2018/03/29(木) 23:19:00.18ID:fG+oYH1y
元々の問いに対する答えは持ってないけど、そもそも
引数に明示するのは返却値の代入と同じで副作用でも何でも無いような。
2018/03/30(金) 00:38:00.59ID:Cv8Wlmrv
そういう、単に複数の値を返したい(outパラメータを使いたい)からというだけで
関数ではなくてサブルーチンになっている物に対して、副作用がないことを明示できるのが
Fortranのpure、という話だろう
今時なら普通にタプル返すだけだけど
2018/03/30(金) 01:00:29.06ID:Z4F/kC6f
>>688
そうそうそれそれ。汲み取ってくれてありがとう
タプルで返すのもいいんだけど、大きなベクトルとか行列とかは返り値として返そうとすると確保やらコピーやらのコストがかかっちゃうから、サブルーチンって結構いいと思うんだよね
2018/03/30(金) 03:17:21.13ID:Wx9gH+Ym
でかい配列を返すとして、オブジェクトを複製せずポインター返しておしまいという言語も多いし
2018/03/30(金) 12:08:24.66ID:27QTfa4q
それのオーバーヘッドがどの程度のものなのかよく分からんで不気味に感じるんだよな。俺が勉強不足なだけかな
2018/03/30(金) 21:17:44.20ID:S5bBhBUr
ベンチマーク取ればいいだけじゃん
2018/03/30(金) 21:25:37.94ID:gL2Crqwy
まあ実際そこそこオーバーヘッドあるんだけどね
2018/03/30(金) 21:34:29.21ID:35t2qqJ0
ベンチマークとれ
テストコードかけ
は若手にいうと凄まじく煙たがれるなw
2018/03/30(金) 21:37:02.92ID:lbiuvb17
毎回毎回 (N)RVO が効くかなと頭使ったりプロファイル計測したりするより
可能なら out パラメータにしたくなるよな

string だけは何故か気軽に戻り値にしてしまうが
2018/03/30(金) 21:53:34.74ID:Lu4RhpIc
なるほど。
値型ローカル変数でスタックを確保する事が意味論的に決まってると、
返却値でコピー回避は難しいですね。
Nimでresultが予約変数になってるのも不思議だったけど、外部で確保した
領域を直接割り当てられる、みたいな理由だったりするのかな。
2018/03/30(金) 22:05:59.64ID:lbiuvb17
c++ の場合 RVO (return value optimization) が最高に効けば

string f() { return string(“123”); }

void f(void * retval) { new (retval) (“123);}
のように戻り値を呼び出し側が渡した領域に直接コンストラクトするから、

void f(string &s) { s = “123”; }
よりも高速になる可能性がかなりあるんだよね
vectorでもなんでも同じだけど

どうでもいいか
2018/03/30(金) 22:50:08.41ID:MliDoeQ0
C++ならplacement newを使う手もありそうだが実際に使いこなせる気がしない
2018/03/30(金) 22:51:45.23ID:35t2qqJ0
どうでもいいな。
そこまで速度欲しいなら他にもっと直接的なやり方がいくらでもあるだろうに。
2018/03/30(金) 22:53:37.54ID:s5wfWcqZ
そんな細かいことで速くなるような状況ならインライン展開されるだろ
2018/03/30(金) 23:09:07.15ID:MliDoeQ0
マルチスレッドを考えるとスタックはスレッドローカルなので速度だけの問題ではない
速度だけ考えると確かにどうでもいいからマルチスレッドを考えるといい
2018/03/30(金) 23:32:59.08ID:vpP76l93
>>699
>>直接的なやり方
それがintent(out)なわけだが
2018/03/30(金) 23:36:16.61ID:vpP76l93
あすまん>>699>>697へのレスか。それ分からずに変なこと書いた

>>697
その「可能性がある」ってのやっかいだわ
2018/03/31(土) 00:27:11.90ID:Pb+ZodvD
そもそも返り値使いすぎなんだよな
返り値なんてエラー管理かスカラー関数くらいにしとくものなのかも
2018/03/31(土) 01:41:58.87ID:uN2ioEKO
その言語の推奨されるスタイルに合わせるべきじゃね?
C++ならちょっとしたことで>>697のどっちがいいか変わるとかには目をつぶって
返り値使うべき
Fortranならoutパラメータを活用すればいいだろ(タプル無いし)
そこから外れるのは実際に速度が必要になってからでいい
2018/03/31(土) 02:05:24.43ID:Pb+ZodvD
そう。その推奨されるスタイルとしてintent(out)を採用している言語って少ないよなあーと思うんよ
2018/03/31(土) 02:15:44.60ID:t0EWsjNV
このスレ的にあれどけどc言語がそうだ
戻り値はスカラーかポインタ
それ以外の返り値が必要なら非constポインタを渡す
2018/03/31(土) 03:00:03.91ID:uN2ioEKO
C言語はスタイルとしてはそうだけど、言語機能としてポインタ渡しとoutは区別されてないな
逆にD言語やC#はoutをinout/refと区別してるけど、推奨はされてない感が強い
2018/03/31(土) 08:00:23.62ID:9+5jHACw
まあ直感的には引数はインプットで返り値がアウトプットってのは自然だとは思う。
そうならんのはcの場合は返り値をレジスタ、もしくはスタックにどう置くかを意識してるからでしょ。
良くも悪くも低レイヤーに合わせているわけだ。
2018/03/31(土) 11:14:49.43ID:Pb+ZodvD
Cはintent指定出来ないことに目を瞑ればかなり良いんだけど、配列の範囲外アクセスチェック周りとかが原始的すぎてデバッグしんどいなあ
2018/03/31(土) 13:27:31.25ID:pVxcphgn
そもそもpure宣言相当が無い、つまりどんな関数も副作用が有りうると想定する
必要のあるCはお題から外れるのでは。
2018/03/31(土) 14:04:14.80ID:Pb+ZodvD
せやな
2018/03/31(土) 14:18:10.92ID:38KyKd1m
「副作用が無いDSL」のインタプリタをCで作るか
インタプリタではない何かをDDDで作れ
2018/03/31(土) 14:45:53.72ID:uN2ioEKO
つ__attribute__((pure))
2018/03/31(土) 19:03:39.12ID:pVxcphgn
libC関数もヘッダに情報が入って、pure から pure じゃない関数を呼んだらコンパイルエラーになるくらいになったら意味があると思うけど。
2018/03/31(土) 20:16:30.87ID:dM6Zlct0
画面に出力するのは副作用?Thunderbolt3で接続したGPUボックスをGPGPUとして使った計算は?
ヒープ領域を変更するのは?
と、考えるとpureなものって何でしょうね、ってならないかね
2018/03/31(土) 20:30:38.28ID:Pb+ZodvD
その辺はHaskell的なアプローチでいいんじゃない?
2018/03/31(土) 20:31:03.58ID:Pb+ZodvD
Haskell のは並列か
2018/04/02(月) 19:29:25.78ID:o7/+6TQd
Cって
「本当は疎結合にしたいけど性能優先でしかたなく密結合にするよ」
を理解できるレベルを暗黙の前提にしてない?
なんであんなに流行したんだろ??
2018/04/02(月) 19:41:43.42ID:jOZ58Btw
Nimって疎結合にしても密結合なCくらいのパフォーマンス出るんだろうか?
2018/04/02(月) 19:51:29.66ID:7E1ezZvV
ライバルたり得たPascalが
文字列は255文字まで
可変長引数使えない
ポインター扱いにくい
int と char の区別が面倒、など
なんとも無意味な不便さを抱えていたからだと思う

32ビットまでの Windows は API の呼び出し規約が Pasal 流なのに文字列はC式、
初期の Macinrosh は API の文字列も公式の解説書の記述も Pascal だったりしたなあ
2018/04/02(月) 20:02:30.49ID:jOZ58Btw
ごめんなんでもない
2018/04/02(月) 22:21:14.63ID:EN/8rlvw
疎結合の意味はよくわからんがdllやsoの中身はほぼ全部Cの関数だろ
2018/04/02(月) 22:23:36.55ID:QQz+Sj8+
高級言語からCの方向で見てるからの感想だろ。
アセンブラからCの方向だったらまた違った感想になるんじゃないかね。
2018/04/03(火) 00:10:13.25ID:RwyGVa1s
ドライバのようにインタフェースを関数ポインタで定義して実装を分離するみたいなのが疎結合のC?
2018/04/03(火) 00:12:50.53ID:kpq2obaf
素直に別の実行ファイルにするのが疎結合のC
2018/04/03(火) 01:42:26.51ID:+aZgql8Q
>>726
それはコロンブスの卵だから無意識に選択肢から外してしまうんだよな
任意の言語でできることをやっても特定の言語の手柄にならないから
2018/04/03(火) 03:18:38.36ID:uqya3zvR
作者のwirth先生はPascalを教育用、ModulaをOSも書けるように作ったのに
Pascalの方がそれなりに広まってModulaがさっぱりだったのは不幸だよな
まあModulaはModulaで面倒くさいとこあるんだけど
2018/04/03(火) 12:54:09.54ID:GZlQK3q7
いい加減スレタイからRustはずそうぜ
2018/04/03(火) 14:02:58.92ID:bDjjKsy9
つか、スレタイから次世代言語をはずした方がいいんじゃね。
旧世代の言語の話しか出てこないし。
731デフォルトの名無しさん
垢版 |
2018/04/03(火) 14:19:06.58ID:01qL0AuM
>>730
次世代を語るためには旧世代を知っておかねばならんのだ(キリッ
2018/04/03(火) 14:58:56.73ID:nX+Jhx5Q
おんこちしんと
うんこちんちん
似てる
2018/04/03(火) 16:29:09.56ID:lykT2DjF
>>729
C++のポジションを狙う言語には「なんなんだよこの仕様=うっとうしい」もついてくるからw
734デフォルトの名無しさん
垢版 |
2018/04/03(火) 17:41:10.26ID:01qL0AuM
>>733
C++のポジションを狙うRustには「なんなんだよこのアンチ=うっとうしい」もついてくるからw
2018/04/03(火) 18:01:19.06ID:teyqxCn/
ネタにしてるが、マジで旧世代言語知らずに次世代なんて語れんだろう。
2018/04/03(火) 19:42:11.24ID:wFxxlJZP
そもそも次世代言語ってまだない言語を夢想して話せってこと?無茶いうな
2018/04/03(火) 19:48:53.79ID:AUs9WXEq
あのアンチはRustに職を奪われたからね、しょうがないね
Rustスレで気持ちよく大暴れしてるときに自分で漏らしてたよ
2018/04/03(火) 20:16:15.66ID:BzNmSsTz
なんでこんなrust普及の妨げにしかならんこと言いだすんだろう。
2018/04/03(火) 20:27:21.10ID:X7iioW9i
UE4やHoudini使ってると次世代言語はビジュアルプログラミングでいい気がしてきた
2018/04/03(火) 20:33:03.03ID:s7jZ67re
Rustは次世代言語だがC++知ってた人と今から勉強始める人の格差はリセットされないな
世代交代とは寿命が尽きることであって格差がなくなることではない
2018/04/03(火) 20:44:15.49ID:uqya3zvR
>>739
MSは何故GUIエディタを放棄してXAMLなんぞ作ったんだろうか……
2018/04/03(火) 21:06:26.14ID:teyqxCn/
XAMLはまだBlendで書けるだろ。
2018/04/03(火) 21:10:07.12ID:f/nGrkvY
XAMLを手書きしてる人なんているか?
2018/04/03(火) 21:27:57.24ID:teyqxCn/
Xamarinの人たちかな。
2018/04/03(火) 22:59:23.72ID:oucbN3qp
補完ありのテキストエディタならいくらでもいそうな気がするが。
2018/04/03(火) 23:12:30.59ID:gOYTrQOB
Delphi「やっと時代が追い付いたか」
2018/04/04(水) 00:44:22.36ID:fh2IMjqM
>>739
じゃあdiff取ってみろ。
テキストを超える記述方法は無いよね。
2018/04/04(水) 16:47:20.75ID:VNuZKpdj
Kylix「誰も知らない 知られちゃいけない」
749デフォルトの名無しさん
垢版 |
2018/04/04(水) 17:04:36.07ID:Pmay6Vdj
deっvi---l
2018/04/04(水) 17:31:20.15ID:wRFLDXS3
まあVBの方が古いんだけどな
2018/04/07(土) 09:53:55.09ID:e89pcJBq
>>739
同意
テキストよりビジュアルの方が人間の頭脳に優しい
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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