ugrás a tartalomhoz

Web Applications Should Be Compiled

yaanno · 2009. Jún. 6. (Szo), 18.06
Miért fejlesztenél C-ben webalkalmazást?
 
1

Erre már én is gondoltam elég

deejayy · 2009. Jún. 6. (Szo), 19.21
Erre már én is gondoltam elég sokszor, csakhogy nem annyira értek a C-hez, hogy ebbe belevágjak. Szerintem a hátrány egyértelműen a tanulhatóság miatt van, egy kezdő C-s nehezebben írja meg ugyanazt, amit egy kezdő PHP-s.

Kellene a C-hez egy olyan keretrendszer, ami a legtöbb kényelmi funkciót ellátja, de az meg ahhoz vezet, hogy lesz még egy fajta scriptnyelvünk...

Régebben perl-eztem, és amikor PHP-ra álltam át, az sokkal lazábbnak tűnt. Szerintem C és perl közti váltás is hasonló lehet, de milyen nyomós ok kell ahhoz, hogy ennyit lépjünk "visszafelé"?
2

Schadl Kornél: Web alkalmazások C/C++ nyelven

Török Gábor · 2009. Jún. 6. (Szo), 19.39
Tavaly novemberben a nutek meetupon tartott Schadl Kornél villámelőadást Web alkalmazások C/C++ nyelven (PPT) címen. Meglepő módon elég „sok” eszköz kínálkozik.
3

Nem ismerem a C -t

Ustak · 2009. Jún. 6. (Szo), 21.25
bár van itthon egy "UNIX/programozzunk C -ben" vagy valami hasonló című sárga könyvem, anno a shell -programozás részét végig is csináltam, a C -be is belekezdtem, de utána lett más. Minden esetre érdekes a dolog, van benne fantázia.

Viszont a cikk írója nyilván elfogultságból leszólja a "2.days.ago" (értsd gondolom objektum - orientált) nézőpontot, és a procedurálist (remélem jól emlékszem még így hívják mikor függvényeket írunk :-)) favorizálja (nyilván mert a c erre képes).

Ezt kicsit visszalépésnek tartom. Kicsiny világomban amit Mi informatikusok csinálunk két dolog ötvözete: elmélet és gyakorlat. Egy jó elméleti felfogás a már meglévő gyakorlati "alapanyagból" sokszoros eredményt hozhat ki. (Ha jól rémlik ilyen a 3G rendszer is, mely egy okos kódolási technika segítségével a "régi" kommunikációs hálózat áteresztőképességét sokszorozza meg.) Vagy nézzük az Evolúciós Algoritmust.
Vannak ilyenek.

Tehát az ötlet nagyon jó, ez a része viszont sántít, nekem.
Ám mivel látom én, hogy UNIX/Linux SQL Apache stb C -ben íródott, nyilván ennek nyomós oka van.
Vagy rosszul gondolom, és ezekben a rendszer-közeli dolgokban nem is szabad így "elvonatkoztatni"?

szerk: mielőtt beírjátok hogy az SQL (Structured Query Language) nem C -ben íródott, gyorsan ki is javítom, természetesen az adatbázis kezelő motorra gondoltam :-)
4

Egy dolgot felejt ki a

airwalker · 2009. Jún. 6. (Szo), 23.21
Egy dolgot felejt ki a szerző: nem csak azért dolgozunk modern script nyelvekkel, mert az élvezetesebb, hanem azért is, mert ezekkel az eszközökkel gyorsabban tudunk fejleszteni, és egy ideje már a résztvevő emberek órabére a legdrágább tényező egy projektben. Vagyis jobban megéri több/gyorsabb szervert venni, és ezeken lassabb kódot futtatni, mint C-ben agyon optimalizált kódot gyártani tízszer annyi emberóra alatt.
5

Sajátos nézőpont

yaanno · 2009. Jún. 6. (Szo), 23.39
A blogbejegyzés nyilván egy igen sajátos nézőpontot képvisel és a fentebb említett 2.days.ago (Ruby stílusú) oldalvágás is ezt példázza.

