Programming Language Concept Session 3

Programming Language Concept Session 3


  • Imperative languages merupakan abstraksi dari arsitektur von Neumann dan memiliki dua komponen utama:
    – Memori, yang menyipan instruksi dan data
    Processor, yang menyediakan operasi untuk memodifikasi konten dari memori
  • Suatu variable dapat dikarakterkan dengan suatu collection property, atau atribut, yang paling penting adalah type, sebuah konsep fundamental di bahasa pemrograman

Names


  • Name merupakan kumpulan karakter yang digunakan untuk mengidentifikasi beberapa entitas di suatu program
  • Jika terlalu pendek, tidak dapat dijadikan konotatif
  • Beberapa contoh batas panjang name:
    – Fotran 95+ : 31 karakter
    – C99 : tidak ada limit di internal, namun hanya 63 pertama yang signifikan; name external memiliki batas 31 karakter
    – C#, Ada, dan Java : tidak ada limit, dan semuanya signifikan
    – C++ : Tidak menjelaskan batas panjang name
  • Beberapa karakter special di bahasa tertentu:
    – PHP : semua nama variable harus dimulai dengan simbol dollar ($)
    – Perl : semua nama variable dimulai dengan karakter spesial, yang menjelaskan tipe variable tersebut
    – Ruby : nama variable yang dimulai dengan @ merupakan variable instansi, sedangkan yang dimulai dengan @@ merupakan variable kelas
  • Hampir semua bahasa tidak case sensitive, namun bahasa berbasis C (C++, Java, dll) merupakan case sensitive, artinya huruf kapital dan tidak kapital memiliki arti yang berbeda (ROSE, Rose, rose, masing-masing memiliki arti yang berbeda)
    – Kekurangan : readability (nama yang mirip sesungguhnya berbeda)
    – Worse case : predefine name merupakan mixed case (contoh: IndexOutOfBoundsException)
  • Special Word:
    – Membantu readability, digunakan untuk membatasi atau memisahkan pernyataan klausa
    Keyword merupakan suatu kata yang hanya special di konteks tertentu
    Reserved word merupakan special word yang tak dapat digunakan sebagai nama oleh user
    – Masalah yang mungkin muncul : jika terlalu banyak reserved word, akan banyak bentrokan yang muncul (seperti COBOL yang memili 300 reserved word)

Variable


  • Variable merupakan abstraksi dari sebuah memori sel
  • Variable dapat dikarakteristikkan menjadi enam:
    Name
    Address
    Value
    Type
    Lifetime
    Scope

Konsep Binding


  • Binding merupakan hubungan antara atribut dan entitas, seperti antara suatu variable dan tipe atau nilainya, atau antara operasi dan simbol
  • Waktu ketika binding terjadi disebut binding time
  • Binding time mungkin terjadi saat:
    Language design time, mengikat simbol operator ke operasi
    Language implementation time, mengikat tipe floating point ke suatu representasi
    Compile time, mengikat suatu variable ke tipe di C atau Java
    Load time, mengikat variable statik C atau C++ ke memori sel
    Runtime, mengikat variable lokal nonstatic ke memori sel
  • Binding dikatakan static jika pertama terjadi sebelum runtime dimulai dan tak berubah selama eksekusi program, sedangkan dikatakan dynamic ketika terjadi saat runtime atau dapat berubah selama eksekusi program

Static Type Binding


  • Deklarasi eksplisit merupakan pernyataan di suatu program yang berisi nama variable dan menjelaskan bahwa mereka merupakan tipe tertentu
  • Deklarasi implisit merupakan maksud untuk menghubungkan variable dengan tipe melalui konvensi yang sudah ada, bukan melalui penyataan deklarasi
  • Deklarasi eksplisit dan implisit membentuk static binding ke tipe

Dynamic Type Binding


  • Tipe dari suatu variable ditentukan melalui pernyataan assignment, bukan dengan pernyataan deklarasi atau ditentukan dengan mengeja namanya
  • Keuntungan : flexibility
  • Kelemahan :
    Cost yang besar (pengecekan tipe dynamic dan interpretasi)
    Compiler sulit mendeteksi tipe error

Storage Binding dan Lifetime


  • Allocaton : mendapatkan memori sel dari kumpulan memori yang tersedia sebagai tempat variable yang telah dibound
  • Deallocation : proses meletakkan memori sel yang telah diunbound dari variable ke kumpulan memori yang tersedia
  • Lifetime dari suatu variable merupakan waktu selama variable masih terikat (bound) ke lokasi memori tertentu

Kategori Variable Berdasarkan Lifetime


  • Static Variable, merupakan variable yang terikat ke memori sel sebelum ekskusi program dimulai dan tetap terikat di memori sel yang sama hingga eksekusi program selesai
    – Kelebihan : semua peng-alamatan pada static variable bersifat langsung
    – Kekurangan : mengurangi flexibility
  • Stack-Dynamic Variable, merupakan variable yang storage bindingnya dibuat ketika pernyataan deklarasinya dijelaskan, namun tipenya diikat secara static
    – Kelebihan : mendukung dynamic storage (recursive)
    – Kekurangan : waktu akses lambat karena peng-alamatan secara tidak langsung
  • Explicit Heap=Dynamic Variable, merupakan memori sel tak bernama (abstrak) yang dialokasi dan di-dealokasi dengan instruksi runtime eksplisit yang ditulis oleh programmer
    – Kelebihan : manajemen storage yang dinamis
    – Kekurangan : tidak efesien dan tidak handal
  • Implicit Heap Dynamic, merupakan variable yang terikat ke penyimpanan heap hanya ketika ia menugaskan (assign) nilai
    – Kelebihan : memiliki fleksibiltas yang memperbolehkan high generic code untuk ditulis ulang
    – Kekurangan : tidak efisien karena semua atribut merupakan dynamic, juga kehilangan pendeteksi error

Scope


  • Scope dari suatu variable merupakan ruang lingkup dimana jangkauan perintah program masih bisa mengkases suatu variable
  • Local variable dari suatu unit program merupakan mereka yang dideklarasi di unit tersebut
  • Nonlocal variable dari suatu unit program merupakan mereka yang dapat diakses di unit tersebut namu tidak dideklarasi disana
  • Global variable merupakan kategori spesial dari nonlocal variable
  • Aturan scope dari suatu bahasa menentukan bagaimana alamat ke nama berhubungan dengan variable
  • Variable dapat disembunyikan dari suatu unit dengan memiliki variable terdekat bernama sama

Static Scope


  • Didasarkan dari teks program
  • Untuk menghubungkan nama alamat dengan variable, programmer atau compiler harus mencari deklarasinya
  • Proses pencarian: mencari deklarasi, awalnya secara lokal, kemudian bertambah terus ke scope yang lebih besar, hingga ia ditemukan
  • Suatu subprogram yang mendeklarasi subprogram lain disebut static parent
  • Ketika subprogram memiliki static parent, dan satic parentnya memiliki static parent lagi, hingga ke scope terbesar, kumpulan ini dinamakan static ancestor
  • Beberapa bahasa memperbolehkan nested subprogram, yang menimbulkan nested static scope (seperti Ada, JavaScript, Scheme, Python, dll)

Sumber :

  • Concept of Programming Languages 10th. Ed  / Robert W. Sebesta (Chapter 5)
  • Names, Binding, and Scopes / Binus Powerpoint Presentation

This entry was posted in Computer Science, Programming Language Concept and tagged , , , , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *