Ada Programlama Dili Temelleri

Ek3

Ada.Integer_Text_IO Program Paketi

(Standart Giriş/Çıkış Ortamı Uygulamaları)

Ek-3 Sayfa 2

Ada.Text_IO.Integer_Text_IO Öntanımlı Paketinin Tanıtımı

Ada öntanımlı paketinin bir alt paketi olan Text_IO paketi, bir alt paket olan Integer_Text_IO paketini içerir bu paketin amacı dosya ve standart giriş/çıkış ortamlarında tamsayı tipinde verilerin giriş ve çıkışlarının yönetilmesidir. Bu kısımda sadece standart giriş /çıkış ortamı olarak tanımlanmış olan klavye/ekran sisteminde tamsayı tipinde verilerin giriş/çıkış işlemlerini sağlayan prosedürler incelenecektir.

Ada.Text_IO.Integer_Text_IO Paketinden Yararlanılarak Tamsayı Verilerin Standart Ortamdan Giriş/Çıkışlarının Gerçekleştirilmesi

Ada.Text_IO paketi, dosya sistemleri, konsol çıkış ortamının konfigürasyonu, Character, String, Integer, Modular, Float, Fixed, Decimal, Enumeration tipleri için giriş/çıkış ortamları sağlar. Tüm bu öntanımlı skaler tipler için, Ada.Text_IO paketi içinde ayrı generik alt paketlerde tanımlanır. Bu bağlamda, tamsayı tiplerinin giriş/çıkış prosedürleri, Integer_IO generik alt paketinde tanımlanmıştır. Generik alt paketler doğrudan kullanılamazlar. Bu paketler bir tür yapılandırıcı fonksiyon gibidir. Kullanılabilir olmaları için, generik paket, uygun bir veri türü için örneklenir. Yani generik ailenin özel değişkene özgü bir örneği yaratılır. Ada progreamlama diline bu olaya Instantaniation adı verilir. Ada.Text_IO paketindeki, Integer_IO generik alt paketinin Integer tipi için örneklenmesi istenirse,

with Ada.Text_IO;
Ada.Integer_Text_IO is new Ada.Text_IO.Integer_IO(Integer)

şeklinde bir tanımla gerçekleştirilebilir. Fakat, derleyiciler, öntanımlı tipler için paket güncelleştirilmesine gerek olmayacak şekilde yapılandırılmıştır. Ada.Integer_Text_IO generik olmayan, tipe özgü kitaplık paketi, istenirse renames bildirimi ile yeniden adlandırılabilir. Fakat bu tür alias kullanımları, programların okunurluğunu azaltabileceğinden kullanımları sağlık verilmemektedir.

Ada tamsayı tipleri için, non generik Ada.Integer_Text_IO kitaplık paketi öntanımlı olarak verilmiş olduğundan, dış prosedürler için bu metotlara erişim, with Ada.Integer_Text_IO; bildirimi ile gerçekleşebilecektir.

Ada.Text_IO.Integer_Text_IO paketinde, aşağıdaki tanımlar yapılır:

   generic
      type Num is  range <>;
   package Integer_IO is
      Default_Width : Field := Num'Width;
      Default_Base  :  Number_Base := 10;
      procedure  Get(File  : in  File_Type;
                    Item  : out Num;
                    Width : in Field := 0);
      procedure Get(Item  : out Num;
                    Width : in  Field := 0);
      procedure Put(File  : in File_Type;
                    Item  : in Num;
                    Width : in Field := Default_Width;
                    Base  : in Number_Base := Default_Base);
      procedure Put(Item  : in Num;
                    Width : in Field := Default_Width;
                    Base  : in Number_Base := Default_Base);
      procedure Get(From : in  String;
                    Item : out Num;
                    Last : out Positive);
      procedure Put(To   : out String;
                    Item : in Num;
                    Base : in Number_Base := Default_Base);

