新言語を開発したい

■ このスレッドは過去ログ倉庫に格納されています
2010/05/30(日) 21:52:01
http://pc12.2ch.net/test/read.cgi/tech/1274015781/l50 の継続スレのかたわれです。
低水準言語にこだわる人は「低水準言語を開発したい」のほうへどうぞ。
272デフォルトの名無しさん
垢版 |
2012/10/31(水) 22:03:32.83
>>269
> 例えば、関数の引数なんかが何でも代入できたら便利って思わない?

例えば、fooという関数があって、intとstringを引数に取れるとする。

それはfoo(int value)とfoo(string str)の2つの関数を定義するのと同じ事。
オーバーロードって呼ばれる機能のことね

君がそういう意図で書いたのではないということはわかっているが、
つまり、「関数の引数なんかが何でも代入できる」というのは
オーバーロードを備えている言語、Javaなども当てはまる。
273デフォルトの名無しさん
垢版 |
2012/10/31(水) 22:08:49.25
そう、オーバーロードやテンプレートで関数の引数は
なんでも代入できるってのは実装できる。

ここで比較するべきことは、
「オーバーロードやテンプレートを使ってなんでも代入できる」と
「型がないがゆえになんでも代入できる」の2つの違い。

型が違えば、処理もわずかながら違ってくる。
つまり、後者は引数に何が入っているかで処理を切り替えないといけなくなる。
そして想定外のものが入っている可能性もあるので、引数チェックも必要になる。

つまり、後者は劣った方式。
2012/11/01(木) 07:35:35.91
Javaにはジェネリクスもあるのに
何でオーバーロードで例えるんだよ
ほんとに分かってんのか?
275デフォルトの名無しさん
垢版 |
2012/11/01(木) 08:12:04.58
型無しの変数だけ、型名にvarと宣言させれば、
オーバーロードと同時に使えるかもしれない
2012/11/01(木) 08:31:08.44
メソッドのオーバーロードの話をしているのか
型システムでいう多相型の話をしているのか
(動的型付け言語で見られる)型の無い変数の話をしているのか
277275
垢版 |
2012/11/01(木) 12:04:05.92
多相型を予約語一つで実装しながら、オーバーロードも実装したいという話。
2012/11/01(木) 19:51:37.37
多相型って、OCamlとかにあるアレのこと?
それともVBのVariantのこと?
2012/11/01(木) 21:26:13.92
OCamlとかのアレのことです
2012/11/01(木) 21:57:59.59
>>271
C++のtemplateは、
・クラスごとに実装を別に出来る
 (実装を別にしたくない場合は、templateでなくvirtual関数を駆使する)
・クラスだけでなく整定数ごとに別の実装を持てる
・再帰的に定義できる (コンパイル時に原始帰納関数が計算できる)
という特徴がある。
後者2つのせいでtemplate meta-programmingが炸裂した。
2012/11/01(木) 22:18:20.16
多相型を実現する機能とメタプログラミングを実現する機能、
それぞれ分かれてる方が良いんじゃないかな
2012/11/01(木) 23:18:52.66
>>277
型クラス
283デフォルトの名無しさん
垢版 |
2012/11/01(木) 23:21:02.71
多相とオーバーロードって
関数のエントリポイントが
同一か型ごとに分かれてるかの違いだろ?
2012/11/01(木) 23:33:37.05
型推論しないなら、多相型とオーバーロードの共存も難しく無いよ
2012/11/02(金) 00:07:04.19
>273
そういうのはダックタイピングで対応できる。
完全には行かないけどね。
286デフォルトの名無しさん
垢版 |
2012/11/02(金) 01:42:15.26
C++のtemplate、メタプログラミングは発展途上だと思う。
もっと使い易くしてほしい。
2012/11/02(金) 02:25:21.11
それはconceptでFA.
288デフォルトの名無しさん
垢版 |
2012/11/02(金) 08:09:55.62
ダックタイピングってインターフェースを
定義しないインターフェース。

型安全性をなくしたインターフェースなんだよね。
2012/11/02(金) 09:58:23.85
いやインターフェイスだけを定義したといった方がいいだろ。
型安全がないから例外は必須だよね
2012/11/02(金) 13:55:01.46
テンプレートもインターフェースも多用すると
マクロ展開多用したコードみたいになる。何事も
バランスというか節度は大切やね
2012/11/03(土) 01:39:59.40
で、その多層型のメリットは何?
2012/11/03(土) 07:45:42.44
map :: (a -> b) -> [a] -> [b] とか、もし多相型が無かったら
全ての型a,bに対してmapを定義する必要があるじゃん?

動的型と違うのは、map f xs としたときに
fの引数の型とxsの要素の型が一致してないと
型エラーになるところ
293264
垢版 |
2012/11/03(土) 08:17:49.03
仕様ができたので公開します。

http://d.hatena.ne.jp/programmingshape12/searchdiary?word=%2A%5B12%B4%D8%CF%A2%5D
294デフォルトの名無しさん
垢版 |
2012/11/03(土) 10:51:58.53
>>292
> 全ての型a,bに対してmapを定義する必要があるじゃん?

ないよ。その為のinterfaceでありgenericsだろ。
2012/11/03(土) 10:59:01.58
>>294
Javaのgenericsは多相型(パラメータ多相)
2012/11/03(土) 11:05:05.30
JavaのGenericsはびっくりするくらい不完全なゴミだけど
一応多相型
2012/11/03(土) 15:12:20.67
そもそも、多相型を使うメリットは何?
298デフォルトの名無しさん
垢版 |
2012/11/03(土) 15:56:29.22
型ごとに関数やクラスを作らなくていいし、
対応している型が何かが、関数の定義としてすべて簡単にわかる。
2012/11/03(土) 18:05:16.70
コードを書く量が減るってことか?

対応してる型が何かが分かるというのは、型ごとに作る場合も一緒だろ?
それは多相型のメリットではない。

型により挙動が変わるコードを書くことができるので便利ということなら
逆に動作が分かりにくいコードを書けることにも繋がるので
邪魔な機能という気がするがなあ。
2012/11/03(土) 18:14:41.66
びっくりした。
コレクションごとにfor文も別に用意するか?
2012/11/03(土) 18:29:28.79
それならCのキャストでも良いだろ?
動かしてみないと実際の中に見合った型が分からないのはバグの温床。
302デフォルトの名無しさん
垢版 |
2012/11/03(土) 18:48:54.98
>>299
例えば配列があったとするよね?

数値用配列と文字用配列はどちらも配列だから
配列として作りたい。

だけど数値用配列には数値しか入れたくない。
数値しか入らないのであれば、数値以外を間違っていれようとしたらエラーにできるし
配列から取り出したものは必ず数値だから高機能エディタは数値用のメソッドだけを
コード補完できるようになる。
2012/11/03(土) 18:58:55.25
まったく多相型のメリットになってないけど、それがどうした?
304デフォルトの名無しさん
垢版 |
2012/11/03(土) 19:09:50.89
>>303
多相型ってわかってる?
ちょっと説明してみせて。
2012/11/03(土) 19:25:03.09
>>304
日常的に使われる加算演算子‘+’が
整数・実数・複素数等、型を意識しなくとも同様に使えるように、

コンピュータ言語において、変数や関数の型を意識しなくても同様の挙動をするものを
まとめて扱う機能のこと。
2012/11/03(土) 20:01:53.45
馬鹿な意見が出てくるわけだ…
307デフォルトの名無しさん
垢版 |
2012/11/03(土) 21:42:26.80
>>305
それは「型」じゃねぇ。
308264
垢版 |
2012/11/04(日) 07:24:51.99
で此処の人たちは能書きばかりで実際に言語作る気あるのん?
2012/11/04(日) 11:43:24.67
>307
複数の型を同じように処理できるって言う正しい説明だ思う。
2012/11/04(日) 12:09:13.65
多相型は最初に書きやすくてもメンテしづらい。
作り捨てプログラマなら平気なんだろうけど。
メンテしづらい言語仕様は糞だよ糞。
311デフォルトの名無しさん
垢版 |
2012/11/04(日) 13:48:44.52
>>310
動的型付け言語はもっとダメだろうなw
2012/11/04(日) 17:24:12.16
>>305
それはオーバーロード
2012/11/04(日) 22:55:33.65
>>310
お前の使って言語は型推論もしてくれないようなクソ言語なわけだ
2012/11/04(日) 23:20:07.69
型だけ違ってアルゴリズムが同じコードを
コピペしまくった方がメンテしやすいとは
>>310は面白い奴だなぁ
2012/11/04(日) 23:35:28.72
>>314
そこで void * ですよ
2012/11/04(日) 23:40:56.78
型安全なコードより
キャストを使ったコードの方がメンテしやすいとは
>>310は面白い奴だなぁ
2012/11/05(月) 00:50:23.41
そこで始原クラス
class Object
ですよ
2012/11/05(月) 01:14:51.74
Objectも元の型に戻すのにキャストいるだろw
2012/11/05(月) 02:54:14.83
幸せなやつばかりでいいな。

多相型を使っても使わなくても、ポリモーフィズムは実現できるし
メンテしやすいように書くこともできる。

しかし、よりメンテしづらいものを書けてしまうのが多相型。

共通する動作を1か所にまとめ、異なる動作をする部分は別々に記述する。
これが、バグを作り込まないための言語としてあるべき姿。

異なる部分が、共通する部分の中に取り込まれる形では
(プログラムの正しさではない)仕様の正しさを人間が検証するのに不向き。

お気楽プログラムしか書かないなら気にしないんだろうけど。
いや、そういうのしか書かないなら本当に気にしなくていいことだよ。
320デフォルトの名無しさん
垢版 |
2012/11/05(月) 05:10:38.83
内容がない文章だな。
俺が反論を書いてやろう。


多相型を使っても使わなくても、ポリモーフィズムは実現できるし
メンテしやすいように書くこともできる。

しかし、よりメンテしづらいものを書けてしまうのが多相型を使わない方式

共通する動作を1か所にまとめ、異なる動作をする部分は別々に記述する。
これが、バグを作り込まないための言語としてあるべき姿。

異なる部分が、共通する部分の中に取り込まれる形では
(プログラムの正しさではない)仕様の正しさを人間が検証するのに不向き。

お気楽プログラムしか書かないなら気にしないんだろうけど。
いや、そういうのしか書かないなら本当に気にしなくていいことだよ。
321デフォルトの名無しさん
垢版 |
2012/11/05(月) 05:11:49.36
なぜこのような反論が成り立ってしまうかというと
>>319に”理由”が書いてないからだ。

理由がなくて主張だけするのであれば、
ほらこのように言葉を入れるだけで成り立ってしまう。
322デフォルトの名無しさん
垢版 |
2012/11/05(月) 05:18:15.45
>>319は次レスするときは、
多相型を使った場合と、使わなかった場合の
実装例を出すべきだな。

それ以外に反論する方法はなかろう。
323デフォルトの名無しさん
垢版 |
2012/11/05(月) 16:45:44.46
荒らしと思われると困るのでレス無用だが、現金より強力な最強プログラミング言語を拳固以外で何かあれば手に入れたい。
2012/11/06(火) 03:14:21.92
反論になってないものに反論することは出来ないし
俺も困らないからどうでもいいや。
少なくとも俺の作ってるのには含まれない機能だしね。
2012/11/06(火) 07:19:46.53
int用リスト、double用リスト、string用リスト、その他ユーザ定義型用リストを作って
それぞれにsort関数書く方がメンテしやすいんですよね?www
2012/11/06(火) 08:23:12.14
多相型ってパターンマッチングとかで使うものじゃなかった?
今話されているような使い方されることもあるの?

C++0xにconceptが入らなかったことが悔やまれる
327326
垢版 |
2012/11/06(火) 08:50:05.39
326のことは忘れてください
2012/11/06(火) 13:19:39.00
>312
多層型を実現するのにオーバーロードを使ってるんだろ。
ソート関数いくつも書くより比較演算子をオーバーロードした方が楽だって事。
2012/11/06(火) 19:44:16.39
Parametric polymorphism
Inclusion polymorphism
Ad-hoc polymorphism

全部違うものなのに、区別しないで議論しても仕方ない
2012/11/06(火) 19:57:09.25
何を言っているのかわかりづらいので、
Adhoc polymorphism
Parametric polymorphism
Subtype polymorphism
という用語を使って話してもらえますか?

オーバーロードというのは、型ごとに別の定義を持つ(組み込みのものを含む)
adhoc polymorphismのことを言っているということでいいですか?
2012/11/06(火) 19:57:50.51
>>329
めっさかぶった!w
inclusion = subtypeね。
2012/11/06(火) 22:01:55.60
>>328
とりあえずソート関数の型を書いてみようか
2012/11/06(火) 23:35:26.36
sort[T <: Comparable] : Seq[T] => Seq[T]
2012/11/07(水) 00:01:27.20
sort :: Ord a => [a] -> [a]
2012/11/07(水) 00:03:29.58
haskellはList限定なのね
2012/11/07(水) 00:10:16.25
コンテナの中身は多相型で、sort関数自体は
List, Seq, ByteString などでオーバーロード的に定義されてる
2012/11/07(水) 00:17:28.72
あ、ごめん
オーバーロード的に、は嘘だった
2012/11/07(水) 00:59:02.84
>>335
配列対象だとモナらないといけないので型もSTな感じに変わってくる。
2012/11/08(木) 08:11:00.12
オブジェクト指向と関数型、静的型とRubyのような簡潔さ
JVMならどこでも動くポータブルさとJavaの豊富なコード資産

思いつく限りの良い性質を取り入れたScalaが
残念な言語になったのは何故だろう?
良い性質を取り入れるだけでは新言語は良くならないという事か
2012/11/08(木) 10:01:45.79
scalaは型システムが一般人向きじゃない。
2012/11/08(木) 18:11:07.19
>オブジェクト指向と関数型、静的型とRubyのような簡潔さ
>JVMならどこでも動くポータブルさとJavaの豊富なコード資産

この2行だけだと、「思いつく限り」という程いい点が多いように思えない。
2012/11/08(木) 18:36:01.32
Javaっていう名の知れたものの資産ぐらいだね。
それもそんなにあるかどうか・・・
343デフォルトの名無しさん
垢版 |
2012/11/09(金) 01:33:02.45
やっぱりRubyのような機能を
取り入れたのが失敗のもとなんじゃないですか?w
2012/11/09(金) 10:40:19.66
Javaがコード資産ないという評価だと、ほとんど全ての言語はアウトだな。
2012/11/09(金) 11:55:35.81
ほかとの比較でね。
優位である点が見当たらない。
2012/11/09(金) 15:35:05.92
トップクラスの豊富さなのに、
それをそのまま使えるんだから優位以外の何物でもないと思うが。
2012/11/09(金) 21:12:18.20
Scala大人気でした…
http://jp.techcrunch.com/archives/20120912javascript-tops-latest-programming-language-popularity-ranking-from-redmonk/
2012/11/09(金) 22:10:11.12
Haskellの隣の順位という時点で
大人気とは言いがたい
349デフォルトの名無しさん
垢版 |
2012/11/09(金) 22:42:35.38
Javaは優位な点だらけでしょw

静的型付け言語というのが一番のメリットで、
その中でここまでうまくやれてるのって
他にないでしょ。
2012/11/09(金) 22:58:45.41
Javaは冗長すぎてウンコ
2012/11/10(土) 07:52:09.13
java は参照渡しができなくてウンコ
352デフォルトの名無しさん
垢版 |
2012/11/10(土) 08:08:17.60
そんな細かい指摘しか無いの?

○○をするにはどうすればいいんだろう?と思った時
他の言語なら最近出てきたものが、
Javaの世界には既にあったって驚くことばかりなんだけど。
2012/11/10(土) 08:16:29.74
Java は参照渡しができなくてウンコ
354デフォルトの名無しさん
垢版 |
2012/11/10(土) 08:30:16.44
参照渡しの代わりになる技術はあるが、
その逆はない。

例えば、eclipseのリファクタリング機能。
あれと同等の数と信頼性を持ったものはない。

これはecliseが凄いだけというやつがいるが、
Javaだからこそ、ここまで作ることが可能だった。
2012/11/10(土) 08:39:31.82
>>354
>参照渡しの代わりになる技術はある
ない
そしてJavaは参照渡し(call by reference)はない、あくまでも値渡し(call bye value)のみしかもたない
結論:Javaはウンコ
356デフォルトの名無しさん
垢版 |
2012/11/10(土) 08:55:26.14
>>355
参照渡しができなくても
参照渡しをすることで作りたかったアプリは
別に参照渡しを使わなくても作れるということ。

目的は参照渡しではない。
真の目的はアプリを作ることだ。
2012/11/10(土) 09:00:15.79
>>356
Eclipseのリファクタリング機能がなくても
Eclipseで作りたかったアプリは
別にEclipseを使わなくても作れるということ。

目的はEclipseによるリファクタリングではない。
真の目的はアプリを作ることだ。
2012/11/10(土) 09:06:31.88
> 他の言語なら最近出てきたものが、
> Javaの世界には既にあったって驚くことばかりなんだけど。

他の言語なら昔からあったクロージャが
Javaにはまだ無いって驚くわ。
2012/11/10(土) 09:11:18.33
Javaの基本データ型に参照が必要だと感じたことはないけど、
プログラミングスタイルがそういうやり方に慣れちゃってるんだろうね。
必要なら、mutableなオブジェクト型を作って渡してやればいいだけだろうけど。
2012/11/10(土) 09:15:23.92
こんな感じ

class Reference<T> {
T val;
void set(T v) { val=v; }
T get() { return val; }
}

class Example {
public static void main(String[] args) {
Reference<Integer> ref = new Reference<>();
f(ref);
System.out.println(ref.get());
}

static void f(Reference<Integer> ref) {
ref.set(777);
}
}
361デフォルトの名無しさん
垢版 |
2012/11/10(土) 09:23:23.55
>>357
はいその通りですね。
もう一つの目的、早く作るってことができるのは
Javaだけです。
参照わたしはなくても、早く作れますのでw
362デフォルトの名無しさん
垢版 |
2012/11/10(土) 09:24:55.92
>>358
クロージャなくても作れるからねぇ。

戦術と戦略の違いかな。
戦略上重要なものがJavaの世界にはあふれている。
2012/11/10(土) 09:41:44.28
Javaでクロージャのようなことしたかったら、こんなかんじ。
interface Closure {
 void call();
}

class Example {
 public static void main(String[] args) {
  final Reference<Integer> ref = new Reference<>();
  f(new Closure() {
    public void call() {
     ref.set(777);
    }
   });
  System.out.println(ref.get());
 }

 static void f(Closure c) {
  c.call();
 }
}
2012/11/10(土) 09:45:04.96
>>363
そういうクロージャもどきが
いろんなライブラリで定義されてて
互換性がないところが生産性悪い

一方のライブラリで作ったクロージャを
別のライブラリに直接渡せないとか馬鹿かと
365デフォルトの名無しさん
垢版 |
2012/11/10(土) 09:46:04.93
>>363
クロージャの説明に、mainとかclassいらなくね?

お前の説明は無関係ない部分が多いんだよ。
2012/11/10(土) 09:48:22.78
>>364
直接渡せないなら
変換すればいいじゃない?

ほんの数行で書けるでしょ?
2012/11/10(土) 09:51:19.44
そうやって可読性を落とすからJavaはゴミなんだよ
2012/11/10(土) 09:53:29.72
>>364
どんなライブラリ使ってるの?
普通のJavaの流儀だとクロージャを使うことはないと思うけど、
自分の知ってる機能が言語に無いと不便に感じるかもしれないね。
2012/11/10(土) 10:05:28.89
Apache Commons
totallylazy
2012/11/10(土) 10:09:45.17
現状のJavaが優れているからといって、新言語をJavaに似せても
その言語が良い物になるかっていうと違うだろ
Javaの強みは圧倒的なコード資産とノウハウなワケで
それは新言語にそっくりコピーは出来ないんだから
2012/11/10(土) 10:30:11.67
http://e-words.jp/w/E58F82E785A7E6B8A1E38197.html

クラスへの参照を渡すのは参照渡しじゃないのか。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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