Programming Language Concept Session 7

Programming Language Concept Session 7


Dasar Subprogram


  • Muncul karena penggunaan suatu kumpulan data berulang-ulang
  • Tiap subprogram memiliki satu tempat masuk
  • Program pemanggil ditangguhkan selama eksekusi dari subprogram yang dipanggil
  • Kontrol selalu kembali ke pemanggil ketika eksekusi subprogram yang dipanggil berakhir
  • Subprogram header, yang merupakan bagian pertama definisi, berfungsi dalam banyak hal:
    – Menjelaskan bahwa unit sintaktik selanjutnya merupakan definisi subprogram dari berbagai macam tertentu
    – Sebagai nama dari subprogram
    – Menjelaskan daftar parameter
    – Contoh di C:

    void adder (parameters)

  • Formal parameter merupakan parameter yang berada di subprogram header
  • Parameter yang berada di pemanggil subprogram disebut actual parameter
  • Subprogram yang mengembalikan nilai disebut function
  • Subrprogram yang tidak mengembalikan nilai disebut procedure
  • Overloaded subprogram merupakan subprogram yang memiliki nama sama dengan subprogram lain di lingkungan alamat yang sama
  • Generic subprogram merupakan subprogram yang komputasinya dapat diselesaikan di data dari tipe berbeda di panggilan yang berbeda juga
  • Closure merupakan nested subprogram dan lingkungan pengalamatannya

Local Referencing Environment


  • Variable local dapat berbentuk stack-dynamic
    – Keuntungan : mendukung recursion, penyimpanan local bisa dipakai subprogram lain
    – Kelemahan : alokasi/de-alokasi, pengalamatan tidak langsung, subprogram tidak history sensitive
  • Variable local dapat berbentuk static
    – Keuntungan dan kelemahannya bertolak belakang dengan stack-dynamic

Parameter Passing


  • Formal parameter yang dapat menerima data dari actual parameter yang tepat disebut in mode
  • Formal parameter yang dapat mengirim data ke actual parameter disebut out mode
  • Formal parameter yang dapat melakukan in dan out mode disebut inout mode
  • Model parameter passing:

  • Ketika suatu parameter passed by value (in mode), nilai dari actual parameter tersebut digunakan untuk menyatakan formal parameter yang sesuai
    – Biasanya diimplementasi dengan meng-copy
    – Dapat diimplementasikan dengan mengirim jalur akses namun tidak direkomendasi
    – Keuntungan : lebih cepat di linkage cost dan waktu akses
    – Kelemahan : memori tambahan diperlukan dan memerlukan harga yang tidak kecil (costly)
  • Ketika suatu parameter passed by result (out mode), tidak ada nilai yang dikirimkan ke subprogram, formal parameter yang sesuai bertindak sebagai local variable; nilainya dikirimkan ke actual parameter pemanggil ketika control dikembalikan ke pemanggil tersebut
    – Membutuhkan lokasi penyimpanan extra dan duplikat operasi
  • Gabungan dari pass by result dan pass by value adalah pass by value-result (inout mode)
    – Juga dikenal dengan pass by copy karena actual parameter dicopy ke formal parameter di tempat masuk subprogram dan kemudian dicopy kembali di akhir subprogram
    – Kelemahan : sama seperti pass by result dan pass by value
  • Tak seperti pass by result-value yang meng-copy nilai data kembali dan kedepan, pass by reference (inout mode) hanya mengirimkan suatu acess path, biasanya alamat, ke subprogram yang dipanggil.
    – Keuntungan : Efisien, waktu maupun tempat
    – Kelemahan : akses ke formal parameter lebih lambat, berpotensi terjadi side effect yang tak diinginkan, alias yang tak perlu
  • Ketika pass by name (inout mode), actual parameternya secara tekstual diganti untuk semua formal parameter yang tepat di semua kejadian di subprogram
    – Formal parameter diikat ke suatu metode akses saat pemanggilan, namun pengikatan sebenarnya ke suatu nilai atau alamat terjadi diwaktu assignment atau reference
    – Kelemahan : terlalu kompleks sehingga mengurangi readability dan reliability, sulit diimplementasikan dan tidak efesien
  • Implementasi metode parameter-passing:
    – Kebanyakan bahasa, komunikasi parameter terjadi di run-time stack
    – Pass by reference merupakan yang paling sederhana untuk diimplementasikan karena hanya alamat yang diletakkan di stack

