次世代言語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
2019/03/09(土) 00:46:34.01ID:jmJNTA16
>>473 リストを使わずに、セットや辞書を使えば良いんじゃないの? リストは遅いと書かれてるんだし。
セットや辞書はHash
2019/03/09(土) 01:26:39.24ID:wV17wiJS
いやいやあんた何言ってんの
2019/03/09(土) 01:30:33.77ID:HqfcKPNw
最近データ構造の勉強を始めたんじゃろ
2019/03/09(土) 02:03:10.56ID:bnJe64DG
>>473
無限の可能性をもつ次世代言語なんかじゃなくてCに置き換える
っていうビジョンが見えてるのが素晴らしい
478デフォルトの名無しさん
垢版 |
2019/03/09(土) 03:01:35.52ID:n56g/PGg
じゃあ最初からCやれよ
2019/03/09(土) 08:50:59.24ID:ylwqDFWx
最初にやるのは、Cに置き換えないと激遅になる証拠をしっかり押さえること
2019/03/09(土) 08:54:53.67ID:jz9xUaFa
得意な部分は他の言語にやらせたらいいっていうのはわかりやすくて良い。
なんでもアピールするバカよりよっぽど良いのは現実と一緒だな。
481デフォルトの名無しさん
垢版 |
2019/03/09(土) 08:58:56.37ID:6GEF2scy
Pythonは何が得意なの?
2019/03/09(土) 09:01:21.52ID:v9lhRDY6
>>473
cythonやnumbaを知ってから批判しましょうね
2019/03/09(土) 09:05:40.00ID:e3G7+PXr
>>482
最初からCで書けよクソゴミで済む話なんだよな
2019/03/09(土) 09:12:31.13ID:ylwqDFWx
同じことを同じ言語で二回書くのはクソゴミだが、言語を変えるなら二回書いてもいい
2019/03/09(土) 09:12:48.57ID:jz9xUaFa
>>481
糊付け
duckタイピング
2019/03/09(土) 09:20:36.93ID:v9lhRDY6
>>483
全然違うよ
numbaで書くのはcで書くより遥かに簡単だからね
2019/03/09(土) 09:29:01.65ID:4ewQpv+T
ダックタイピングと呼ばれるものって、実際には同名のメソッドが存在すればそれを呼ぶことができる
(動的バインディング)ってだけで、「アヒル」や「タイピング」は関係ないよな。
アヒルのたとえ話の趣旨からすればTypeScriptのようなstructual subtypingが近いんだろうが。
2019/03/09(土) 09:29:17.49ID:jmJNTA16
>>481 ちょこちょこ変更できてなんでもできる事。
だから入門者用としても入りやすい。小学生から学者まで。

特にライブラリーが揃ってるから統計分析など科学技術計算には強い。 特に機械学習やAI は、Python
また、Excel との相性も良い。

コンパクトなバイトコードになるから、IoTの様に小さな所でも動け、REPLが動くから実機で変更テストができ自由度が高い。だから、IoT用言語としての地位も確立している。
2019/03/09(土) 09:37:11.61ID:uR+z9zTM
>>487
Pythonにはどっかの赤い宝石とは違ってドキュメントをきちんと書く文化がある
そして、本当に正しく書かれたドキュメントには「プロトコル」としてアヒルが満たすべき要件が定義されている
そこまでやってはじめて「ダックタイピング」と言える
2019/03/09(土) 10:01:14.60ID:4ewQpv+T
Pythonのプロトコルというとイテレータとかああいうやつ?あれなら確かにダックタイピングと
言えるかもしれないけど、あらかじめ定義されているもの以外に「アヒル」プロトコルとか
追加できるんだっけ?
2019/03/09(土) 10:22:47.01ID:ylwqDFWx
文章力があればプロトコルの数学的定義を覆せる文化
それがドキュメントを書く文化につながる
2019/03/09(土) 11:05:03.57ID:ktQSUaaW
>>490 デスクリプタ汎用プロトコルがあるからユーザが定義できる。
https://qiita.com/knzm/items/a8a0fead6e1706663c22

デスクリプタ HowTo ガイド
https://docs.python.org/ja/3/howto/descriptor.html


Duck Typing は動的型付けな言語(Python, Ruby)等における型付けの作法である
ある処理に必要なオブジェクト A と同じ振る舞いができるのであれば、継承関係のある/なしにかかわらず、そのオブジェクトはAと同じとみなして良いというもの。

