Bahasa pemrograman tujuan umum

**Bahasa pemrograman tujuan umum** (*general-purpose programming language*; **GPL**) adalah bahasa pemrograman yang digunakan untuk membangun perangkat lunak dalam ragam domain aplikasi. Sebagai kebalikan dari konsep ini, bahasa pemrograman spesifik domain (*domain-specific language*; DSL) digunakan untuk membangun perangkat lunak dalam domain tertentu. Sebagai contoh, bahasa pemrograman Python termasuk GPL, dapat digunakan untuk membangun perangkat lunak di berbagai domain (*mobile*, web, dsb.), sementara bahasa SQL adalah berjenis DSL, digunakan secara spesifik untuk melakukan kueri pada basis data relasional.

## Sejarah
Bahasa pemrograman masa awal dirancang secara khusus untuk melakukan proses komputasi ilmiah (kalkulasi numerik) atau pemrosesan data komersial, begitu juga dengan desain perangkat keras komputer saat itu. Bahasa pemrograman ilmiah seperti Fortran dan ALGOL mendukung perhitungan bilangan titik mengambang (*floating-point*) dan larik multidimensi (*multidimensional array*), sementara bahasa pemrograman bisnis seperti COBOL mendukung format berkas bidang tetap (*fixed-field*) dan rekord data. Contoh bahasa khusus lain seperti IPL-V dan LISP yang digunakan untuk pemrosesan senarai simbolik (*symbolic list processing*); COMIT melakukan manipulasi pada tipe data untai (*string*); dan APT untuk mesin yang dikendalikan secara numerik. Pemrograman sistem yang memerlukan manipulasi pointer biasanya dilakukan dalam bahasa rakitan (*assembly*), meskipun JOVIAL digunakan untuk tujuan tersebut dalam aplikasi militer.

Seri komputer *mainframe* System/360 yang dirilis oleh IBM pada tahun 1964, didesain sebagai arsitektur perangkat keras terpadu untuk aplikasi baik ilmiah dan komersial. Untuk memprogram sistem komputer tersebut, IBM mengembangkan bahasa PL/I sebagai *bahasa tujuan umum* yang mendukung pemrograman untuk keperluan ilmiah, komersial, dan sistem. Pada perkembangan berikutnya, subhimpunan dari bahasa PL/I digunakan sebagai standar bahasa pemrograman sistem untuk sistem operasi Multics.

Sejak pengembangan bahasa PL/I oleh IBM, pembedaan antara bahasa pemrograman untuk tujuan ilmiah dan komersial telah berkurang, dengan sebagian besar bahasa pemrograman yang didesain kemudian mendukung fitur-fitur dasar yang dibutuhkan oleh kedua tujuan tersebut, dan sebagian besar penanganan format berkas khusus didelegasikan ke sistem manajemen basis data khusus, dan bukan oleh *mainframe* komputer secara langsung lagi.

Meskipun demikian, tetap banyak bahasa pemrograman khusus tetap dikembangkan mulai tahun 1960an: GPSS dan Simula untuk simulasi kejadian diskrit; MAD, BASIC, Logo, dan Pascal untuk keperluan pengajaran pemrograman; C untuk pemrograman sistem; JOSS dan APL\360 untuk pemrograman interaktif.

## GPL versus DSL
Pembedaan antara bahasa pemrograman tujuan umum dan tujuan khusus domain tidak selalu jelas. Bahasa pemrograman dapat memiliki desain untuk tujuan pengerjaan tugas tertentu, tetapi pada penggunaannya dapat digunakan di luar domain asli dan dengan demikian dapat dianggap sebagai bahasa pemrograman tujuan umum. Misalnya, pada awalnya COBOL, Fortran, dan Lisp didesain sebagai DSL (untuk pemrosesan bisnis, perhitungan numerik, dan pemrosesan simbolik), tetapi seiring berjalannya waktu digunakan di domain berbeda sehingga digolongkan menjadi GPL. Sebaliknya, suatu bahasa pemrograman bisa saja dirancang untuk penggunaan umum tetapi pada pada praktiknya hanya diterapkan pada area tertentu.  Suatu bahasa pemrograman yang cocok untuk memecahkan suatu masalah, baik itu bahasa tujuan umum atau DSL, harus mampu meminimalkan tingkat detail yang diperlukan tetapi tetap cukup ekspresif untuk bekerja di domain masalah.  Seperti yang tersirat dalam namanya, bahasa tujuan umum bersifat “umum” karena tidak memiliki dukungan untuk notasi yang dipakai dalam domain yang spesifik sementara DSL dapat dirancang dalam berbagai domain masalah untuk menangani masalah ini. Dalam suatu domain permasalahan yang belum terdefinisi dengan baik, bahasa tujuan umum lebih dipilih ketimbang DSL. Untuk memecahkan masalah dalam domain tersebut, bahasa tujuan umum dengan pustaka tipe data dan fungsi yang sesuai dapat digunakan. Walaupun bahasa DSL biasanya berukuran lebih kecil daripada GPL karena menawarkan rentang notasi abstraksi yang lebih kecil, beberapa DSL sebenarnya memuat keseluruhan pustaka GPL sebagai subbahasa. Dalam kasus ini, DSL mampu menawarkan kekuatan ekspresif untuk mengolah masalah domain spesifik bersama dengan kekuatan ekspresif GPL.