Azon azért érdemes elgondolkodni, hogy egy adott feladatot melyik nyelv szakija oldaná meg gyorsabban úgy (és itt a lényeg szerintem), hogy később minél kevesebbet kelljen faragni a kódon. Mert az igaz lehet, hogy PHP-ben teszem azt 10-szer gyorsabban elkészülhet valami, ha nem vesszük figyelembe az utólagos optimalizálást költségeit; ha viszont hozzávesszük, akkor lehet, hogy összességében mégsem éri meg annyira PHP-zni.
7

Ember a gépben

Joó Ádám · 2009. Jún. 7. (V), 00.02
Valahol olvastam nemrég egy jó gondolatot: az író Kempelen Farkas sakkgépéhez hasonlította a webalkalmazásokat. A webalkalmazások ugyanis mások, mint a hagyományos asztali társaik, mindig „van bennük egy ember”, ott van mögöttük egy fejlesztő, kell, hogy legyen egy fejlesztő, mert olyan gyorsan változnak a vele szemben támasztott igények. Márpedig egy ilyen fejlesztési gyakorlathoz keresve sem találni jobb eszközt a szkriptnyelveknél.
6

A te anyád

Joó Ádám · 2009. Jún. 6. (Szo), 23.55
A nullánál több értéket képviselne a bejegyzés, ha a fordított nyelven történő webalkalmazás-fejlesztésről szólna, nem pedig a szkriptnyelvek, az OOP és főleg a Ruby fikázásáról. Habár akkor sem lenne forradalmi, azért a legtöbb embernek valószínűleg már megfordult a fejében a dolog.

Magam is gondolkoztam már rajta, igazából némi rutinnal (főleg ha az ember egy-két munka során kialakít egy környezetet magának) valószínűleg olyan borzalmasan hosszadalmas sem volna a fejlesztés. A befektetett energiát pedig bőven megéri, én láttam már ilyen oldalt futni, az adatokat memóriában tárolta – olyan volt, mint a villám.

Igazából az egyetlen és legerősebb gátja a dolognak a hoszting környezetek hiánya.
8

Mmmivan?

janoszen · 2009. Jún. 7. (V), 00.39
Ez most ugye nem komoly? Az egy dolog, hogy fordítsuk le az alkalmazásokat, de a futtatókörnyezet legalább egy fajta védőréteget von a gép elé. Valószínűleg elég keményen meglepődnének a hostingcégek, ha egyszer csak egy forkbomb következtében némileg lerohadna pár dolog... (Tudom, PHPban is lehet csinálni, de legalább le lehet tiltani.) Szóval C-ben webalkalmazást írni... nem hatékony, nem hordoz annyi pluszt, hogy megérje és legfőképpen nincs az az Isten, hogy rendszergazdaként ilyet futtassak, hacsak a kód előtte át nem ment valami jobb fajta belső auditáláson.

(Persze, vannak esetek, de akkor is csak részeket írnék meg C-ben, pl keresőt vagy hasonlót, de nem az egészet. Egyébként meg tegye föl a kezét, aki úgy gondolja, hogy tudja, hogy kell C-ben biztonságosan programozni.)
9

Én a PHP előtt fejlesztettem

virág · 2009. Jún. 7. (V), 08.01
Én a PHP előtt fejlesztettem webes alkalmazásokat Pascalban is és C-ben is. Nem kívánom senkinek, akkor persze nem vettem észre azt, hogy mennyire nyögve nyelős a dolog. A hozzászólásokban felsorolt előnyök pl. a "memóriában tárolni adatokat és ettől gyors" PHP-ban sokkal szebben megvalósíthatók pl. Memcache-val, ugyanis mire te lefejlesztesz magadnak egy igazán jó és hatékony memórába adatokat tároló rendszert C-ben, addigra megőszülsz, nem beszélve arról, hogy PECL csomagok fejleszthetők C-hez is, sőt bármi fejleszthető PHP-hoz C-ben, ugyanúgy ahogyan az adatbáziskezelőhöz is lehet írni C-ben pluginokat, vagy bármit. Ezernyi lehetőség van és ezeket nagy terhelésű rendszereknél érdemes megfontolni, de ma már szinte mindenre van kész, kipróbált és biztonságos, ráadásul nyílt forráskódú megoldás (C-ben írva). Azt azonban jó ötletnek tartom és mindenképpen követendőnek, hogy a sok PHP fejlesztő néha a kezébe vegyen más programozási nyelveket is. Soha nem árt. Kísérletezni is lehet, elég ha az ember pl. letölti a PHP forráskódját és nézegeti, vagy pl. kipróbál olyan C fordítókat mint pl. a TCC - amihez pl. van egy mini webszerver demó - sokat lehet belőle tanulni... De ha egy weboldal motorját szeretnéd C-ben fejleszteni akkor időben, munkaerőben és minőségben is le fogsz maradni a versenytársakhoz képest. Ez szinte tuti :)
10

