Citat:
@nesh, ivanhoe with Ada.TEXT_IO,Ada.INTEGER_TEXT_IO; use Ada.TEXT_IO,Ada.INTEGER_TEXT_IO; procedure Program is type Meseci is(Januar, Februar, Mart, April, Maj, Jun, Jul, Avgust, Septembar, Oktobar, Novembar, Decembar); package MESECI_IO is new Ada.TEXT_IO.ENUMERATION_IO(Meseci); type Datum is record Dan : Integer range 1 .. 31; Mesec : Meseci; end record; procedure Ispisi (Element : in Datum) is begin -- Ispisi Put("Mesec: "); MESECI_IO.Put(Element.Mesec); Put_Line(""); Put(Element.Dan); end Ispisi; MojRodjendan : Datum; begin -- Program MojRodjendan.Dan :=17; MojRodjendan.Mesec:=Oktobar; -- MojRodjendan.Mesec:="Hello world!"; ;) Ispisi(MojRodjendan); end Program; Dakle, bilo sta sto je tipa Meseci, je tacno u odredjenom opsegu - ja ne moram da brinem da li je ulaz dobar ili ne. Cak stavise, da koristim Get iz Ada.TEXT_IO.ENUMERATION_IO imam izuzetak svaki put kad neko upise hello world! umesto imena meseca ;) Kako onda ja to moram da vodim racuna o tipu, nije mi jasno, kad GNAT to radi ;) Lepo da mi objasnite kako to da ja trebam da se brinem o tipu Meseci ovde (da, da pointer/=integer ili pointer!=integer kako vise volite, probajte malo 64bitni kod da pisete, jer je to greska koju C vuce odkad su ga napravili na PDP-11) Dakle, taj kod koji ce u loosely-typed jeziku da proverava ispravnost argumenata neko je ovde vec napisao i to je sve, posto se sve na kraju svodi na asembler, skripta, JIT, binary, sve ide u asembler pa se izvrsava. Dakle, u loosely-typed jeziku moras nonstop da proveravas ispravnost argumenata, dok u klasicnom jeziku samo moras svesno ponekad da izvrsis konverziju, a sta je bolje kad imas mnogo koda i jos radis sa drugim ljudima koji ti daju gotov (mozda dobar, a mozda i bagovit) kod? |
Citat:
Znaci ovo sto ti kazes je prednost iskljucivo u situacijama gde se radi o upotrebi pogresnog tip podatka od strane developera, pa da kompajler skrene paznju na to prilikom arzvoja. To stoji, i pogotovo je korisno kod IDE i JIT kompajlera koji ti odmah podvuku gresku. Medjutim moze na te stvari da se gleda i drugacije. Int prosledjen umesto stringa, ili obrnuto u vecini skript jezika NIJE GRESKA, jer jezik sam radi casting kako treba i sve ce savrseno lepo funkcionisati, operatori ce dobiti tacno velicinu sa kojom ocekuju da rade i nema problema. Stalno se provlaci prica o greskama zbog nedostatka tipova. Koje su to tacno greske? Koji tip greske moze da nastane u php ili perlu zato sto mu je prosledjen broj umesto stringa ili float umesto integera? Koji su to tacno scenariji u kojima takve greske nastaju, tj. navedite mi bar jedan, jer stvarno ne mogu da se setim ni jedne takve situacije za svojih 5+ godina web developmenta... S druge strane u C-u sam nebrojeno mnogo puta upucao greskom float u integer ili kopirao veci string u kraci, pa se onda zezao da ispravljam, rekompajliram i linkujem sve ponovo |
Citat:
Kakav exception kad ja imam GARANCIJU da mi je prosleđen tip int kao ulazni parametar? Pa i onaj ko koristi moju klasu dobiće još za vreme pisanja koda ili kompjaliranja poruku da poziva funkciju sa neodgovarajućim tipom podataka. Dakle, daleko pre izvršenja aplikacije. A ko će baš da testira sve moguće gluposti..? Citat:
I kako rekoh - use the right tool for the job. C ima svoju primenu i dan danas. Nećem valjda sad o tome :) Citat:
Pretpostavljam dobićeš string "1A"? I šta sad? U bazu podataka u kolonu koja je definisana kao int, hoćemo da upišemo "1A" ? Greška? Nećeš dobiti string "1A"? Dobićeš grešku za vreme IZVRŠENJA jer program ne može da sabere 1 i "A"? I onda neko treba da gleda kod u mojoj klasi, jer je greška tamo prijavljena? Da ne napominjem koliko je lakše i bolje da se greška uhvati za vreme kompajliranja ili još pre. Stvar je u tome da NEMAŠ uvek kontrolu nad svim delovima koda. Tako da ne znaš ko i sa kakvim parametrima će da zovne tvoju funkciju. Možda će da zaboravi da proveri da li je korisnik uneo broj ili je greškom otkucao i neko slovo? Moja komponenta sa foo(int p) neće da pukne zbog toga i SIGURNO je bolje da korisnik moje klase dobije obaveštenje o grešci i ispravi grešku u SVOM kodu sa kojim je upoznat, nego da gleda gde i zašto moja klasa nije uspela da upiše rezultat u bazu. Možda nema sors kod, a i da ga ima.. sad treba da gleda po mom kodu..? Ako smo podelili posao između tebe i mene, gde ti radiš front-end i biz layer a ja data-access layer npr., jasno da nije potrebno da i ti i ja proveravamo da je korisnik uneo broj tamo gde se traži broj a ne da imamo i neko slučajno otkucano slovo? To je tvoj posao, a ja ću samo da "kažem" funkcija prima parametar int i ne brinem o tome.. Da ponovim: ne pričam ovo u smislu "A je glupost, B je jedino dobro." Daleko od tog, ali mogu valjda da kažem gde vidim prednosti jednog pristupa u odnosu na drugi. |
@ivanhoe
Garbage in, garbage out. Dobijes tokom izvrsenja argumenat koji nije u odgovarajucem opsegu i uradis INSERT ili UPDATE... Ooops... Cak i u skript jeziku bi bilo bolje da se sve automatski proverava, jer to je svrha tipa/klase, da se fizikalisanje od strane programera smanji, ili bi nam sve bio 32bitni pointer, ko u asembleru |
Sad je ispalo da tebi odgovaram na postove, ali u stvari cela prica je krenula oko onoga sto je Bojan pisao, a on je ispljuvao skript jezike, po meni bez dobrih argumenata...zato pominjem pljuvanje...
Citat:
mislim slazem se, jeste lepse ako ti kompajler to odmah prijavi, narocito kod JIT kompajliranja, ustedece ti 10-tak minuta posla, ali nije bas toliko strasno i bez toga, zapravo ono sto ja pokusavam da kazem je da naprosto nije istina da se bez toga ne moze, kao sto Bojan tvrdi...a imas s druge odredjenu dozu gnjavaze koju striktni tipovi podataka i kompajliranje nose sa sobom, koja ce po mom iskustvu da te kosta vise od tih 10 ili 15 ustedjenih minuta....odnosno jeste da ces brze nalaziti greske, ali ces ih mnogo cesce i praviti, jer slanje 'ABC' tamo gde se ocekuje 123 zahteva krupan propust developera (u rangu toga da ne zna koji parametar sta predstavlja), i ne desava se cesto, a greske kod castinga su cesta pojava....tako da je pitanje sta je efikasnije za brz razvoj, retki bagovi koji se sporije resavaju, ili cesti bagovi koje lako resis ? |
@ivanhoe
Ne radi se tu o skript jezicima - radi se prakticno o striktnim tipovima, ako ocekujes argument u nekom opsegu, a zbog baga ko zna gde dobijes broj van opsega i uradis UPDATE ili INSERT? Bolje je da te onaj koji je napravio kompajler/interpreter postedi rucne provere, jer je to tek zamorno, i uzima vise vremena nego konverzija u drugi tip, pod uslovom da program ima izvesnu slozenost. Ako je program trivijalan nema problema da pises na cemu hoces, ali ako neko drugi moze da zabrlja funkcije koji pozivaju tvoju, sto degojs rece, bolje je da trazi gresku u svom kodu nego da gleda moj ;-) Sto je program kompleksniji striktnost jezika je sve veca prednost, pogotovu kad radis u timu, zato je bolja Java nego PHP i to garant, kad govorimo o velikim projektima (iako ja Javu ne znam, sigurno je tako). Pazi, tradicionalni programski jezici na osnovu koje je Java pravljena (Ada 95, C++) koriste se za programe neuporedivo vece obimnosti od web aplikacije, i napravljeni su upravo za code reuse i timski rad na golemim projektima. Moras da proveravas ulaz za funkciju ako radis u timu, i zato je bolje da ti jezik to sam radi. Citat:
Dalje, i brze je kad je provera tipova automatska, jer je odradjena na brzom kompajliranom jeziku. Evo sta dobih sada (nakon sto sam pola sata pokusavao da pristupim sajtu uz ono DBD:MySQL error) Citat:
|
Mislim da ivanhoe oooodavno nije koristio neki dobar alat tipa Visual Studio ili Netbeans pa otud i takvi komentari koji meni nekako liče na nešto što je možda bila gnjavaža pre 10 godina. Danas, ja ne vidim kako tipovi mogu da predstavljaju smaranje, ako koristiš dobar IDE, pogotovo kad od nedavno čak i MS daje VS (Express) besplatno.
Jednostavno, ovi alati su toliko napredovali da taj argument, bar meni, ne stoji uopšte. |
O da, stoji i te kako, posebno kad pises, recimo, programe za linux u vim-u i kompajliras preko gcc-a. Tada ti dodje prosto kao osvezenje kada treba nesto na brzinu da skucas u perlu jer ima auto-casting, ali uz "use strict;" i "use warnings;" sve dolazi na svoje mesto.
|
Citat:
A ako ti baš treba da remote "vrtiš" real-time aplikaciju rešenje postoji pooodavno - XWindows ;). A i Win ima nekakvu implementaciju tog tipa. |
Citat:
Preciznije, glavni problemi nastaju kada u igru uđe alokacija memorije, a većina podataka koja dolazi sa web-a je daleko od poznate veličine (str u 99% sličajeva) a ovde pričamo o razvoju www aplikacija - right? Tako da: Kôd:
s/strongly typed/manualna alokacija memorije/ Citat:
|
Je li? A sta je finalizacija u Adi i Javi? Mislis na malloc pa da sabiras i oduzimas poenter kao u asembleru? A to nece ni u Adi mozes samo da dealociras memoriju ako si siguran da ti instanca ne treba (inace se finalizuje automatski) a kako znam Java je to preuzela od Ade i C++. I u Javi i u Adi imas inicijalizaciju i finalizaciju. Ne znam da li u Javi moze da se dealocira memorija prakticno za zivota instance koja ju je alocirala, ako ti ne treba (bibliotecke funkcije npr.).
Citat:
Ovo gore sto sam ti rekao za alokaciju i dealokaciju memorije na Adi vazi od MIL-STD-1815 standarda koji je usvojen 10 Decembra 1980 (Ada Bajron je rodjena 10 Decembra 1815). To sto je C kao i Asembler ja nisam kriv. Ni u paskalu to nemas a valjda ni u moduli-2 ka direktno zvrljas po memoriji. |
Citat:
Kakve to veze ima sa alatima tipa VS, kakve to veze ima sa webom? Citat:
Citat:
|
Citat:
Glavna razlika (IMHO) je to što mi ovde pričamo o web programiranju. Tako da će gooomila parametara biti najobičniji stringovi (ne računajući na neki od RPC protokola), samim tim skoro sve konverzije će se ionako morati da urade u samom kodu. Definisani tipovi podataka će me sprečiti da ja (ili korisnik klase/funkcije) ne prosledim pogrešan podatak - lepo, iako će to u svakom bolje organizovanom projektu svejedno naloviti unittest-ovi, ali ko će sprečiti korisnike sw-a da pošalju pogrešne podatke? Definisani tipovi!? Pa većina propusta kod www aplikacija pisanih u kompajliranim jezicima potiče baš od toga (buffer overrun, ...). Tu ne pomažu striktni tipovi već dobar exception handling sistem i kvalitetno napisan kod. Daleko od toga da C/C++/etc nisu za web aplikacije, ali glavni razlog za korišćenje tzv skript jezika je brzina razvoja sw-a. Što se performansi tiče, koliko ko troši CPU-a je skroz nebitno kada web app, ionako, skoro 90% vremena provede čekajući na I/O. |
Cekaj malo, ako ti definises promenljivu page : Integer range 1 .. 3 imas izuzetak automatski kad imas url tipa http://example.com/?page=4 nije li bolje tako? ;)
|
Citat:
A što se tiče strongly/loosely typed priče, samo sam hteo da naglasim da problem nije u strongly/loosely tipovima nego više u radu sa alokacijom memorije i sl. strongly vs loosely typed je više "moj je lepšo/veći ... od tvoga" ;) tip priče jer oba pristupa imaju svoje prednosti i mane. A ovde je (again) tema: "Izbor tehnologije za velike Web aplikacije". |
Imaju. Definises niz odgovarajuce duzine i odgovarajuceg tipa. Nego, mozda sam trebao da pustim njega da ti odgovori ;)
|
Citat:
Citat:
To bi bilo isto da kao da se mail klijent remote izvršava na serveru kada treba da skineš mail. :D BTW. XWin baš zbog neprenošenja slike sasvim lepo može da radi i preko *modemske* veze. |
Citat:
String p = request.getParameter( "username" ); Customer c = new Customer( p ); Šta je to, u obe linije? Kakve veze upravljanje memorijom ima sa strongly/loosely typed pričom, opet te pitam? Pa i u C++ možeš da koristiš garbage collection. Ili string klasu. Nesh, ti definitivno ne znaš o čemu pričaš. Mene više mrzi da tupim i odgovaram. Ako ti više odgovaraju loosely typed jezici, slobodno ih koristi. Daleko od toga da nisu dobar izbor pa gomila sajtova je urađena u VBScriptu (ASP), PHP-u i slično tako da niko neće da kaže da su loši, da ne može, itd. Ali nemoj da pričaš stvari koje ne stoje za ove druge. I daj.. pa nemoj da pričaš svašta, uozbilji se malo :) |
@nesh
http://www.usenix.org/publications/l...ang/yang_html/ To je potpuni 2D benchmark. A ako treba 128Mb tekstura za 3D da se prenese za X rezultati su jos gori. |
@boki: pusti bre sad to.. Svi imamo Google pa možemo da linkujemo sve živo. Meni je jedan dokazivao da postoje vanzemaljci tako što mi je pokazivao koliko stranica na tu temu ima Google.
|
Izvinjavam se što vam prekidam ovu nebuloznu raspravu, ali ovo mi bode oči:
Citat:
|
Pa nije alocirao memoriju dok mu ja nisam naredio da to uradi, zar ne? :) (dobro, možda malo rastegnuto objašnjenje, ali to što sam rekao gledaj u kontekstu cele priče sa neshom). Sve zavisi šta ćeš da proglasiš za dovoljno automatizovano, a šta ne. Pa i u C imaš automatizaciju rada sa memorijom u odnosu na npr. asembler.
Za razliku od toga, za oslobađanje ne moram da brinem - to radi gc, automatski (tamo gde se koristi gc). Pa i C++ je super po tom pitanju jer ne moraš da se bakćeš sa C stringovima. I tu ne moraš eksplicitno da govoriš koliko memorije i gde tačno, ali nisam siguran da će bilo ko da C++ okarakteriše kao skript jezik zbog toga. Npr. Standard C++ includes class called string. This class improves on the traditional C string in many ways. For one thing, you no longer need to worry about creating an array of the right size to hold string variables. The string class assumess all the responsibility for memory management. Pa da, ali tek onda svaki njegov argument ne stoji. Gde to onda, osim u C imamo muku oko oslobađanja i alociranja memorije? Gde je tu problem o kom nesh priča (veličina stringa..bla bla)? Priča se o nekom C, koji niko ni ne koristi za web programiranje. Ali kakve to sve skupa veze ima sa strongly/loosely typed pričom? |
...I kakve veze imaju poslednje dve-tri strane sa temom???
|
apsolultno nikakve :)
|
Slažem se.
Ne znam samo kako mogu da se uhvate za C u svoj toj priči kad ga niko ne koristi za web. Rasprava je bila oko izbora web tehnologije za veće projekte. Dakle u obzir dolaze .NET, Java, PHP i tako. I tu može da se priča na temu strongly vs. loosely typed. Ali čim smo počeli o tome, oni o C. A C/C++ tu baš i nemaju mnogo mesta. Niko ih ne koristi za web programiranje u klasičnom smislu. Čemu se onda uopšte ubacuju takve poruke, vezane za te jezike? |
.....here we go again... :(
|
Ma ionako je već.. :)
|
Pa dobro, nije bas da se uzdrzavas od komentara koji vode u OT... :) Nisam ni ja bolji, ali kad me neciji post iznervira, ja zatvorim DPT :P
|
Hehehe, pa jeste. Ali znaš šta ja mislim? Forum treba da promeni ime u PHP pro talk. Ozbiljno :)
Ovako, ja uvek dođem, a u stvari ne bih trebao jer samo pokvarim sve kao "desktop programer".. :) |
Meni iskreno nedostaje malo vise diskusije o drugim jezicima... Sve sto krene, obicno ima PHP kao konotaciju, eventualno MySQL - ne uvek, ali uglavnom... I malo vise realnih problema (eno ga post na PHP forumu :P)
|
# flame off @topic
Izbor platforme za www je daleko od trivijalnog, ako se radi o iole većem projektu, na izbor će više uticati kvalitet raspoloživih framework-a i biblioteka nego sam jezik. Ja sam bio već počeo da "razgledam" ruby (zbog Rails-a) kada me je Django "spasio". Daleko veći uticaj na performanse ima izbor platforme, db servera i www servera nego sam jezik. Ionako se posle dovoljno promenjenih jezika na novi prelazi za relativno kratko vreme. xux, popunio sam txtbox na tel. :( Ostatak sutra. |
I šta sad, da masakriram ovu temu ili da ostavim ovako kako je ?
@Degojs Pod manuelnim alociranjem mislio sam na malloc and like f-je u C-u (valjda je tako i u C++, nemam pojma) gde "manualno" alociras objekte tamo gde hoces (CPU registri, stack, heap) i koliko byte-a hoćeš. Kod Jave tvoj kod alocira memoriju isključivo na heapu, i to u oba slučaja (ispravi me ako grešim) osim ako request.getParameter( "username" ) ne vraća referencu na postojeći objekat. Isto tako, JVM GC će po potrebi osloboditi tu memoriju. Inače, nisam se neko vreme igrao sa Javom pa se ograđujem od svojih tvrdnji (ali imam TIJ3 na polici pa ću da se svađam ako me neko bude ispravljao) ;) |
Dinke: ma znam što si pitao.
Stvar je u tome da ni jedan ni drugi (C i C++ ) nisu momci koji se koriste generalno za web. Čemu onda čovek tupi o tome.. (usput: C++ može da bude kao C, ali kako rekoh imaš i string klasu, imaš i vector.. bla, bla.. = ne moraš da se drnadaš sa memorijom kao u C..) Da se mene pita i ako bi imao vremena, ja bi to masakrirao :), a ono pre stronly typed vs loosely typed bih ostavio jer to jeste jedna razlika između popularnih web tehnologija (npr. C# vs ASP, JSP vs PHP..). Ili nek otvori drugu temu pa nek priča o problemima sa memorijom u C (i C++). Ja lično tamo neću ni da se javljam, jer me sve skupa interesuju koliko i lanjski sneg. Just my 0,02. |
Evo da malo pojasnim, u slučaju da ostaviš poruke :)
Customer c1 = new Customer(); c1.ime = "Dejan"; Customer c2 = c1; c2.ime = "Dragan"; System.out.println( c1.ime ); // ops! ispisuje "Dragan".. Dakle, moraš da koristiš new da bi eksplicitno napravio novi objekt (a šta je to nego alociranje memorije,,), tako nešto sam imao na umu. |
Iskazom Customer c2 = c1; ti nisi alocirao memoriju već si samo kreirao novu referencu na postojeći objekat, tj. c1 i c2 su nakon toga reference na isto polje u memoriji. Meni je to savršeno jasno.
|
Pa da, zato i moraš da koristiš "new" da bi alocirao memoriju ako hoćeš novi objekt. Ne znam otkud njemu onda da nema alociranja memorije u C# i Javi, osim ako nije verovatno mislio na malloc, pošto je ionako zapeo za C :)
|
Vreme je GMT +2. Trenutno vreme je 09:34. |
Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.