Jump to content
php.lv forumi

Kāpēc PHP tik ļoti sux'o, bet tomēr mēs visi to lietojam


daGrevis

Recommended Posts

  • Replies 253
  • Created
  • Last Reply

Top Posters In This Topic

Sakarā ar šo tēmu par perfekto valodu, radās doma, ka vajag radīt tik universālu valodu, kurā ērti var definēt dažādus tās aspektus tik plašā spektrā, ka būtu iespējams nodefinēt apstākļus,lai tālāk izpildītos kāda no visām citām valodām.

Tādā veidā šādas valodas tehnika strauji evolucionētu un ar laiku apvienotu labāko no daudzām valodām, varētu pat izveidot šij valodai jau gatavas bibliotēkas, kurās definētas citas valodas, piemēram, include python; vai include php; un tālāk attiecīgi rakstīt jau izvēlētajā valodā.

Link to comment
Share on other sites

Hehehe. Tas jau sen notiek. Piemēram, vēl diviņdesmitajos kad knibinājos, atminos, ka QuickBasikā varēja iekļaut C un ASM rakstītos kodus. Tiesa, ne tik triviāli kā 'include C', bet salinkot ar jau iepriekš nokompilētiem kodiem (*.OBJ). Tas pats arī TurboPascal - kautkāds ASM pat tur bija embedēts. Mūsdienās, VisualStudio (vai kā viņu sauca), var salinkot C#, F# un ko tik tur nē, ka tik ir atbilsošs bytecode kompilators.

Link to comment
Share on other sites

Hehehe. Tas jau sen notiek. Piemēram, vēl diviņdesmitajos kad knibinājos, atminos, ka QuickBasikā varēja iekļaut C un ASM rakstītos kodus. Tiesa, ne tik triviāli kā 'include C', bet salinkot ar jau iepriekš nokompilētiem kodiem (*.OBJ). Tas pats arī TurboPascal - kautkāds ASM pat tur bija embedēts. Mūsdienās, VisualStudio (vai kā viņu sauca), var salinkot C#, F# un ko tik tur nē, ka tik ir atbilsošs bytecode kompilators.

 

Nē, tu nesaprati ideju.

Piemēra, C++ var klasēm definēt operātorus.

Uztaisi klasi ComplexNumber un tad definē operātoru +, *, utt.

ComplexNumber operator + (ComplexNumber n1, ComplexNumber n2)

un tad vari kodā rakstīt:

ComplexNumber a,b;
a+b;

Ideja tālāk ir, ka tu vari definēt ne tikai valodas operātorus, bet jebkādus valodas aspektus un nevis vienkārši linkot kopā nokompilētus failus, bet ar elementārām metodēm definēt valodas konstrukcijas. Ideja, ir nevis, ka tu vari palaist PHP vai python kodus, bet ideja ir, ka tu var definēt šīs valodas. Mērķis protams nebūtu definēt tieši šīs un citas esošās valodas, bet radīt arvien jaunas un ērtas valodas konstrukcijas un apvienot no daudzām valodām labāko.

Edited by codez
Link to comment
Share on other sites

Viens definē a, b, c un uztaisa programmu foo. Otrs definē x, y, z un uztaisa programmu bar.

Abas programmas ir rakstītas «codezskriptā» , bet kopā ne strādā — ne vispār izskatās līdzīgi (skatoties uz sintaksi). :)

Link to comment
Share on other sites

Language Oriented Programming? http://www.jetbrains.com/mps/

Idejiski jā, tikai šeit tiek uzrakstīts tāds kā koda ģenerātors priekš javas, kurš visu kodu uzģenerē pa priekšu un pats kods jaunajā valodā un pati valoda definīcijas ir atšķirīgās vietās.

Es vairāk to iztēlojos kā JIT kompilātoru, kuram var definēt valodu koda vidū un tālāk rakstīt jau savā valodā.

 

Gribētos redzēt codez veidoto kodu. Un redzēt, kā tas sakrīt ar skaisto runāšanu.

Man ar gribētos, bet kopš uztaisīju MI, kurš raksta kodu manā vietā, neesmu kodējis, tikai skaisti runāju.

