1. Names

Jika terlalu pendek, nama tidak dapat memiliki arti.

Contoh bahasa:

  • C#, Ada, dan Java tidak memiliki limit dan semuanya signifikan.
  • C++ tidak memiliki limit namun dalam pelaksanaan biasanya memaksa.

Karakter spesial:

  • PHP: semua nama variabel harus diawali tanda dollar ($).
  • Perl: semua nama variabel harus diawali karakter spesial yang menjelaskan tipe variabel.
  • Ruby: nama variabel yang diawali dengan @ adalah contoh variabel; yang diawali dengan @@ adalah kelas variabel.

Case sensitive

Nama di C merupakan case sensitive. Kerugiannya adalah readability (nama yang serupa tapi tidak sama, contoh: a dengan A berbeda).

Special words

Bantuan untuk readability; digunakan untuk membatasi pernyataan klausa.

Reserved word adalah special word yang tidak digunakan sebagai nama. Potensi masalah menggunakan reserved word adalah jika terlalu banyak, banyak terjadi bentrokan (contoh: COBOL memiliki 300 reserved words).

Variabel

Variabel adalah abstraksi dari sel memori. Variabel terdiri dari enam atribut, yaitu:

  • Name
  • Address
  • Value
  • Type
  • Lifetime
  • Scope

2. Bindings

Binding adalah sebuah gabungan antara entitas dan atribut, seperti antara sebuah variabel dan tipe atau nilainya, atau antara operasi dan sebuah simbol.

Possible binding times:

  • Language design time: menggabungkan simbol operator ke operasi
  • Language implementation time: menggabungkan floating point type ke sebuah representasi
  • Compile time: menggabungkan variabel ke sebuah type di C atau Java
  • Load time: menggabungkan C atau C++ static variable ke sebuah sel memori
  • Runtime: menggabungkan nonstatic local variable ke sebuah sel memori.

Dynamic Type Binding

Digunakan pada JavaScript, Phyton, Ruby, PHP, dan C#.

Keuntungan: Flexibility

Kerugian: Type error sulit dideteksi oleh compiler dan memakan banyak memori.

Kategori variabel berdasarkan lifetime:

  • Static bound: mengikat sel memori sebelum eksekusi dilakukan dan tetap mengikat sel memori yang sama saat eksekusi. Keungtungan: efisien, history-sensitive; kerugian: kurang fleksibel.
  • Stack dynamic: ikatan penyimpanan dibuat untuk variabel ketika deklarasi pernyataannya diuraikan. Keuntungan: rekursi diperbolehkan, menghemat penyimpanan; kerugian: alokasi dan dealokasi mengalami overhead, subprogram tidak dapat menjadi history sensitive, acuan kurang efisien.
  • Explicit heap dynamic: Alokasi dan dealokasi dengan arahan eksplisit (diterangkan oleh programmer) yang bereaksi saat eksekusi. Keuntungan: Menyediakan dynamic storage management; kerugian: kurang efisien dan kurang dapat diandalkan.
  • Implicit heap dynamic: alokasi dan dealokasi disebabkan oleh assignment statements. Keuntungan: fleksibel; kerugian: kurang efisien (karena semua atributnya dynamic) dan hilangnya error detection.

3. Scope

Scope dari sebuah variabel adalah jangkauan dari pernyataan yang kelihatan. Local variables dari sebuah program adalah semua yang dideklarasikan dalam unit tersebut, sedangkan nonlocal variables dari sebuah program adalah semua yang kelihatan dalam unit tersebut namun tidak dideklarasikan. Global variables adalah kategori spesial dari nonlocal variables. The scope rules dari sebuah bahasa menentukan bagaimana acuan nama terkait dengan variabel.

Static Scope

Berdasarkan program text. Untuk menghubungkan naam dengan acuan kepada sebuah variabel, compiler harus menemukan deklarasi terlebih dahulu.

Search process: mencari deklarasi, awalnya lokal, kemudian menyebar ke lampiran yang lebih luas hingga akhirnya ditemukan untuk sebuah nama.

Enclosing static scopes disebut static ancestors; static ancestor yang terdekat disebut static parent.

Global Scope

C, C++, PHP, dan Phyton mendukung sebuah struktur program yang terdiri dari sebuah urutan fungsi yang didefinisikan dalam file. C dan C++ memiliki deklarasi dan definisi.

Static Scoping

Bekerja dengan baik di banyak situasi. Masalahnya: dalam kebanyakan kasus, terlalu banyak akses yang mungkin terjadi dan sebagai program yang berkembang, struktur awal dihancurkan dan local variables terkadang menjadi global; subprogram juga tertarik menjadi global dibandingkan nested.

Dynamic Scope

Didasarkan oleh panggilan urutan dari sebuah unit program, bukan textual layout. Mengacu kepada variabel yang terhubung dengan deklarasi untuk pencarian panggilan ikatan subprogram yang terpaksa dieksekusi pada bagian ini.

Contoh:

                  function big() {

function sub1()

var x = 7;

function sub2() {

var y = x;

}

var x = 3;

}

–Static scoping

  • Reference to x in sub2 is to big’s x

–Dynamic scoping

  • Reference to x in sub2 is to sub1’s x