Izlasot On Lisp, man prātā palika kāda doma kāpēc Lisp un Lisp hakeri ir tik kruti: labākie hakeri problēmu risināšanai veido augsta līmeņa, problēmas domēnam specifisku programmēšanas valodu un Lisp ļauj viņiem to izdarīt. Arī citas programmēšanas valodas ļauj izveidot tādu abstrakcijas līmeni (ja autors pacenšas), bet Lisp tas iznāk daudz elegantāk un neatšķiras no valodas iebūvētajām konstrukcijām. Pēc grāmatas izlasīšanas cenšos savādāk skatīties uz koda rakstīšanu: vairāk domājot nevis par to, kādu API var piedāvāt zemākais līmenis, bet gan kā vajadzētu izskatīties augstāka līmeņa kodam, un tad rakstot API, kas to nodrošina.
Spēlējoties ar OCI, atklāju OTL streams un man ideja iepatikās, tikai realizācija gan nē. Pretstatā daudzām citām SQL bibliotēkām, šī ļauj nedomāt par prepare/bind/execute/describe/fetch soļiem. Un ļauj nedomāt par lietām, ko programma var izdomāt pati – visādu setDouble()/setString()/utml. izsaukumu vietā programma pati var noskaidrot paramteru tipu un izmēru. Bibliotēka ir vērtīgāka tad, ja tā ļauj rakstīt augstākā abstrakcijas līmenī, nevis tikai noslēpj dažus API izsaukumus. Man atlika atrast brīvu laiku un savam iepriekšējam, Tuxedo orientētajam, darbam pievienot papildus stream interfeisu (tas nebija triviāli) un ieguvu kaut ko līdzīgu OTL ar bulk operācijām zem interfeisa:
DbStream s("SELECT name, value FROM something WHERE id = :id");
s << 14;
while (s) {
s >> name >> value;
}
Un tas tikai ~1500 koda rindiņās, nav slikti. Vēl jāuzraksta vairāki vienībtesti un tad lēnā garā metīšu ārā kādus 95% PRO*C koda, aizstājot to ar 2-3 reizes īsāku. PRO*C ir forši, bet tā pre-kompilēšana, nepieciešamība uzturēt DB kompilēšanas vajadzībām un boilerplate kods, kas jāraksta bulk operācijām, nogurdina. Oracle C++ Call Interface, diemžēl, ir pārāk zaļš: XA tie uzturēts tika sākot ar versiju 10g, “RETURNING” vispār nav, tādēļ nācās kādu laiku pavadīt OCI dokumentācijā – perversi.
Uh ku jauka sintakse. Ideja laba. Un ar visu C++ typesafety.
Pirms šī lasīšanas es domāju, ka neviens mūsdienās vairs neņemas ne ar kādu SQL. Vienkārši atver klases objektu un to pieseivē. Bibliotēka pati uzģenerē SQL un izdara visu pārējo. Es jau sen lietoju Hibernate un nekādus SQLus, thanks god, sen vairs ne.
Un tas stream interfeiss ir typesafe ? izskatās, ka nav vis :-)
Forši, turpini domāt!
I read blogs on a similar topic, but i never visited your blog. I added it to favorites and i’ll be your constant reader.
How much money should I have saved for a cross country road trip?
I read a few topics. I respect your work and added blog to favorites.