Bu tanımların anlamlarını birlikte inceleyelim. İlk olarak Field olarak adlandırılmış olan alt tip, tamsayı değerinin hane sayısıdır. Normal olarak en çok 11 haneli tamsayı değerler ile çalışılabildiği gözönüne alınırsa, bu özelliğin en yüksek değerinin 11 civarında olabileceği düşünülebilir. Bu değer, yerleşime bağlı olarak tanımlanmıştır ve genelde çoğu yerleşimlerde bu değer 8 karakterdir. Bu değişkene 0 değerinin atanmasının özel bir anlamı bulunmaktadır. Bu durumda,

Bu tanım, gerektiği kadar karakter genişliğinin kullanılarak boşluk bırakılmayacağı anlamına gelmektedir.

Çalışılacak sayı temelinin belirtilmesi için, Ada_Text_IO paketinin başında,

subtype Number_Base is Integer range 2..16;

tanımı yapılmıştır. Bu tanım 2 ile 16 arası sayı temeli kullanılabileceği ve varsayılan sayı temelinin 10 olacağını belirtmektedir. Gündelik yaşamda 10 temelli (desimal) sayılar kullanıldığı için, bu tanım gayet doğaldır. Genelde 2 temelli (ikili) (binary), 8 temelli (oktal), ve onaltı temelli (hex) sayılarla çalışıldığı için, sayı temeli sınırlaması yeterli olacaktır. Eğer on temelli (desimal) sayılarla çalışılıyorsa, sayı temeli belirtmeye gerek kalmayacaktır, çünkü 10 temelli sayılar varsayılan sayı sistemidir.

Sayıların genişliği veya başka bir deyişle alan genişliğinin belirtilmesi için ise, yine Ada.Text_IO paketinin başında,

subtype Field is Integer range0..implementation-defined;

olarak tanımlanmıştır. Integer_IO alt generik alt paketinde tanımlanmış olan Default_Width : Field := Num'Width; ifadesi, Default_Width adında tanımlanan değişkenin veri tipinin daha önceden tanımlanmış Field tipinde olduğunu ve bunun varsayılan değerinin de generik Num değişeninin alan genişliği olan Num'Width değeri olacağı belirtilmektedir. Burada generik Num değeri yerine, spesifik bir tamsayı değeri alacaktır. Alan genişliği olarak da, uygulanmakta olan derleyici mimarisinde Integer tiplerinin varsayılan alan genişliği değeri uygulanacaktır. Bu değer, genellikle 8 değerindedir.

Ada.Integer.Text_IO olarak adlandırılmış Integer veri tipi için spesifik kitaplık paketinde standart olarak belirlenmiş konsol giriş/çıkış ortamında, klavyeden veri girişlerinin sağlanması için tanımlanmış bir Get metodu,

procedure Get(Item : out Num; Width : in Field := 0);

şeklinde çağrılabilmektedir. Buradaki ilk argüman bir tamsayı değişkenin okunup bu değerin geri döndürüleceğini açıklamaktadır. İkinci argüman, sayı genişliğinin verideki karakter sayısına eşit olacağını varsayılan olarak belirlemektedir. Bunun dışında bir değer belirtilirse, verinin de tam olarak beliritilen karakter sayısında olması gerekecektir. Get prosedürü konsoldan bir tamsayı değerinin okunmasında, yani etkileşimli program türlerinde gerekli olmaktadır. Get prosedürü sadece desimal sayı sisteminde değil, desteklenebilen tanım aralığındaki tüm sayı sistemlerinde belirtilmiş olan tamsayıları konsoldan okuyabilmektedir.

Ada.Integer.Text_IO paketinde, standart konsol çıkışı olarak tanımlanmış olan ekranda bir tamsayı değerinin gösterimi için kullanılacak bir Put prosedürünün tanımı, aşağıdaki gibi yapılmıştır.

 procedure Put(Item  : in Num;
               Width : in Field := Default_Width;
               Base  : in Number_Base := Default_Base);

