X



次世代言語11[Rust Swift TypeScript Dart]

■ このスレッドは過去ログ倉庫に格納されています
0758デフォルトの名無しさん
垢版 |
2018/06/26(火) 10:23:19.59ID:/82hZ4jz
>>756
Gitlabは少なくとも信頼できる
Azureで動いてるとか言ってる奴いるけどもうやめるって話出てる

エディタはEmacsで十分だし、babelあればES2016でもまともに書けるからTSは不要
0762デフォルトの名無しさん
垢版 |
2018/06/26(火) 11:38:55.58ID:8nfGtP67
疑問を持つ人はいっぱいいるが疑問を解決する人は少ないのが現実で
すぐに解決すると思うのは非現実的
0763デフォルトの名無しさん
垢版 |
2018/06/26(火) 17:29:52.82ID:iZChSW1/
年食うと一度学んだ思考回路は変えられないんだろうな
多分死ぬまでMSは邪悪でEmacsは最高のエディタなんだろう
0767デフォルトの名無しさん
垢版 |
2018/06/26(火) 19:56:14.90ID:SLOKSalZ
あとSwiftでパターンマッチ使うときさ「case let」の「let」ってなんの意味有るの?
そもそも「case」自体いらないよね。
Rustみたいに簡潔な構文にしない意味がわからん。
0770デフォルトの名無しさん
垢版 |
2018/06/26(火) 20:23:51.43ID:SLOKSalZ
Scalaも構文ダメだけど、Dottyでかなり改善されてるみたいだね

http://dotty.epfl.ch/
0771デフォルトの名無しさん
垢版 |
2018/06/26(火) 20:32:08.64ID:SLOKSalZ
>>768
>>769
冗長な構文にするなってこと。

```Rust
match number {
1 => "one",
2 => "two",
_ => "else",
}
```
```swift
switch number {
case 1: return "one"
case 2: return "two"
default: return "else"
}
```
0773デフォルトの名無しさん
垢版 |
2018/06/26(火) 20:37:59.55ID:Rm57MuZK
>>771
rustをそんなに押すなら、
毎日ちょっとずつ使い方教えていけよ。
面白い内容ならそのまま覚えるから
0775デフォルトの名無しさん
垢版 |
2018/06/26(火) 21:03:22.89ID:1/94qv1z
>>770
dottyは流石に見苦しいわ
今更互換性ブチ壊して誰がわざわざScalaなんか使い続けるんだよ
Lightbendは一度プラットフォーム主導者の味を覚えてしまってもう後に引けなくなってるんだろうな
0776デフォルトの名無しさん
垢版 |
2018/06/26(火) 21:08:47.59ID:SIV9Ebow
元が冗長だと、機能追加したときの新構文(大抵元と区別のために冗長になる)が
あまり違和感なくなるというメリット?もある
C++とか酷いだろ。rustも多分20年ぐらいしたら酷くなる
0779デフォルトの名無しさん
垢版 |
2018/06/26(火) 21:38:20.73ID:uCVrG76/
>>763
いつMSが邪悪じゃなくなったんだよ

エディタについてはVimとEmacs以上のものがいまだにないだけ
0781デフォルトの名無しさん
垢版 |
2018/06/26(火) 21:43:00.71ID:SIV9Ebow
>>778
ObjectPascalは30年経ってるが、元が冗長と言われまくってたPascalだったおかげで
魔改造されまくった今でもあんまり浮いた構文は無いぞ
初期Macで採用されてたのは別格としても、その後は大したプロダクトもないDelphiぐらいでしか残ってないのに
一応生き残ってるんだから、FirefoxのあるRustも同じぐらいは残るだろ多分
0782デフォルトの名無しさん
垢版 |
2018/06/26(火) 21:46:10.71ID:uCVrG76/
>>780
どっちかっていうと、若者がMSの暴虐の歴史を学んでないから
今現在進んでる暴虐が暴虐と分からないだけだぞ
0783デフォルトの名無しさん
垢版 |
2018/06/26(火) 21:49:11.80ID:uCVrG76/
>>781
火狐に使われてるから残るとか
火狐の世界シェア見てから言おうぜ……

