Apakah ada bahasa pemrograman yang memiliki basis data bawaan sebagai fitur bahasa kelas satu daripada menghubungkan ke database SQL eksternal (atau lainnya)? Apa yang menjadi kelemahan dan manfaat dari fitur seperti itu? Seperti apakah fitur itu dan bagaimana hal itu mengubah cara kita memprogram?
programming-languages
language-design
language-features
database
VirtuosiMedia
sumber
sumber
Jawaban:
Satu-satunya bahasa yang bisa saya pikirkan adalah bahasa xBase lama seperti DBase, Clipper dan FoxPro. Ada proyek GNU yang menawarkan versi gratis dan sebagian besar kompatibel yang disebut Klip
Itu juga Pilih Dasar yang mengikat bahasa pemrograman langsung ke platform database.
Ini sudah dilakukan. Itu adalah jalan buntu evolusi yang membatasi bagaimana suatu bahasa dapat mengakses data.
sumber
Bahasa adalah "kecil" dan database "besar"; jadi setiap kali keduanya digabungkan, itu bukan bahasa dengan database sebagai fitur, tetapi database dengan bahasa sebagai fitur. Banyak basis data memiliki beberapa bahasa berpasangan untuk mereka, misalnya PL / SQL, T-SQL.
sumber
Saya tidak selalu berpikir pertanyaan yang tepat adalah "mengapa tidak ada?" tetapi "mengapa harus ada?". Apa yang akan diperoleh dari memiliki basis data yang menjadi fitur bahasa? Ingat, bahasa berada di bagian paling bawah tumpukan pemrograman. Membuat bahasa kembung memengaruhi segalanya . Karena itu, perancang bahasa perlu lambat untuk menambahkan fitur baru, terutama yang melibatkan investasi seperti itu.
sumber
fopen()
".Ada 3 sistem warisan yang dekat dengan kebutuhan Anda:
Pick dan MUMPS dikembangkan bertahun-tahun sebelum makalah akademis pertama tentang basis data relasional (yaitu sekitar satu dekade sebelum sistem basis data komersial berbasis SQL pertama berhasil masuk ke pasar - dari perusahaan yang sekarang kita sebut Oracle; upaya pertama IBM pada produk gagal dan sistem berbasis SQL yang berhasil adalah nanti). Anda mungkin menemukan mereka masih digunakan (sistem transportasi umum lokal kami menggunakan Pick sampai saat ini untuk sistem perencanaan perjalanan). Anda tidak ingin melakukan apa pun dengan Pick atau MUMPS, dan saran terbaik yang bisa saya berikan adalah "menjauhlah dari keyboard dengan tangan Anda di udara!" Jika Anda melakukan ada hubungannya dengan mereka, frase "Anda akan menyesal" harus dering di telinga Anda.
Microsoft Access sangat diejek dan dikritik di kalangan TI karena sangat mudah bagi non-pengembang untuk membuat aplikasi bisnis yang kritis dari Access dan mengubahnya menjadi sesuatu yang secara harfiah tidak dapat hidup tanpa perusahaan. Sangat mungkin juga bahwa beberapa pengembang memulai pengembangannya melalui MS Access dan ketika hal-hal terus macet, mereka belajar cara memperbaikinya (langkah pertama secara tradisional adalah belajar visual basic dan menulis ulang aplikasi Access terlebih dahulu dalam VB, kemudian dalam sesuatu yang "lebih baik"). Dimungkinkan untuk membuat aplikasi Access berperilaku baik yang berjalan terdistribusi dengan sejumlah besar data - Saya sudah melihatnya selesai - tetapi ada cara yang lebih mudah untuk melakukan sesuatu, dan dibutuhkan keterampilan yang jauh lebih sedikit untuk membuat (dan memelihara) sumur dengan baik berperilaku aplikasi dari VB dan SQL Server.
Sejak SQL Server 2005, Microsoft telah memperkenalkan kemampuan untuk menempatkan CLR ke dalam prosedur dan fungsi yang tersimpan. Dan jika Anda ingin dipermasalahkan tentang itu, Anda bisa membuat tipe data yang kemudian dapat Anda gunakan sebagai kolom dalam database. Saya pikir Oracle memiliki sesuatu yang mirip dengan Java.
Yang sedang berkata, saya tidak berpikir ada sesuatu yang menghentikan Anda dari membuat satu, atau berhipotesis tentang mereka. Pilih dan MUMPS lebih tua dari kebanyakan coder di sini dan mencerminkan cara yang sangat COBOL untuk memandang dunia.
Nasihat pribadi saya adalah untuk memisahkan hal-hal. Gunakan bahasa yang pandai memanipulasi data yang dibutuhkan proyek Anda (dengan peringatan bahwa terkadang bahasa "terbaik" adalah bahasa yang Anda dapat dengan mudah menemukan programmer yang dapat membaca / menulis kode). Gunakan sistem basis data yang bagus dalam menyimpan data yang dibutuhkan proyek Anda.
sumber
Menambahkan database ke bahasa pemrograman mungkin hanya melayani sekelompok pengguna yang sangat sempit. Bagaimana jika mereka ingin menggunakan beberapa fitur non RDBMS? Atau tidak ingin menggunakan database sama sekali? Kompiler tidak perlu membengkak untuk kasus penggunaan seperti itu.
sumber
Berbuat salah.
Pertama, Anda bertanya mengapa kerangka kerja bahasa ini tidak menyediakan basis data. Bahasa hanyalah sarana untuk mengekspresikan sesuatu yang ingin Anda lakukan dalam set grammers; itu tidak benar-benar menyediakan layanan seperti itu. :)
Karena itu, ada beberapa alasan.
Membangun sistem penyimpanan basis data yang efisien adalah masalah yang sulit, mungkin berdasarkan urutan atau lebih besar daripada membangun .NET Framework (misalnya). Jika sebuah tim mencoba memasukkan basis data ke dalam kerangka kerja mereka, hanya itulah yang akhirnya mereka kerjakan.
Basis data yang memuat harus berada di mesin yang terpisah dan bukan dalam proses kode yang mengaksesnya.
ORM menyediakan banyak jenis keamanan dan kompilasi waktu pengecekan yang akan bermanfaat dari tindakan semacam itu, tanpa benar-benar memiliki kerangka kerja yang mencoba menjadi basis data.
Yang mengatakan, saya kira itu akan rapi untuk memasukkan semacam implementasi SQLite dalam kerangka kerja yang aplikasi dengan kebutuhan lebih kecil untuk akses data dapat beroperasi melawan. Saya tidak yakin itu akan berguna dalam aplikasi non-sepele.
sumber
mereka; bahasa seperti itu disebut 4GL . DataFlex adalah favorit saya, meskipun saya tidak menggunakannya lagi.
Peringatan: Saya membantu mengembangkan versi berorientasi objek DataFlex, v3.0
sumber
Saya pikir pertanyaan Anda yang sebenarnya adalah "mengapa tidak ada bahasa pemrograman yang datang dengan pustaka database ".
Bahasa tujuan umum memperlakukan semua IO sebagai satu dan sama, baik itu menulis atau membaca ke / dari disk, webcam, jaringan, layar, lokasi dalam memori - itu semua IO, dan hanya itu yang dipikirkan oleh bahasa pemrograman sendiri dengan.
Bahkan, selain membaca / menulis ke tumpukan dan tumpukan, sebagian besar bahasa pemrograman bahkan tidak melakukan IO yang sebenarnya. Beberapa bahasa menyediakan fitur asli untuk mengekspresikan operasi IO (mis.
print
Perintah dalam BASIC), tetapi sebagian besar bahasa hanya memperlakukan mereka sebagai panggilan fungsi normal (misalnyaprintf
dalam C) dan membiarkan perpustakaan menangani penulisan yang sebenarnya.Beberapa bahasa seperti C # menawarkan fitur bahasa untuk mengekspresikan kueri, tetapi meskipun begitu, itu hanya ekspresi pada struktur data paling dasar dari daftar (atau
IEnumerable
s, sebagaimana mereka disebut dalam. NET) yang diterjemahkan ke dalam operasi SQL oleh perpustakaan - bahasa itu sendiri masih bekerja dengan konsep IO yang sangat abstrak.Adapun mengapa membangun paket database ke perpustakaan standar bahasa pemrograman bukan ide yang baik, kemungkinan besar karena tidak ada yang lain di perpustakaan standar biasanya tergantung pada fungsi database.
sumber
Iya nih. Bahasa pada platform AS / 400 memiliki database asli, dukungan kelas satu.
Ini karena platform AS / 400 memiliki basis data yang sepenuhnya terintegrasi di mana-mana dan memungkinkan banyak fitur yang sangat bagus, seperti kemudahan navigasi melalui resultset yang memperbarui nilai-nilai pada saat melaluinya.
sumber
Tergantung pada bahasa dan platform. Sebagai contoh, cukup sepele bagi saya untuk menggunakan berbagai database saat bekerja dengan C, saya hanya menggunakan perpustakaan yang sesuai.
Suatu bahasa harus mempertahankan penerapan standarnya, dan itu biasanya berarti menyediakan jumlah minimum yang dibutuhkan seseorang untuk dapat membangun apa pun yang ingin mereka bangun. Segala sesuatu yang lain menjadi perpustakaan, atau mungkin perluasan ke bahasa yang dikelola oleh orang lain.
Setidaknya, ini adalah kasus untuk bahasa yang mengikuti standar yang ditetapkan oleh organisasi seperti ISO.
sumber
Seperti ditulis, pertanyaannya sebagian salah, seperti yang ditunjukkan oleh beberapa contoh di atas.
Jadi saya pertama kali memperbaiki pertanyaan untuk dibaca, "Mengapa DBMS biasanya tidak terintegrasi sebagai fitur dari bahasa pemrograman tingkat tinggi yang bertujuan umum?"
Ini karena alasan yang sama bahwa produk perangkat lunak lain seperti sistem operasi, sistem file, server web, lapisan caching, dll. Biasanya tidak terintegrasi. Bahasa tujuan umum umumnya beroperasi pada tingkat abstraksi di atas produk tersebut. Jadi masuk akal bagi seorang programmer untuk mengimplementasikan DBMS dibahasa tujuan umum, dan bahwa DBMS mungkin bahkan mengekspos aspek bahasa induknya atau bahasa deklaratif spesifik DB untuk digunakan oleh programmer DB. Tetapi ada terlalu banyak pilihan desain dalam menulis DBMS sehingga tidak bijaksana untuk memperbaikinya dalam bahasa pemrograman tujuan umum. Jika Anda benar-benar memperbaikinya, Anda akan menemukan kasus seperti MUMPS, di mana keterkaitan keduanya menghasilkan seluruh industri terperosok dalam masalah ayam-dan-telur, terjebak dengan DBMS yang usang dan bahasa pemrograman yang usang.
sumber
Digunakan untuk bekerja di NonStop / SQL yang sepenuhnya terintegrasi ke dalam NonStop / C, NonStop / C ++, NonStop / Cobol, NonStop / Fortran, dan mungkin bahasa lain serta sepenuhnya terintegrasi dengan NonStop / Guardian, sistem operasi yang digunakan komputer berlari.
Saya pikir itu mungkin integrasi terdekat yang bisa Anda dapatkan, di mana basis data adalah sistem file sistem operasi. Ini juga jalan buntu, tidak ada cara untuk memisahkan komponen apa pun, database, sistem operasi, perangkat keras, dan perangkat lunak apa pun yang ditulis di dalamnya tidak pernah dapat digunakan secara terpisah, dipindahkan ke lingkungan lain.
Yang paling dekat Anda akan dapatkan pada PC kemungkinan adalah MS Access, Embarcadero / Borland Delphi menjadi yang kedua.
Setelah itu, Anda melihat database yang disematkan di aplikasi Anda, yang dapat memiliki daya tarik terbatas bagi mereka yang membuat aplikasi mandiri yang membutuhkan sekumpulan data hierarkis yang tidak mudah disimpan dalam file konfigurasi sederhana dan / atau perlu pembaruan rutin saat aplikasi berjalan . Atau bagi orang-orang yang ingin memiliki versi portabel dari suatu aplikasi yang menyimpan snapshot sebagian dari basis data yang lebih besar dan mungkin menyinkronkannya dengan basis data yang lebih besar pada saat-saat ketika aplikasi dapat membuat koneksi (berguna untuk mengatakan seorang penjual yang sering berada di luar jangkauan jaringan perusahaan belum membutuhkan data penjualan untuk kelompok pelanggannya, atau dokter di lapangan yang menginginkan catatan pasien tetapi tidak dapat terhubung ke jaringan rumah sakit karena tidak ada akses jaringan ke mana ia harus pergi).
sumber
Sebagai mantan pengembang Visual Foxpro, saya kira itu aneh bahwa tidak ada bahasa utama yang mendefinisikan model relasional sebagai bagian dari bahasa.
Memiliki mesin basis data lengkap bukanlah ide yang baik, tetapi memiliki bahasa "SQL" sebagai gantinya SANGAT berguna.
Dalam OO, ada ketidakcocokan impedansi. Ini terjadi karena objek dan mengatur tidak suka satu sama lain. Tetapi jika suatu bahasa izinkan saya mendefinisikan TABLES, BIDANG, HUBUNGAN, KENDALA, dll (tanpa mengikatnya ke penyimpanan tertentu) akan sangat kuat. Plus, membuat ORM akan lebih pemetaan 1-ke-1.
sumber