Bet, kas attiecas un universālo programmēšanas valodu, tad tas konceptuāli izskatītos šādi:

Programmas kvadrātvienādojuma aprēķināšanai, pa priekšu imoprtējot valodas definīcijas kodu:

with "/CustomLanguages/CodezLatviesuValoda.upl" ^^^

Ievadīt A, B un C kā reālus skaitļus.
D ir B*B-4*A*C.
ja D mazāks par 0, tad izvadīt "saknes nav".
ja D ir 0, tad izvadīt "X ir " un aprēķināt -B dalīts ar (2 reiz A).
ja D lielāks par 0, tad izvadīt "X1 ir " un aprēķināt -B mīnus kvadrātsakne no D dalīts ar 2 reiz A un izvadīt to pashu vēlreiz, tikai "X1" vietā "X2" un "mīnus" vietā "pluss".

^^^

vai

with "/CustomLanguages/CodezIsvaloda.upl" ^^^

>A,B,C
D=B^2-4AC
?D<0:"saknes nav"
?D==0:"X1 ir",-B/(2A)
?D>0:"X1 ir",(-B-sqrt(D))/2A,"X2 ir",(-B+sqrt(D))/2A;

^^^

Edited by codez
Link to comment
Share on other sites

3)Patīkama sintakse

Gaumes jautājums. Man tuvāk ir python sintakse.

 

4)Plašs atbalsts, gan API un to bibliotēkas, kas parasti pa priekšu ir priekš PHP, gan plašs rīku klāsts.

Kur ir tie rīki? Tikai viens liels treš http://www.phpclasses.org/

Salīdzini ar http://djangopackages.com/

 

5)Uzliec PHP un tev ir visas biežāk izmantotās bibliotēkas, kuras strādā, nevis kā pythonā, katrai lietai jāinstalē sava bibliotēka, pie tam vienai bibliotēkai pēkši ir atbalsts līdz vienai pythona versijai, citai līdz citai. Python bibliotēkām nav vienotas konsistences.

Tur jau tā lieta, ka uzliec django un ir viss nepieciešamais web izstrādei. Uzliec PHP, nokačā no vienas puses, no otras puses dažādas lib`as, tad kādu atjauno un kāda daļa aplikācijas nolūzt.

 

Uz normāla hostinga tev iedot pliku python2.7 un tālāk ar virtualenv tu pats saliec visu nepieciešamo. Tas pats arī ar izstrādes vidi. Vari saregulēt dependencies un ar vienu komandu visa aplikācija būs uzstādīta uz jebkura hostinga.

 

6)Facebook uzbūvējis Virtuālo mašīnu, kas nozīmē, ka tagad PHP kods strādās pāris reizes ātrāk par Python, nemaz nerunājot par to, ka jau ilgu laiku ir pieejams kvalitatīvs PHP to C++ translators, kurš arī strādā, atšķirībā no python versijām, kuras visas ir 0.x stadijā.

Liela pieredze ar konvertāciju? Translators nenozīmē, ka katru kodu varēsi tik viegli pārkonvertēt. Vajadzēs pašam pētīt, kas tur galā sanāk un iet visam PHP cauri.

 

Par ātrumu nevarēšu diskutēt, jo pašam nebija vēl vajadzības taupīt uz katra sērkociņa. Kā saka, tad priekšlaicīga optimizācija ir ļauna.

 

Es redzu trīs variantus, ja ir mērķis uztaisīt baigi optimizēti - rakstīt PHP un pa gabaliem konvertēt uz C++ (ar hiphopu), rakstīt uzreiz C++ vai izvēlēties citu valodu. Pirmie divi varianti nenodrošina ātru web izstrādi.

 

"Optimizējiet, optimizējiet un optimizējiet tikai ne kodu, bet izstrādes ātrumu" (diemžēl neatceros autoru).

 

Pirms teikt, ka python ir lēnāks, lūgums publicēt datus (saites), nevis izteikt pieņēmumus.

 

Mēs varam runāt par visādām nereālām lietām, kā python ir skaists kods, python ir šāds un tāds, bet beigās visu izsaka tas, cik ātri mēs varam šipot produktu, mainīt produktu, likt klāt ņemt nost jaunas fīčas un beigu beigās arī skeilot, ne tikai uz serveriem, bet arī uz inženieriem.

Tieši tā, es arī lieku pirmajā vietā izstrādes ātrumu, refactoringu un attīstīšanu.

 

Tādā gadījumā, tavs bana class tiks importēts vienmēr, kamēr autoload gadījumā tikai gadījumos, kad aplikācijas loģika patiešām prasīs izmantot doto moduli. Šādā situācijā PHP, ja ir 20 bibliotēkas, kas var tikt izmantotas dažādos gadījumos, reāli tiek inklūdotas tikai, piemēram, 3-5.

 

Piemērs tam būtu. Iet aplikācija, 1/10000 gadījumu notiek kļūda, kļuda ir jāielogo. PHP autoload gadījumā šī klase tiks ielādēta un inicializēta tikai pie pirmā reāla izsaukuma aplikācijas loģikā. Un tagad iztēlojies reāli HMVC aplikāciju, kur ir kontroleris iekš kontrolera, kur bez autoload tik ielādētas desmitiem liekas klases, kamēr ar autoload tikai tās, kuras izmantos.

Nebūšu kompetents un nevarēšu atbildēt cik daudz norij resursus. Kā minēju augstāk, pagaidām tik detalizēta optimizācija nebija nepieciešama. Varu tikai piebilst, ka python`a skripti tiek ielādēti un gaida pieprasījumu, bet savukārt PHP tiek katru reizi ielādēti no jauna (un mysql konekcija tiek izveidota no jauna) - jau šajā posmā ir pamatīgs robs.

 