öööö JAVA?

vbence · 2009. Jún. 7. (V), 10.12
A JAVA alkalmazások gyakorlatilag natív sebességgel futnak (köszönhetően a legtöbb platformra elérhető JIT fordítókra). Ezekívül a (szubjektív, de valamiért úgy érzem tizen-valahány nyelv után valamennyire kompetens vagyok) lehető legszebb, legkövetkezestesebb nyelvi eszköztárat és keretrendszert használják (soksok év tapasztalattal). Határozottan könynebben használható, mint a PHP - egy kezdőnek kevesebb "megmagyarázhatatlan" hibája lesz vele, mint a PHP esetén, arról nem is beszélve, hogy fordítási-időben kiderül ezek nagy százaléka.

Viszont... egy webapp sebességét általában az adatbázisműveletek határozzák meg. Ha okosakat akarunk írni, találjunk ki egy oylan rendszert ahol a webapp az adatbázis-szerver belsejében fut, vagyis (kölcsönvett metafórával élve) nem egy kulcslyukon át kell kitakarítanunk egy szobát.

Legtöbb eddigi webes projektam adatszükséglete símán beleférne egy szerver 4 gigás memóriájába, mégis megszoksából ragaszkodunk a mysql-hez...
12

virtuális gép...

Cadeyrn · 2009. Jún. 10. (Sze), 11.05
A java csak nagyon ritkán natív kód. Általában virtuális java gépen vagy alkalmazásszerveren fut, ami eszetlen mennyiségű memóriát eszik, és a gyorsasága is kérdőjeles tud lenni. Próbáld ki egy gyengébb vason. (Tudom, az nem szerver, de a cikk pont az erőforrás-kímélésről szól.)
Én nemrég kezdtem Javaban feljeszteni, de néha rettenetesen körülményesnek tartom, hogy muszáj mindig OOP megközelítést használni, akkor is, amikor a funkcionális megközelítés gyorsabb és egyszerűbb lenne. Viszont tény, hogy nincs benne buffer overload lehetőség.
Nem kételkedem benne, hogy ha valaki kőprofi, akkor nagyon jó dolgokat tud gyorsan megírni, de ez szerintem mindegyik nyelvre igaz lehet.

Apropó, phc: PHP-t lehet fordítani ;)

Viszont a cikk írójával egyetértek abból a szempontból, hogy jó lenne, ha visszatérnénk az eleve optimalizált programozáshoz, és nem utólag próbálnánk rátenni.
13

Épp fordítva

vbence · 2009. Jún. 10. (Sze), 11.56
Manapság a JIT fordító a standard, sőt a Sun-féle alap VM-be már futásideji optimalizáció is be van építetve, ami olyan információkat is felhasználhat amik nem állnak rendelkezésre egy fordításideji optimalizáláskor. (Ez utóbbit használod egy C tipusú nyelvnél).

Amúgy a 5-15% a JAVA hátránya a C-vel szemben a legtöbb mai írás szerint.

Arról nem beszélve, hogy a C programozásnak ma nincs igazán realitása a weben. Ha a PHP-re szeretnénk gyorsabb aternatívát találni akkor a GC-t használó, referencia-alapú nyelvek (platformok) körében kéne keresgélnünk, mint például a C#, ami szintén VM-alapú.

Valaki akinek van tapasztalata céges keretek között megtippelhetné, hogy hányszoros munkaórába kerülne egy átlagos weblap impelementálása C-ben.

Én nemrég kezdtem Javaban feljeszteni, de néha rettenetesen körülményesnek tartom, hogy muszáj mindig OOP megközelítést használni, akkor is, amikor a funkcionális megközelítés gyorsabb és egyszerűbb lenne.