Bahasa pemrograman tujuan umum seluruhnya bersistem Turing lengkap, yang berarti secara teoretis mereka dapat digunakan memecahkan masalah komputasi apa pun. Bahasa-bahasa domain spesifik sering kali bersistem Turing lengkap tetapi tidak secara eksklusif demikian.

### Kelebihan dan kekurangan
Bahasa pemrograman tujuan umum lebih sering digunakan oleh para pemrogram. Menurut sebuah penelitian, bahasa C, Python, dan Java adalah bahasa pemrograman yang paling sering digunakan pada tahun 2021. Salah satu argumen yang mendukung penggunaan GPL dibanding DSL adalah bahwa lebih banyak orang terbiasa menggunakan bahasa GPL yang bisa dipakai di ragam domain, sehingga mengurangi kebutuhan untuk mempelajari bahasa baru untuk memecahkan masalah di ragam domain.

Selain itu, untuk banyak tugas (seperti analisis statistik, pemelajaran mesin, dll.) ada ragam pustaka dalam bahasa GPL yang diuji dan dioptimalkan secara ekstensif. Secara teori, keberadaan pustaka-pustaka ini menjembatani kesenjangan antara GPL dan DSL.

Suatu studi empiris pada tahun 2010 berupaya membandingkan tingkatan kemampuan pemecahan masalah dan produktivitas yang dilakukan baik antara GPL atau DSL. Studi ini dilakukan dengan memberikan masalah pemrograman kepada pengguna yang familiar dengan GPL (C#) dan tidak familiar dengan DSL (XAML). Hasilnya, pengguna bahasa DSL ini memperoleh kinerja yang lebih baik sebesar 15%, meskipun mereka lebih familiar dengan GPL, sehingga memerlukan penelitian lebih lanjut. 

## Contoh bahasa pemrograman tujuan umum

### Bahasa Pemrograman C
Pendahulu bahasa C, yaitu bahasa B, dikembangkan dengan tujuan khusus untuk pemrograman sistem. Sebaliknya, bahasa C telah digunakan dalam berbagai domain komputasi, seperti sistem operasi, pemacu peranti (*device drivers*), perangkat lunak aplikasi, dan sistem terbenam (*embedded systems*).

Bahasa pemrograman C cocok digunakan di ragam domain masalah karena bersifat umum. Bahasa tersebut menyediakan ekspresi, kontrol aliran, struktur data yang ekonomis, dan sekumpulan besar operator, tetapi tidak membatasi pengguna C dalam mendesain program untuk satu konteks saja. Alhasil, meskipun pertama kali digunakan oleh perancangnya untuk menulis ulang kernel pada sistem operasi Unix, bahasa C dapat kemudian diadaptasi untuk pengembangan aplikasi, pengembangan sistem terbenam (misalnya, dalam pemrograman mikroprosesor), atau pengembangan permainan video (misalnya, digunakan dalam pengembangan seri permainan Doom), dan seterusnya. Saat ini, C tetap menjadi salah satu bahasa pemrograman yang paling populer dan banyak digunakan.

### Bahasa Pemrograman C++
Dirancang sebagai ekstensi dari bahasa C, bahasa pemrograman C++ memperkenalkan fitur dengan paradigma berorientasi objek, dan fitur lain seperti referensi, pelebihan muatan operator (*operator overloading*), dan argumen-argumen bawaan (*default arguments*). Seperti bahasa C, sifat umum bahasa C++ membuatnya dapat digunakan di ragam domain. Meskipun penerapan utama bahasa C++ adalah di domain pemrograman sistem (bahasa C++ memiliki kemampuan mengakses ke arsitektur komputer tingkat rendah), bahasa C++ secara luas digunakan untuk merancang antara lain: aplikasi *desktop*, permainan video, basis data, dan sistem keuangan. Perusahaan perangkat lunak dan perusahaan keuangan besar, seperti Microsoft, Apple, Bloomberg, serta Morgan Stanley, menggunakan bahasa C++ secara luas dalam aplikasi internal dan eksternal mereka.

### Bahasa Pemrograman Python
Bahasa Python dirancang sebagai bahasa yang mementingkan keterbacaan dan ekstensibilitas kode. Keterbacaan memungkinkan para pengguna yang tidak berpengalaman untuk mempelajari dan menulis program komputer dengan mudah, sedangkan ekstensibilitas kode memungkinkan para spesialis domain untuk merancang pustaka untuk domain mereka dengan mudah. Karena dua hal ini, bahasa Python telah digunakan secara luas di berbagai domain.

Berikut ini adalah beberapa domain tempat aplikasi bahasa Python: 

* **Pengembangan Web:** Kerangka kerja web seperti Django dan Flask memungkinkan pengembang web untuk membuat peladen (*server*) web yang bersifat tangguh (*robust*). Peladen tersebut kemudian dapat memanfaatkan ekosistem dalam bahasa Python yang lebih luas.
* **Sains dan Akademisi:** Bahasa Python menyediakan pustaka spesifik kebutuhan ilmiah dan pengolahan data, seperti SciPy dan Pandas. 
* **Pemelajaran Mesin:** Pustaka bahasa Python seperti Scikit-learn dan Tensorflow meningkatkan aksesibilitas pengembangan pemelajaran mesin.
* **Pengembangan Perangkat Lunak Umum:** Bahasa Python menjadi media pengembangan aplikasi pengguna, program pengikisan konten web (*web scraping*), permainan digital, dan perangkat lunak umum lainnya.

## Lihat juga

* Bahasa markah tujuan umum
* Bahasa pemodelan tujuan umum

## Referensi