Ar tādu optimizāciju mēs vispār varam nonākt strupceļā. OOP arī rij resursus, vai tas nozīmē, ka jāraksta visu ar funkcijām?

 

Veidojot pavisam vienkāršu HMVC freimworku, tas ir pāris rindu kods, lai attiecīgās lietas nodrošinātu, kamēr python-ā ir jāraksta vesels template dzinējs, kurš pie tam tiek darbināts skirptu valoda, kas jau pēc definīcijas ir par kārtu lēnāka darbība - būvēt templeitu valodu skriptu valodā. Cits gadījums protams, ja tiek uzbūvēts C python modulis, bet šeit atkal būs daudz citas problēmas. Kamēr PHP skaisti visu rakstām PHP, gan aplikāciju, gan templeitus. Manā skatījumā tas ir liels pluss.

Man ietvars neasociējas ar pāris rindām koda, bet gan ar kompleksu izstrādes rīku.

Šablonos jāattēlo dati, tāpēc ar šablonu dzinējiem (iebūvēts django) nav nekādu īpašu problēmu, lai uzskatītu to par trūkumu.

 

Tā ir elementāra loģika. Tikai pasaki, ka tu pythonā esi būvējis heštabulas, binary search tree, grafus, segmentu kokus, intervālu kokus, vispār sarežģītākas datu struktūras un algritmus, analizējis lielo O? Nu nedara tādas lietas tajās valodās, bet šādu lietu darīšana ir būtiska, lai izprastu softa ātrdarbību, efektivitāti, pareizu lietošanu. Tādas lietas dara C/C++, arī Paskālā, iespējams arī JAVĀ.

Jāpiekrīt, ka kaujas laukā (darbā) reti man gadās tādas lietas bīdīt. Es saprotu, ka visi darbojas ar augsti apmeklētām sistēmām (vismaz twitter`s) vai taisa raķešu sistēmas. Tomēr es pētu dažādus algoritmus, patīk paspēlēties ar uzdevumiem. Un kaut kā neesmu manījis uzrakstu "warning, don't do it with python".

 

Tās pašas top programmētāju sacensības, IOI, ACM ir C/C++.

Kas traucē tos taisīt ar python`u? Tas ir aizliegts?

 

Google? Nekad nav bijusi problēma atras vajadzīgo lietu PHP, izmantojot google. Parasti kādu lietu priekš PHP, ko nezinu no galvas, atrodu 10-20 sekunžu laikā izmantojot googli.

PHP manuālis ir ērts, jāpiekrīt, bet python manuālim arī nav ne vainas - ierakstam terminālī help({}) un man tiks attēlota visa informācija par dict. To pašu help terminālī varu izmantot uz jebkuru bibliotēku, kaut vai uz paša rakstīto.

Link to comment
Share on other sites

Ja tev vajadzīgas tik komplicētas OOP fīčas, tas nozīmē, ka tu dari kaut ko nepareizi. Es daudz labāk dažādību, ko censtos panākt ar šādu komplicitāti, veidotu izmantojot Strategy paternu.

Kā tu extend`o uzreiz no vairākām klasēm?

Es vispār nevaru saprast kā var bez šīs fīčas iztikt. Un ja tas ir uztaisīts, tātad es neesmu vienīgais tāds programmētājs.

 

Kas vainas Netbeans?

Tas ir redaktors, nevis izstrādes rīks.

 

Kur tad viņu nav. Toties ir daudz vairāk ekspertu kā citās valodās, tāpēc googlē var ļoti ātri atrast risinājumus jebkādām problēmām.

Ok, tie 5% ekspertu ir vairāk nekā python`a 50%, bet piemēslots internets ar pārējiem 95% CS fanu traucē.

python`ā arī atradīsi daudz informācijas.

Pie tam man patīk, ka python`u lieto programmētāju giganti - google, yandex un citi.

 

Šeit drīzāk prasās pēc jautājumu, kas ir tāds saistībā ar web aplikācijām, ko pythonā var izdarīt super efektīvi, ko PHP nevar?

Tas pats traits PHP (jeb python mixins) un vēl daudz visādas interesantas un noderīgas lietas. Tādas pitoniskas lietas, kas attiecas uz valodu, nevis funkciju pieejamības skaitu kā tas ir iekš PHP. Python`a iebūvētās funkcijas http://docs.python.o.../functions.html

 

Un arī pašam uztvere ir tāda, ka nav slinkums uzreiz apskatīties kā ir realizēta kāda konkrēta metode. Piemēram, iekš PHP pārsvarā nezinu funkcijas darbību, jūs zināt/skatāties?

 

Redz, ar PHP nav jātaisa daudz kas. Ar PHP ir jātaisa webs, jo tieši tādam mērķim PHP ir radies, un taisīt kaut ko webam ar PHP ir čum vieglāk kā ar citām valodām.

Es arī runāju par web aplikācijām.

 

Kas attiecas uz atklāsmēm Simanovska lekcijās, tad tur īsti nevar vainot PHP, cik paša nezināšanu par to, kas tas ir un ko ēd.

Ļoti vienkārši, kad klausījos lekcijas, tad tāda ORM vispār nebija iekš PHP vai nu baigi neattīstīts. PHP skrien pa aizmuguri un atpaliek, par to es arī saku.

 

Nu, var jau lietot arī pliku C core un vajadzīgās fīčas piekodēt pats. Nu tur, piemēram, stringu apstrādi. Tā sanāk, ne? Vai kas nu tur, masīvu apmest otrādi vai sakārtot. C ir sūdīga, jo tur ir tādas funkcijas jau komplektā.

Valoda nav funkciju klāsts, bet gan iespējas, ko var tajā izdarīt. Un jā, man nepatīk, ja man jau sākumā ir pieejamas 1000 iebūvētas funkcijas. Priekš kam?

 

Ja izstrādātājs nav truls zābaks un raksta valodā ne pirmo dienu, tad tādas vispārīgas lietas jau nu pēc kāda laika vajadzētu bez īpašas mācīšanās zināt no galvas. Manuprāt.

Kas varbūt stulbāks kā pielāgoties valodas bugiem/nepilnībām?

 

Tieši tā, ja tiek taisīts webs, tad templeitu valoda bieži būs uzrakstīta 20%-50% no aplikācijas.

Cik var malt vienu un to pašu? django template nav sliktāks.

 

Lasāmāks kam? Ja nāc no C++, tad nav lasāmāks, ja esi dzimis ar python un ruby vai esi baigais funkcionālās programmēšanas paradigmas piekritējs, tad visdrīzāk ir.

Jāpiekrīt, ka katram savs.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...