Burada ilk argüman gösterimi yapılacak tamsayı değeridir. İkinci argüman, tamsayı değerinin genişliğinin varsayılan genişlik olacağını belirtmektedir. Bu değer yerleşime bağlı bir değerdir ve genellikte 8 kolondur. Gösterimi yapılacak veri, varsayılan sütuntun sayısında sağa yaslanmış olarak gösterilecektir. Eğer, sayının sağa yaslanacağı sütuntun sayısının varsayılandan farklı olması isteniyorsa, kendi sayı genişliğimizin argüman olarak verilmesi gerekecektir. Eğer varsayılan sütuntun sayısı yeterli olacaksa bu argümanın verilmesi gerekli değildir. Son argüman, gösterimi yapılacak tamsayı verisinin sayı temelinin belirtilmesidir. Eğer sayı on temelli (desimal) bir tamsayı ise, sayı temelinin belirtilmesi gereği yoktur. Aksi durumda, sayı temelinin açıkça (explicit olarak) belirtilmesi gerekecektir.

Put prosedürünün görüntüleyeceği tamsayı değeri, bir tamsayı literali şeklinde olacak, üste gösterim ve öndeki sıfırlar olmayack, sıfır için sadece bir tek sıfır olacak şekilde düzenlenmiş olacaktır. On temelinden farklı sayı temelleri için, uygun biçimlendirme yöntemi uygulanacaktır. Eğer, uygulanacak syı temeli harfler içeriyorsa, bu harfler büyük harf olarak görüntülenecektir. Eğer tamsayı verisinin içerdiği karakter sayısı, alan genişliği (width) değerinden daha az ise, alanı doldurmak başlangıçta boşluklar bırakılacaktır. Yani görüntüleme varsayılan sütün sayısına sağ yaslanarak yapılacaktır.

Aşağıdaki GET ve PUT prosedürleri daha ileri tekniklerle gerektiğinde kullanılabilir.

procedure Get(From : in String; Item : out Num; Last : out Positive);
procedure Put(To   : out String;
              Item : in Num;
              Base : in Number_Base := Default_Base);

Bir kullanım örneği, http://en.wikibooks.org/wiki/Ada_Programming/Mathematical_calculations sayfasında görülebilir.

Aşağıda program listesi görülen bir uygulamada öntanımlı Integer tipinin çalışılan işletim sisteminde geçerli olan alt ve üst sınırları saptanmaktadır.

with Ada.Text_IO; use Ada.Text_IO;
with Ada.Integer_Text_IO ;
procedure b2_14_uyg_1 is
begin
Put(Item =>  
   class="str">"Bu Makinenin En Alt Integer Veri Tipi Değeri : ");