Rustごと自殺して消えるって自白したようなもん
0788デフォルトの名無しさん
垢版 |
2018/06/26(火) 21:54:24.01ID:1lcgGYQy
この爺さんはこのスレに何しにきとるんだ
特養じゃないっつの
0789デフォルトの名無しさん
垢版 |
2018/06/26(火) 21:56:05.20ID:SIV9Ebow
>>787が書いてくれたが
俺も、どっちも細々としたもんだがFirefoxのほうがDelphi(製アプリ)よりはまだマシだろう、というつもりだった
その上で20年後の変更されまくったrustはDelphiやswiftより汚くなってそう、という予想
0791デフォルトの名無しさん
垢版 |
2018/06/26(火) 22:12:37.76ID:SLOKSalZ
>>785

varがあるのはわかるけど、そこでvarを使う場面てあるのかね?

https://ideone.com/vMGLEg
```swift
case let .B(n):
let t = n+1
return String(t)
```

だって変わらんし
0793デフォルトの名無しさん
垢版 |
2018/06/26(火) 22:33:54.59ID:wjruZlWa
>>791
変数束縛にletとvarがある言語において、switchのときだけ変数束縛を特別扱いしてletやvarを省略できるのは一貫性が無いという考え方もある
0794デフォルトの名無しさん
垢版 |
2018/06/26(火) 22:39:59.15ID:wjruZlWa
それに短ければ良いなら、rustのlet mulよりswiftのvarの方が短い
パターンマッチより変数宣言方が良く出て来るしね
0795デフォルトの名無しさん
垢版 |
2018/06/26(火) 22:47:02.38ID:b30is1tn
20年後に汚くなるってのはみんなわりと納得するんじゃね?
C++もJavaも、時間経過とともにきっちり汚くなった
言語仕様こねくり回すのが仕事の人が存在するからしゃーないっちゃあしゃーない
0796デフォルトの名無しさん
垢版 |
2018/06/26(火) 22:48:50.88ID:cumK515O
難しい・易しいではなく汚い・美しいという見方をするのはなんでだろう
数学を諦めた感が漂ってる
0797デフォルトの名無しさん
垢版 |
2018/06/26(火) 22:49:48.96ID:SLOKSalZ
>>793
そういう見方もあるけどね

でも
```
case let .B(x): return String(n)
```

```
case .B(let x): return String(n)
```
の違いってなんなのかね、違いがないなら「let」省略できたほうがいいように思うが
0798デフォルトの名無しさん
垢版 |
2018/06/26(火) 22:51:21.79ID:SLOKSalZ
>>797
訂正: xじゃなくてn
0799デフォルトの名無しさん
垢版 |
2018/06/26(火) 22:57:45.92ID:SLOKSalZ
>>794
短いことがいいんじゃないよ、理由なく冗長な構文がだめなだけ。

Rustはわざと「var」とかじゃなく「let mut」にしている理由は、通常イミュータブルを使うようにするため。
ミュータブルの構文が長いことでプログラマがイミュータブルをより一般的に使うよう促す効果がある。
0801デフォルトの名無しさん
垢版 |
2018/06/26(火) 23:12:38.14ID:SIV9Ebow
>>799みたいなのは設計当初は綺麗なんだけど
後から、例えばD言語のconst/immutableみたいな選択肢を追加してしまうと罠に化けそうじゃない?(妄想だけど)
その点元が冗長ならある程度耐性がある、という話。後から省略可能にする方はできるしな
0802デフォルトの名無しさん
垢版 |
2018/06/26(火) 23:29:44.42ID:SLOKSalZ
>>801
Dは全然知らないけど、調べたらデフォルトがミュータブルで、immutableをつけるとイミュータブルになるのか。

```
int x = 3; // ミュータブル
immutable int x = 3; // イミュータブル
auto s = "hello"; // イミュータブル
```

これはひどいな
0804デフォルトの名無しさん
垢版 |
2018/06/26(火) 23:40:45.19ID:cumK515O
コンパイル時に値がわかるのが定数
実行時に初期化するがその後は変更しないのがimmutableかな
0805デフォルトの名無しさん
垢版 |
2018/06/26(火) 23:56:28.51ID:SIV9Ebow
加えて、現在のスコープからは変更不可能だが実体はミュータブルかもしれないのがconst
更にそれぞれに推移のON/OFFがある

