VCS 利用時のトラブルシューティング
GPS の VCS 利用時のトラブルシューティング
※とりあえず,解決できたものだけ掲載します.
エラー1: "○○ is not working copy."
エラー1-1: 作業ディレクトリが C ドライブ以外に存在している場合.
原因: GPS のバージョン管理は基本的に,作業コピーが C ドライブ以下にある場合のみを想定して作られていると思われる.
対策1: C ドライブ以下に作業コピーを作成する.
もっとも簡単な方法.単純に,C ドライブの好きな場所に作業コピーを作成する.
対策2: 別ドライブにある作業コピーにシンボリックリンクを張る.
SSD の導入などで,システムディスクを C ドライブ,データディスクを D ドライブというように分けたい場合に有効.詳細は,Google 先生に!!
エラー1-2: 一時ディレクトリ(C:\Users\username\AppData\Local\Temp)が C ドライブ以外に存在する場合.
原因: エラー1-2と似た状況である.GPS のバージョン管理は基本的に,C ドライブ以下にある一時ディレクトリを参照していると思われる.しかし,D ドライブなどに一時ディレクトリを移動している場合,参照先がないため,.
対策1: C ドライブ以下に一時ディレクトリを戻す.
もっとも簡単な方法.単純に,C ドライブの元の場所に一時ディレクトリを戻せばいい.
対策2: 別ドライブにある一時ディレクトリにシンボリックリンクを張る.
SSD の導入などで,別ドライブにTEMPディレクトリを置きたい場合に有効.上記と同様.詳細は Google 先生に!!当然,パス(環境変数)が変更されていることが前提.
エラー1-3: インストールされている Subversion のバージョンが,".svn"のバージョンより下である場合.
原因: バージョン互換の問題.具体的には,Subversion 自体のバージョンが,それよりもバージョンが新しい TortoiseSVN で生成された作業コピーより古いことなどが原因.
例)SilkSVN(v1.6),TortoiseSVN(v1.7)をインストールしているPC環境で,TortoiseSVN によりチェックアウトした作業コピーを扱う場合,SilkSVNのバージョンが TortoiseSVN の1.7より下回る場合エラーが生じる.
対策: TortoiseSVN のバージョン以上の Subversion にアップグレードする.
※とりあえず,解決できたものだけ掲載します.
エラー1: "○○ is not working copy."
- 作業コピーが C ドライブ以外に存在している場合.
- 一時ディレクトリ(C:\Users\username\AppData\Local\Temp)が C ドライブ以外に存在する場合.
- インストールされている Subversion のバージョンが,".svn"のバージョンより下である場合.
エラー1-1: 作業ディレクトリが C ドライブ以外に存在している場合.
原因: GPS のバージョン管理は基本的に,作業コピーが C ドライブ以下にある場合のみを想定して作られていると思われる.
対策1: C ドライブ以下に作業コピーを作成する.
もっとも簡単な方法.単純に,C ドライブの好きな場所に作業コピーを作成する.
対策2: 別ドライブにある作業コピーにシンボリックリンクを張る.
SSD の導入などで,システムディスクを C ドライブ,データディスクを D ドライブというように分けたい場合に有効.詳細は,Google 先生に!!
エラー1-2: 一時ディレクトリ(C:\Users\username\AppData\Local\Temp)が C ドライブ以外に存在する場合.
原因: エラー1-2と似た状況である.GPS のバージョン管理は基本的に,C ドライブ以下にある一時ディレクトリを参照していると思われる.しかし,D ドライブなどに一時ディレクトリを移動している場合,参照先がないため,.
対策1: C ドライブ以下に一時ディレクトリを戻す.
もっとも簡単な方法.単純に,C ドライブの元の場所に一時ディレクトリを戻せばいい.
対策2: 別ドライブにある一時ディレクトリにシンボリックリンクを張る.
SSD の導入などで,別ドライブにTEMPディレクトリを置きたい場合に有効.上記と同様.詳細は Google 先生に!!当然,パス(環境変数)が変更されていることが前提.
エラー1-3: インストールされている Subversion のバージョンが,".svn"のバージョンより下である場合.
原因: バージョン互換の問題.具体的には,Subversion 自体のバージョンが,それよりもバージョンが新しい TortoiseSVN で生成された作業コピーより古いことなどが原因.
例)SilkSVN(v1.6),TortoiseSVN(v1.7)をインストールしているPC環境で,TortoiseSVN によりチェックアウトした作業コピーを扱う場合,SilkSVNのバージョンが TortoiseSVN の1.7より下回る場合エラーが生じる.
対策: TortoiseSVN のバージョン以上の Subversion にアップグレードする.
整数(integer) 型
| 型名 | Integer | |
| 分類 | 単純型 ― スカラー型 ― 離散型 ― 整数型 ― 一般整数型 | |
| 意味 | 正数型 | |
| 値の範囲 | -2^15+1 .. +2^15-1 (-32767 .. +32767) ※1 | |
| 宣言 | 暗示的宣言 | type int_group2 is 1 .. 2000; ※2 |
| 定義 | 一般形 | int1 : Integer; |
| 代入 | int2 : Integer := 10; | |
| 範囲指定 | int3 : Integer range 0 .. 100 ; | |
| 代入+範囲指定 | int4 : Integer range -10 .. 10 := 0; | |
| 派生型※3 | 自然数 | subtype Natural is Integer range 0 .. Integer'Last; |
| 正数 | subtype Positive is Integer range 1 .. Integer'Last: | |
※2: "1 .. 2000"と定義することで暗示的に Integer 型であると,宣言されている.
※3: 派生型とは,Integer 型を元に予め定義されている型のことである.
例1: Integerの派生)
subtype Small_Int is Integer range -10 .. 10; -- Integer 型の縮小版.
subtype Buffer_Size is Integer range 0 .. Max; -- バッファ.
例2: Integer型を使った本の例)
type Page_Num is range 1 .. 2_000; -- ページ数が1から2000ページである.
type Line_Size is range 1 .. Max_Line_Size; -- 行数は1から最大行数である.
subtype Column_Ptr is Line_Size range 1 .. 10; -- コラムは複数行からなっており,1から10個以内である.
型の定義
今回は,基本となる型の定義の仕方をご紹介します.
内容は簡単ですし,既に何度も使っているので今更ですので分かっている方は飛ばしていただいても結構です.
<目次>
・定義できる場所
・定義の仕方
<<<定義できる場所>>>
Ada のプログラミングにおける構成物(プロシージャ,パッケージ,タスクなど)は,宣言部(declaration part)と機能部(body part)から出来ています.
何らかの実体(変数?)を定義するのは,必ずその構成物の宣言部でなければなりません.
・代表的な宣言部
例1: プロシージャ内)
--EX1.adb
with Ada.Text_IO;
use Ada.Text_IO;
procedure EX1 is
--------
--ここ--
--------
begin
null;
end EX1;
例2: パッケージ内)
--EX2.ads
package EX2.ads is
--------
--ここ--
--------
…
end EX2;
例3: タスク内)
--EX3.adb
procedure EX3 is
task Ta is
--------
--ここ--
--------
end Ta;
task body Ta is
...
end Ta;
begin
--EX3の本文
end EX3;
<<<定義の仕方>>>
定義の仕方は,実体(変数)がどの型を使用するのかで決まります.
細かいやり方に関しては,今後取り扱うものとします.
例: 一般的な定義)
X : Integer; --X は整数型
Y : Float := 100.0; --Y は100.0を初期値とする浮動小数型
C : String(1..100); --C は100文字まで代入できる文字列型
以上です.
内容は簡単ですし,既に何度も使っているので今更ですので分かっている方は飛ばしていただいても結構です.
<目次>
・定義できる場所
・定義の仕方
<<<定義できる場所>>>
Ada のプログラミングにおける構成物(プロシージャ,パッケージ,タスクなど)は,宣言部(declaration part)と機能部(body part)から出来ています.
何らかの実体(変数?)を定義するのは,必ずその構成物の宣言部でなければなりません.
・代表的な宣言部
例1: プロシージャ内)
--EX1.adb
with Ada.Text_IO;
use Ada.Text_IO;
procedure EX1 is
--------
--ここ--
--------
begin
null;
end EX1;
例2: パッケージ内)
--EX2.ads
package EX2.ads is
--------
--ここ--
--------
…
end EX2;
例3: タスク内)
--EX3.adb
procedure EX3 is
task Ta is
--------
--ここ--
--------
end Ta;
task body Ta is
...
end Ta;
begin
--EX3の本文
end EX3;
<<<定義の仕方>>>
定義の仕方は,実体(変数)がどの型を使用するのかで決まります.
細かいやり方に関しては,今後取り扱うものとします.
例: 一般的な定義)
X : Integer; --X は整数型
Y : Float := 100.0; --Y は100.0を初期値とする浮動小数型
C : String(1..100); --C は100文字まで代入できる文字列型
以上です.
定義と宣言
宣言と定義についていまいちよくわかっていなかったので書くことにしました.
Adaにおける"宣言"と"定義"の用語定義は以下の様になっていますが,だいたい C 言語での"宣言"と"定義"の意味と同じであると考えていいと思います.
・宣言 (Declarations)
あるデータ型がどんなものであるのかを表現することです.
⇒(データ)型の準備.
例)
type New_Int is Integer range -100..100;
--上では New_Int が-100から100までの整数(Integer)であることを宣言している.
・定義 (Definitions)
変数がどのような型として扱われるべきであるかを表現すること.
⇒変数の準備.
例)
Int1 : New_Int := 50;
--上では変数 Int1 が New_Int 型であり,50という整数値が初期値として与えられていることを定義している.
今回は短いですがこんな感じです.
Adaにおける"宣言"と"定義"の用語定義は以下の様になっていますが,だいたい C 言語での"宣言"と"定義"の意味と同じであると考えていいと思います.
・宣言 (Declarations)
あるデータ型がどんなものであるのかを表現することです.
⇒(データ)型の準備.
例)
type New_Int is Integer range -100..100;
--上では New_Int が-100から100までの整数(Integer)であることを宣言している.
・定義 (Definitions)
変数がどのような型として扱われるべきであるかを表現すること.
⇒変数の準備.
例)
Int1 : New_Int := 50;
--上では変数 Int1 が New_Int 型であり,50という整数値が初期値として与えられていることを定義している.
今回は短いですがこんな感じです.
type(データ型)の分類
各型の情報について知りたい場合は,画像の型名をクリックしてください.