Nem tudok példát elképzelni erre...
14

a c tényleg nem webes nyelv

Cadeyrn · 2009. Jún. 10. (Sze), 12.06
Nézzük: az adatbázisban van egy longtext mezőm, akkor c-ben egy 4megás tömböt kell allokalizálni hozzá... nem, ez szerintem sem jó ötlet, nem is értettem egyet azzal, hogy c-ben írjunk webappot - de optimalizálni akkor is kellene, már fejlesztés közben.
Jelenleg benne vagyok egy GWT-s Java fejlesztésben, és a kliensoldalra letöltődő adat 6,5 MB, ami szerintem elég agresszív dolog.

A segédeszközöket a webappokhoz, pl. képmanupiláció viszont szerintem érdemes lenne c-ben vagy c++ban írni, mert hiába van a PHP-ben GD, attól még veszettül lassú tud lenni mondjuk egy élesítés.

A fordításról ezt nem tudtam, köszönöm az infot.

A példáról annyit, hogy volt, amikor jól jött volna, de nyilván programozási stílus (lustaság) kérdése is a dolog.
18

Én a JAVA-ra mindig csak ezt

deejayy · 2009. Júl. 1. (Sze), 13.27
Én a JAVA-ra mindig csak ezt a képet szoktam javasolni átnézésre.

(valahol megvan PDF-ben is, aki megtalálja és belinkeli, kap egy bonbont)
19

Csöppet hatásvadász

vbence · 2009. Júl. 1. (Sze), 17.17
Van egy apache-php-mysql call stack is a tarsolyodban összehasnlítás képpen, vagy ettől csak úgy el kell ájulni? :)
21

Amúgy a 5-15% a JAVA hátránya

deejayy · 2009. Júl. 2. (Cs), 14.06
Amúgy a 5-15% a JAVA hátránya a C-vel szemben a legtöbb mai írás szerint.


^ főként erre írtam.

Mert az remek, hogy 5-15%, de hányszor?
22

Mithányszor?

vbence · 2009. Júl. 2. (Cs), 16.08
Szerintem a tesztek komlex feladatokat is tartalmaznak tehát nem egy forciklus végrehajtásának sebességét méreik, hanem a veremkezelés (ami kitűnően szemláltettél) is része.

Ha jól értem - amiben nem vagyok biztos - sokallod a képen látható callstacket (ami programtervezési döntések eredménye).
23

Én azon csodálkozom, hogy ha

deejayy · 2009. Júl. 10. (P), 13.18
Én azon csodálkozom, hogy ha ez mondjuk ilyen "Hello world" szintű app, akkor miért kell neki ennyi hívás.

Illetve ha ez by-design, akkor meg az 5-15%-kal szeretnék képben lenni, mert elég nehéz így elhinnem.

A másik meg, hogy milyen döntés alapján fog az ember JAVA-s webappot fejleszteni, ha látja, hogy a fenti callstack 80%-át sehogyan sem tudja kikerülni (ha így van).
24

Ezígy nem vita...

vbence · 2009. Júl. 10. (P), 18.56
Ha nem veszed a fáradságot és olvasod el a saját ábrádat (JDBC, Spring, Hybernate, Acegi stb stb stb) és guglizod ki hogy mi micsoda nincs sok értelme beszélgetnünk erről...

Amint már utaltam erre, ha a LAMP világában szeretnéd párosítani egy ábrával, egy Apache (Socket kapcsolat elfogadásától), mad egy Doctrine (PDO) alapokon futó Symfony-s (MVC) webapp callstackjét kéne mellé tenned (megbolondítva egy security frameworkel, amit csípőből nem tudnék mondani PHP alá).

Természetesen ezeket nem szükséges használnod egy PHP projektben, és vélhetőleg ha a feladat egy "Hello Word" program akkor nem is fogod. Javában is megírhatod a saját HTTP szerveredet akár, ami két metódusból áll, ha a callstack rövidítése a cél, sőt bele is integrálhatod a "Hello World" üzleti logikát, és garantálom neked, hogy a callstackben 2 elemél több nem fordul majd elő (és ez már a multithread változat).
25

A Java java

