tagCANDY CGI 仮想言語
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
仮想言語
このスレッドはロックされています。記事の閲覧のみとなります。
元に戻る スレッド一覧へ 記事閲覧
このページ内の検索ができます。(AND 検索や OR 検索のような複数のキーワードによる検索はできません。)

仮想言語 [No.24の個別表示]
日時: 2007/06/21 19:01
名前: ダンボ

Dim P1 As Pointer → MonthVal As Integer
Dim P2 As Pointer → P1
Dim P3 As Pointer → SourceVal As Integer = 12

  P1→? ← 1
  P1→? ← P3→?
  P2→→? ← P3→?

メンテ

Page: 1 |

Re: 日本語で読み下すとき  (No.1) [スレッド一覧へ]
日時: 2007/06/22 10:02
名前: ダンボ

Dim P1 As Pointer → MonthVal As Integer
' P1はポインターでありInteger型のMonthValを指す
Dim P2 As Pointer → P1
' P2はポインターであり(Pointer型の)P1を指す
Dim P3 As Pointer → SourceVal As Integer = 12
' P3はポインターでありInteger型のSourceValを指す。SourceValの初期値は12

  P1→? ← 1
  ' P1が指すところの何だかに、数値1を格納する
  P1→? ← P3→?
  ' P1が指すところの何だかに、P3が指すところの何だかに格納されている値を格納する
  P2→→? ← P3→?
  ' P2が指すポインターの指すところの何だかに、P3が指すところの何だかに格納されている値を格納する
メンテ
Re: 仮想言語  (No.2) [スレッド一覧へ]
日時: 2007/06/22 18:17
名前: 魔界の仮面弁士

> Dim P3 As Pointer → SourceVal As Integer = 12

ポインタへの代入は ← で、値への代入は = という言語仕様でしょうか?

だとしたら、SourceVal の直接操作については、
 SourceVal = 12
と記述する仕様でしょうか?

それとも = を使うのは Dim 宣言時だけで、直接代入は
 SourceVal ← 12
でしょうか?

あるいは、SourceVal を直接操作することはできないのでしょうか?
メンテ
Re: 仮想言語  (No.3) [スレッド一覧へ]
日時: 2007/06/22 18:34
名前: ダンボ

>ポインタへの代入は ← で、値への代入は = という言語仕様でしょうか?

思いつきで書いたので不統一でしたね。(ヒトノコトハイエナイヤ)

Dim P3 As Pointer → SourceVal As Integer ← 12
とでもすべきでした。あるいは、

Dim P3 As Pointer → SourceVal As Integer Initial 12
とか。

「代入演算子は←に統一する」というのだが、初期値設定を代入と捕らえるかどうか。
メンテ
Re: 仮想言語  (No.4) [スレッド一覧へ]
日時: 2007/06/22 21:02
名前: 魔界の仮面弁士

>>4
> ← って全角文字ですよね(キーボードから直接入力できないし)
まぁ、世の中には全角主体の言語もありますしね。「ひまわり」とか「なでしこ」とか。


>>3
> 初期値設定を代入と捕らえるかどうか。
冗長的だけど、私は Initial 12 の方が好きだなぁ。= だとやっぱり「比較」のイメージが。
それに ← だと、→ と ← のどちらが先に評価されるのか、ちょっと分かりにくい気が。


で、ちょっと気になった点が。

=== (1) ポインタの参照先について ===

変数宣言時の
 Dim P1 As Pointer → Val1 As Integer
というのは、
 Dim P1 As Pointer
 Dim Val1 As Integer
 P1 → Val1
のように書く事もできるのかな?
それとも、ポインタの参照先は、Dim 時にしか割り当てられない?



=== (2) 値型について ===
仮想サンプルを見る限り、
 Dim P As Pointer(Of Integer ← 12)
などではなく、
 Dim P As Pointer → SourceVal As Integer ← 12
のように、参照先に「名前」をつけているようですが、ということは、
そのポインタを介さずに、その名前を使って扱うこともできる、ということですよね。

