コレクションが最高にイケてる言語を作ろうat TECH
コレクションが最高にイケてる言語を作ろう - 暇つぶし2ch1:デフォルトの名無しさん
17/04/07 00:05:23.53 FMSUelHn.net
コレクションの良しあしは言語の生産性に直にかかわってくる。
例えば配列しかないCは最低の言語だ。
コレクションが最高にイケてる言語仕様をみんなで考えよう。

2:デフォルトの名無しさん
17/04/07 00:13:41.62 FMSUelHn.net
例えば空コレクションでMaxとか呼ぶと普通例外だよね?
ヌルオブジェクトパターンとかつかって綺麗に解決できないだろうか。

3:デフォルトの名無しさん
17/04/07 00:14:44.33 FMSUelHn.net
エギソンという言語があってリストとかが色々便利にかける。
こういうのも面白い。
URLリンク(www.egison.org)

4:デフォルトの名無しさん
17/04/07 06:47:50.17 ZgSaSKBc.net
>>1
ディクショナリ オブジェクト 配列 セット タプル リストとか既存言語のまとめてみて
言語によって同じものを違う名前で呼んだり紛らわしい

5:デフォルトの名無しさん
17/04/07 21:39:18.48 A4pCb4U0.net
ジェネリクス対応の配列、ディクショナリ、セットがあれば大概の用途で事足りる
と言うことで、ほとんどの言語で問題ない

6:デフォルトの名無しさん
17/04/07 22:57:02.31 FMSUelHn.net
>>4 既存言語って候補はこれくらいか?
まともにやるとクソ大変だが…
wikiのプログラム言語一覧から抜粋
Bash,BASIC,C,C#,C++Caml,Clojure,COBOL,CommonLisp,D
Dart,Delphi,Erlang,Forth,FORTRAN,Go,Haskell,Java,
JavaScript,Julia,Miranda,Objective-C,Pascal,
Perl,PHP,PL/I,PowerShell,Prolog,Python,R,Ruby,Rust,
Scala,Scheme,Smalltalk,Swift,

7:デフォルトの名無しさん
17/04/07 23:02:55.18 j5QgAAcl.net
すまんそれライブラリで良くね?

8:デフォルトの名無しさん
17/04/07 23:23:26.28 FMSUelHn.net
C++だとmapに突っ込むときoperator<とか定義しなきゃいけないけど
そういうのもなるべく言語でデフォルトのものを用意してほしい。

9:デフォルトの名無しさん
17/04/07 23:51:13.53 FMSUelHn.net
C#のSystem.Collections.Generic 名前空間
URLリンク(msdn.microsoft.com)(v=vs.110).aspx

10:デフォルトの名無しさん
17/04/07 23:58:40.35 jBafhBvv.net
Smalltalkでさんざんいじられた結果なもんでさ

11:デフォルトの名無しさん
17/04/08 10:39:56.79 wG8v5Zr7.net
C#のLinqとかはコレクションが使いやすくなる良構文だとおもう。

12:デフォルトの名無しさん
17/04/08 19:23:27.58 wG8v5Zr7.net
>>8
haskellのderivingというのがあるが参考になるだろうか

13:デフォルトの名無しさん
17/04/08 20:38:13.43 wG8v5Zr7.net
コレクションに対してそれを表現するリテラルがあると使い勝手がかなり違う。
シリアライズ、デシリアライズなどの機能を有する言語は結構あるが、
あんな感じでそれをそのままリテラルとして書けるようにするというのはどうだろう。

14:デフォルトの名無しさん
17/04/09 22:15:51.86 xeKqw9Ld.net
俺のコレクション見たい?

15:デフォルトの名無しさん
17/04/10 22:29:21.07 imUoe1w7.net
コレクションという観点だと
動的型付けと静的型付けは
どちらに軍配があがるかな

16:デフォルトの名無しさん
17/04/11 21:18:37.12 m/oJQzNS.net
俺は多次元配列は配列の配列があれば要らない派

17:デフォルトの名無しさん
17/04/12 00:58:22.70 1JOc28FD.net
(配列の配列はしばしばジグザグ配列になって演算速度の低下につながるので)ダメです

18:デフォルトの名無しさん
17/04/12 21:49:29.52 ymAyZSnB.net
冪集合や直積も言語でサポートしてほしいな。

19:デフォルトの名無しさん
17/04/13 22:37:17.25 S/dW7TnL.net
>>10
smalltalkがなんの関係があるの?
詳しく

20:デフォルトの名無しさん
17/04/15 00:39:27.42 v99qvGb2.net
既存言語で一番コレクションが使いやすい言語ってなによ?
C#はかなりいいと思うが。

21:デフォルトの名無しさん
17/04/16 12:49:58.72 njyBHlwQ.net
C♯っていうか.NETな。
C♯がすごいんじゃない。.NETがすごいんだよ。

22:デフォルトの名無しさん
17/04/16 15:55:43.93 z1TgtbB7.net
>>19
コレクションクラス(とそのサブクラス群)のネタ元はSmalltalkで培われたものって意味では?