Ada.Integer.Text_IO.Put(Item => Integer'First, width => 11);
New_Line;
Put(Item =>  
   class="str">"Bu Makinenin En Üst Integer Veri Tipi Değeri :" );
Ada.Integer.Text_IO.Put(Item => Integer'Last, width => 12);
end b2_14_uyg_1;
		

Bu programın Sonucu :

Bu Makinenin En Alt Integer Veri Tipi Değeri : -2147483648
Bu Makinenin En Üst Integer Veri Tipi Değeri : 2147483647

Yukarıdaki programda iki ayrı paket kullanılmakta ve her iki pakette de Put prosedürü gibi aynı adlı prosedürler bulunmakta ve programda put prosedürü bazen sözel, bazen de sayısal verilerin konsol gösterimleri için kullnılmak istenmektedir. Oysa her iki paketteki Put prosedürlerinin spesifikasyonları farklıdır ve birbirlerinin yerine kullanılamazlar. Buna metot bindirmesi, (method overloading) adı verilir ve programın öngörüldüğü gibi çalışabilmesi için metot çakışması sorununun bir şekilde çözümlenmesi gerekir. Aksi halde bir belirsizlik (ambiguity) durumu ortaya çıkar, bu durumda bir çalışma süreci (run-time) hatası oluşur ve programın yürüyüşü kesilir.

Metot çakışmasından doğan belirsizlik iki şekilde aşılabilir. Bunlardan ilki otomatiktir ve programcının hiçbir şey yapması gerekmez. Ada derleyicisi, metot çakışmalarını çözümlemek için yeterince gelişmiştir. Metodun argümanlarını inceleyerek işleve uygun metodun hangi paketten alınması gerektiğini saptar ve işlemi gereği gibi sonuçlandırır. Normal olarak, Ada programlarında programcının metot çakışmalarından çekinmemesi gerekir.

Metot çakışmalarının aşılabilmesi için uygulanabilecek ikinci yöntem, programcının kullanmak istediği metodun handi kaynaktan alınması gerktiğini derleyiciye açık olarak bildirmesidir. Bu durumda çakışan metotlar, Ada.Text_IO.Put(... veya Ada.Integer_IO.Put şeklinde paket kaynakları belirtilerek çağrılırlar. Bu durumda metot çakışması ve metot çakışması nedeni ile ortaya çıkabilecek çelişki de ortadan kalkar ve programın öngörülen şekilde çalışmasına hiçbir engel kalmaz.

Modern derleyicilere güveni az olan tutucu programcılar, ikinci yolun daha güvenli olacağını ve bu şekilde hiçbir sorun yaşanmayacağını sanabilirler. Oysa bu düşünce doğru değildir. Ada derleyicisi, bugüne kadar gerçekleştirilmiş olan en karmaşık programlama dili olan Ada programlama dilinin programlarını derleyebilecek kadar üstün nitelikli bir derleyicidir. Bu derleyici için metot çakışmalarını çözümlemek sorun değildir. Programlarda esas sorunlar, bu gibi çözümleneceği kesin olan basit metot çakışmalarından değil, öngörülmemiş sorunlardan doğan ve öngörülmediği için yakalama yöntemi belirtilmememiş olan, bu nedenle giderek yaygınlaşabilen ve sonunda programı devreden çıkaran hatalardan kaynaklanır. Ariane-5 füzesi de bu nedenle rampada yanmıştır. Programcılar, dikkatlerini bu konulara vermekle daha verimli işler yapmış olurlar. Örnek olarak, konsoldan bir tamsayı girmesi beklenen bir kullanıcı, tamsayı yerine ondalıklı bir sayı girer ve enter tuşuna basarsa ne olabilecektir? Programların öngörülen şekilde çalışmasının sağlanabilmesi için, programcıların,bu gibi sorunlara eğilmeleri ve programın çalışması sırasında doğabilecek sorunları daha önceden belirleyerek gereken önlemleri almaları gerekir.

Program sonucunda, Integer değişkeninin destekleyebildiği tamsayı değerlerinin 10 karakterlik tamsayılarla sınırlı olduğu görülmektedir. Bu değer aralığının yetmediği durumlarda kullanıcı kendi tipini tanımlayabilir. Fakat bu durumda taşınabilirlik garanti edilemez.

Programlarda hiç negatif değerler almayacak tamsayı değişkenleri için, Integer yerine, Natural veya Positive öntanımlı tamsayı veri tiplerini kullanmaları daha uygun olur. Bu şekilde negatif değer atanmaması gereken bir değişkene yanlışlıkla negatif bir değer atandığında, programın hata vererek programcıyı uyarması sağlanabilir. Öntanımlı Natural veya Positive veri tipleri, Integer tipinin alt tipleri olduklarından Integer tipi ile uyumludurlar ve Integer.Text_IO paketinin metotlarından yararlanabilirler. Aşağıda listesi görülen programda bu yöntem uygulanmıştır.

with Ada.Text_IO; use Ada.Text_IO;
with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;
procedure b2_14_uyg_2 is
   Bir_yıldaki_hafta_sayısı :Positive := 52;
   Bir_haftadaki_gün_sayısı: Positive := 7;
   Bir_yıldaki_gün_sayısı : Positive := 365;
begin
   Put(Item => "Bir yıldaki hafta sayısı :  ");
   Put(Item => Bir_yıldaki_hafta_sayısı, width => 11);
   New_Line;
   Put(Item => "Bir haftadaki gün sayısı : ");
   Put(Item => Bir_haftadaki_gün_sayısı, width => 12);
   New_Line;
   Put(Item => "Bir yıldaki gün sayısı :   ");
   Put(Item => Bir_yıldaki_gün_sayısı, width => 12);
   New_Line;
   end b2_14_uyg_2;
		

Bu programın Sonucu:

Bir yıldaki hafta sayısı : 52 Bir haftadaki gün sayısı : 7 Bir yıldaki gün sayısı : 365

olmaktadır.

Yukarıdaki programda görüldüğü gibi, sayıların aynı sütüna sağ yaslanmaları için, aynı uzunlukta yazdırılmaları yeterli olmaz. Her satırdaki mesajın karakter sayısı da aynı olacak şekilde düzenlenmeli, kısa kalan mesajlar, en uzun mesajın boyuna gelinceye kadar boşluklarla genişletilmelidir.

Aşağıda listesi görülen programda konsoldan bir tamsayı değeri okunmakta, bu sayının karesi hesaplanmakta ve sonuç konsoldan görüntülenmektedir.

with Ada.Text_IO; use Ada.Text_IO;
with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;
procedure b2_14_uyg_3 is
   Değer : Integer;
   Değerin_Karesi : Integer;
begin
   Put(Item => "Lütfen Bir Tamsayı Giriniz : ");
   Get(Item => Değer);
New_Line; Değerin_Karesi := değer**2; Put(Item => "Girilen Değer : "); Put(Item =>Değer, width => 10); New_Line; Put(Item =>"Değerin Karesi : "); Put(Item =>Değerin_Karesi, width => 10); end b2_14_uyg_3;

Program Sonucu:

Lütfen Bir Tamsayı Giriniz : 2#01001# Girilen Değer : 9 Değerin Karesi : 81

olmaktadır.

Programın çalışmasından da görülebileceği gibi, 2 ile 16 arası temelli tüm tamsayı değerleri sisteme girilebiliyor. Fakat, hesaplamalar desimal temelda yapılıyor, sonuç desimal temelli olarak oluşuyor ve desimal olarak görüntüleniyor.

Bu sonuç, sayı temeli 10 lu sistemden farklı olan verilerle çalışıldığında, sonuçların daima on temelli (desimal) değerlere çevrildiğini belirtmektedir. Sayı temelei farklı olan sayılarla yapılan çalışmalarda, değer aşımı kontrolu desiamal temelli olarak yapılır, kullanıcı desimal sayılardan farklı temelli sayı sistemlerine alışık olmadığından değer aşımı yaratacak sınırlara eriştiğini geç farkedebilir ve değer aşımı hatası oluşur. Yakalanmazsa, gerçek zamanlı sistemlerde ağır sonuçlara neden olabilir.

Aşağıda listesi görülen programda Girilen bir tamsayı değerinden önceki tamsayı değeri belirlenmektedir.

with Ada.Text_IO; use Ada.Text_IO;
with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;
procedure b2_14_uyg_4 is
   Değer : Integer;
   Önceki_Değer : Integer;
begin
   Put(Item => "Lütfen Bir Tamsayı Giriniz : ");
   Get(Değer);
New_Line; Önceki_Değer :=Integer'Pred(Değer);; Put(Item => "Girilen Değer : "); Put(Item => Değer, width => 11); New_Line; Put(Item =>"Önceki Değer : "); Put(Item =>Önceki_Değer, width => 12); end b2_14_uyg_4;

Program Sonucu:

Lütfen Bir Tamsayı Giriniz : 16#A12BC# Girilen Değer : 660156 Önceki Değer : 660155

olmaktadır.

Bu program sonucundan görüldüğü gibi, veri onaltı temelli (hex) bir tamsayı olmasına karşın desimal temelli bir tamsayıya çevrilerek, tamsayılar skalasında kendinden bir önce gelen (değerden 1 çıkartılarak bulunan) sayı hesaplanarak konsoldan görüntüleniyor.

Daha önceki bir programda, stanadrt pakette tanımlı olan Integer veri tipinin kapsamı kullanıcılara yetrli görünmezse, kullanıcılar kendi tamsayı tiplerini tanıtıp kullanabilecekleri belitilmişti. Ada olanakları sonsuz denecek kadar geniş bir programlama dilidir. Kullanıcı tanımlı veri tipleriileride detyalı olarak incelenecektir.. Fakat, salt bir bilgi vermek amacı ile kullanıcı tanımlı bir tamsasyı veri tipinin tanıtımı aşağıda listesi görülen programda yapılmıştır.

with Ada.Text_IO; use Ada.Text_IO;

procedure b2_14_uyg_5 is
type Tamsayı is range -2**62 - 2**61 -2**60 - 2** 59 - 2**58 - 2** 57 - 2**56 - 2**55 - 2** 54 - 2**53 - 2**52 - 2**51 - 2**50 - 2**49 .. 
2**62 + 2**61 +2**60 + 2** 59 + 2**58 + 2** 57 + 2**56 + 2**55 + 2** 54 + 2**53 + 2**52 + 2**51 + 2**50 + 2**49;
kimlikNo : Tamsayı := 18_545_676_582;
begin
Put(Item => "Tamsayı veri tipi en düşük değer :   ");
Put(Item => Tamsayı'Image(Tamsayı'First));
New_Line;
Put(Item => "Tamsayı tipi en yüksek değer :       ");
Put(Item=> Tamsayı'Image(Tamsayı'last));
New_Line;
Put(Item => "Abdullah Okumaz Kimlik Numarası :            ");
Put(Item => Tamsayı'Image(kimlikNo));
New_line;
Put(Item => "Integer verilerinin en üst sınırı :           ");
Put(Item => Integer'Image(Integer'Last));
New_Line;
Put(Item => "Tamsayı Veri Tipi bit Sayısı :           ");
Put(Item => Integer'Image(Integer'Last));
end  b2_14_uyg_5;
		