何も書かないのがイミュータブルだとその内の1つを適当に使ってるということで
選択肢が増えたときにどれか1つが不自然に短く書けてたことになるし
現状を突き詰め直したときにコンテキスト毎に別のだったなんてことになると目も当てられない
0807デフォルトの名無しさん
垢版 |
2018/06/27(水) 00:50:40.19ID:jdISqR1B
>>802
ゲェジかな
ワイの方がよっぽどいい設計できるわ
この作者はワイのケツ穴でも舐めてた方が幾分有益な人生になったんじゃないかw
0808デフォルトの名無しさん
垢版 |
2018/06/27(水) 00:59:47.78ID:CkpNpuYk
>>805
GCが必須ではない言語の場合、ミュータブルならばメモリ解放もできる

現在のスコープからは変更不可能だが実体はメモリ解放するかも
というのは非常にまずい
現在のスコープから変更不可能ならば実体も変更不可能にしたい
0809デフォルトの名無しさん
垢版 |
2018/06/27(水) 01:19:45.86ID:9jxZxPuA
>>808
それだとイミュータブルなオブジェクトを貰って何かする関数に
ミュータブルなオブジェクトを渡せなくならない?

そうすると print とか toString とか hash とか compare とかありとあらゆるものが
immutable / mutable 2種類必要になる
引数に2つオブジェクトがあると4種
3つなら8種
0810デフォルトの名無しさん
垢版 |
2018/06/27(水) 20:24:28.42ID:GckfUNYK
ただの再代入不可な変数をイミュータブルって言い始めたのって何の言語からなの
0812デフォルトの名無しさん
垢版 |
2018/06/28(木) 08:21:12.64ID:1UW06GNd
>>795
pythonなんかも細かいところはど汚いわけだがあんまりそういう汚いところ
触らんでも仕事になるって違いはある。
てかシンタックスなんててきとうにチェックでもそんな問題にならんよ。
self書かされることなんて文法で規制されてるわけでもないが問題になることなんてない。
0814デフォルトの名無しさん
垢版 |
2018/06/29(金) 09:23:47.61ID:XwuS30Hh
Pythonの型アノテーション試してるけど正直苦痛
TypeScriptを使ってるときには全く感じなかった無駄なもの書かされてる感がすごい
というかTypeScriptの統合が完璧すぎるんだな
型書くことはノイズになるどころかコードをむしろ美しくするとすら思えるもんな
0815デフォルトの名無しさん
垢版 |
2018/06/29(金) 10:57:44.57ID:0VaRYdhC
少しでも欲を出せばそうなる
完璧な無欲か完璧な満足かの1bitしかない
HaskellやRustのようになるまで止まらないぞ
0816デフォルトの名無しさん
垢版 |
2018/06/29(金) 11:15:41.22ID:tgpXEKjE
>>814
Python 3.6の変数アノテーションはTypeScriptと大して変わらないのでは?
以前のコメント形式は糞だったけど
0817デフォルトの名無しさん
垢版 |
2018/06/29(金) 13:13:42.11ID:8rEU0m4z
>>814
全部の変数にアノテーション付けようとしてる?
基本、関数・メソッドの入出力だけでいいぞ
残りは大体推測してくれる
0818デフォルトの名無しさん
垢版 |
2018/06/29(金) 13:43:06.77ID:HOtQS3nQ
>>817
ライブラリなどの既存メソッドの戻り値はほとんど型なしだから結局オレオレ型宣言を左辺の変数に付けて回ることになる
0819デフォルトの名無しさん
垢版 |
2018/06/29(金) 15:55:24.38ID:546QQsBD
>>818
あー、過渡期だからそれはあるかもね
対策としては、他モジュールを呼び出すところはなるべく集める、いきなり完璧を目指さないぐらいか
0820デフォルトの名無しさん
垢版 |
2018/06/29(金) 20:05:29.68ID:SWySBfmj
そんなに型に気を使って消耗する位ならもう生js使おう
適当にラッパーかけとけラッパー
0821デフォルトの名無しさん
垢版 |
2018/06/29(金) 21:06:52.59ID:M/T+ZgVo
>>820

