Nov 6

Names, Binding, And Scopes

Bahasa Imperative adalah abtsraksi dari arsitektur von neuman. Variable dapat di karakteristkkan dengan kumpulan properties, atau attribute, dan yang paling penting adalah tipe dari konsep bahasa pemrograman nya.

Names adalah sebuah string karakter yang digunakan untuk mengidentifikasi  beberapa entity dalam sebuah program. Sebuah names dapat mengandung kalimat, digit, atau pun underscore karakter (_).

Special Words

Special words dalam bahasa pemrograman digunakan untuk membuat program lebih dapat dibaca dengan menamai aksi yang akan dilaksanakan. Digunakan juga untuk memisahkan antara statement dan program.

Keyword adalah kata dalam sebuah bahasa pemrograman yang special dan berada pada context tertentu saja.

Reserved word adalah special kata dari sebuah bahasa pemrograman yang tidak dapat digunakan sebagai nama. Dalam reserved word ada problema sebagai contoh :

Integer Real

Real Integer

Statement diatas mendeklarasikan program variable real itu adalah tipe integer dan variable integer itu adalah tipe real

Variable

Variable adalah abstraksi dari memory cell computer atau kumpulan cell.

Variable attribute terdiri dari :

–          Name = nama dari sebuah variable, hamper setiap variable memiliki nama.

–          Address = address dari sebuah variable dalam mesin memory dimana dia di asosiasikan. Asosiasi ini tidak se-simple yang di perkirakan, bisa saja variable yang sama di asosiasikan dengan alamat yang berbeda dan pada waktu yang berbeda pada sebuah program. Aliases adalah ketika satu nama variable dapat mengakses lokasi memory yang sama. kelemahan aliasing adalah memperbolehkan variable untuk mengubah nilai berdasarkan tugas dari variable yang lain.

–          Type = variable menentukan range nilai dari variable yang di simpan dan set operasi yang mendefinisikan nilai dari type. Contoh : tipe int pada java memiliki range -2147483648 sampai 2147483647.

–          Value = variable content dari memory cell atau cell asosiasi dengan variable.

Binding

Binding adalah asosiasi antara attribute dan entity, seperti antara variable dengan tipe nya atau nilai, atau antara sebuah operasi dan symbol. Binding time adalah aktu yang dibutuhkan dalam melakukan binding.

Sebagai contoh :

count = count + 5;

tipe count  binding dengan waktu compile.

Binding dapat ditentukan tipe nya.  Static binding yaitu terjadi sebelum program berjalan, dan tetap sama selama program eksekusi. Dynamic binding yaitu binding terjadi ketika program sedang berjalan dan nilai dapat berubah selama program dieksekusi.

Storage binding and lifetime

Ada 2 tipe storage binding yaitu :

Allocation : mengambil cell dari kolam memori cell yang tersedia

Deallocation : sel memori yang telah tidakterikat dari variabel dikembali ke kolam memori yang tersedia.

Lifetime variable dimulai ketika cell spesifik terikat, dan berakhir ketika tidak terikat dari cell itu.

Terdapat 4 kategori type binding yaitu :

1.       Static

Static = cell yang terikat pada memory cell sebelum eksekusi dimulai, dan tetap terikat pada memory cell yang sama sampai program eksekusi selesai.

(+) semua addressing pada static variable bersifat langsung.

(­-) mengurangi fleksibilitas(tidak support untuk reculsive program)

2.       Stack dynamic

Stack dynamic variable = storage binding dibuat ketika deklarasi statement dijelaskan, tapi tipe nya bersifat terikat.

(+)support dynamic storage(reculsive)

(-)waktu akses yang lambat karena addressing tidak langsung

3.       Explicit heap dynamic

Explicit heap dynamic = abstrak memory cell yang di alokasi dan dealokasi dengan instruksi eksplicit run-time yang ditulis oleh programmer. Variable nya hanya bisa dialokasikan oleh pointer atau reference variable. Sebagai contoh :

int *intnode; // Create a pointer

intnode = new int; // Create the heap-dynamic variable

. . .

delete intnode; // Deallocate the heap-dynamic variable

// to which intnode points

Explicit heap dynamic variable pada tipe int dibuat oleh operator new. Variable ini bisa di referensikan melalui pointer , intnode. Nantinya variable di deallocation dengan delete operator.

(+) storage manajemen yang dinamis.

(-) tidak efisien dan tidak handal.

4.       Implicit heap dynamic

Implicit heap dynamic terikat dengan heap storage ketika ada nilai yang ditugaskan.

Sebagai contoh:

highs = [74, 84, 86, 90, 71];

variable bernama highs sudah di deklarasi di sebelumnya, dan sekarang digunakan pada array 5 data.

(+) memiliki fleksibilitas yang memperbolehkan high generic code untuk ditulis ulang.

(-)run-time overhead mempertahankan semuaatribut dinamis, yang akan mencakup jenisarray subscript dan range.

Static scope

Static scope adalah metode bindung nama ke nonlocal variable.

Ada 2 kategori static scope :

–          Dimana subprogram bisa di nested, yang membuat nested scope

–          Program tidak dapat di nested,  nested scope hanya dapat dibuat oleh nested class dan blocks.

function big() {

function sub1() {

var x = 7;

sub2();

}

function sub2() {

var y = x;

}

var x = 3;

sub1();

}

Pada potongan kode diatas variable x pada sub adalah mengambil x yang di deklarasikan pada prosedur big. In benar karena pencarian x dimulai pada prosedur reference yang terjadi pada sub2, big, ketika dekalarsi x ditemukan.

Blocks

Block adalah metode membuat static scope dalam sebuah program. Sebagai contoh :

void sub() {

int count;

. . .

while (. . .) {

int count;

count++;

. . .

}

. . .

}

Referensi count pada while adalah loop local count. Dalam kasus ini, count tersembunyi pada while loop.

Evaluasi static scooping

Static scoping dapat bekerja pada banyak situasi.

Masalah : – terlalu banyak akses

–    Program awal di hancurkan dan local variable biasa nya menjadi global

–    Subprogram gravitate menjadi global dari pada nested

Dynamic scope

Referensi pada variable terhubung melalui deklarasi dengan mencari kembali melalui rantai dari subprogram yang memaksa panggil eksekusi poin

                  function big() {

                      function sub1()

                         var x = 7;

                      function sub2() {

                        var y = x;

                      }

                     var x = 3;

                   }

Static scopping  : x pada sub2 ke x pada big

Dynamic scoping : x pada sub2 ke x paada sub1