yaanno · 2009. Júl. 11. (Szo), 10.23
Bár én nem osztom Bence lelkesedését a Java nyelv iránt (ellentétben a Java platformmal), hadd tegyem hozzá, hogy a "viccesen kilométer hosszú" call stack, a betöltések, előkészítő folyamatok stb. láncolata általában véve jó dolog. Azért jó, mert (nagyon) sok mindent kapsz: a HelloWorld.java is meg az igen komplex alkalmazás is ugyanazt az alapot kapja. Sokáig tartana felsorolni, hogy mi ez a sok minden, de könnyen utána lehet nézni. Más kérdés, hogy mi mire való. A HelloWorld.java alá lehet, hogy nem kell hibernate, glassfish meg nem tudom én még mi. A komplex alkalmazásnak meg kell. De sőt: írhatsz sajátot is ezekből, mert a kiegészítő elemek is mind az alap osztályokra épülnek.

Javaslom egyszer megnézni egy app életciklusát debug módban mondjuk Eclipse alatt: a fejlesztő gyakorlatilag csak azt nem tudja kiókumlálni a trace-ekből, amit nem akar...
20

Sör?

Ustak · 2009. Júl. 1. (Sze), 17.26
valahol megvan PDF-ben is, aki megtalálja és belinkeli, kap egy bonbont


ptrthomas.files.wordpress.com/2006/06/jtrac-callstack.pdf

A bonbon az mennyi sör? :-)
Üdv:
Gábor
26

Adalék

vbence · 2009. Dec. 26. (Szo), 13.18
Most találtam.. nem alegfrissebb, de talán hasznos a link ide.

July 2nd, 2008
http://www.stefankrause.net/wp/?p=9

Ahogy megjegyzik a commentekben, ezek inkább CPU tesztek, a memóriakezelés (ami lassabb minden Garbage Collectionös nyelvben, mint C-ben) nem igazán része, de ez az ára a GC nyújtotta kényelemnek (és biztonságnak).
11

érdekes

Sulik Szabolcs · 2009. Jún. 7. (V), 11.33
Az igazság megint valahol középen van :). Valóban jobb lenne a cikk, ha nem a fikázás, hanem a nagyszerű C-s keretrendszerének a linkje és leírása lenne a középpontban.

Szvsz nem abban téved az uriember, hogy szebb, gyorsabb, jobb lenne C-ben (na jó, csak kettőt választhatsz :) ), hanem abban, hogy amikor egy "nagyobb" projekt elindul, az sokszor csak egy prototípus, egy ötlet, amelyről még senki nem tudja, hogy bejön-e az embereknek vagy sem. A prototípust, a "már" kipróbálható változatot egy weben már bizonyított script nyelven a leggyorsabb, legfájdalommentesebb (legköltségkímélőbb?) összerakni.

Aztán amikor elkezd növekedésnek indulni a rendszer lehet optimalizálni. Tegye fel a kezét, akinek az első ötlete, hogy írjuk át Cbe az egészet. Ami fontosabb, hogy a növekedés egyfajta tehetetlenséggel is együtt jár, ami már determinálja a használt nyelvet. Tavaly novemberben volt egy előadás a facebookról, az ott alkalmazott technológiákról. Volt egy (nem is egy :) ) érdekes mondat, ahol a fickó azt mondta, hogy egy ponton gondoltak arra, hogy átírják az egész frontendet pythonba, viszont akkor már annyi teendőjük volt (új szolgáltatások, ...), hogy maradtak a php-nál. Ami bár nem a leggyorsabb script nyelv, nagyon jól cachelhető (APC) és így mégiscsak "elég jó" a feladatra.
15

elfogult/szemelenzős

Hodicska Gergely · 2009. Jún. 12. (P), 11.05
Szerintem kicsit elfogult a cikk, illetve nem vesz figyelembe sok üzleti szempontot. A sebesség önmagában ritkán tud nagyon fontos lenni, és ha az, akkor mindig van lehetőség a kritikus részt valamilyen a célra megfelelő nyelven megírni.

Szvsz az OOP-t csak úgy eldobni, illetve valamilyen elitista dolognak tartani az elég komoly szűklátókörűség. Egyszerűbben karbantartható, áltlátható, befogadható, módosítható egy OOP alkalmazás, és ezek a szempntok általában fontosabbak, mint a teljesítmény.