Python のダックタイピングの例
PythonのABC - 抽象クラスとダック・タイピング
https://qiita.com/kaneshin/items/269bc5f156d86f8a91c4
2019/03/09(土) 11:58:15.18ID:GVs3bbIF
Ruby のStringIO は、Duck Typing

StringIO クラスは、IO クラスと継承関係はなく、
単に、read, write など、IO と同名の関数名を使っているだけ

これだけで、StringIO に対して、入出力操作を行うことで、
メモリファイルを扱うことができる

最近は、ガチガチの継承よりも、委譲やDuck Typing を使うことも多い。
宣言無しのinterface みたいなもの
2019/03/09(土) 12:11:53.03ID:4ewQpv+T
>>493
>宣言無しのinterface みたいなもの

なるほど、そういう解釈ならしっくり来た。
2019/03/09(土) 12:17:10.91ID:BnoVO+GE
Rubyは大クラス主義といって、移譲だのプロトコルだのまどろっこしいことするよりどんどん継承しようぜ!という考え方が主流
だから実際にはほとんどダックタイピングは使わない
静的型検査なしでドキュメントも書きたくないとなると、Pythonのような紳士協定ベースなやり方は確実に破綻するので、
実装継承を多用するというのは「実装が仕様」なルンペン文化には適したスタイルではある
2019/03/09(土) 12:34:00.97ID:jso+Oksr
interfaceがあってこそのduck typingだなとtypescriptやって思った
2019/03/09(土) 12:42:38.75ID:BnoVO+GE
interfaceは元々は「堅い」言語で既存コードに極力手を入れずに建て増ししていくための仕組みだが、
今ではそれが高速な開発におけるデグレ防止に役立ち、生産性において動的型を圧倒したというのは皮肉な話だな
2019/03/09(土) 12:47:14.54ID:4ewQpv+T
Javaのinterfaceを初めて見たとき、Goのようなものを期待したら違っててがっくりした思い出。
2019/03/09(土) 12:51:39.03ID:ylwqDFWx
静的型は悪くないが静的型を正しく教えるノウハウをだれが持ってるんだろうか
目か?目で盗むのか?
2019/03/09(土) 12:54:03.55ID:GVs3bbIF
Duck Typing だと、たまたま同名の関数名があった場合に、バグる危険性があるから、
自分が使うものだけを、interface 宣言させて、バグを避けているのだろう

最近は、その宣言がガチガチ過ぎて面倒なので、Duck Typing が流行ってきている
2019/03/09(土) 13:40:27.53ID:ylwqDFWx
危険と安全の対立が今は主流になっているがCの型にはサイズを計算する意味もあった
2019/03/09(土) 13:54:13.53ID:jz9xUaFa
流行り廃りは行き来するもんだからな。
動的も静的もいいバランス具合にそのうち落ち着いていくだろう。
本当に流行り廃りを超えてる技術というのはユニットテストやリファクタリングといったものなんだが、
そういうのみんな嫌いでしょ?
2019/03/09(土) 14:07:25.26ID:ylwqDFWx
仕様と実装言語が独立しているレベルになったら言語の布教に不都合だから
実装は仕様に依存するぐらいがみんな好きでしょ
2019/03/09(土) 19:48:43.49ID:YBbU7zqD
>>497
> 動的型を圧倒したというのは皮肉な話

そもそも言語機能としてのinterfaceは動的型(具体的にはSmalktalk)のダックタイピング(当時はそうは言わなかったが)を
静的型のメリットを殺さずにやるアイデアから考案されたんだから順当だろう
http://www.cs.utexas.edu/~wcook/papers/OOPSLA89/interfaces.pdf
2019/03/10(日) 13:14:29.15ID:E4pQDIKL
C++はvirtualを使わない技術、Haskellはラムダを使わない技術を磨いている
Rustも同様
virtualが動的型を圧倒したとか言ってるのは時代錯誤
2019/03/10(日) 20:02:03.91ID:iWdySZoH
ラムダを使わない技術ってなんなん?
2019/03/10(日) 20:02:56.59ID:/oBaS06x
なんだろね
ポイントフリースタイルの話かな
2019/03/10(日) 20:22:04.07ID:8hqMg5Px
ラムダを使わずコンビネータを使う、とか言ったりして。
2019/03/10(日) 20:48:07.67ID:E4pQDIKL
quickSort :: Ord a => [a] -> [a]
でも昇順とか降順とかを変えるのが大変だな
2019/03/10(日) 22:35:21.02ID:iWdySZoH
sortByしたくなったらどうするんよ?
ラムダなしHaskellとかコード量が2倍で済まなさそう。
2019/03/10(日) 23:20:22.27ID:evthC8BV
sortByなんて実用的なタスクでしか使わないだろ
つまりHaskellには不要
2019/03/10(日) 23:54:02.27ID:E4pQDIKL
そもそも動的型をdisることに実用性があるのかどうか考えたか?
それとも何も考えてなかったのにHaskellと聞いたら急に頭が良くなったのか?
2019/03/10(日) 23:56:13.89ID:vvRzWHgY
ラムダを使わない技術って何なの
説明しろよ
2019/03/11(月) 01:18:43.16ID:XnlVWIz4
会話が成り立ってなくて怖いんだけど
2019/03/11(月) 02:21:22.63ID:R//MLWrb
いや型無し糞言語ガイジは死ねよ、時代遅れの爺
2019/03/11(月) 09:24:00.27ID:D2PSGRy3
そもそも実行時に命令を作り出すというのは、動的型付けじゃないとできないのでは? eval
2019/03/11(月) 09:38:26.34ID:9rO3q8tQ
動的もコンパイルするし、静的もRepl あるし
2019/03/11(月) 11:48:34.91ID:NYtiTycm
>>517
s='a+a'
a=1
print(eval(s)) #2

a=2.0
print(eval(s)) #4.0
2019/03/11(月) 11:57:22.45ID:NYtiTycm
REPL と動的実行のeval は違う。

a=input() #abcと入力
print(eval(s)) #abcabc と出力

s=input() # 3**2 と入力
print(eval(s)) #9 と出力
2019/03/11(月) 12:30:19.49ID:NYtiTycm
動的実行には、複数の式を実行する exec がある。

exec("""
total = 0
for i in range(5):
 print(i)
 total += i

print(total)
""")

これを利用すれば、プログラムを変更しないで外からの入力で動作を変えたりできる。
2019/03/11(月) 12:44:28.78ID:XUClMORg
何か変なのに粘着されてるじゃん
2019/03/11(月) 12:49:45.69ID:iGRez5Af
>>520
そうだね重大なセキュリティホールだね
お願いだから消えてくれ
2019/03/11(月) 16:46:34.67ID:9rO3q8tQ
>>518
そんなの単にevalに渡すコンテキストの違いじゃん
実行時に命令生成することの本質じゃない
2019/03/11(月) 20:14:35.05ID:YRmagZmf
文字列使えば任意のコードが実行できる!文字列最強!みたいなバカ理論。
2019/03/11(月) 20:16:58.60ID:vDWHHSf6
それ社内のエースが言っててワロタ
2019/03/11(月) 20:49:09.16ID:kuj3upGr
構文木いじれるLispの方が便利じゃね?
2019/03/12(火) 12:12:04.79ID:f1IcpvAp
構文木オブジェクトなら左括弧と右括弧の対応をいじる脆弱性はない
文字列を使わないことがオブジェクト指向の定義と言えないこともない
オブジェクト指向の定義多すぎ
528デフォルトの名無しさん
垢版 |
2019/03/12(火) 12:34:20.82ID:rf03pH6k
> 文字列を使わないことがオブジェクト指向の定義

