このグループ閑古鳥が泣いてるので、、、だいぶ前に「ポインタとは
何」談義をやりましたが、結局「ポインタがある/ない」というのは何
をもってポインタと呼ぶかという定義の問題であり、その定義の最後の
ところは語感とか感じ方とか趣味の問題のような気がしています。
で、さまざまな言語について「この言語にはポインタがある」という
命題が「真だと*感じる*」か、「偽だと*感じる*」か、というサーベイ
をやったら面白いかなと思って。
気が向いたら参加してください>>皆様 久野
---
ポインタあるなし感じ方調査
ver. 2001.9.4
この調査はあくまで「この言語にはポインタがある」という*文章が*
真だと*感じられる/られない*かどうかについて調査するものです。あ
くまで感じ方ですから、正しい/正しくないにこだわらず気楽に参加し
ませう。方法ですが、順番に自分の#を決めて表に
Y: 真だと感じられる
N: 真だと感じられない
?: わからない
-: 未記入(言語を追加したとき自分以外の既回答者の欄をこれに)
のいずれかを記入しましょう。言語を増やすのも自由です。どの#が誰
であるかについては、末尾にメールアドレスでも何でもいいので記しま
せう。コメントを記入するのも歓迎します。
--------------------------------------------
#______ 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
C Y
C++ Y
Pascal Y
COBOL N
Fortran Y
Java N
Perl4 N
Perl5 Y
Lisp N
ML N
Haskell N
--------------------------------------------
注記: COBOL→COBOL85、Fortran→Fortran90
--------------------------------------------
#0 ku...@gssm.otsuka.tsukuba.ac.jp
私は「ある型/値」と「そこへの参照」が区別されていて使い分けら
れるような場合に「ポインタがある」というふうに感じます。
---
#0 ku...@gssm.otsuka.tsukuba.ac.jp
私は「ある型/値」と「そこへの参照」が区別されていて使い分けら
れるような場合に「ポインタがある」というふうに感じます。
#4 sk...@mac.com
;; 最近の comp.lang.scheme で EIAP (Every Thing Is A Pointer)が話題になっています。
Java にポインタがないというのはポインタと整数がごっちゃになってないということで
C みたいにポインタのレンジチェックが出来無いもとと区別してるだけのこととおもいます。
ポインタのない言語でプログラムは組みたくないです。
(ところで、MLのrefって久野さんはポインタだと思わないの?)
ku...@gssm.otsuka.tsukuba.ac.jp writes:
--------------------------------------------
#______ 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
C Y Y Y
C++ Y ? Y
Pascal Y Y Y
COBOL N ? N
Fortran Y Y Y
Java N Y Y
Perl4 N ? ?
Perl5 Y ? ?
Lisp N Y Y
ML N ? Y
Haskell N ? Y
Prolog - - Y
--------------------------------------------
注記: COBOL→COBOL85、Fortran→Fortran90
--------------------------------------------
#0 ku...@gssm.otsuka.tsukuba.ac.jp
私は「ある型/値」と「そこへの参照」が区別されていて使い分けら
れるような場合に「ポインタがある」というふうに感じます。
#4 sk...@mac.com
;; 最近の comp.lang.scheme で EIAP (Every Thing Is A Pointer)が話題になっています。
Java にポインタがないというのはポインタと整数がごっちゃになってないということで
C みたいにポインタのレンジチェックが出来無いもとと区別してるだけのこととおもいます。
ポインタのない言語でプログラムは組みたくないです。
#m ma...@cc.tsukuba.ac.jp
ループやグラフが作れればポインタがあるといっていいんじゃないのかな。
前田敦司
ma...@cc.tsukuba.ac.jpさん:
> Prolog足しました。
おおなるほど。
> (ところで、MLのrefって久野さんはポインタだと思わないの?)
うん、そうですね、intとref intがあるんだからポインタかな、やっ
ぱ。ということで直します。
> ループやグラフが作れればポインタがあるといっていいんじゃないの
> かな。
配列の添字はポインタか? ループやグラフが作れます :-) 久野
--------------------------------------------
#______ 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
C Y Y Y
C++ Y ? Y
Pascal Y Y Y
COBOL N ? N
Fortran Y Y Y
Java N Y Y
Perl4 N ? ?
Perl5 Y ? ?
Lisp N Y Y
ML Y ? Y
Haskell N ? Y
Prolog N - Y
> > ループやグラフが作れればポインタがあるといっていいんじゃないの
> > かな。
>
> 配列の添字はポインタか? ループやグラフが作れます :-) 久野
配列と添字の組(cursorというらしい)はポインタじゃない、と感じます。
ループやグラフの辺を表せる「単一の」データ(データ構造じゃなくて) があ
れば、それはポインタと呼んで良いんじゃないかと思います。
もし、巨大な配列が1個だけあって、プログラム中のどこでも(配列, 添字)の
かわりに添字だけで「場所」が一意に示せるような言語があったとしたら(ア
センブリ言語はたいていそうですけど)、その言語で添字はポインタだと言っ
て良いと思いますね。
なので、ちょっと言い回しを訂正。(あと、Perl5にはそのものずばり
reference ってのがあるらしいですね。Perl4は知らん。知りたくもない。)
--------------------------------------------
#______ 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
C Y Y Y
C++ Y ? Y
Pascal Y Y Y
COBOL N ? N
Fortran Y Y Y
Java N Y Y
Perl4 N ? ?
Perl5 Y ? Y
Lisp N Y Y
ML Y ? Y
Haskell N ? Y
Prolog N - Y
--------------------------------------------
注記: COBOL→COBOL85、Fortran→Fortran90
--------------------------------------------
#0 ku...@gssm.otsuka.tsukuba.ac.jp
私は「ある型/値」と「そこへの参照」が区別されていて使い分けら
れるような場合に「ポインタがある」というふうに感じます。
#4 sk...@mac.com ;; 最近の comp.lang.scheme で EIAP (Every Thing
Is A Pointer)が話題になっています。Java にポインタがないとい
うのはポインタと整数がごっちゃになってないということでC みた
いにポインタのレンジチェックが出来無いもとと区別してるだけの
こととおもいます。ポインタのない言語でプログラムは組みたくな
いです。
#m ma...@cc.tsukuba.ac.jp
任意の有向グラフの辺を表せる「単一の」データがあれば、それはポイン
タと呼んでいいんじゃないのかな。
前田敦司
ma...@cc.tsukuba.ac.jpさん:
> 配列と添字の組(cursorというらしい)はポインタじゃない、と感じま
> す。ループやグラフの辺を表せる「単一の」データ(データ構造じゃ
> なくて) があれば、それはポインタと呼んで良いんじゃないかと思い
> ます。
ほうほう。
> なので、ちょっと言い回しを訂正。(あと、Perl5にはそのものずばり
> reference ってのがあるらしいですね。Perl4は知らん。知りたくも
> ない。)
では次の質問ですが。知りたくもないPerl4でごみんなさい。
$x = ...;
$y = '$x';
$z = eval($y);
さてこの場合の$yはポインタなの? 久野
> > 配列と添字の組(cursorというらしい)はポインタじゃない、と感じま
> > す。ループやグラフの辺を表せる「単一の」データ(データ構造じゃ
> > なくて) があれば、それはポインタと呼んで良いんじゃないかと思い
> > ます。
> $x = ...;
> $y = '$x';
> $z = eval($y);
>
> さてこの場合の$yはポインタなの? 久野
んー、これを認めると、文字列とファイルが使える言語はたいていポインタが
あることになっちゃいますな。
んじゃ、もっと具体的に、
値vを格納するメモリ領域へのアドレスaをデータとして扱い、aを用いた間
接参照でvを取り出す操作を持つ言語は、Cでいうポインタと同等の機能をも
つ(すなわちポインタがある)
では?
# 「ポインタがある」ってのは、「Cのポインタと同等の機能がある」で良い
# んですよね?
前田敦司
<m3ae0bz...@maedapc.cc.tsukuba.ac.jp>の記事において
ma...@cc.tsukuba.ac.jpさんは書きました。
maeda> # 「ポインタがある」ってのは、「Cのポインタと同等の機能がある」で良い
maeda> # んですよね?
C ではポインタ変数のアドレスを取ることができる (結果として「ポイ
ンタのポインタ」とかいうものが生まれる) んですが, これと同等の操
作は Fortran90 ではできないんじゃないでしょうか. コードは書いてい
ませんが, 二分木にデータを入れることを考えていたときにはたと困っ
たことがあります.
そう考えると, Fortran90 のポインタって C のポインタと正確に同等の
機能はないと思います.
--
名古屋大学 工学部 電子工学科 平田研究室
小野 孝男
ma...@cc.tsukuba.ac.jpさん:
> んー、これを認めると、文字列とファイルが使える言語はたいていポ
> インタがあることになっちゃいますな。
え? evalがなかったら参照できないじゃん。
> んじゃ、もっと具体的に、
> 値vを格納するメモリ領域へのアドレスaをデータとして扱い、aを用いた間
> 接参照でvを取り出す操作を持つ言語は、Cでいうポインタと同等の機能をも
> つ(すなわちポインタがある)
> では?
そりゃ前田さんの好み次第です。
> # 「ポインタがある」ってのは、「Cのポインタと同等の機能がある」で良い
> # んですよね?
そりゃ前田さんの好み次第です。
ポインタの定義は前にやったので、今回は「どういうのをポインタだ
と感じるか」というあくまで「感じ」で行きます。
で、前田さんの「感じ」をつついている。:-) 久野
ta...@hirata.nuee.nagoya-u.ac.jpさん:
> C ではポインタ変数のアドレスを取ることができる (結果として「ポイ
> ンタのポインタ」とかいうものが生まれる) んですが, これと同等の操
> 作は Fortran90 ではできないんじゃないでしょうか. コードは書いてい
> ませんが, 二分木にデータを入れることを考えていたときにはたと困っ
> たことがあります.
なるほど、動的データ構造はやりにくいのね。
> そう考えると, Fortran90 のポインタって C のポインタと正確に同
> 等の機能はないと思います.
その程度でもポインタと読んでよいかどうかの「感じ」が伺いたい
わけで。
よかったら表に記入してくださいよー。 久野
> # 「ポインタがある」ってのは、「Cのポインタと同等の機能がある」で良い
> # んですよね?
C のポインタってちょっと特殊なきがします。
scanf("%d", &c);
で出てくる c へのポインタ &c って、
ポインタっぽくない。。。うにうに動かないので。
ところで皆さん、sh の $1 ってポインタと思ますか?
% set foo $* # push foo
% set moo $* # push moo
% echo $1 # ref
moo
% shift # pop
% echo $1 # ref
foo
%
僕は、ポインタに似てるということは判るのですが、
ポインタかどうか分りません。
木村 栄伸
> scanf("%d", &c);
> で出てくる c へのポインタ &c って、
> ポインタっぽくない。。。うにうに動かないので。
うーん。うにうに動かないとポインタでないっていうのは目新しかっ
たです。
> ところで皆さん、sh の $1 ってポインタと思ますか?
どっちかというと「配列要素」みたいじゃないですか? Awkなんかだ
と「$i」なんていうふうに添字に変数が使えたりする。
これまた私にとっては目新しいご意見です。 久野
表に記入してくださる方が頭打ちなので表だけ再ポストします。
---
ポインタあるなし感じ方調査
ver. 2001.9.4
この調査はあくまで「この言語にはポインタがある」という*文章が*
真だと*感じられる/られない*かどうかについて調査するものです。あ
くまで感じ方ですから、正しい/正しくないにこだわらず気楽に参加し
ませう。方法ですが、適当に自分の#を決めて表に
Y: 真だと感じられる
N: 真だと感じられない
?: わからない
-: 未記入(言語を追加したとき自分以外の既回答者の欄をこれに)
のいずれかを記入しましょう。言語を増やすのも自由です。どの#が誰
であるかについては、末尾にメールアドレスでも何でもいいので記しま
せう。コメントを記入するのも歓迎します。
--------------------------------------------
---
> 表に記入してくださる方が頭打ちなので表だけ再ポストします。
僭越ながら、参加させていただきます。
ku...@gssm.otsuka.tsukuba.ac.jp writes:
ver. 2001.9.4
--------------------------------------------
#______ 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
C Y Y YY
C++ Y ? YY
Pascal Y Y Y?
COBOL N ? NN
Fortran Y Y Y?
Java N Y YN
Perl4 N ? ?N
Perl5 Y ? YN
Lisp N Y YN
ML Y ? Y?
Haskell N ? Y?
Prolog N - YN
--------------------------------------------
注記: COBOL→COBOL85、Fortran→Fortran90
--------------------------------------------
#0 ku...@gssm.otsuka.tsukuba.ac.jp
私は「ある型/値」と「そこへの参照」が区別されていて使い分けら
れるような場合に「ポインタがある」というふうに感じます。
#4 sk...@mac.com ;; 最近の comp.lang.scheme で EIAP (Every Thing
Is A Pointer)が話題になっています。Java にポインタがないとい
うのはポインタと整数がごっちゃになってないということでC みた
いにポインタのレンジチェックが出来無いもとと区別してるだけの
こととおもいます。ポインタのない言語でプログラムは組みたくな
いです。
#m ma...@cc.tsukuba.ac.jp
任意の有向グラフの辺を表せる「単一の」データがあれば、それはポイン
タと呼んでいいんじゃないのかな。
#n mu...@stg.co.jp
語感的には、pointerは演算できるけど、reference は演算できない
ものだ!!…という風に呼びたい感じです。
---
… pascal も fortran も、もうホトンド忘れちゃいました。(減点対象でしょうか
?)
--
e-mail : mu...@stg.co.jp
> > C ではポインタ変数のアドレスを取ることができる (結果として「ポイ
> > ンタのポインタ」とかいうものが生まれる) んですが, これと同等の操
> > 作は Fortran90 ではできないんじゃないでしょうか. コードは書いてい
> > ませんが, 二分木にデータを入れることを考えていたときにはたと困っ
> > たことがあります.
>
> なるほど、動的データ構造はやりにくいのね。
いやいや、二分木に動的にデータ入れるくらいなら、ちゃんとできますよ。
Cの&演算子(変数のアドレス)にあたるものはPascalにもFortran90にもありま
せん。(危険なので、意図的に除かれたらしい。) Fortran90だと、ポインタの
ポインタも(陽には)作れません。でも、何とかなるもんですよ。
module tree
type tree_node
integer :: data
type(tree_node), pointer :: left, right
end type tree_node
contains
recursive subroutine insert(tree, val)
type(tree_node), pointer :: tree
integer, intent(in) :: val
if (.not.associated(tree)) then
allocate(tree) !remember, pointer arg is always inout.
nullify(tree%left)
nullify(tree%right)
tree%data = val
else if (val .lt. tree%data) then
call insert(tree%left, val)
else
call insert(tree%right, val)
end if
end subroutine insert
recursive subroutine print_tree(tree)
type(tree_node), pointer :: tree
if (associated(tree)) then
call print_tree(tree%left)
print *, tree%data
call print_tree(tree%right)
end if
end subroutine print_tree
end module tree
program tree_test
use tree
type(tree_node), pointer :: root
integer :: d
nullify(root)
do
read *, d
if (d .eq. 0) then
exit
end if
call insert(root, d)
end do
call print_tree(root)
end program tree_test
;;; 筑波大学 電子・情報工学系(学術情報処理センター)
;;; 前田敦司 (MAEDA Atusi) ma...@cc.tsukuba.ac.jp
> > んー、これを認めると、文字列とファイルが使える言語はたいていポ
> > インタがあることになっちゃいますな。
>
> え? evalがなかったら参照できないじゃん。
いや、「文字列とeval」を認めたら、「文字列とfopenとread」でも似たよう
なもんでしょ。
> ポインタの定義は前にやったので、今回は「どういうのをポインタだ
> と感じるか」というあくまで「感じ」で行きます。
ふむ。「HaskellにもJavaにもPrologにもLispにもポインタ(という概念)はな
い」という「感じ」も一方では持ってるんですけどね。
でも自己参照構造(つまり無限にでかくなりうるデータ構造)を説明するときに
はやっぱり矢印を使って説明しますから。私の感じでは「矢印」ってやっぱポ
インタですね。
> Cの&演算子(変数のアドレス)にあたるものはPascalにもFortran90にもありま
> せん。(危険なので、意図的に除かれたらしい。) Fortran90だと、ポインタの
> ポインタも(陽には)作れません。でも、何とかなるもんですよ。
あ、嘘でした。ないのはPascalです。Fortran90のポインタは、他の変数を指
せます。(ただし、ポインタ変数はダメ。また、指される変数はあらかじめ
「指されることがある」と宣言しておかないとダメ。)
On 5 Sep 2001 02:17:30 GMT,
"久野" == kuno <ku...@gssm.otsuka.tsukuba.ac.jp> writes:
久野> ---
久野> ポインタあるなし感じ方調査
久野> ver. 2001.9.4
--------------------------------------------
#______ 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
C Y Y Y Y
C++ Y ? Y Y
Pascal Y Y ? Y
COBOL N ? ? N
Fortran Y Y ? Y
Java N Y N Y
Perl4 N ? ? ?
Perl5 Y ? ? Y
Lisp N Y N Y
ML Y ? ? Y
Haskell N ? ? Y
Prolog N - ? Y
--------------------------------------------
注記: COBOL→COBOL85、Fortran→Fortran90
--------------------------------------------
#0 ku...@gssm.otsuka.tsukuba.ac.jp
私は「ある型/値」と「そこへの参照」が区別されていて使い分けら
れるような場合に「ポインタがある」というふうに感じます。
#4 sk...@mac.com ;; 最近の comp.lang.scheme で EIAP (Every Thing
Is A Pointer)が話題になっています。Java にポインタがないとい
うのはポインタと整数がごっちゃになってないということでC みた
いにポインタのレンジチェックが出来無いもとと区別してるだけの
こととおもいます。ポインタのない言語でプログラムは組みたくな
いです。
#m ma...@cc.tsukuba.ac.jp
任意の有向グラフの辺を表せる「単一の」データがあれば、それはポイン
タと呼んでいいんじゃないのかな。
#d mor...@qc4.so-net.ne.jp
僕は "Pointer is a iterator. Iterator is a reference." と感じます。
で、以下の P, Q, R を満たすものは「反復子(iterator)」と呼び、P のみ
又は P と Q のみを満たすものは「参照(reference)」と呼びたいです。
P. 「ある値」への参照を表す「参照値」がある。
Q. 参照値に対して評価演算が可能。(e.g. eval)
(演算結果は「ある値」)
R. 参照値に対してイテレーション演算が可能。(e.g. ++, --)
(演算結果は、次または前に対応する参照値)
---
特に、C のポインタは、
「first-class object として実現された iterator」の一種
のように感じます。
プログラミング言語一般の話題で「ポインタ(pointer)」という用語を用いる
と、どうしても C のポインタやそれに類似したものを思わせるので、できれ
ば「反復子(iterator)」と「参照(reference)」という用語で区別したいとい
うのが本音です。
--
これって「各言語での開発経験」の調査にもなってるような…。(^^;
もり <mor...@qc4.so-net.ne.jp>
閑古鳥が鳴いてるっつぅと、ここより fj.sci.infomatics とかの方が凄
まじってぇ気がするのだが……(^^;
> On 5 Sep 2001 02:17:30 GMT,
> "久野" == kuno <ku...@gssm.otsuka.tsukuba.ac.jp> writes:
>
> 久野> ---
> 久野> ポインタあるなし感じ方調査
> 久野> ver. 2001.9.4
--------------------------------------------
#__________ 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
C Y Y Y Y Y
C++ Y ? Y Y Y
Pascal Y Y Y ? Y
COBOL N ? ? ? N
Fortran Y Y Y ? Y
Java N Y N N Y
Perl4 N ? ? ? ?
Perl5 Y ? ? ? Y
Lisp N Y N N Y
ML Y ? N ? Y
Haskell N ? ? ? Y
Prolog N - ? ? Y
Smalltalk - - N - -
--------------------------------------------
注記: COBOL→COBOL85、Fortran→Fortran90
--------------------------------------------
#0 ku...@gssm.otsuka.tsukuba.ac.jp
私は「ある型/値」と「そこへの参照」が区別されていて使い分けら
れるような場合に「ポインタがある」というふうに感じます。
#4 sk...@mac.com ;; 最近の comp.lang.scheme で EIAP (Every Thing
Is A Pointer)が話題になっています。Java にポインタがないとい
うのはポインタと整数がごっちゃになってないということでC みた
いにポインタのレンジチェックが出来無いもとと区別してるだけの
こととおもいます。ポインタのない言語でプログラムは組みたくな
いです。
#m ma...@cc.tsukuba.ac.jp
任意の有向グラフの辺を表せる「単一の」データがあれば、それはポイン
タと呼んでいいんじゃないのかな。
#d mor...@qc4.so-net.ne.jp
僕は "Pointer is a iterator. Iterator is a reference." と感じます。
で、以下の P, Q, R を満たすものは「反復子(iterator)」と呼び、P のみ
又は P と Q のみを満たすものは「参照(reference)」と呼びたいです。
P. 「ある値」への参照を表す「参照値」がある。
Q. 参照値に対して評価演算が可能。(e.g. eval)
(演算結果は「ある値」)
R. 参照値に対してイテレーション演算が可能。(e.g. ++, --)
(演算結果は、次または前に対応する参照値)
#9 tak...@aisoft.co.jp
{\Huge\gt\bf 気分です!}
だって、Pascal のポインタがポインタなら Java にも ML にもポイ
ンタがあるってのが筋の通った話の気がするけれど、そういう気にな
らないんだもん。(^^;;
ちなみに、何故 Pascal はポインタがある気分になるかってぇと、そ
れは Pascal を習ったときに「ポインタがある」と習ったからかも、
って刷り込みか?
ついでに、Smalltalk を追加してみました。言語仕様をよく知らない
のと、経験が浅いのは当然どっちの気分にもならないので?にしまし
た。
---
C 言語的ポインタって観点からだと、著名なところではアセンブラ系の
ものと C の眷属くらいなものの気がするなぁ。
あの、中性的な「ポインタ」という代物に型で修飾して変数を「ほげほ
げポインタ型」に拘束できるけれど、それで差されている実体をほげほ
げ型に拘束しないし、もちろんキャストしたって実体が本当に型変換さ
れたりしないわけで、単にほげほげだと思いこんで扱うってぇ OS を書
くための高級アセンブラ的には便利だけど、巨大アプリケーションを書
くにはげろげろな代物は。
>--
> これって「各言語での開発経験」の調査にもなってるような…。(^^;
> もり <mor...@qc4.so-net.ne.jp>
どんな教育を受けてきたかってのの調査かも。(^^;;
--
成田 隆興 @ エー・アイ・ソフト株式会社 NB 推進部
E-mail tak...@aisoft.co.jp
『十分間で決断し、短い理由を添えよ』
> 少数の言語しか知らないのでほとんど '?' なのですが、
> COBOL に 'Y' を追加しました。
しかし、これは日立の VOS3 COBOL85 にしか通用しない話かも
しれません。ごく一般的にはやはり COBOL は 'N' ですね。
--
********************
Ito Kazumitsu <i...@htk.hitachi-cable.co.jp>
> しかし、これは日立の VOS3 COBOL85 にしか通用しない話かも
> しれません。ごく一般的にはやはり COBOL は 'N' ですね。
しかし、
http://home.swbell.net/mck9/cobol/tech/cobolptr.html
を読むと、各社各様の拡張仕様で COBOL でポインタを
使えるようにしている模様です。
しかし、所詮各社各様の拡張仕様なので、規格としては
やはり COBOL は 'N' と言わざるをえませんね。
------------------------------------------------------------------
ポインタあるなし感じ方調査
ver. 2001.9.4
この調査はあくまで「この言語にはポインタがある」という*文章が*
真だと*感じられる/られない*かどうかについて調査するものです。あ
くまで感じ方ですから、正しい/正しくないにこだわらず気楽に参加し
ませう。方法ですが、適当に自分の#を決めて表に
Y: 真だと感じられる
N: 真だと感じられない
?: わからない
-: 未記入(言語を追加したとき自分以外の既回答者の欄をこれに)
のいずれかを記入しましょう。言語を増やすのも自由です。どの#が誰
であるかについては、末尾にメールアドレスでも何でもいいので記しま
せう。コメントを記入するのも歓迎します。
--------------------------------------------
#______ 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
C Y Y Y Y
C++ Y ? ? Y
Pascal Y Y Y Y
COBOL N ? Y N
Fortran Y Y ? Y
Java N Y ? Y
Perl4 N ? ? ?
Perl5 Y ? ? Y
Lisp N Y ? Y
ML Y ? ? Y
Haskell N ? ? Y
Prolog N - ? Y
--------------------------------------------
注記: COBOL→COBOL85、Fortran→Fortran90
--------------------------------------------
#0 ku...@gssm.otsuka.tsukuba.ac.jp
私は「ある型/値」と「そこへの参照」が区別されていて使い分けら
れるような場合に「ポインタがある」というふうに感じます。
#4 sk...@mac.com ;; 最近の comp.lang.scheme で EIAP (Every Thing
Is A Pointer)が話題になっています。Java にポインタがないとい
うのはポインタと整数がごっちゃになってないということでC みた
いにポインタのレンジチェックが出来無いもとと区別してるだけの
こととおもいます。ポインタのない言語でプログラムは組みたくな
いです。
#i i...@htk.hitachi-cable.co.jp
COBOL85 では
working-storage section.
01 a usage is address.
01 rec1 pic x(100).
01 rec2 pic x(100) addressed by p.
01 l pic s9(9) comp sync.
01 l2 pic s9(9) comp sync.
procedure division.
compute l = function length(rec1).
compute l2 = l * 2.
* 指定した長さのメモリを動的に確保してその領域の
* アドレスを返してくれるサブルーチン MALLOC があるものとする。
call 'MALLOC' using l2 a.
compute p = a.
move rec1 to rec2.
compute p = p + l.
move rec1 to rec2.
といった書き方ができるので、「ポインタがある」と言ってよいと
思います。
#m ma...@cc.tsukuba.ac.jp
任意の有向グラフの辺を表せる「単一の」データがあれば、それはポイン
タと呼んでいいんじゃないのかな。
--
********************
Ito Kazumitsu <i...@htk.hitachi-cable.co.jp>
> を読むと、各社各様の拡張仕様で COBOL でポインタを
> 使えるようにしている模様です。
>
> しかし、所詮各社各様の拡張仕様なので、規格としては
> やはり COBOL は 'N' と言わざるをえませんね。
COBOL2002 ではポインタが規格に入るそうです。
COBOL85規格にはポインタはありません。
http://www.cobolreport.com/columnists/don/08142000.htm
前田敦司
昨日のテロ騒ぎ、怖かったですね。さて、またパラレルワールド
になってたのを統合しました。いとうさん、COBOLについての議論
差し替えたければ書き換えてフォローしてください。
もりさんの、ポインタとはイテレータである、というのは面白い考え
です。が、ちょっとそれも普通じゃないような。なんというか、イテレー
タみたいな抽象化がなされる以前の裸のものがポインタであるような感
じが(私には)してます。
結構続くようですね… 久野
---
------------------------------------------------------------------
ポインタあるなし感じ方調査
ver. 2001.9.4
この調査はあくまで「この言語にはポインタがある」という*文章が*
真だと*感じられる/られない*かどうかについて調査するものです。あ
くまで感じ方ですから、正しい/正しくないにこだわらず気楽に参加し
ませう。方法ですが、適当に自分の#を決めて表に
Y: 真だと感じられる
N: 真だと感じられない
?: わからない
-: 未記入(言語を追加したとき自分以外の既回答者の欄をこれに)
のいずれかを記入しましょう。言語を増やすのも自由です。どの#が誰
であるかについては、末尾にメールアドレスでも何でもいいので記しま
せう。コメントを記入するのも歓迎します。
--------------------------------------------
#________ 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
C Y Y Y Y Y YY
C++ Y ? Y Y ? YY
Pascal Y Y Y ? Y Y?
COBOL N ? ? ? N NN
Fortran Y Y Y ? ? Y?
Java N Y N N ? YN
Perl4 N ? ? ? ? ?N
Perl5 Y ? ? ? ? YN
Lisp N Y N N ? YN
ML Y ? N ? ? Y?
Haskell N ? ? ? ? Y?
Prolog N - ? ? ? YN
Smalltalk N - N - - --
---------------------------------------------
注記: COBOL→COBOL85、Fortran→Fortran90
---------------------------------------------
#0 ku...@gssm.otsuka.tsukuba.ac.jp
私は「ある型/値」と「そこへの参照」が区別されていて使い分けら
れるような場合に「ポインタがある」というふうに感じます。
#4 sk...@mac.com ;; 最近の comp.lang.scheme で EIAP (Every Thing
Is A Pointer)が話題になっています。Java にポインタがないとい
うのはポインタと整数がごっちゃになってないということでC みた
いにポインタのレンジチェックが出来無いもとと区別してるだけの
こととおもいます。ポインタのない言語でプログラムは組みたくな
いです。
{\Huge\gt\bf 気分です!} だって、Pascal のポインタがポインタ
なら Java にも ML にもポインタがあるってのが筋の通った話の気
がするけれど、そういう気にならないんだもん。(^^;; ちなみに、
何故 Pascal はポインタがある気分になるかってぇと、それは
Pascal を習ったときに「ポインタがある」と習ったからかも、って
刷り込みか?ついでに、Smalltalk を追加してみました。言語仕様
をよく知らないのと、経験が浅いのは当然どっちの気分にもならな
いので?にしました。
#d mor...@qc4.so-net.ne.jp
僕は "Pointer is a iterator. Iterator is a reference." と感じます。
で、以下の P, Q, R を満たすものは「反復子(iterator)」と呼び、P のみ
又は P と Q のみを満たすものは「参照(reference)」と呼びたいです。
P. 「ある値」への参照を表す「参照値」がある。
Q. 参照値に対して評価演算が可能。(e.g. eval)
(演算結果は「ある値」)
R. 参照値に対してイテレーション演算が可能。(e.g. ++, --)
(演算結果は、次または前に対応する参照値)
#i i...@htk.hitachi-cable.co.jp
COBOL85 では
working-storage section.
01 a usage is address.
01 rec1 pic x(100).
01 rec2 pic x(100) addressed by p.
01 l pic s9(9) comp sync.
01 l2 pic s9(9) comp sync.
procedure division.
compute l = function length(rec1).
compute l2 = l * 2.
* 指定した長さのメモリを動的に確保してその領域の
* アドレスを返してくれるサブルーチン MALLOC があるものとする。
call 'MALLOC' using l2 a.
compute p = a.
move rec1 to rec2.
compute p = p + l.
move rec1 to rec2.
といった書き方ができるので、「ポインタがある」と言ってよいと
思います。
→(その後一部メーカ拡張およびCOBOL 2002では、ということに変更)
> 結構続くようですね… 久野
今度はこちらからつついてみます:-)
> #0 ku...@gssm.otsuka.tsukuba.ac.jp
> 私は「ある型/値」と「そこへの参照」が区別されていて使い分けら
> れるような場合に「ポインタがある」というふうに感じます。
Javaでは(LispでもPrologでも)「値が等しい(equals)」と「参照が等しい(==)」
は区別されていますが、これは「ポインタがある感じ」じゃないんでしょうか?
前田敦司
<m3bskhj...@maedapc.cc.tsukuba.ac.jp>の記事において
ma...@cc.tsukuba.ac.jpさんは書きました。
> ku...@gssm.otsuka.tsukuba.ac.jp writes:
:
> > #0 ku...@gssm.otsuka.tsukuba.ac.jp
> > 私は「ある型/値」と「そこへの参照」が区別されていて使い分けら
> > れるような場合に「ポインタがある」というふうに感じます。
>
> Javaでは(LispでもPrologでも)「値が等しい(equals)」と「参照が等しい(==)」
> は区別されていますが、これは「ポインタがある感じ」じゃないんでしょうか?
「感じ」でやってきてたので、あえて踏み込みはしていなかったのですが、
・参照値から参照値への関数がある
・参照値の演算がある
等により、何らかの「参照値自体の操作」があるとポインタっぽい感じ
がしては来ます。
逆にそれがないなら単なる参照で終わっちゃいそうなんだけど、Pascal
がなぁ……(^^;
C っぽいってんだと、何にでも参照値がとれるならそれっぽいけれど、
これは LISP とか Smalltalk とかがなぁ……(^^; この点では Pascal
のはそれっぽくない。
う~む、自分としては Pascal は孤立特異点なのかも。(^^;
> Javaでは(LispでもPrologでも)「値が等しい(equals)」と「参照が等しい(==)」
> は区別されていますが、これは「ポインタがある感じ」じゃないんでしょうか?
「参照が等しい」ではなく「同一オブジェクトである」です :-P 久野
tak...@aisoft.co.jpさん:
> 逆にそれがないなら単なる参照で終わっちゃいそうなんだけど、Pascal
> がなぁ……(^^;
Pascalにはderefがあるじゃないですか。x^の「^」ね。
JavaにもLispにもSmalltalkにもそんなものはない。 久野
> COBOLについての議論
> 差し替えたければ書き換えてフォローしてください。
COBOL についてのコメントを書き直し、言語として PL/I を
追加しました。
------------------------------------------------------------------
ポインタあるなし感じ方調査
ver. 2001.9.4
この調査はあくまで「この言語にはポインタがある」という*文章が*
真だと*感じられる/られない*かどうかについて調査するものです。あ
くまで感じ方ですから、正しい/正しくないにこだわらず気楽に参加し
ませう。方法ですが、適当に自分の#を決めて表に
Y: 真だと感じられる
N: 真だと感じられない
?: わからない
-: 未記入(言語を追加したとき自分以外の既回答者の欄をこれに)
のいずれかを記入しましょう。言語を増やすのも自由です。どの#が誰
であるかについては、末尾にメールアドレスでも何でもいいので記しま
せう。コメントを記入するのも歓迎します。
--------------------------------------------
#________ 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
C Y Y Y Y Y YY
C++ Y ? Y Y ? YY
Pascal Y Y Y ? Y Y?
COBOL N ? ? ? N NN
Fortran Y Y Y ? ? Y?
PL/I - - - - Y --
#i i...@htk.hitachi-cable.co.jp
COBOL85 の規格ではポインタはないが、いくつかの製品では
各社各様の拡張仕様により、ポインタが使えるようになっている。
COBOL 2002では規格に入るらしい。
なお、COBOL85 の規格にも POINTER という予約語は存在し、
ある種の文字列操作において文字位置を指し示すのに使われるが、
「ポインタあるなし感じ方調査」でいうポインタとは感じが
違いすぎるので無視。
PL/I はよく知らないが、ポインタがあるのは確からしい。
#m ma...@cc.tsukuba.ac.jp
任意の有向グラフの辺を表せる「単一の」データがあれば、それは
ポインタと呼んでいいんじゃないのかな。
#n mu...@stg.co.jp
語感的には、pointerは演算できるけど、reference は演算できない
ものだ!!…という風に呼びたい感じです。
--
********************
Ito Kazumitsu <i...@htk.hitachi-cable.co.jp>
i...@htk.hitachi-cable.co.jpさん:
> COBOL についてのコメントを書き直し、言語として PL/I を追加しま
> した。
どうもどうも。PL/Iはモロにありますよ。しかも「POINTER」という
型が1つだけある! 何型へのポインタか指定しない! だから整数型のア
ドレスとって実数型のポインタとして使うとかやり放題!
とまれ、自分の項目に書き足しておきます 久野
------------------------------------------------------------------
ポインタあるなし感じ方調査
ver. 2001.9.4
この調査はあくまで「この言語にはポインタがある」という*文章が*
真だと*感じられる/られない*かどうかについて調査するものです。あ
くまで感じ方ですから、正しい/正しくないにこだわらず気楽に参加し
ませう。方法ですが、適当に自分の#を決めて表に
Y: 真だと感じられる
N: 真だと感じられない
?: わからない
-: 未記入(言語を追加したとき自分以外の既回答者の欄をこれに)
のいずれかを記入しましょう。言語を増やすのも自由です。どの#が誰
であるかについては、末尾にメールアドレスでも何でもいいので記しま
せう。コメントを記入するのも歓迎します。
--------------------------------------------
#________ 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
C Y Y Y Y Y YY
C++ Y ? Y Y ? YY
Pascal Y Y Y ? Y Y?
COBOL N ? ? ? N NN
Fortran Y Y Y ? ? Y?
PL/I Y - - - Y --
> どうもどうも。PL/Iはモロにありますよ。しかも「POINTER」という
> 型が1つだけある! 何型へのポインタか指定しない! だから整数型のア
> ドレスとって実数型のポインタとして使うとかやり放題!
PL/I を追加したところで、Ada というのを思い出しました。
Ada については、全く知らないのですが、いかにもポインタが
ありそうなので、JIS ハンドブックを眺めてみたところ、
Ada にもポインタがあると確信しました。
------------------------------------------------------------------
ポインタあるなし感じ方調査
ver. 2001.9.4
この調査はあくまで「この言語にはポインタがある」という*文章が*
真だと*感じられる/られない*かどうかについて調査するものです。あ
くまで感じ方ですから、正しい/正しくないにこだわらず気楽に参加し
ませう。方法ですが、適当に自分の#を決めて表に
Y: 真だと感じられる
N: 真だと感じられない
?: わからない
-: 未記入(言語を追加したとき自分以外の既回答者の欄をこれに)
のいずれかを記入しましょう。言語を増やすのも自由です。どの#が誰
であるかについては、末尾にメールアドレスでも何でもいいので記しま
せう。コメントを記入するのも歓迎します。
--------------------------------------------
#________ 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
C Y Y Y Y Y YY
C++ Y ? Y Y ? YY
Pascal Y Y Y ? Y Y?
COBOL N ? ? ? N NN
Fortran Y Y Y ? ? Y?
PL/I Y - - - Y --
Ada - - - - Y --
任意の有向グラフの辺を表せる「単一の」データがあれば、それは
ポインタと呼んでいいんじゃないのかな。
#n mu...@stg.co.jp
語感的には、pointerは演算できるけど、reference は演算できない
ものだ!!…という風に呼びたい感じです。
--
********************
Ito Kazumitsu <i...@htk.hitachi-cable.co.jp>
自分はmor...@qc4.so-net.ne.jpさんやmu...@stg.co.jpさん
と同じように「参照ができ、かつ演算ができるものがポインタ」と感じます。
#イテレータとは呼びたくないのがmori-dさんと違うけど
fj.comp.lang.misc の <9ns6c8$2s...@utogw.gssm.otsuka.tsukuba.ac.jp> の
記事において 2001年09月14日(金) 05時59分36秒頃、
ku...@gssm.otsuka.tsukuba.ac.jpさんは書きました。
>i...@htk.hitachi-cable.co.jpさん:
>> COBOL についてのコメントを書き直し、言語として PL/I を追加しま
>> した。
>
> どうもどうも。PL/Iはモロにありますよ。しかも「POINTER」という
>型が1つだけある! 何型へのポインタか指定しない! だから整数型のア
>ドレスとって実数型のポインタとして使うとかやり放題!
んで、演算はできるんでしょうか?
ところで、ある一定数の人が「ポインタがある」と感じる一番古い
(アセンブラを除く)言語ってなんでしょうか?
#FORTRAN60でもポインタがある言語と思う人は、結構いたりして。
---
稲葉 浩人 in...@st.rim.or.jp
> PL/I を追加したところで、Ada というのを思い出しました。
> Ada については、全く知らないのですが、いかにもポインタが
> ありそうなので、JIS ハンドブックを眺めてみたところ、
> Ada にもポインタがあると確信しました。
あのー、言語の調査じゃなくて感じ方の調査だと思うんで、感じ方が人によっ
て変わらないような言語は、あんまり足さないことにしません?
前田敦司
> ところで、ある一定数の人が「ポインタがある」と感じる一番古い
> (アセンブラを除く)言語ってなんでしょうか?
Lispでは(1959か1960年)。
前田敦司
> > Javaでは(LispでもPrologでも)「値が等しい(equals)」と「参照が等しい(==)」
> > は区別されていますが、これは「ポインタがある感じ」じゃないんでしょうか?
>
> 「参照が等しい」ではなく「同一オブジェクトである」です :-P 久野
えーと、じゃあ、
(1) Javaのnullもオブジェクトなんでしょうか?
(2) Cのポインタ同士の == は「参照が等しい」んでしょうか、「同一オブジェ
クトである」んでしょうか?
(以下余談)
Javaで、==を使わずに二つのStringBufferオブジェクトが同一かどうかを調べ
るプログラムを書きなさい。(10点)
前田敦司
> Javaで、==を使わずに二つのStringBufferオブジェクトが同一かどうかを調べ
> るプログラムを書きなさい。(10点)
あ、もちろん != も使わずに。(fj.comp.lang.javaネタかな? でも他の言語で
もだいたいおんなじ。)
前田敦司
ma...@cc.tsukuba.ac.jpさん:
> (1) Javaのnullもオブジェクトなんでしょうか?
モデル的には「他のすべてのオブジェクトと区別可能でなおかつ操作
は禁止されている(というかNullPointerException例外が投げられる)オ
ブジェクト」だと考えるとか。:-)
> (2) Cのポインタ同士の == は「参照が等しい」んでしょうか、「同
> 一オブジェクトである」んでしょうか?
Cはオブジェクト指向言語ではない。:-) :-)
> (以下余談)
> Javaで、==を使わずに二つのStringBufferオブジェクトが同一かどう
> かを調べるプログラムを書きなさい。(10点)
操作(文字の書き換え等)を行ってみて副作用が及んでいるかを見るの?
しかしそのコードに「問題を出した」側が別スレッドで「別オブジェク
トにも関わらず同じ効果が及ぶ」ように細工してるかもよ? 確率的にそ
の細工が成功する確率が0でない場合どうするの?
さあ正解をお願いします先生 :-) 久野
ma...@cc.tsukuba.ac.jpさん:
> あのー、言語の調査じゃなくて感じ方の調査だと思うんで、感じ方が
> 人によって変わらないような言語は、あんまり足さないことにしませ
> ん?
た、確かに…じゃあ「異論がない(記入した人がすべてYまたはNで揃っ
ている」場合は時々整理することにしましょう。
次の機会に。 久野
> > (以下余談)
> > Javaで、==を使わずに二つのStringBufferオブジェクトが同一かどう
> > かを調べるプログラムを書きなさい。(10点)
>
> 操作(文字の書き換え等)を行ってみて副作用が及んでいるかを見るの?
> しかしそのコードに「問題を出した」側が別スレッドで「別オブジェク
> トにも関わらず同じ効果が及ぶ」ように細工してるかもよ? 確率的にそ
> の細工が成功する確率が0でない場合どうするの?
そりゃロックしないとマズイでしょう。
static Object global_lock = "ignore me";
static boolean eq(StringBuffer a, StringBuffer b) {
synchronized (global_lock) {
synchronized (a) {
synchronized (b) {
int len1 = a.length();
boolean value;
if (len1 != b.length()) {
return false;
}
a.append('x');
value = (b.length() == len1 + 1);
a.deleteCharAt(len1);
return value;
}
}
}
}
まあ、実際はこんなロックをあちこちで無節操にやったらデッドロックが起き
るでしょうけど。
前田敦司
ma...@cc.tsukuba.ac.jpさん:
> そりゃロックしないとマズイでしょう。
うんうん。
> まあ、実際はこんなロックをあちこちで無節操にやったらデッドロッ
> クが起きるでしょうけど。
あちこちでじゃなく、2人の人に別々に書かせたものを同時に(引数の
順序を入れ換えたりして)呼んだりして。
まあそれは意地悪すぎとしても、ここでJavaが「ロックは何重に掛け
てもよい」としてるのが効いてますよね。
なかなか面白かったです :-) 久野
fj.comp.lang.misc の <m3wv31h...@maedapc.cc.tsukuba.ac.jp> の
記事において 2001年09月15日(土) 02時13分35秒頃、
MAEDA Atusi (前田敦司)さんは書きました。
うーん、Lispは個人的にポインタのあるなしの眼中になかったのですが、
確かに。
---
稲葉 浩人 in...@st.rim.or.jp
すると、 C などは整理されるものの筆頭になってしまい、それも
また変でないでしょうか。感じ方に異論がないものの存在によって
異論があるものの存在がきわだつのですから、整理のしすぎも
よろしくないと思います。
ポインタの有無が誰が見ても明らかであっても、著名な言語は
記載されていてよいと思います。
--
*******************************************************************
Ito Kazumitsu Hitachi, Ibaraki, JAPAN
> > > あのー、言語の調査じゃなくて感じ方の調査だと思うんで、感じ方が
> > > 人によって変わらないような言語は、あんまり足さないことにしませ
> > > ん?
> すると、 C などは整理されるものの筆頭になってしまい、それも
> また変でないでしょうか。感じ方に異論がないものの存在によって
> 異論があるものの存在がきわだつのですから、整理のしすぎも
> よろしくないと思います。
いや、最初にあったものから減らす必要はないと思うんですよ。また、人によっ
て感じ方が違いそうなものは足せば良いと思いますけど、あんまり増やしてい
くと答えるのが大変になってしまいますし。
> ポインタの有無が誰が見ても明らかであっても、著名な言語は
> 記載されていてよいと思います。
うーん。それはまた別のリストにしたらどうでしょう?
(「著名な言語」の定義も問題になるし...日本で使ってる人の数とか言語の文
法や機能をちゃんと知ってる人の数でいえば、Adaなんてすごくマイナーですよね。)
前田敦司
> まあそれは意地悪すぎとしても、ここでJavaが「ロックは何重に掛け
> てもよい」としてるのが効いてますよね。
>
> なかなか面白かったです :-) 久野
データオブジェクトの同一性って、副作用があるとき以外は無意味ですよね。
だからHaskellにはそういう概念がないし、ISO-Prologにもない。でも、Lisp
のeq関数は同一性を試す関数だと言って良いと思う。Cのポインタの==は、と
いうと微妙だけど。
前田敦司
> データオブジェクトの同一性って、副作用があるとき以外は無意味ですよね。
> だからHaskellにはそういう概念がないし、ISO-Prologにもない。でも、Lisp
> のeq関数は同一性を試す関数だと言って良いと思う。Cのポインタの==は、と
> いうと微妙だけど。
御意、と言おうとしたのだがふと「副作用のないオブジェクト指向言
語はあるか?」という疑問が思い浮かびました。河野さんあたりはオブ
ジェクトの同一性がないオブジェクト指向言語は許容しないだろうけど。
どうでしょうね? 久野
> 御意、と言おうとしたのだがふと「副作用のないオブジェクト指向言
> 語はあるか?」という疑問が思い浮かびました。河野さんあたりはオブ
> ジェクトの同一性がないオブジェクト指向言語は許容しないだろうけど。
良く知りませんが、型付きλ計算にオブジェクトを加えたObject Calculusだ
と、オブジェクトに例えば set_x(3)なんていうメッセージを送ると、xフィー
ルドの値が3になった新しいオブジェクトが返ってきます。こういうのは副作
用とは言わないでしょうね。object identityの概念も無いでしょう。
私が読んだのは、
Pietro Di Gianantonio, Furio Honsell, and Lugi Liquori: A Lambda
Calculus of Objects with Self-Inflicted Extension, Proc. OOPSLA '98,
pp.166-178
くらい。
π計算を元にしたモデルなんかだと、また違うのかも知れません。
前田敦司