Apa itu no op (no operation)?
No op berarti no operation, yaitu sebuah instruksi komputer yang tidak melakukan operasi apa pun tetapi tetap menghabiskan sedikit ruang penyimpanan. Ketika prosesor komputer menemukan instruksi no op, ia hanya melanjutkan ke instruksi berikutnya secara berurutan.
Instruksi no op hanya memberi tahu program untuk tidak melakukan apa pun jika suatu pernyataan bersyarat terpenuhi. Instruksi ini tidak mengubah status register, flag status, atau memori yang dapat diakses oleh programmer. Jika instruksi ini memengaruhi elemen-elemen tersebut, bisa terjadi kesalahan memori atau page fault. Oleh karena itu, ketika suatu fungsi atau pernyataan dalam kode tidak memiliki efek atau tujuan yang jelas, hasilnya adalah no op. Itulah mengapa no op kadang disebut sebagai instruksi “tidak melakukan apa-apa”. No op juga dapat ditulis sebagai no-op, noop, atau NOP.
New Hacker’s Dictionary juga mendefinisikan istilah no op sebagai “seseorang yang tidak memberikan kontribusi apa pun pada proyek, atau tidak memiliki pemikiran yang jelas, atau keduanya. Misalnya, ‘Dia adalah no-op.'”
Kegunaan no operation
No op berfungsi sebagai instruksi kosong atau placeholder dalam kode untuk tujuan timing dan untuk menyisipkan instruksi yang berguna nanti selama pengembangan. Instruksi ini memungkinkan prosesor untuk melanjutkan ke instruksi berikutnya. No op juga digunakan untuk menunda aktivitas CPU dan dapat bekerja dengan instruksi lain untuk mencapai hasil tertentu.
Instruksi ini juga dapat digunakan untuk:
- Menjaga keselarasan memori.
- Membatalkan instruksi yang ada.
- Mengisi slot tunda cabang.
- Mencegah hazard dalam pipeline instruksi CPU yang dapat menyebabkan hasil yang salah.
No op dalam bahasa assembly
Bahasa assembly adalah kode mesin, yaitu jenis bahasa pemrograman tingkat rendah yang berkomunikasi langsung dengan perangkat keras komputer. Bahasa ini mirip dengan bahasa mesin tetapi menggunakan kode yang lebih sederhana. Kode assembly dapat dibuat menggunakan assembler (sebuah compiler bahasa assembly) atau oleh programmer manusia.
Instruksi no op disertakan dalam sebagian besar bahasa assembly dan dapat memiliki label. Dalam bahasa ini, salah satu tujuan utamanya adalah membantu menyelaraskan alamat instruksi dan meningkatkan kinerja prosesor. Dengan no op, programmer dapat memastikan bahwa urutan blok memori yang dibaca selalu terjaga.
Keselarasan ini memungkinkan prosesor mengakses data yang diperlukan dari memori tanpa harus mengambil blok terakhir dari blok sebelumnya secara terus-menerus, sehingga meningkatkan kecepatan dan kinerja prosesor.
No op dapat digunakan untuk membajak perangkat lunak
Sebagian besar waktu, no op digunakan untuk tujuan yang sah, seperti menyelaraskan alamat instruksi, meningkatkan kinerja prosesor, dan menambahkan placeholder dalam kode (misalnya, ketika callback belum diberikan).
Namun, no op juga dapat digunakan untuk tujuan yang tidak etis. Salah satu contohnya adalah untuk membajak perangkat lunak. Pembajak perangkat lunak menggunakan no op untuk mengeksploitasi fitur lisensi perlindungan perangkat lunak.
Mereka melakukannya dengan mengganti lompatan bersyarat dalam fungsi pemeriksaan lisensi dengan no op. Rutinitas tersebut masih berjalan; namun, kondisi untuk memeriksa lisensi dan mengembalikan nilai yang diharapkan akan dilewati. Hal ini memungkinkan perangkat lunak melewati pemeriksaan perlindungan sehingga versi yang tidak berlisensi (yaitu, bajakan atau curian) dapat digunakan.
Sintaks no operation
Instruksi no op terdiri dari kode operasi (0000) tetapi tidak memiliki operand, memungkinkan pemisahan antara instruksi dengan alamat instruksi yang berdekatan dan celah dalam aliran instruksi. No op tidak dapat menjadi target cabang, tetapi dapat mendahului atau mengikuti instruksi mesin mana pun, kecuali instruksi akhir. Tidak ada batasan jumlah instruksi no op yang dapat digunakan dalam aliran instruksi. Tidak diperlukan otorisasi dan tidak ada pengecualian.
Sintaks no op bergantung pada bahasa pemrograman. Contohnya:
- ADA: Pernyataan null.
- C: Pernyataan null ditulis dengan titik koma (;).
- JavaScript: Menggunakan pernyataan titik koma kosong atau blok kosong {}.
- JQuery: Fungsi jQuery.noop().
- AngularJS: Fungsi angular.noop.
- Lodash: Fungsi .noop().
- Pascal: Menggunakan titik koma (;) atau blok BEGIN END.
- Python: Pernyataan pass.
- TeX: Perintah \relax.
Eksperimen bahasa Noop di Google
Instruksi mesin no op tidak boleh disamakan dengan Noop (dibaca noh-awp). Noop adalah eksperimen bahasa yang dimulai di Google pada 2009. Tujuan utama Noop adalah mendorong praktik pemrograman yang baik dengan menerapkan pelajaran terbaik dari bahasa pemrograman yang telah berkembang selama 20 tahun terakhir.
Tujuan pengembang Noop meliputi:
- Membangun dependency injection dan kemampuan pengujian sejak awal.
- Mengoptimalkan keterbacaan, kemudahan modifikasi, dan pengujian kode.
- Mencegah penyalahgunaan subclass dan API serta boilerplate yang berlebihan.
- Menghindari penggunaan tipe primitif dan pewarisan implementasi.
- Mendorong imutabilitas dan ruang lingkup variabel minimal dengan pendekatan fungsional.
- Menjaga dokumentasi yang diperbarui dan dapat dieksekusi.
Sebagai bahasa baru, Noop awalnya dirancang untuk berjalan di Java Virtual Machine (JVM) dan memiliki sintaks yang mirip dengan Java. Sumber kode Noop dapat digunakan dalam tiga cara:
- Dengan penerjemah Java yang menghasilkan kode Java tanpa perlu konversi basis kode.
- Melalui interpreter yang membaca dan mengevaluasi kode dengan antarmuka CLI.
- Dengan mengompilasi ke bytecode Java.