Program Sonucu :

Tamsayı veri tipi en düşük değer : -9222809086901354496 Tamsayı tipi en yüksek değer : 9222809086901354496 Abdullah Okumaz Kimlik Numarası : 18545676582 Integer verilerinin en üst sınırı : 2147483647
Tamsayı Veri Tipi bit Sayısı : 64

olmaktadır.

Programın incelenmesi ile makinenin desteklediği ve Standard Integer olarak da adlandırılan, standart pakette tanımlı Inteder veri tipinin kapsamını çok aşan yeni bir Tamsayı veri tipi tanımlamış oluyoruz. Bu veri tipi, Integer veri tipinin bir alt tipi değildir fakat bir tamsayı tipi olduğu için, Standart Integer ile uyumludur. Bu bir kullanıcı tanımlı tamsayı veri tipidir ve temel veri tipi root_integer dir. Program sonucundan Tamsayı veri tipinin 64 bit lik word üzerinden tanımlanmış olduğu görülmektedir. Ada derleyicisi, bu gibi kullanıcı tanımlı verilerin istenen kapsam sınırına göre en uygun word uzunluğuna ayarlayarak sistem belleğini optimal olarak kullandırma yeteneğine sahiptir. Bu da üstün taraflarından biridir.

Tamsayı veri tipi her türlü aritmetik işlemde kullanılabilir. Fakat sonuçları konsolda, Ada.Integer_Text_IO paketinden yararlanarak gösterilemez, çünkü Tamsayı veri tipi Integer veri tipinde (Integer veya Alt Türleri) değildir. Kendine özgü kullanıcı tanımlı bir tamsayı veri tipidir. Bu veri tipinin kendi özel giriş/çıkış paketine gerksinmesi vardır. Bu da hiçbir kullanıcı tanımlı veri tipi için gerçekleştirilmediği için, kullanıcı tipi veri tipi işlem sonuçları, programda görüldüğü gibi, karakter dizisi (string) tipine çevrllir ve Ada.Text_IO program paketinden yararlanılarak giriş/çıkış işlemleri yapılabilir.