だとすれば、下記のような使い方もできるのかな。
-----------
Dim P As Pointer → IntVal As Integer ← 12
'IntVal に 12 を初期値として代入し、P には、その SourceVal を参照させる。

IntVal ← 100
'IntVal 変数に、100 という値を代入

Dim ResultVal As Integer
ResultVal ← P1→?
'ResultVal に、P1 が指している何かの値を代入
メンテ
Re: 仮想言語  (No.5) [スレッド一覧へ]
日時: 2007/06/22 20:46
名前: 魔界の仮面弁士

>>4
>>>4
>> ← って全角文字ですよね(キーボードから直接入力できないし)

あう。ひとつ削除されてる……。
メンテ
Re: 仮想言語  (No.6) [スレッド一覧へ]
日時: 2007/06/25 12:34
名前: ダンボ

> === (1) ポインタの参照先について ===
>  Dim P1 As Pointer
>  Dim Val1 As Integer
>  P1 → Val1
> のように書く事もできるのかな?

ここは「参照修飾子(前置)」というのを導入して、
 Dim P1 As Pointer
 Dim Val1 As Integer
 P1 ← @Val1


> === (2) 値型について ===
> そのポインタを介さずに、その名前を使って扱うこともできる、ということですよね。
> だとすれば、下記のような使い方もできるのかな。
> Dim P As Pointer → IntVal As Integer ← 12 'IntValに12を初期値として代入し、P には、そのSourceValを参照させる。
>   IntVal ← 100              'IntVal変数に、100 という値を代入
> Dim ResultVal As Integer
>   ResultVal ← P1→?            'ResultVal に、P1 が指している何かの値を代入

そういうことです。


で、ちょっと書き直して、

Dim P1 As Pointer Points MonthVal As Integer
Dim P2 As Pointer Points P1
Dim P3 As Pointer Points SourceVal As Integer Initial 12
Dim I1 As Integer Initial 1

  P1→ ? ← I1    ' P1が指すところの何だかに、I1の値を格納する
  P1→ ? ← P3→ ?  ' P1が指すところの何だかに、P3が指すところの何だかに格納されている値を格納する
  P2→→ ? ← P3→ ? ' P2が指すポインターの指すところの何だかに、P3が指すところの何だかに格納されている値を格納する
  P3 ← @Il      ' P3にはI1の参照を格納する
  P1→ ? ← P3→ ?  ' 結果は、MonthValに1を格納する(MonthVal ← I1)と等価

ところが、←を代入演算子とするのは良いとしても、→が「参照演算子」というのは変。
(「参照演算子」の定義ができない)「参照修飾子」が妥当に思えるが「前置」「後置」なのか?
どちらとしても変な感じがする、「中置修飾子」が一番しっくりする気がする。
すると、
  P1→? ← I1
  P1→? ← P3→?
  P2→→? ← P3→?
  P3 ← @Il
  P1→? ← P3→?
と書くかと思ったが、見づらいので→をあきらめてみた。
  P1.? ← I1
  P1.? ← P3.?
  P2..? ← P3.?
  P3 ← @Il
  P1.? ← P3.?
とすると、いいかな?
(でもこれで何か革新性があったと言えるだろうか?悪くは無いとは思うが)
メンテ
Re: 仮想言語  (No.7) [スレッド一覧へ]
日時: 2007/06/25 13:48
名前: 魔界の仮面弁士

>>6
> ここは「参照修飾子(前置)」というのを導入して、
> P1 ← @Val1

参照先の変更が許されるとしたら、
>>1
> P2→→? ← P3→?
の場合、「P2 のダブルポインタが指している物」と「P3 のポインタが指している物」が
互換性のある型かどうかを、コンパイル時に保証できないので、ちょっと危険ですね。

あとは、
 P1 ← @P2
 P2 ← @P1
のような、Pointer 型同士の「循環参照」を許可するのかどうか、も気になるところ。