TypeScriptユーザーがシコシコ型定義ファイル作ってるおかげで、vscodeでjsでも補完きくんやで。感謝せーや
0824デフォルトの名無しさん
垢版 |
2018/06/29(金) 21:39:48.60ID:0VaRYdhC
>>823
しんどいのか
その作業がないということはライブラリの作者は楽をしている
だからライブラリが増やすのも楽
そういう仕組みなんだろう
0825デフォルトの名無しさん
垢版 |
2018/06/29(金) 22:21:57.95ID:5dIySMmw
>>824
TypeScriptの場合は型定義を提供することでTypeScriptユーザーに使ってもらいやすくなり、
ユーザーの増加がライブラリ製作者にとって一手間かけるモチベーションになる
Pythonの場合は型アノテーションを付けたらPython3.5以上でしか使えなくなるのでユーザーは確実に減る
結果、誰も対応しない
根本的に破綻してるんだよ
0826デフォルトの名無しさん
垢版 |
2018/06/29(金) 22:35:49.90ID:0VaRYdhC
>>825
破綻してるのはお前のマウンティングだよ
マウントが酷いのはHaskellで、TypeScriptは無関係みたいなイメージが根本的に壊れた
0828デフォルトの名無しさん
垢版 |
2018/06/29(金) 23:18:51.02ID:ifNvOhNj
おれ的にはこのまま型定義ファイルがすべてのライブラリに標準装備されて緩やかにjsがts化していくことを希望したい。
最初から型定義がライブラリに入っていること多くなってきたよな、
0829デフォルトの名無しさん
垢版 |
2018/06/29(金) 23:54:19.04ID:uRtJ4/dJ
>>828
それには同意
0831デフォルトの名無しさん
垢版 |
2018/06/30(土) 03:36:46.79ID:+abKhVkF
>>823
あるよ。
typeshedてのがそれ

>>825
関数の引数、返値なら3.0から書けるし、コメント使うか別ファイルに書くやり方なら2.7にも対応可能ですが
0833デフォルトの名無しさん
垢版 |
2018/06/30(土) 09:44:21.50ID:4h701pQF
通常ならライブラリ本体丸ごと読んで型を調べるべきだ
本体に型がないなら別ファイルに書く
0834デフォルトの名無しさん
垢版 |
2018/06/30(土) 12:26:26.59ID:aZHCYAl9
>>831
なんだあるんだ。なら型付言語として使われるのも時間の問題だな。
rubyにもあるみたいだし、
ライブラリのインターフェースだけでも型付き当たり前の世界が来そうだね
0835デフォルトの名無しさん
垢版 |
2018/06/30(土) 14:15:03.20ID:BB0BPsjY
まーたruby信者のそ、そんなのる、るびぃでもできるし!か。呆れ
なんでもかんでも深く考えず流行りをそうやって後付けで増築してって奇形極まってるよね。二度と使わないよ。
0836デフォルトの名無しさん
垢版 |
2018/06/30(土) 15:58:28.61ID:9HearrjU
rubyの違法建築感は否定しない
が、なんかまとめ臭い書き方だなおい
5chエアプか?
0837デフォルトの名無しさん
垢版 |
2018/06/30(土) 16:41:24.65ID:oxrLiD+S
るびぃ信者、Proc.new、ラムダ、ブロックにおけるreturn、break、nextの挙動の違いをまとめようとした模様
https://qiita.com/jnchito/items/83410c0cda446efea582

結果、ややこしすぎるためコーディングを工夫してreturnやbreakの使用を避けましょうというなんじゃそりゃな結論www