Sonuçlar incelendiğinde, bu yeni kullanıcı tanımlı Tamsayı veri tipinin olağanüstü geniş bir kapsam aralığı olduğu görülüyor. Kapsam aralığı Standart Integer kapsamını kata kat aşıyor ve ülke kimlik numaralarının verilebilmesi için fazlası ile yeterli olduğu görülüyor. Eğer istenirse, tüm dünya insanlarına bu veri tipi kullanılarak bir kimlik numarası verilebilir ve daha kullanılmamış çok numara kalabilir.

Tamsayı veri tipleri, cebirsel çalışmalarda hemen hemen hiç kullanılmaz. Bu değişkenler,daha çok sayım, numaralandırma, kimlik verileri, sosyal sigorta numaraları , emtia numaraları gibi tamsayı gerektiren işlemlerde kullanılırlar.

Günümüzde, donanım konusu son derece kolaylaşmış ve ekonomik hale gelmiştir. Programların taşınabilirliğine fazla önemsememek gerekir. Artık özel sistemler sadece çok özel donanımlar için geçerlidir. Normal programlama ortamlarında 64 bit Windows 7 işletim sistemi, fazla pahalı olmayan taşınabilir bilgisayarlarda bile bulunmaktadır. İstendiğinde bir programın gerektirdiği sistemin kurulması çok kısa zaman ve çok ekonomik koşullarda gerçekleşebilir.Yukarıda görülen ve 64 bitlik Windows 7 sisteminde çalışan program, sorunsuz olarak bir laptop üzrindeki 32 bit Windows Vista işletim sistemi üzerinde de çalışmış ve 32 bitlik sistem üzerinde 64 bit uzunluğunda tamsayı veri tipi açabilmiştir. Bu sonuçla taşınabilirlik sorununun artık önemli olmadığı söylenebilir.

Ada derleyicisinin tanımlanan kullanıcı tipi tamsayı veri tipinin, tanımlanan kapsamının gerektirdiği kadar veri genişliği uyguladığı aşağıdaki örnekten de anlaşılabilir.


with Ada.Text_IO; use Ada.Text_IO;

procedure b2_14_uyg_6 is
type Say is range -100 .. 100;

begin

Put(Item => "Say veri tipinin bit uzunluğu : ");
Put(Item => Integer'Image(Say'Size));
end b2_14_uyg_6;
		

Bu problemin sonucu,

Say veri tipinin bit uzunluğu : 8

olarak bulunur.

Bu sonuç, Ada derleyicisinin kullanıcı tanımlı veri tipleri için veri uzunluğu oluşturmakta olağanüstü esneklğini göstermektedir. Yeni veri tipi tanımlanan kapsam daraldıkça bu kapsamda çalışabilecek en düşük veri uzunluğu ayrılmaktadır. Bu örnek sonucunda gözlenen 8 bit (1 byte) (1 oktet) (okto grekçe sekiz) lik veri uzunluğu en alt sınır değildir. Daha dar bir kapsam için, veri uzunluğunun 5 bit olarak düzenlendiği gözlenmiştir.

Valid XHTML 1.1