ハハハ
2019/03/12(火) 13:10:26.07ID:f1IcpvAp
笑うことも定義か
staticおじさんを笑うように
2019/03/12(火) 13:24:41.15ID:f1IcpvAp
定義を教えられないから目で盗み空気を読み忖度した結果として定義が増える
2019/03/12(火) 13:33:15.64ID:RXMytCd2
ハハッ
2019/03/13(水) 21:17:11.81ID:u/DrurAb
まあテクニカルタームにしがみつく奴はバカしかいないよ。
533デフォルトの名無しさん
垢版 |
2019/03/13(水) 21:26:00.10ID:M+m6pFpm
ハッ
2019/03/13(水) 22:20:22.61ID:eVzJUFww
ハハッ
2019/03/14(木) 10:58:18.04ID:0lYU+AM6
差別発言が日常茶飯事なのと専門用語のマナーを守ることとのギャップがものすごい
2019/03/14(木) 23:49:16.54ID:gVqeE1jf
>>535
そういうバランスが壊れてるところプログラマーっていう人種の典型
2019/03/15(金) 17:46:48.87ID:LvZJWiiQ
プログラムはおいといてデバッグに必要なのは典型的でないケースを1個見つけること
1個だからといって無視しないこと
2019/03/17(日) 11:52:05.42ID:4E+XY7RQ
型無し糞ガイジの老害が死滅すれば済む話
頭のアホ毛$から腐臭が漂ってくるんだよ、早く死ね
2019/03/17(日) 14:54:23.26ID:YNfhsYwt
エディタを終了してからテストを実行するのはターン制だから古臭いんだな
リアルタイムこそが現実であり次世代であるはずなのに一体なぜターン制が滅びないのか
2019/03/17(日) 17:44:29.53ID:2O0dSFGZ
>>538
おだいじに。ちゃんとお薬のむんだよ。
2019/03/17(日) 18:24:15.45ID:4E+XY7RQ
>>540
薬を飲むべきはおまえさんやで、型無し糞ガイジw
2019/03/23(土) 08:00:57.82ID:zUjZ7ZUG
次世代言語として必須機能はなんですか?
2019/03/23(土) 09:10:22.60ID:ZlGSstH0
高速で軽量、堅牢な非同期処理のサポート
デフォルト実装を定義できるインターフェイス(and/or 型クラス)
高度な型推論(もとより静的型)
高速なコンパイルとコンパクトな実行ファイル(非AltoJS、JVM言語)
関連して、セルフホスティングやブートストラップは完了済み
2019/03/23(土) 09:23:43.23ID:f3qHSm8q
>>54
様々なポリシーの元に設計されて良いだろうから必須なんて機能は無いんじゃないか
2019/03/23(土) 09:24:21.62ID:f3qHSm8q
>>544
>>542宛だった
546デフォルトの名無しさん
垢版 |
2019/03/23(土) 11:11:33.27ID:Bvojjkpo
何を作りたいかによるよね。作りたいものが作りやすければ良いわけだから。
2019/03/23(土) 22:35:21.72ID:kS3TDVAs
皆さん的にvlangどうなの?
2019/03/23(土) 23:03:36.39ID:oh3HXLVk
実物待ちじゃないの
2019/03/24(日) 13:56:01.89ID:oJh5vPLh
ぶっちゃけTypeScriptが強最やろ
2019/03/24(日) 14:23:51.27ID:dT6Xb8jy
強いかはともかく、最も美しいプログラミング言語の一つではある
2019/03/24(日) 16:01:57.35ID:ElpwR+x1
tsいいんだがjavascriptの呪縛から解き放ってやりたい感
2019/03/24(日) 16:09:10.35ID:3s1WkY0F
今のesならそんなに捨てたもんでもないと思うが。
まぁでも、tsにclassは要らなかったな。
2019/03/24(日) 16:18:49.96ID:Nexfdc7v
しょせんパフォーマンスでない言語
2019/03/24(日) 16:34:58.29ID:RF+VrP1U
esにもクラスはなくても良かったけどデコレータは早く来てほしいね
デコレータ風に組めなくもないけど面倒だしな
2019/03/24(日) 18:01:12.81ID:ZhSBqocX
tsはjsの呪縛でガンガンに縛られてるから全然いい言語に見えない

共有型からの流れのせいでコードに無駄な型判定が入ってて全然スマートじゃない
2019/03/24(日) 19:00:10.91ID:3s1WkY0F
>共有型からの流れのせいでコードに無駄な型判定が入ってて全然スマートじゃない

ちょっとピンとこないけど具体的にはどういう記述?
2019/03/24(日) 19:23:03.00ID:YsBQPuQx
http://js.studio-kingdom.com/typescript/handbook/advanced_types

型判定のifなどが邪魔すぎる
こういうのを見てスマートだと感じるなら毒されている
2019/03/24(日) 19:32:49.50ID:3s1WkY0F
それは無駄な判定とは思わないが、どう記述出来たらスマートだと言うんだろう。
パターンマッチとか?
2019/03/24(日) 19:37:55.56ID:503powVA
無駄っつーかanyって言ってるのに実際は2つの型しか認めないのは無責任やな
2019/03/24(日) 19:44:07.97ID:LeGi1F7Y
>>557
直和型をパターンマッチで処理切り分けるのは、関数型言語からの流れで最近の流行りだと思うんだけどね
if 文で書くのはダサいな