Function header:  void sub(int a, int b, int c, int d)

Function call in main: sub(w, x, y, z)

(pass w by value, x by result, y by value-result, z by reference)

  • Yang perlu diperhatikan dalam parameter passing:
    – Efesiensi, data transfer one-way atau two way
    – Namun keduanya saling bertolak belakang, programming yang baik menganjurkan pembatasan akses ke variable yang artinya one-way lebih baik, namun pass by reference lebih efesien untuk melemparkan struktur size yang signifikan
  • Terkadang lebih mudah untuk melemparkan nama subprogram sebagai parameter
    – Shallow binding : lingkungan pernyataan pemanggil yang menetapkan subprogram yang dilempar (paling natural untuk bahasa dynamic-scoped)
    – Deep binding : lingkungan define dari subprogram yang dilemparkan (paling natural untuk bahasa static scoped)
    – Ad hoc binding : lingkungan pernyataan pemanggil yang melemparkan subprogram
  • Biasanya ketika ada beberapa subprogram yang mungkin dipanggil dan tidak diketahui yang mana hingga eksekusi, maka di bahasa C dan C++ pemanggilannya menggunakan function pointer
    – Di C#, metode pointer diimplementasikan sebagai objek yang dikenal delegate
    – Contoh:

Declaration:

public delegate int Change(int x);

Method:

static int fun1(int x) { … }

Instantiate:
Change chgfun1 = new Change(fun1);

Dapat dipanggil dengan:

chgfun1(12);

  • Delegate yang dapat menyimpang lebih dari satu alamat disebut multicast delegate

Overloaded, Generic, dan User-Defined Overloaded Subprogram


  • Overloaded subprogram merupakan subprogram yang memiliki nama yang sama dengan subprogram lain di lingkungan pengalamatan yang sama juga
  • Di c++, Java, C#, dan Ada terdapat predefined overloaded subprogram
  • Di Ada, return type dari overloaded function dapat digunakan untuk menghilangkan pemanggilan ambigu
  • Ada, Java, C++, C# memperbolehkan user menulis banyak versi subprogram dengan nama yang sama
  • Generic atau polymorphic subprogram mengambil parameter berbeda tipe di berbagai aktivasi
  • Overloaded subprogram menyediakan ad hoc polymorphism
  • Subtype polymorphism berarti suatu variable dari tipe T dapat mengakses objek apapun dari tipe T atau tipe apapun yang diturunkan dari T
  • Operator dapat di-overloaded di Ada, C++, Python, dan Ruby
    – Contoh di Python:

def __add__ (self, second) :

  return Complex(self.real + second.real,

self.imag + second.imag)

Closure


  • Closure merupakan subprogram dan lingkungan pengalamatan dimana ia didefinisikan
  • Lingkungan pengalamatan dibutuhkan jika subprogram dapat dipanggil dari tempat manapun di program tersebut
  • Bahasa ber-static scope yang tidak memperbolehkan nested subprogram tidak memerlukan closure
  • Closure hanya dibutkan jika suatu subprogram dapat mengakses variable di nesting scope dan ia dapat dipanggil darimanapun
  • Untuk mendukung closure, implementasi mungkin dibutuhkan untuk menyediakan jangkauan tak terbatas ke beberapa variable karena suatu subprogram mungkin mengakses variable nonlocal yang biasanya tak lagi ada (no longer alive)

Coroutine


  • Coroutine merupakan subprogram yang memiliki banyak tempat masuk (entry) dan mengontrolnya sendiri, didukung secara langsung di Lua
  • Juga dikenal dengan symmetric control karena coroutine pemanggil dan yang dipanggil berbasis sama
  • Panggilan (call) coroutine disebut resume
  • Resume pertama dari coroutine merupakan ke permulaanya, namun pemanggilan selanjutnya masuk melalui tittik hanya setelah pernyataan yang sebelumnya dieksekusi di coroutine
  • Coroutine secara berulang-ulang berlanjut satu sama lain, berkemungkinan selamanya
  • Control eksekusi yang mungkin:

  • Control eksekusi dengan loop yang mungkin:


Sumber:

  • Concept of Programming Languages 10th. Ed  / Robert W. Sebesta (Chapter 9)
  • Subprograms / 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 *