2 poin oleh GN⁺ 2023-07-10 | 3 komentar | Bagikan ke WhatsApp
  • 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
    • FPC: Free Pascal Compiler open source
    • Lazarus: IDE Pascal open source berbasis FPC
    • Delphi: Compiler dan IDE Pascal komersial
    • VS Code: Berbagai alat di ekosistem CGE dan Pascal secara eksplisit mendukung integrasi VS Code

3 komentar

 
gmong 2023-07-20

Delphi.. jadi nostalgia. Borland, Delmadang..

 
xguru 2023-07-10

Pada masa masih mengembangkan Windows, sepertinya Object Pascal dengan Delphi memang yang terbaik.

 
GN⁺ 2023-07-10
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

  • 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 teks
    Jika 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

    • begin/end dan {} sebenarnya tidak bermakna sama. {} mendefinisikan scope lokal, sedangkan begin/end tidak
  • Saya 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

    • Mendistribusikan aplikasi desktop C# secara andal benar-benar nyaris seperti mimpi buruk dibandingkan satu file exe yang dibuat Delphi/Lazarus
  • 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

    • Turbo Pascal dan kemudian Delphi adalah momen pertama kali bahasa pemrograman benar-benar terasa nyata bagi saya. Pada akhirnya saya beralih ke C dan C++, tetapi keinginan untuk kembali ke bahasa yang lebih ekspresif selalu ada
      Saya bahkan tidak tahu masih ada implementasi Pascal modern, dan mungkin saya perlu akrab lagi dengan cinta pertama saya
    • Kalau belum pernah mencobanya, ada baiknya melihat Free Pascal. Ia mendukung banyak platform
      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
    • Ah, nostalgia Pascal. Pada masa TRS-80 Model III, saya menabung 80~100 dolar—jumlah besar saat itu—untuk membeli paket Pascal 80, versi New Classics. Itu pada dasarnya adalah IDE awal, dan cukup hebat menurut standar zamannya. http://www.trs-80.org/pascal-80/
      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

    • Generik masuk ke FPC 17 tahun lalu, jadi itu jelas bukan perubahan baru. Jika bicara perubahan besar yang lebih baru, kandidat yang lebih tepat menurut saya adalah fungsi anonim dan referensi fungsi, yaitu closure
      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
    • Menurut saya itu penilaian yang terlalu rendah. Dulu pernah ada benchmark di mana performanya setara C++, dan untuk penggunaan utamanya, yaitu aplikasi GUI lokal, saya belum pernah melihat sesuatu yang bereaksi secepat itu, termasuk aplikasi GUI C# dan sejenisnya
      Jadi saya penasaran benchmark apa yang membuat Anda menilai bahwa ia 50 kali lebih lambat daripada kenyataannya
    • Saya tidak tahu soal FPC, tetapi Delphi 7 sekitar 10 tahun lalu berada di level yang mirip dengan C++ dalam competitive programming, dan sekitar 2~3 kali lebih cepat daripada Java
      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
    • Perbedaan terbesar antara Pascal dan C++ adalah pengalaman pengembang
      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++
    • Saya sangat tidak setuju bahwa ekosistemnya bagus. Saya bekerja dengan Pascal sekitar 10 tahun, dan sering frustrasi karena kurangnya pustaka modern, sampai akhirnya harus membuat solusi sendiri atau membatalkan ide sepenuhnya
  • 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

    • Lambda itu tambal sulam? Benarkah menurutmu lebih baik membuat kelas anonim dengan satu metode?
    • Di Java, interoperabilitas antarbahasa mudah, jadi pilihan seperti Kotlin lebih mudah diambil. Clojure juga begitu. Tetapi jika Anda memakai C++, tidak ada jalur upgrade mudah ke hal lain
      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
    • Kalau begitu, kita harus jauh lebih sering berganti bahasa pemrograman. Menambahkan dan mengintegrasikan fitur baru yang manfaatnya sudah terbukti untuk menunda proses itu tampak masuk akal
    • Sampai baru-baru ini, selain ekosistemnya yang sangat besar, Java punya sedikit keunggulan dibanding Delphi 15 tahun lalu. Tentu saja, ekosistem itu memang mengalahkan segalanya
      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
    • Bahasa JVM yang benar-benar kompetitif baru muncul dalam beberapa tahun terakhir. Scala adalah jalan buntu, Clojure lebih mirip tren sesaat, dan Rhino/JS punya ambisi yang sangat terbatas
      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

    • Saya selalu merasa Ada diremehkan. Secara pribadi saya menghargai fitur seperti keamanan memori, model konkurensi standar, dukungan tipe satuan dan pengukuran, serta precompilation
      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
    • Saya penasaran apakah Ada sekarang mendukung target Android dan iOS. Terakhir kali saya melihatnya, tampaknya belum ada cara yang jelas untuk build untuk NDK
    • Bukan yang paling ramah untuk mulai di macOS
  • 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

    • Saya pernah menonton presentasi terbaru yang membahas topik ini: https://www.youtube.com/watch?v=Tml94je2edk
      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
    • Komputer makin cepat dan memori makin besar, jadi orang harus mencari sesuatu untuk memakainya ;-)
      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

    • Saya penasaran PostScript dipakai untuk apa. Menarik melihat orang memakainya untuk hal selain pekerjaan terkait pencetakan