>>559
any がダメだから string | number と書くというのが共用体型じゃないの?おれもtsはよく知らないんだけど

パターンマッチで切り分けて、すべての可能性を記述してない場合にはエラーにしてほしいね
2019/03/24(日) 20:34:17.47ID:3s1WkY0F
まぁパターンマッチ構文で多少記述がシンプルになるならそれもいいけど、逆に専用の構文に頼らずに
ifやswitchを使っても同等のことができているというのがいいところだと思うがなぁ。
シンタックスシュガーとして入れるなら後からでもできるんじゃね?

>パターンマッチで切り分けて、すべての可能性を記述してない場合にはエラーにしてほしいね

それをエラーにするような記述は今でもできる。パターンマッチなんてなくても。
2019/03/24(日) 21:15:12.88ID:YouWSmuh
>>561
そんなのなくない?
String | Date | Number
だったとして、StringとNumberの処理しか書いてなくってそれがエラーにはならんやろ

やっぱScala最強やね
コンパイル速度ゴミで死んでしまったが
2019/03/24(日) 21:22:23.00ID:dT6Xb8jy
>>562
TypeScriptは Discriminated Union 使えるよ
メンバのリテラル値によって型をマッチさせるという中々面白い仕様
2019/03/24(日) 21:32:02.61ID:503powVA
sbt言うほど遅いか?
Scala2.13でまたちょっと速くなるみたいだし
それにScala3まであと一年と考えるとScala最強説が蘇る可能性もあるで
2019/03/24(日) 21:42:20.21ID:hMqcesBf
scala死んだ理由どう考えてもバージョン上がる度にコンパイル通らなくなる互換性のなさだろ
3なんかにしたら爆死以外見えない
2019/03/24(日) 22:02:19.88ID:LeGi1F7Y
>>563
ここら辺見て ts 勉強させてもらったよ https://qiita.com/kobanyan/items/ca56df27de50ec267995
Discriminated Union はすべての可能性を記述してない場合にエラーとするための仕組みになってないだろ
その下に書いてある Exhaustiveness checking っていうのが求めてるものだ

でも、
--strictNullChecks つけて戻り値の型のでチェックするのはswitchの下にreturn 文書いちゃったらスリ抜けちゃわない?
default: return assertNever(s) を記述することでチェックするのは、その記述が無くてもエラーにしてほしいんだけど?
2019/03/24(日) 22:17:38.55ID:3s1WkY0F
>default: return assertNever(s) を記述することでチェックするのは、その記述が無くてもエラーにしてほしいんだけど?

どのパターンにもマッチしない場合に何もしないという場合はあるわけだから、エラーにするのか
しないのかを示さなきゃならないのは仕方ないだろう。
strictNullChecks付けるのを忘れるからデフォルトでonにしてほしいとか言ってるようなもん。
2019/03/24(日) 22:46:49.41ID:LeGi1F7Y
>>567
case 文で全パターンを網羅できない場合には default 必須にして欲しい
どのパターンにもマッチしない場合に何もしないときは、その default の処理を空っぽにする
これを強制したい
2019/03/24(日) 22:52:15.99ID:3s1WkY0F
それはlintでやればいい。
2019/03/24(日) 23:24:23.33ID:LeGi1F7Y
みんなが Lint かけてくれるわけじゃないので、コンパイル時チェックが望ましい
特に新しい言語作るのならばそうすべき
2019/03/24(日) 23:25:57.15ID:LeGi1F7Y
あと、>>563は、言語の機能と、コーディングパターンの区別がついてないよね?
2019/03/24(日) 23:29:21.26ID:dT6Xb8jy
>>571
言語の機能として公式ドキュメントに記載されてるんだよ
https://www.typescriptlang.org/docs/handbook/advanced-types.html
2019/03/24(日) 23:54:07.40ID:LeGi1F7Y
>>572
Discriminated Union とか Exhaustiveness checking は、言語機能じゃなくて
いくつかの言語機能を組み合わせて実現可能なコーディングパターンの解説をしているように見えるよ?
そのドキュメントが Specification じゃなくて Hand book だし
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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