今回は,Ada のデータ型の分類に関して,その概要を説明していきます.
分類ですので,実際の型として,下記の型が使用できるわけではありません.
Ada のデータ型は図1の様に分類されます.
・第1フェーズ
All Types: これは説明するまでもありませんが,全てのデータ型という意味です.
・第2フェーズ
(All Types -)
elementary 型: 文字列型,数値型,論理型やポインタ型などのように,言語の仕様上,元から定義されている型です.
composite 型: 配列型,record 型,task 型,抽象型のように,プログラマによって定義される型のことです.
・第3フェーズ
(- elementary 型 -)
scalar 型: 文字列型,数値型のように,順番を持っている型のこと.
access 型: ポインタ型のこと.オブジェクトやサブプログラムに間接的にアクセスすることができる.
(- composite型 -)
untagged 型: 配列型,record 型,task 型のように,tagged 型以外の複合型のこと.
tagged (interfaces) 型: 抽象型であり,それは別の型の親(ancestor)となることが目的である.ただし,tagged 型自体ではオブジェクトを持つことはできない.
今回は,第3フェーズの説明までしかありませんが,次回はもっと詳しく,末端の型の宣言の仕方について説明します.

今回は,Ada のデータ型の分類に関して,その概要を説明していきます.
分類ですので,実際の型として,下記の型が使用できるわけではありません.
Ada のデータ型は図1の様に分類されます.
・第1フェーズ
All Types: これは説明するまでもありませんが,全てのデータ型という意味です.
・第2フェーズ
(All Types -)
elementary 型: 文字列型,数値型,論理型やポインタ型などのように,言語の仕様上,元から定義されている型です.
composite 型: 配列型,record 型,task 型,抽象型のように,プログラマによって定義される型のことです.
・第3フェーズ
(- elementary 型 -)
scalar 型: 文字列型,数値型のように,順番を持っている型のこと.
access 型: ポインタ型のこと.オブジェクトやサブプログラムに間接的にアクセスすることができる.
(- composite型 -)
untagged 型: 配列型,record 型,task 型のように,tagged 型以外の複合型のこと.
tagged (interfaces) 型: 抽象型であり,それは別の型の親(ancestor)となることが目的である.ただし,tagged 型自体ではオブジェクトを持つことはできない.
今回は,第3フェーズの説明までしかありませんが,次回はもっと詳しく,末端の型の宣言の仕方について説明します.

