Alasan Menggunakan Pascal
(castle-engine.io)- Object Pascal bertujuan menggabungkan bahasa berorientasi objek modern yang mudah dibaca dengan performa native, dan menjadi pilihan untuk membuat aplikasi yang mudah dipelihara di berbagai platform
- Berkat strong typing, pemeriksaan saat kompilasi, dan pemeriksaan runtime, kesalahan seperti salah ketik nama atau ketidakcocokan tipe lebih mudah tersaring sebelum sampai ke pengguna
- Jika diperlukan, pointer, kode khusus OS/CPU, hingga assembly bisa digunakan, tetapi Castle Game Engine memilih mempertahankan kode cepat tanpa assembly
- Dapat menargetkan cakupan luas mulai dari Windows, Linux, macOS, mobile, konsol, hingga web, dan di Castle Game Engine kode engine dan kode game ditulis dalam bahasa yang sama
- Dengan integrasi FPC, Lazarus, Delphi, VS Code, serta koneksi ke berbagai library, alur pengembangan yang praktis dapat dibangun di dalam ekosistem Pascal
Object Pascal yang mudah dibaca dan type-safe
- Object Pascal diperlakukan sebagai bahasa cross-platform yang modern, mudah dibaca, cepat, dan type-safe
- Jika sudah mengenal bahasa berorientasi objek lain, bahasa ini relatif mudah dipelajari, dan Modern Object Pascal Introduction for Programmers dapat digunakan sebagai materi belajar
- Memiliki fitur yang diharapkan dari bahasa berorientasi objek modern
- class
- unit
- property
- generic
- interface
- reflection
- closure
- Sintaksnya berfokus pada kode yang mudah dibaca
- Untuk type safety, tersedia tipe terpisah seperti boolean, string, char, set, enum, dan range
- Konversi yang aman, seperti memasukkan integer ke float, ditangani dengan mudah
- Konversi lainnya harus dilakukan secara eksplisit
Cara menangkap error saat kompilasi dan runtime
- Object Pascal menekankan pemeriksaan saat kompilasi
- Saat melakukan refactoring seperti menata ulang struktur data, compiler dapat dibuat menampilkan titik-titik yang perlu diperbaiki
- Kesalahan jelas seperti salah ketik nama atau ketidakcocokan tipe tidak akan lolos kompilasi, sehingga tidak sampai ke pengguna
- Pemeriksaan runtime tambahan juga tersedia
- Pemeriksaan batas array
- Pemeriksaan overflow integer
- assertion
- Pemeriksaan kebocoran memori
- Pemeriksaan runtime digunakan untuk menangkap masalah pada versi debug, dan dapat dimatikan pada versi release yang sensitif terhadap performa
- Saat melakukan kompilasi dengan CGE editor, mode debug / release diatur otomatis, dan mode dapat diganti dari menu “Run”
- Sebagai dokumentasi terkait, lihat What are range and overflow checks (and errors) in Pascal dan Detecting Memory Leaks
Performa native dan kontrol low-level seperlunya
- Object Pascal dikompilasi menjadi kode native, sehingga performa eksekusi dasar mudah diperoleh
- Pada aplikasi umum, sering kali tidak perlu turun sampai optimasi low-level
- Jika diperlukan, fitur low-level dapat digunakan sebanyak yang diinginkan
- Penggunaan pointer
- Operasi pointer
- Penulisan kode khusus OS/CPU
- Penambahan kode assembly
- Untuk meningkatkan portabilitas dan keterbacaan kode, Castle Game Engine menargetkan eksekusi cepat meski sama sekali tidak memiliki kode assembly
- Kompilasinya juga tergolong cepat; ada contoh ketika pertama kali membuka proyek baru, build desktop memakan waktu 2,5 detik dan build Android 10,1 detik
Berbagai platform dan cara pengembangan Castle Game Engine
- Object Pascal dapat digunakan untuk menargetkan beragam platform
- Desktop: Windows, Linux, macOS, Raspberry Pi, FreeBSD, kemungkinan semua Unix
- Mobile: Android, iOS
- Konsol: Nintendo Switch
- Web: WebAssembly, JS menggunakan pas2js
- Platform yang didukung Castle Game Engine dapat dilihat di Castle Game Engine platforms supported
- Untuk seluruh target yang mungkin, lihat FPC target platforms dan Delphi target platforms
- Di Castle Game Engine, kode engine dan kode game ditulis dalam bahasa yang sama
- Engine ini open source, dan CGE dapat di-fork serta dimodifikasi sesuai kebutuhan
Ekosistem library dan alat pengembangan
- Pascal memiliki berbagai library dan unit yang sudah ada untuk banyak bidang
- Database
- XML, JSON
- AI
- Blockchain
- Networking
- Library yang sudah ada dan memiliki C API dapat dengan mudah diintegrasikan atau ditautkan
- Renderer
- Library suara
- Physics engine
- Python libraries in Pascal juga dapat digunakan
- Ekosistem alat utamanya adalah sebagai berikut
3 komentar
Delphi.. jadi nostalgia. Borland, Delmadang..
Pada masa masih mengembangkan Windows, sepertinya Object Pascal dengan Delphi memang yang terbaik.
Komentar Hacker News
Jika pernah memakai Delphi, kemungkinan besar sudah mengenal Lazarus. Lazarus pada dasarnya mirip reimplementasi open source, dan bisa dijalankan serta dikompilasi secara native hampir di mana saja, termasuk papan ARM seperti Raspberry Pi
Namun pemasangan library kadang merepotkan, jadi dibuatlah FpcUp, lalu FpcUpDeluxe, untuk mengotomatisasi pemasangan IDE, modul, dan beberapa addon yang cukup menarik
https://wiki.freepascal.org/fpcupdeluxe
Ada juga demo widget panel instrumen yang dibuat cepat memakai widget gratis yang disertakan di FpcUpDeluxe
https://ibb.co/9bchx7T
FpcUpDeluxe juga berjalan di Alpine Linux; cukup unduh versi musl dari halaman rilisnya. Jadi terbuka kemungkinan menaruh panel instrumen bahkan di sistem yang sangat kecil. Kode dapat dikompilasi secara native di banyak platform dan berjalan cepat, tanpa perlu interpreter atau browser web
Terakhir kali memakai Lazarus dan Delphi, Unicode masih terasa sulit, dan secara umum terasa seperti mengasumsikan ASCII
[0] https://github.com/markmal/freeship-plus-in-lazarus
[1] http://web.archive.org/web/20160128212152/http://hydronship.net/index.php?lang=en
[2] https://sourceforge.net/projects/freeship
Saya pernah memakai Delphi/Pascal sebagai bahasa utama, dan selama 10–20 tahun terakhir terus mencari bahasa yang cocok untuk saya. Saya juga cukup lama memakai Haxe, tetapi akhirnya terasa terjebak pada pola “itu bisa dilakukan dengan macro”. Macro memang bisa melakukan apa saja, tetapi jika jumlahnya terlalu banyak, semua orang akhirnya memprogram dengan bahasa ekstensi macro buatan masing-masing
JavaScript mendapat beberapa perbaikan yang bagus dan masih butuh lebih banyak lagi, tetapi sekarang saya juga banyak bekerja di sana. Beberapa tahun lalu saya kembali memakai FreePascal saat menulis kode AVR 8-bit, dan itu sangat menyenangkan. Setelah mencoba fitur-fitur barunya, rasanya benar-benar seperti bahasa modern, dan saya juga suka karena saat menulis untuk ruang yang kecil saya hampir tidak memakai standard library dan malah membuat sendiri kode yang dibutuhkan
Karena itu saya bisa menghindari lapisan kebisingan namespace kompatibilitas mundur yang telah menumpuk selama bertahun-tahun di FreePascal, seperti TList, TFPList, TFPGList, dan TFPGObjectList. Hal yang paling saya sayangkan adalah compiler tidak mengizinkan ekspresi floating-point konstan pada target tanpa FPU atau emulasi. Rasanya itu seharusnya bisa saja karena dapat dihitung saat kompilasi
Setelah memakai lingkungan lain, sekarang rasanya agak membatasi bahwa variabel tidak bisa didefinisikan di tengah fungsi, dan akan bagus juga jika ada scope setingkat subfungsi. Perbedaan begin/end dan
{}tidak terlalu saya pedulikan. Sekarang saya lebih suka bahasa yang peka huruf besar-kecil, dan menurut saya lebih baik tidak memberi prefiks huruf pada tipe. Ini tampaknya terutama karena perkembangan editor. Penyorotan sintaks dan linting real-time memindahkan informasi ke area terpisah sehingga mengurangi kebisingan teksJika bahasa penerus FreePascal muncul dengan pendekatan awal yang baru, saya mungkin akan sangat antusias. Akan bagus jika ada standard library baru yang memperlakukan fitur modern sebagai warga kelas satu, dan mungkin saya akan mencoba membuatnya sendiri saat pensiun nanti
{}sebenarnya tidak bermakna sama.{}mendefinisikan scope lokal, sedangkan begin/end tidakSaya memakai Delphi untuk pekerjaan selama beberapa tahun pada era 90-an dan menyukainya, tetapi saya lelah melihat Borland dan para pemilik setelahnya terus salah mengelola produk dan bahasanya. Anders Hejlsberg juga meninggalkan Borland ke Microsoft dan membuat C#, yang menurut saya pribadi merupakan bahasa dan arsitektur yang jauh lebih layak untuk menginvestasikan waktu
Akhir-akhir ini saya memakai Pascal untuk bersenang-senang karena keterbatasan sumber daya. Turbo Pascal 3.00A lama dari Borland berjalan di CP/M, dan menyediakan editor, kompiler, serta pustaka semuanya dalam 64KB
Cukup cepat untuk dipakai secara interaktif, dan menghasilkan kode yang memadai untuk utilitas tingkat rendah, game sederhana, serta berbagai eksperimen iseng. Saya belum pernah memakai Pascal di lingkungan yang lebih besar atau modern, tetapi pengalaman terbaru ini cukup memuaskan sehingga saya tidak berniat menyingkirkannya
Saya bahkan tidak tahu masih ada implementasi Pascal modern, dan mungkin saya perlu akrab lagi dengan cinta pertama saya
Jika Anda membutuhkan CP/M, Anda bisa memeriksa dukungannya di situsnya, dan saya tidak akan terkejut kalau memang didukung. IDE UI teksnya sangat mirip dengan Turbo Pascal dan sangat cepat. Bahasanya punya jauh lebih banyak fitur tingkat lanjut daripada Turbo Pascal, tetapi Anda tidak perlu memakainya jika tidak mau
Saat dulu saya mengujinya secara singkat di Windows, biner yang dihasilkan juga sangat kecil seperti C, dan program hello world sederhana berukuran di bawah 50~60KB
Saya ingat itu merupakan lompatan besar dibanding lingkungan pengembangan M-III BASIC, dan game serta utilitas buatan saya berjalan cukup baik bahkan dalam RAM 48KB. Saya penasaran apa yang terjadi pada codebase Pascal-80. Mustahil lebih baik daripada alat modern untuk perangkat keras retro, dan mungkin jauh lebih buruk. “Oh Pascal!” adalah buku yang saya pakai untuk mempelajari bahasa ini, dan beberapa tahun sebelum Pascal dipakai secara komersial tampaknya memang tidak banyak pilihan lain
Saya sulit setuju dengan beberapa alasannya. Object Pascal bukan bahasa modern. Mungkin iya pada 1998, tetapi setelah itu tidak berkembang banyak, dan perubahan besar terakhir pun adalah generik yang datang lebih lambat daripada hampir semua bahasa lain
FPC juga tidak menghasilkan kode yang sangat cepat, dan karakteristik objek Object Pascal juga tidak menguntungkan locality. Memang lebih cepat daripada bahasa skrip, tetapi umumnya lebih lambat daripada bahasa pra-kompilasi pada umumnya, termasuk bahasa dengan garbage collection
Di sisi lain, ekosistemnya bagus. Ada banyak pustaka dan alat yang baik, dan yang paling menonjol adalah Lazarus, klon Delphi. Orang-orang yang memakai FPC atau Delphi biasanya tidak terlalu peduli pada modernisasi bahasa dan hanya fokus menyelesaikan pekerjaan. Namun, saya ragu itu akan menarik bagi pengembang baru, jadi saya tidak tahu bagaimana masa depannya
Kinerja nyatanya cukup memadai, dan jika Anda menemukan bottleneck, Anda bisa mengoptimalkannya seperlunya. Dibanding C++, memakai kelas yang lebih “tingkat tinggi” bisa sedikit lebih merepotkan, tetapi bukan tidak mungkin
Jika Anda ingin kinerja dasar dengan usaha minimal, ada juga backend LLVM baru. Karena pustaka runtime dan FCL semuanya harus dibangun dengan backend LLVM, Anda memang perlu membangun kompiler dari source, tetapi itu hanya memakan beberapa menit. Sebagai gantinya kompiler menjadi jauh lebih lambat, dan secara pribadi saya tidak merasa selisih kinerjanya sepadan
Jadi saya penasaran benchmark apa yang membuat Anda menilai bahwa ia 50 kali lebih lambat daripada kenyataannya
Yang dimaksud competitive programming di sini adalah perhitungan algoritmik CPU-bound single-thread yang singkat, dengan batas 1~3 detik per eksekusi, lingkungan yang tidak menguntungkan bagi JIT, dan dijalankan dengan setelan kompiler/runtime bawaan tanpa pustaka eksternal atau tuning. Saat itu anggapan umumnya adalah memakai C++/Pascal, atau menulis dulu di Java lalu ketika muncul “time limit exceeded”, menulis ulang solusi 200~300 baris itu ke C++ agar lolos
Pascal memakai kompiler single-pass LL(1), sehingga kompilasi dalam hitungan milidetik dimungkinkan. Ini memberi pengalaman seperti REPL: Edit→Compile→Run selesai dalam waktu kurang dari 1 detik. C/C++ dengan makro dan waktu kompilasi yang lambat punya pengalaman pengembang yang lebih buruk, dan setidaknya itulah alasan saya dulu belajar Pascal alih-alih C, dan Delphi alih-alih C++
Tidak paham kenapa harus begitu. Bahasa lama memang perlu dipertahankan demi dukungan legacy, tetapi saya tidak begitu melihat gunanya memaksakan fitur-fitur modern seperti itu ke bahasa lama
Saya banyak memakai Java, tetapi jujur saya rasa hampir semua fitur setelah Java 8 seharusnya tidak perlu ditambahkan. Misalnya, lambda di Java terasa nyaris seperti tambal sulam
Kalau ingin fitur modern, pakai saja bahasa modern. Jika ingin tetap di ekosistem Java, pakai Kotlin. Saya benar-benar sudah puluhan tahun tidak melihat Pascal, terakhir memprogramnya pada 1980-an, jadi saya hanya bicara soal Java, tetapi menambahkan daftar fitur seperti itu ke Pascal terlihat konyol
Tetap saja, ada nilai dalam memasukkan fitur modern. Anda bisa memilih bahasa modern seperti Rust alih-alih memulai proyek baru dengan C++, tetapi jutaan baris kode C++ yang sudah ada bisa ditingkatkan dengan fitur modern. Lihat saja bagaimana C++11 mengubah keadaan
Bahasa Java menghasilkan sangat banyak boilerplate code karena keputusan untuk mengandalkan pustaka alih-alih fitur bahasa, dan menurut saya arah itu keliru. Apa yang bisa dilakukan di Python, Lisp, Haskell, semuanya bisa dilakukan juga di Java, tetapi secara definisi brainf*ck juga bisa. Kompleksitas solusi Java nyata menjadi lebih tinggi daripada bahasa yang kaya fitur, dan pada akhirnya orang akan mengimplementasikan ulang fitur bahasa itu dengan cara yang agak rusak, atau menarik banyak dependensi untuk menggantikannya. Bagaimanapun juga, itu hanya menambah permukaan API yang harus dipelajari
Berkat perbaikan Java, JVM bisa tetap relevan dan menahan DotNet, dan mengingat sejarah Microsoft, itu hal yang baik
Sering diabaikan, tetapi ekosistem embedded Ada punya keunggulan dalam kematangan analisis statis, debugging, dan dukungan target
Sintaks Ada yang mirip Pascal memang terlihat bertele-tele, tetapi tidak sulit dibaca. VHDL juga berbasis sintaks Ada, jadi bagi orang yang memakai keduanya, itu bisa terasa lebih mudah
Swift juga memenuhi sebagian dari ini, dan menambahkan fitur praktis seperti closure, automatic reference counting, dan type inference. Saya tidak tahu soal tipe pengukuran, tetapi tampaknya bisa diimplementasikan. Hanya saja, tampaknya belum ada HDL seperti Swift
Pascal sebenarnya bagus dan performanya juga lumayan. Itu bahasa kedua yang saya pelajari setelah Basic saat SMA
Saya tidak mengerti kenapa industri harus mundur ke Python, Ruby, Java, JavaScript pada akhir 1990-an dan awal 2000-an
Presentasi itu menjelaskan bahwa bahasa dynamic typing seperti Python, Ruby, dan JS menjadi populer pada 1990-an karena memberikan loop umpan balik cepat saat membuat website, dan tidak membutuhkan IDE atau compiler. Pada masa itu IDE dan compiler lambat dan sering kali tidak gratis
Lagi pula, saat itu pengguna masih terhubung lewat modem 56k, jadi menukar waktu pengembangan dengan peningkatan performa tidak terlalu menguntungkan. Presentasi itu juga punya banyak poin menarik tentang bagaimana cara pengembangan berubah dalam 10–20 tahun terakhir, dan kenapa arus kini kembali bergerak ke static typing
Selain itu, browser web menjadi platform pemrograman yang populer dan terutama memakai JavaScript. Bahkan sekarang, selain bagian browser itu sendiri, orang juga mencoba menyumpalkan sistem operasi lengkap ke dalam browser web, dan Chrome sudah cukup dekat ke sana
Proyek pertama saya di tahun pertama kuliah adalah simulator lift yang dibuat dengan Pascal, memakai grafis teks. Dibandingkan bahasa keluarga C, Pascal punya semacam keanggunan yang membuatnya menyenangkan
Karena itu saya menikmati Nim belakangan ini, dan setahu saya Nim dipengaruhi bukan hanya oleh Ada dan Python, tetapi juga oleh bahasa keluarga Wirth seperti Pascal, Modula-3, Oberon, dan Delphi
Pascal tidak seburuk itu, dan menurut saya malah punya beberapa kelebihan dibanding sebagian bahasa pemrograman modern. Tentu tidak sempurna dan tetap punya kekurangan
Kadang saya memakai Pascal dan BASIC untuk pemrograman DOS, dan setidaknya untuk kegunaan itu Pascal tampak baik-baik saja. C juga dipakai untuk pemrograman DOS, tetapi terutama dalam real mode, rasanya tidak terlalu cocok
Untuk pemrograman Linux saya umumnya lebih suka C, tetapi juga memakai PostScript. Saya rasa baik C maupun PostScript punya kelebihan dibanding sebagian bahasa modern. Pascal bisa dipakai untuk program lain juga, dan bahkan TeX ditulis dalam Pascal