Ana Sayfa

Forth'ta Diziler: Esnek Veri Yapıları Oluşturma

1 dk okuma

Forth programlama dilinde yeni başlayanların sıkça sorduğu sorulardan biri, diğer dillerde standart olan diziler gibi özelliklerin neden Forth'ta bulunmadığıdır. Cevap, Forth'un yeni veri türleri oluşturmada o kadar yetenekli olmasıdır ki, programınızı keyfi bir standarda uymaya zorlamak yerine, ihtiyaçlarınıza tam olarak uyan bir yapı icat etmek genellikle daha kolaydır. Forth'taki "dizi" terimi, indekslenmiş ve indekslenmemiş olmak üzere iki farklı yapı türünü ifade eder.

İndekslenmiş diziler arasında, bir adres döndüren "değişken benzeri" diziler öne çıkar. İçeriklerini döndüren değer benzeri diziler, belirtilen eylemi gerçekleştiren yürütme dizileri ("vektörler") ve bu türlerin birkaçından oluşan karma diziler de mümkündür. Birçok Forth uygulaması, basitçe array olarak adlandırılan değişken benzeri bir indekslenmiş dizi sağlar. Bu yapı, her elemanı bir hücre uzunluğunda olan tek boyutlu, değişken benzeri bir dizi oluşturur. Çoğu programcı "dizi" denildiğinde bunu düşünür ve hatta standart olduğunu varsayabilir. Popülerliği haklıdır çünkü hızlı ve basittir. Forth'ta numaralandırma geleneksel olarak sıfırdan başladığı için, 3 indeksini kullanmak dördüncü elemanı döndürür.

array yapısının elemanları tek bir hücre uzunluğuyla sınırlıdır. Bu, her oda için beş hücre (oda tanımlayıcı ve dört hedef) depolaması gereken macera oyunları gibi daha karmaşık ihtiyaçlar için yeterli değildir. Bu tür durumlar için long-element-array tanımlayıcı kelimesi, elemanları istenen uzunlukta olabilen değişken benzeri diziler oluşturur. Derleme zamanında, eleman sayısı ve hücre cinsinden uzunluk yığında bulunur; çalışma zamanında ise bir indeks, ilgili elemanın adresini döndürür. Dizilerin kayıtları birden fazla veri öğesi içerebileceğinden, bileşenlerine erişmek için bir yönteme ihtiyaç duyarız. İlke basittir: bir ofset eklemek. Bunu kolaylaştırmak için, ofsetleri oluşturmak üzere bir tanımlayıcı kelime (offset) inşa edilir.

İçgörü

Forth'un esnek yapısı sayesinde, geliştiriciler kendi ihtiyaçlarına özel veri yapıları ve diziler oluşturarak standart kısıtlamaların ötesine geçebilirler.

Kaynak