23:デフォルトの名無しさん
17/04/17 18:05:28.45 v9quCy+G.net
配列でありリストであり連想配列でありキューでありスタックであるJavaScriptの配列が最強でイケイケだと思う

24:デフォルトの名無しさん
17/04/17 19:46:53.34 4UmS+KBL.net
javascriptはプログラム組んでてなんかもやっとするw

25:デフォルトの名無しさん
17/04/17 20:17:41.16 4UmS+KBL.net
型の境界線がもやっとしてるよねjavascript
整数と実数の区別とか。

26:デフォルトの名無しさん
17/04/21 22:17:11.63 A2U3H+Qf.net
small talkってやったことないな。
噂は聞くが。
かじってみるかな。

27:デフォルトの名無しさん
17/04/21 22:18:34.05 Re4upQlq.net
>>26
やめとけ時間の無駄だ

28:デフォルトの名無しさん
17/04/21 22:19:18.69 A2U3H+Qf.net
>>27
まじで

29:デフォルトの名無しさん
17/04/22 20:01:03.57 MD8NWs/L.net
>>26
オブジェクト指向言語としての初の試みであって実用性は無いからな

30:デフォルトの名無しさん
17/04/22 20:07:13.82 M051jVFH.net
>>29
Core CLRのソースに含まれててびっくりしたけどね

31:デフォルトの名無しさん
17/04/22 21:03:10.84 2QNaIclJ.net
機能をどっさり削った go でも map だけは特別扱いだからな。
一理はある。

32:デフォルトの名無しさん
17/04/23 12:49:06.59 EiQ7XooB.net
>>26
最近だとPharoというSmalltalk処理系のコミュニティが活発です
国内でもスタートアップに使われたりして話題になっています。(pharo.orgが落ちているみたいなのでキャッシュで失礼)
URLリンク(webcache.googleusercontent.com)
コレクションについては英語が苦手でなければチュートリアル「Pharo by Example」のこちらの章が参考になるかと
URLリンク(ci.inria.fr)

33:デフォルトの名無しさん
17/04/24 09:16:50.97 RdOcyrB3.net
>>26
今週末、ちょうどこんな催しもあります
春のSmalltalk初心者向けのハッカソン | 第99回Smalltalk勉強会
URLリンク(smalltalk.connpass.com)
もし東京近郊にお住まいでご都合が合えば参加されてみてはいかがでしょう
Smalltalkは独学で試行錯誤するのも(旅先でわざと道を外れて迷ってみる程度の愉しみとしては)悪くないのですが
効率的に何かの学びを得ようとするには、思いの外時間を無駄にすることにもなりお薦めできません
実際に使っていてよく知っている人に疑問をどんどんぶつけて解消してしまうのが一番です

34:デフォルトの名無しさん
17/04/24 09:54:40.35 RdOcyrB3.net
>>33
×今週末 → ○明後日

35:デフォルトの名無しさん
17/04/24 23:15:32.53 iqoCzYpO.net
カオスすぎんだろsmall talk w
じっくり勉強すれば理に適ってるのか?

36:デフォルトの名無しさん
17/04/25 08:58:59.48 5ILiyJO9.net
>>35
> カオスすぎ
>>32のコレクションのクラス階層についてでしたら、ほとんどは抽象クラスや特殊用途のクラスなので
とりあえずこちらの図の黒枠のだけを押さえておけばよいかと
URLリンク(imgur.com)
OrderedCollectionは要素が追加可能なだけのArrayです
Dictionaryは他言語ではHashとかMapとか呼ぶことがあります
Setは重複を許さない集合
Bagがちょっと特殊ですが要素の数も覚えてくれるSetで他言語ではMultisetと呼ぶものもあります

37:デフォルトの名無しさん
17/04/25 09:25:33.87 5ILiyJO9.net
>>36
> 要素の数も覚えてくれるSet
Bagについてはたとえば文字列(仮に 'SMALLTALK')を構成する文字とそれぞれの出現数を多い順に知りたいとき
文字列(やはりコレクション)をBagに変換する(asBag)などして、こんなふうに書くことができます
'SMALLTALK' asBag sortedCounts
"=> {3->$L . 2->$A . 1->$K . 1->$M . 1->$S . 1->$T} "

38:デフォルトの名無しさん
17/04/26 23:16:35.99 H7jXi739.net
OrderedCollectionって順序付きコレクションってことだよね?
ツリーならsequenceableというのは若干違和感あるが…
先頭から順にたどれるから間違ってはいないのかな…

39:デフォルトの名無しさん
17/04/26 23:57:14.04 yZOF+1hb.net
>>38
OrderedCollectionはツリーではなく最近の言語にはよくある動的配列の一種です
内部にちょっと大きめの配列を持っていてそれを使って要素の追加や削除、挿入などの機能を模しています
固定長配列からさほど劇的には速度を落とさず使えるのがウリです

40:デフォルトの名無しさん
17/04/27 00:46:55.31 gwcfT8Ye.net
small talk て速度重視言語なの?
長い歴史の中で必要に迫られたんだろうか?