>  P2..? ← P3.?
「『P2 が指している場所』が指している場所」に、「P3 が指している場所」をセットする、かな?
# イメージ的には、「P2.?.? ← P3.? の省略表記」かな。

>(でもこれで何か革新性があったと言えるだろうか?悪くは無いとは思うが)
これって、「参照型」ではなく、「ポインタ型」の考え方ですよね。

構文レベルでは、読みやすくなったのかも知れませんけど、今の仕様だと、
どの Pointer が何を参照しているのかを、コンパイラレベルで保証させられないので、
開発者の負担が増えるし、高級言語としての安全面には難があるかも…。
メンテ
Re: 仮想言語  (No.8) [スレッド一覧へ]
日時: 2007/06/25 21:15
名前: ダンボ

> P2→→? ← P3→?
> の場合、「P2 のダブルポインタが指している物」と「P3 のポインタが指している物」が
> 互換性のある型かどうかを、コンパイル時に保証できないので、ちょっと危険ですね。

型を保証させるなら、
P2..(Integer) ← P3.(Integer)
P2..(Pinter) ← P3.(Pinter)
かなぁ。ポインタを許したとたんにデータ・アクセスは自己責任かとも思うが、実験言語なら
いざしらず実用言語なら、なにか歯止めは必要かもしれません。


> P2..? ← P3.?
> イメージ的には、「P2.?.? ← P3.? の省略表記」かな。

その通りです。これは誤解無く受け入れられるのでは。CAAADR、CDDDRの伝で。


> これって、「参照型」ではなく、「ポインタ型」の考え方ですよね。

説明はポインタなのですが、オブジェクト指向の「参照」に持っていけないかなぁと。


> 開発者の負担が増えるし、高級言語としての安全面には難があるかも…。

茶飲み話ならぬ酒飲み話ですから。。。(ソレヲイッタラオワリナンダガ)
メンテ
Re: 仮想言語  (No.9) [スレッド一覧へ]
日時: 2007/06/25 21:51
名前: 魔界の仮面弁士

>>8
>実験言語ならいざしらず実用言語なら、なにか歯止めは必要かもしれません。
言語仕様で歯止めが利かないなら、ランタイム側に組み込む方法を考える、ということで。

.NET CLR の場合、マネージ ポインタ(VBでいうところのByRef)は、型を保証していますが、
アンマネージ ポインタは CLR 非準拠として、無保証としていますね。

> これは誤解無く受け入れられるのでは。
無問題です。

> 説明はポインタなのですが、オブジェクト指向の「参照」に持っていけないかなぁと。
ポインタが指し示す相手が「オブジェクト」であることと、ガベージコレクトの仕組み、
そして(少なくとも実行時時点での)型を保証する仕組みがあればよいかな?

> 茶飲み話ならぬ酒飲み話ですから。。。(ソレヲイッタラオワリナンダガ)
オサケ ヲ ノメナイ ノ テ゛スカ゛,ナニカ?(ナミタ゛)

# んんんんん、 お茶がうまい。(Mr.Skeleton-T 風に)
メンテ
Re: 仮想言語  (No.10) [スレッド一覧へ]
日時: 2007/06/26 13:26
名前: ダンボ

スレッドが折角Closeした(落ちがついたとも言ふ)のに育ててすみません。

何気なく久しぶりにPrologの解説書を開いてみた。
 hanoi(1,X,Y,Z) :- move(1,X,Y).
 hanoi(N,X,Y,Z) :- M is N-1, hanoi(M,X,Z,Y), move(N,X,Y), hanoi(M,Z,Y,X).
 move(N,X,Y) :- nl, write([disc , N, from , X, to , Y]).
ですって。

・(代入)演算子は is なんだ。いや、変数宣言なのかな?
・定義されていない単語は文字定数(リテラル)なんだ。(すごい)

#この投稿で何を言おうとも意図していません。ただふ〜んと思っただけ。
メンテ

Page: 1 |