Ehhez hozzávenném azt is, hogy egy nagy terhelésű site esetén az optimalizáció jelentés része nem az adott programozási nyelvben történik, hanem egyéb rétegekben. Elég komoly rész a DB skálázhatóság, frontend optimalizálás, cahce-elés, különböző egyéb eszközök bevonása (light webszerverek, reverse proxy, message queue stb.).

Az OOP nem csak abból áll, hogy leírhatom, hogy 2.days.ago, hanem egy biztonságosabb programozási környezetet ad, ahol egy csomó hiba lehetőség eleve ki van védve, a kódot készítő fejlesztő elég sok mindent elő tud írni a kódot használónak.

Sima C-t már csak olyan szempontból is érdekes, hogy azért ott hallottam már olyanról, hogy sok idő ment el egy-egy memória szivárgás megtalálására, nem véletlenül lett a C++-ba ezek egy része kivédve.

Manapság egyre fontosabb, hogy egy ötletből minél gyorsabban lehessen egy működő prototípust készíteni, nagyon gyorsan halnak el, születnek újak, nem éri meg sok időt beleölni a fejlesztésbe. Szintén egyre fontosabbak az úgynevezett situational aplication jellegű alkalmazások, amelyek viszonyleg egyszerűek, valamilyen konkrét üzleti igényét megvalósító alkalmazások, amelyeknél az a legfontosabb, hogy minél előbb elkészüljenek. Részben ezt a piacot támadja a Project Zero-ból kinőtt sMash is, amit enterprise felhasználásra szánnak, mégis a feladat jellegéből adódóan script nyelvet tartanak erre a célra alkalmasnak.

ha nem vesszük figyelembe az utólagos optimalizálást költségeit
Kérdés, hogy lesznek-e ilyenek, illetve ahogy fentebb írtam az optimalizálás nagy része nem a nyelvben történik.

Az egy dolog, hogy fordítsuk le az alkalmazásokat, de a futtatókörnyezet legalább egy fajta védőréteget von a gép elé.
Nem tudok semmi részletet ezzel kapcsolatban, de nagyon meg lennék lepődve, hogy ha egy C-ben írt weblakalmazás előtt nem állhatna rendelkezésre ilyen védőréteg. Kb. nem lenne logikus számomra, hogy ne legyen ilyen.

JIT fordító
Már tavaly is volt egy olyan post, hogy készül PHP-hoz kezdetleges JIT fordító, elvileg LLVM alapokon nem is annyira nehéz, és idén is a SoC-ban felmerült, de végül nem fogadták el, de előbb utóbb el tudom képzelni, hogy lesz ilyen.

jó lenne, ha visszatérnénk az eleve optimalizált programozáshoz, és nem utólag próbálnánk rátenni.
Ilyen egyrészt nincs, plusz látok ebben egy logikai buktát is. A korai optimalizálás sok esetben fölösleges és veszélyes. Persze érdemes törekedni arra, hogy alapvetően figyeljen erre az ember, és sok elem az ember eszközkészletének része lesz, van amikor tudod, hogy adott megoldás biztosan nem lesz jó. A logikai bukfencet ott látom (nem hozzászólásodra gondolok főleg, hanem visszakanyarodva a cikkre), hogy attól, hogy C-ben állunk neki fejleszteni, attól még nem lesz optimális kódunk, ott is egy kezdő tud biztosan hülyeségetket csinálni.
16

Rant

yaanno · 2009. Jún. 12. (P), 12.47
A bejegyzés szerintem egyértelműen rant (anti-hype rant), de ahogy mondják "he's got a point".
Ehhez hozzávenném azt is, hogy egy nagy terhelésű site esetén az optimalizáció jelentés része nem az adott programozási nyelvben történik, hanem egyéb rétegekben.

Ezzel nagyrészt egyetértek, annyit tennék csak hozzá, hogy a virtuális gépekre fordított/előfordított kód előnnyel indul. Ez az előny minden bizonnyal ledolgozható, teszem azt PHP esetében is, akár egy adott környezethez fordított/optimalizált értelmező vagy bizonyított standardok követésének segítségével.
17

Knuth

Joó Ádám · 2009. Jún. 12. (P), 23.32
Premature optimization is the root of all evil
:)