何か理由があってわざわざ挙動を変えたんだろうが(まさか行き当たりばったりってことはないよね笑)ややこしすぎで使用自体を避けられてちゃ本末転倒だよなwww
0838デフォルトの名無しさん
垢版 |
2018/06/30(土) 17:39:57.19ID:RHrrdh8p
>>836
その人はrustがコンパイルできないおじさんだからほっときなさい
0840デフォルトの名無しさん
垢版 |
2018/06/30(土) 18:59:53.28ID:+abKhVkF
>>834,836
とはいえ、ruby にまともに使える型チェックの実装があるのかには興味あるな。
まえ調べた感じだと、教祖の型チェック周りの発言はフワッフワだし、実装してみたい個人が互換性のない「オレオレ型チェック」を作っては破棄してる感じで、万人が使えるものは何一つないようなんだが。
0841デフォルトの名無しさん
垢版 |
2018/06/30(土) 19:02:48.17ID:6fEIEQu0
どうせ
if type(...) != my_class:
とかのシュガーだろ。そんなもんに目くじら立てても意味あるのかね。
0842デフォルトの名無しさん
垢版 |
2018/06/30(土) 19:33:21.11ID:CMs/fWc6
Rubyはオモチャだから型付けなんて要りません
それより散らかったオモチャを片付けなさい
0843デフォルトの名無しさん
垢版 |
2018/06/30(土) 20:38:08.56ID:4h701pQF
自分のために違法建築したとは考えにくい
ユーザーを忖度して違法建築なら利己的ではないからOKという風潮があったんじゃないか

会ったこともないユーザーをモチベーションにするのはやめてほしい
0844デフォルトの名無しさん
垢版 |
2018/06/30(土) 23:16:50.81ID:tr0WXiW5
>>837
Ruby のProc, block はクロージャだから、クロージャを囲む関数から戻る。
一方ラムダは、単にクロージャを抜けるだけ。
Groovy なども参照

def f
(0..5).each do |i|
puts i
return if i == 3
end
end

f() #=> 0, 1, 2, 3
0845デフォルトの名無しさん
垢版 |
2018/06/30(土) 23:39:42.18ID:xV+Shhkx
>Ruby のProc, block はクロージャだから、クロージャを囲む関数から戻る。

クロージャ「だから」、クロージャを囲む関数から戻る??

まるでクロージャだったら当然の挙動と言わんばかりの書き方だけど、クロージャってそんなんだっけ?
0847デフォルトの名無しさん
垢版 |
2018/07/01(日) 01:54:08.61ID:5prQoZWD
>>845
ヒント:Smalltalk
0848844
垢版 |
2018/07/01(日) 02:00:27.83ID:YZ+qvhoO
クロージャは、クロージャの外側の環境をつかんでいる。
つまり、クロージャを囲む関数内の変数をつかんでいる

だから、クロージャ内でreturn すれば、外側の関数も抜けて、
関数内の変数なども、解放した方が良いと考えた

Groovy の挙動とは違うかも
0849デフォルトの名無しさん
垢版 |
2018/07/01(日) 02:11:27.56ID:FQlsc9Xo
>>848
return だけだったら納得できるんだが、next や break の扱いがぐちゃぐちゃなのはどう説明するの?
0851デフォルトの名無しさん
垢版 |
2018/07/01(日) 03:04:39.74ID:3SrV2o5x
>>837
> まさか行き当たりばったりってことはないよね笑

その、まさかだぞ。
楽しくプログラミング()した結果が仕様だ文句あるか!w
0852844
垢版 |
2018/07/01(日) 08:32:31.95ID:YZ+qvhoO
クロージャ(block)内のbreak は、クロージャを抜けるだけで、外側の関数は抜けない。
関数の最後まで実行される

クロージャ内のnext は、次の繰り返しに進むだけで、クロージャも抜けない。
クロージャの最後まで実行される

def f
num = 0
(0..5).each do |i|
num = i
break if i == 3
end
puts num
end

f() #=> 3
0853デフォルトの名無しさん
垢版 |
2018/07/01(日) 08:58:20.58ID:mO0FHij0
すみませんがゴミの話は当該スレでお願いします
0854デフォルトの名無しさん
垢版 |
2018/07/01(日) 09:01:20.31ID:TobyyIDd
これ他の言語にも影響あるだろ
continueはバグの原因になるとか、gotoの方がマシとか言われる
0855デフォルトの名無しさん
垢版 |
2018/07/01(日) 09:18:30.80ID:5prQoZWD
>>850
えー?closureが関数型特有な概念だと思ってるわけー?
面白いね、それ。本当は純粋関数型ではclosureはさほど重要ではないのだけど。
どうしてclosureが関数型固有な概念だと思ったのか、説明してごらん?
■ このスレッドは過去ログ倉庫に格納されています

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