41:デフォルトの名無しさん
17/04/27 07:01:43.40 1+VMbtmi.net
>>40
Smalltalkは言語のルールや変更不可能な動作中核(VM)部分をできるだけ小さく保って、
GUIやIDEを含む処理系(元々はダイナブック向けの暫定仮想OS)のほとんどを自身で記述するのが方針でした
▼Smalltalkの底を流れる設計思想
URLリンク(web.archive.org)
そのため、当初から速度は潜在的な課題のひとつでしたが1970年代はAltoやDoradoという10年後のPCのスペックを想定した
「タイムマシン」を金をかけて作ってそこでSmalltalkを動かすことで、柔軟性を損なう最適化を避けるようにしていたようです
▼The Future Doesn't Have to Be Incremental
URLリンク(github.com)
URLリンク(pbs-h2.twimg.com)
1980年代にはそういうことはできなくなったので、VMの高速化技術が試行錯誤されました
その成果が90年代のJavaのHotSpotや00年代のJSのV8に転用されています
そんなわけで、すごい高速なコアに頼ってそこそこの速度で動いているというのが現状です

42:デフォルトの名無しさん
17/04/28 21:26:50.07 oDhQrrTb.net
設計思想は素晴らしい。
のかな?

43:デフォルトの名無しさん
17/05/05 18:00:36.59 oGFFYBoD.net
コレクション使ってて使いづらいと思うことも最近は減ってきたよな
昔より言語が進歩してるんだろか

44:デフォルトの名無しさん
17/05/05 21:23:00.44 Qc8J8Hpx.net
>>43
でもねぇ、世の中にはコレクション操作が使いづらい
退化した最悪な言語が存在する
URLリンク(d.hatena.ne.jp)
元々は手続き型として設計された簡潔な言語だったけど、
オブジェクト指向やら関数型やらを行き当たりばったりに増築し続けたおかげで、
コレクション操作に関する「一貫性」という設計哲学が破綻してしまった例だね

45:デフォルトの名無しさん
17/05/05 21:52:01.71 Qc8J8Hpx.net
[Ruby]
a.sort().reverse().map{|x| x.to_s}.join('-')
[JavaScript]
a.sort().reverse().map(function(x) { return x.toString() }).join(“-“)
[Python]
'-'.join(map(lambda x: str(x), reversed(sorted(a))))

46:デフォルトの名無しさん
17/05/06 00:47:46.27 feNHzNcv.net
[Ruby]
a.sort().reverse().map(&:to_s).join('-')
map{|x| x.to_s}
map(&:to_s)

47:デフォルトの名無しさん
17/05/06 07:38:32.83 gBi5/Vqg.net
[Pharo Smalltalk]
(a sort reverse collect: [:x | x asString]) joinUsing: '-'
(a sort reverse collect: #asString) joinUsing: '-'

48:デフォルトの名無しさん
17/05/06 17:44:28.43 fFyXczFW.net
パイソン駄目言語なのか~
一応人気あるらしいが…
ルビィは俺も好き。

49:デフォルトの名無しさん
17/05/11 21:34:24.03 645iMSZy.net
C#も文字列結合joinはあんま美しくないかな。
String.Join("-",list)
やっぱRuby最強かな

50:デフォルトの名無しさん
17/05/13 18:41:35.29 Jd7eipCz.net
C#だとString.IsNullOrEmpty(str)とかもあんまり美しくないかな。
便利だし慣れたらそれほど気にならないけど。

51:デフォルトの名無しさん
17/05/13 20:15:39.61 IutQ3qOG.net
>>50
どう美しくないの?

52:デフォルトの名無しさん
17/05/13 20:16:44.40 cg00FUZZ.net
49 = 50

53:デフォルトの名無しさん
17/05/13 21:49:29.63 Jd7eipCz.net
>>51
メソッドチェーンで書きたいじゃんやっぱ。
とはいえ、nullにIsNullOrEmptyなんてメソッド持たせるのは無理だろうから
現状の形でしょうがないとは思う。

54:デフォルトの名無しさん
17/05/13 21:58:59.13 U/ufHPaa.net
>>53
拡張メソッド

55:デフォルトの名無しさん
17/05/15 19:30:38.67 Vq1LD+5r.net
>>54
なにこれキモイ

56:デフォルトの名無しさん
17/05/17 21:13:54.47 U14IiR72.net
>>54
なにこれキモチイイ

57:デフォルトの名無しさん
17/05/20 20:55:00.46 Hvbhp0e0.net
nullはもっと進化してほしいよね。
現状、nullチェック面倒すぎ。
とくにjava?

58:57
17/05/22 20:50:49.74 OyhChPaS.net
世の中にはnull結合演算子なんてものもあるのか。

59:デフォルトの名無しさん
18/05/23 22:50:11.81 Au5e7VGg.net
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
0SKW4

60:デフォルトの名無しさん
18/07/04 23:18:22.40 gFgZc5FG.net
LL7


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch