トップページ⇒tech
52コメント15KB

型あり言語と型なし言語

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。NGNG
型あり言語と型なし言語どう思います?
手軽に使う(スクリプト言語とか)なら型がないほうがいいと思いません?
作るほうも楽だし。(藁
入り込んだ?やつを書くなら型はあったほうが良いと思いますです。
その辺の議論をしましょう。
0002名無しさん@お腹いっぱい。NGNG
1さんのまとめで結構です。なにも言うことはありません。
0003ということでNGNG
終わっちゃったね。
0004じゃあ、議論を展開する為にNGNG
いや! それは違う!
むしろ手軽に使うものにこそ型はあるべきだ。
何故なら手軽に使うということは、使う頻度も高くより効率的な処理を求められるからだ。
入り組んだヤツを書く場合は型は省略するべきだ。
何故ならヴァリアブルにすることで余分な変数宣言が減り使いまわせ、ソースが簡潔になるからだ。
0005展開する価値はないNGNG
いや! それは違う!
** 終わり **
0006名無しさん@お腹いっぱい。NGNG
まぁ、どっちでも許された範囲で好きなほうを選べっつーことで。
00074NGNG
ダメか、やっぱり。
でも、今思ったけど、言語に型有りとか型無しとかあんの?
型無し(variableのこと?)って、それも使える言語があるということでは?
0008>7NGNG
そっちの議論にいくの?
0009500h.NGNG
LINGOで言うけど、処理速度が上がるなら明示的に
型宣言「できても」いいと思う。
つまり、どっちでもいいように作られているのが理想ですね。

#となるとVBが理想か・・・。ケッ。
0010>7NGNG
>ダメか、やっぱり。
そりゃ、無理矢理な理論展開してもダメに決まってるがな。
0011名無しさん@お腹いっぱい。NGNG
ほんとの型無し言語だと Lisp 系などに言及せにゃならんだろうが、
Basic 系の「型無し」とは、「型宣言の必要なし」のことだろう?
または実行時型チェックしか実装されていない。

まぁ、厳密には、Lisp だって「1種類の型」を持っているわけで、
「型無し」とはいえないなぁ。

0012>9NGNG
型宣言できる時点で型のある言語に分類されちゃう気もするが。
0013名無しさん@お腹いっぱい。NGNG
「型無し」っていうのは、型の概念が無いっていう意味じゃなくて
ある変数にすべての型のインスタンスを代入可能っていう意味だと
おもうんだけど、どうでしょうか?
0014名無しさん@お腹いっぱい。NGNG
型って、単にあり/なしだけじゃなくて、型が強い(strongly-typed)
とか弱い(weakly-typed)とかいう言い方もする。
いくら型宣言できても、単一の記憶領域を異なる型として参照できて
しまえば、それはとてつもなく弱い型である。
0015名無しさん@お腹いっぱい。NGNG
14>13 ややかぶってしまったかな?
0016>14NGNG
型が強い方では、あるクラスの型で宣言された変数は、そのスーパークラス
のインスタンスを代入できない言語までありますよね。
0017名無しさん@お腹いっぱい。NGNG
型の強さを10段階表記、とか(
0018500h.NGNG
型が強いのはBASIC(!=VB)とかかな?
A$ = A%
なんてできないわけだし。
しかし、型の話題してるときに、LINGO(LISP系)で配列の初期化を
a = [0@`0@`0@`0@`0]
dim = [a@`a@`a@`a@`a]
とした場合(つまり、記憶領域の確保を行おうとした訳です)に
dim[1]、dim[2]、dim[n]が同じ結果になるっていう現象に悩まされました(笑)
これ、言語仕様的には正解なんだろうけど、マニュアルに書いてないぞー(涙)
まあ納得しましたけど。

しかし、LINGOって

a = "文字列だったり"
a = 999
a = 999.999
a = [1@`2@`3@`4@`5]
a = [a#:1@`b#:2@`c#:3]
a = (書けないけど、インスタンスのアドレスとか)

この構文を許すんだけど、どうやって記憶領域の確保してるんだろう?
って思いますです。変化する都度に動的に割り当てて、ガベージコレクションかな?

a = 99.9999
a = "STRING"
a = 100.000
a = "クソ長い文字列"

なんて事を繰り返すと、いつかメモリがなくなってしまうのであろうか(笑)
っていうのも、LINGOはコンパイルするという概念が御座いまして・・・。
00191NGNG
>>13
そうです。
variable o;

o = 1;//oはintの1
o = "string";//文字列に変化
こんなイメージなんですけど・・・

>>18
struct{
unsigned char type; // 0=integer@`1=string

union
{
int integer;
char *string;
} data_area;
}variable;
こんなふうに管理してるんじゃないかな?
LINGOてJavaVMみたいなので動くんですか?
0020>18NGNG
LINGOは知りませんが、その内容から見てVBとかで採用されている
バリアントOLEVariantそのものに思えますよ
0021500hNGNG
>19さん、20さん
なるほど。
LINGO(Director)自体はクロスプラットフォームなので、
VMみたいなもので動く、が正解ですね。
(プロジェクターという実行ファイルにすると巨大な
 ファイルが出来ます。といっても2MB程度のものですが。)
ソース自体をPコード的な中間言語に置換していると思います。
余談ですが画像ファイルなども独自の形式で圧縮して持っているはずです。
0022pcode 本店NGNG
>21 よんだ?
0023つれづれNGNG
型の無い言語は、小さい整数とかは直接変数が値を持ってるけど、
それ以外はアドレスを持っていて、その先に型の識別があるって
感じでしょうね。
バイトコードについては、ASCIIから出てるLittleSmallTalkの
本なんかが参考になるかも(あと、ブルーブック、でしたっけ?)
GCは欠かせないでしょうね。
0024500hNGNG
>22さん
呼んでません。
でも、宜しくご教授ください。
色々と(笑)
0025>18NGNG
variant型は全てがvariantだからCとかに馴れてると配列使う時にドジりますな
dim = [a@`a@`1@`1.234@`"test"]
とかも出来ます。値以外は全て参照を記録してる感じですな
つまりaを複数書くと同じaを差しちゃうんですな
aの複製を作らなければいけないという事ですな
0026名無しさん@お腹いっぱい。NGNG
Perlでテキスト処理やCGIを書いたら型の無いことのメリットを
感じられると思うけど?
002726NGNG
結局入り組んでいるかどうかは関係無く、型有りが有利か
型無しが有利かは用途によると思います。
CGIなら入り組んでいても形無しのPerlで書くほうが、
Cで書くより大抵の場合楽です。
0028名無しさん@お腹いっぱい。NGNG
型の無い言語で便利だと思うのに、ClassAから導出したClassA_1〜ClassA_9が
あったとして、これらのどれを変数に代入(?)してもよい、っていうのがあるです。
最近使ったもんで。
0029名無しさん@お腹いっぱい。NGNG
>>28
導出ってどういう意味?

ってか
この場合導出って言葉が派生と同義なら
型有りでも当たり前にできる事が多いと思うがどうか。
(つーかオレはC++とJavaしかしらんがどっちもできるでよ)
003029NGNG
間違い。
C++はポインタで指すことができるだけでさすがに変数に代入までは
できなかったよなたしか。

シッタカしてしまってすまんこってす。
0031名無しさん@お腹いっぱい。NGNG
strongly-typed ばんざい!
0032名無しさんNGNG
>27
PerlとCでCGIを書くときで比較しちゃうか...
大抵の人はperlって答えると思うけど、
それって文字列の扱いとか外部コマンドによる支援
が楽とかそういうのも影響しちゃって
うまく型付けの特長だけ抽出した比較じゃ
ないんじゃないかな。
どう考えてもchar*での文字列の扱いが
楽なんて人はいないよね。C++/Javaのstring
ならいざしらず。
0033名無しさん@そうだ謙虚にいこうNGNG
>25さん
確かにそうなのかもしれませんが、型の有り無しとは関係ない気が
します。
オブジェクトの参照に対する言語の実装の仕方?というか。
気をつけないといけないのは確かにそうですね。
Javaでよくひっかかりました。

>28さん
確かに便利ですが、型の有り無しとは関係ない気がします。
言語の一機能というか。
派生できる言語が便利なのはほんとにそうですね。

型には、Classとprimitiveな型とがあると思うのですが、
primitiveな型はtypedではなくて、Classはtypedされて
いる言語があるのでしょうか?

#型あり型無しという場合はほとんどprimitiveな型のことですよね?
003427>32NGNG
CGIで比較して何が悪いのでしょうか?
CGIやテキスト処理を型有言語で書くと面倒な変換が
たくさん入りますが型無言語で書くと楽です。
0035エロリ・ザ・男爵NGNG
昨日ちょっとCGI作ってたけど、
perlだとバイナリファイル吐き出すのにpack()なるものを使わないといけなくて面倒だった。
俺が使い方知らないだけかも知れないけど。
003627NGNG
どう考えてもプログラム規模とは関係無くプログラムの用途
によって型有り形無しの適性が決まってくるとしか言いよう
が無いと思う。

003727>35NGNG
27で「大抵の場合楽です。」と書いたとおりCGIの中でも
CGIや処理の一部にはCの方が簡単に書けるものもあるか
もしれませんが、バイナリファイルを扱うCGIでもそのCGI全体
としてはPerlの型を意識しないで済む点が有利に働くものが
ほとんどのように思います。
0038名無しさん@お腹いっぱい。NGNG
たぶん、CGIでてきとうな掲示板ぐらいしか作ったことないんだろうな。> 27
社内ユースのWebアプリケーションとして大規模なCGI組むと書式指定のテキスト
処理が鬼のようにあるから結局なんらかのメソッド呼び出しが必要に
なって型なしだから楽ってことはないんだよ。
003938NGNG
で、逆にそれくらいの規模になるとメソッドのインターフェース仕様
があやふやになってくるといやだからやっぱ型が強い言語を使いたく
なるんだよな。
ってことで1に逆戻り。
004027>38NGNG
あらあら、だんだん言葉が悪く煽り臭くなってきましたね。
型有りだともっと大変だと思うけどね。
最初から結論決めてそれ以外を認めない人とは話しても
無駄ですね。
004127NGNG
38と会話しても無駄みたいなので独り言として別レスに
します。

入り組んだWebアプリケーションだからといって、
書式指定のテキストが必ず山ほどあるわけでも、
書式指定ばかりだというわけではないのが普通だよなぁ。
書式指定よりそれ以外の方が多ければどう考えても
型無しの法が楽だよなぁ。
結局プログラムの用途しだいだよなぁ。


0042名無しさん@お腹いっぱい。NGNG
> 38と会話しても無駄みたいなので

これが煽りの典型です
0043>42NGNG
煽るなって(笑)
0044名無しさん@お腹いっぱい。NGNG
結論:2chで議論は成立しない
0045>44NGNG
じゃなくて議論する気最初から無いでしょ?
お互い数レス目からイヤミを入れだしたら議論にならんよ
0046新米ギコNGNG
    ∧ ∧    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   (@` ゚д゚)  < >>44 んなぁこたぁ、ない
  ヽ/ つ旦)~~  \_____________
  (_ __)
     ^
0047名無しさん@お腹いっぱい。NGNG
1が(藁を使っているのを見てこの結末は予想できたよ
0048名無しさん@お腹いっぱい。NGNG
27はCGI厨房に決定
0049名無しさん@お腹いっぱい。NGNG
What's wrong with strict typing?
http://www.egroups.com/message/extremeprogramming/7094?threaded=1
0050名無しさん@お腹いっぱい。NGNG
結局1=48は暴れたかっただけか・・・
0051>47NGNG
反論してきた人間に絡んで誹謗する為だけにスレッドたてる奴いるよな。
0052>49NGNG
隅間しぇんが議論を要約して訓謝意。
■ このスレッドは過去ログ倉庫に格納されています