Is java de grootste vloek in de informatica?

Pagina: 1 2 3 4 Laatste
Acties:

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 25-09 16:59

Janoz

Moderator Devschuur®

!litemod

Swing was java 1.2, maar de met windows meegeleverde JRE was 1.1. Vervolgens had MS aan hun VM vanalles toegevoegd waardoor een voor die VM ontwikkelde applicatie niet met andere VM's zou kunnen werken. Terecht dat Sun daar toen een stokje voor gestoken heeft...

MAAR, waar hebben we het over. Dat was de tijd van 1.1 en 1.2. Op dit moment staat Java 7 (1.7) voor de deur.

Ik blijf het verwonderlijk vinden dat veel mensen in dit topic toch zo erg GUI minded zijn. Ik durf de stelling wel aan dat 95% van de profesioneel ontwikkelde software helemaal geen WinForms/Swing/SWT/Whatever GUI heeft. Over 5 jaar is het enige GUI werk dat nog wordt gedaan:

Web (html en ajax, maar ook ASP.NET, JSF, GWT enz), Flash/Flex, JavaFX, Silverlight, maar ook het Android en iPhone equivalent.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • OMX2000
  • Registratie: Januari 2001
  • Laatst online: 01:21

OMX2000

By any means necessary...

Ik heb een aantal pagina's gelezen in dit topic, maar ik vind het ECHT onzin dat Java de oorzaak is van de kwaliteisafname van IT studenten. Je kunt middels Java veel programmeer concepten uitleggen en leren.

Vind ik Java een geschikt platform/taal? Nee, ik vind de productiviteit van Java gewoonweg slecht. Natuurlijk ben ik bevoordeeld doordat ik een .Net voorstander ben. Maar ik heb mogen ondervinden hoe lang het duurt om een beetje service in Java te bouwen, en daar wordt je niet blij van.

Wat Java een beetje nekt is dat er teveel keus is. Er zijn tig soap stacks, tig xml stacks... In tegenstelling tot .NET, waarbij Microsoft (en in mindere maten Novell met Mono.Net) met een out of the box werkend geheel komt. Webservices werken meteen goed in .NET, XML parsing/transformation doe je met de standaard .Net libs in de framework. Wil je het toch anders doen, dan kan het anders, maar dan moet het aantoonbaar toegevoegde waarde hebben t.o.v. de .Net framework. Dat laatste is bij Java niet altijd het geval, spullen die bijv. door IBM geleverd werken niet per se goed.

Wat ik dus een probleem aan Java vindt is dat je gewoonweg slimmere mensen nodig hebt om een beetje enterprise applicatie te bouwen dan met .NET. .NET is makkelijker en een productiever platform. Voor de duidelijkheid zeg ik dus niet dat .NET beter is dan Java of andersom. Ze bieden allebei genoeg functionaliteit om stabiele en complexe enterprise applicaties te realiseren. .NET is nu moderner, en wordt in een razend tempo vernieuwd. Java sukkelt er een beetje achteraan.

Dè developers podcast in je moerstaal : CodeKlets Podcast


  • blackangel
  • Registratie: April 2002
  • Laatst online: 25-09 12:57
AaroN schreef op donderdag 18 december 2008 @ 13:57:
Programmeren is het toepassen van al je kennis die je hebt op het gebied van computersystemen, algoritmes, programmeertechnieken, programmeertalen en wiskunde (misschien nog andere gebieden als psychologie voor user interfaces?). Je kunt mijns inziens niet leren programmeren door een programmeertaal als Java (of enig andere taal) te leren wanneer kennis van een van bovenstaande gebieden niet aanwezig is.
Ik zie programmeren als een functionerende applicatie ontwikkelen, en ben het dan ook niet met jou eens.

Als iemand een programma wil hebben wat een mooie 7segmenten output (even voor microcontrollers op een wekker, embedded systems, meer mijn richting), dan kan ik dat ontwikkelen met
if(x=0) { seg_A = true; seg_B = true; }
if(x=1) { seg_A = false; seg_B = true; }
Ik kan dat echter ook met een switch/case doen, veel netter. En als ik echt wil klooien met algoritmes, dan kan ik dat zelfs doen met een karnaugh-diagram en vervolgens
seg_B = !(x&0x02)
Dat laatste vind ik een algoritme, maximale performance eruit halen. Maar is dat altijd nodig? Nee. Iedereen die een ledje kan laten knipperen (electronica's Hello World), kan het goed genoeg maken. Bitfucken, switch/case of desnoods een if/else, ze krijgen het werkend.

Voor programmeertechnieken geld hetzelfde. Ik vind bitfucken erg leuk, maar je *hoeft* het niet te gebruiken. Met if, while en de juiste library functies aanroepen kun je het meeste wel implementeren. Tuurlijk is het handig om classes te gebruiken, overerving e.d. te gebruiken, maar niet altijd, en zonder dat kun je ook prima programmeren. Afhankelijk van je applicatie is dat een marteling, maar dat is nu even niet het punt :P

Computersystemen? Vooruit, maar daarvoor heb je niet veel meer dan basiskennis nodig. Als je iets wil opslaan, dan kun je dat in een file doen. Nouja, je moet dan weten wat een file is. Tegenwoordig weten teveel mensen niet eens meer wat een pointer is en hoe ze die kunnen gebruiken. Ja, je moet er wel wat van weten, nee, niet alles. Basiskennis is voldoende.

Programmeertalen? Wat bedoel je daar precies mee? Ik moet kennis hebben van andere programmeertalen voordat ik iets ontwikkel? Je hebt daarin gedeeltelijk gelijk, omdat voor sommige applicaties het makkelijker is om een specifieke programmeertaal te gebruiken. Maar dat maakt het niet noodzakelijk om een andere programmeertaal te kennen. Ikzelf heb pas sinds kort fatsoenlijk met VB leren programmeren, maar met C/C++ kan ik, ongeacht de (on)gebruiksvriendelijkheid van de compiler, toch nog sneller programmeren. Maar daar weet ik van dat het aan mij ligt :P

Wiskunde? Ik nodig je graag uit om bij sommige HBO-opleidingen te komen kijken. Wiskunde wordt, tot mijn grote ergenis overigens, niet standaard meer op fatsoenlijk niveau gegeven op de opleiding. Het heeft nadelen als je met beeldvorming werkt (2d, 3d, audio, externe inputs bij embedded, etc). Maar als je een CMS wil opzetten boeit het totaal niks. Niet veel meer dan if while in ieder geval.

Ik ben het er mee eens dat kennis van de punten die je noemt weldegelijk erg handig is, maar het is geen harde eis zoals jij aangeeft. Zonder dat kun je ook programmeren. Goed? Nouja, je kunt een functionerend programma opzetten binnen reeele tijd. Als ik kijk naar de lichting die van mijn opleiding & jaar af gaan komen, kun je daar al best tevreden mee zijn :)


Mijn kritieke mening is, onder andere over Java, dat het teveel library's heeft die de leercurve van het programmeren wegnemen. PHP is in dat opzicht, wat mij betreft, nog een stapje erger: je leert er geen algoritmes (meer) mee. Ik vind dat zelf een van de interessantere dingen aan programmeren. Niet hard noodzakelijk, maar soms is het toch verdomd handig als je library je in de steek laat.

En zoals roy-t in "Is java de grootste vloek in de informat..." aangeeft: Memory leak is een bug die je moet fixen, niet afvangen. Voor mijn gevoel (ik programmeer niet in Java), leren mensen niet meer hoe noodzakelijk het is om naar geheugen te kijken.


In zo'n topic even voor de volledigheid, dit is puur zoals ik het ervaar. Ik heb net 5 jaar programmeerervaring op opleiding(en), maar geen echt interessante programmeerervaring buiten mijn huidige stage.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 25-09 16:59

Janoz

Moderator Devschuur®

!litemod

@OMX2000

Eens en niet eens.

Ja, het grote verschil tussen java en .net is inderdaad dat je bij de eerste meerdere keuzes hebt om hetzelfde te doen (Spring mvc vs Struts vs JSF, TopLink vs Hibernate, Castor vs Jibx vs Jaxb) en dat het je daardoor meer tijd kwijt kan zijn wanneer je alle opties bij langs gaat. Als echter de keuzes gemaakt zijn is er helemaal geen verschil tussen .Net en JEE. Keuzemogelijkheden heeft voor en nadelen. Wat nu als de keuze die Microsoft gemaakt heeft nu net niet aansluit bij de projectwensen?

Het maakt .Net echter absoluut niet moderner. Ik ben erg benieuwd hoe je daarbij komt. Waarin is .NET zoveel moderner? Waarin hobbelt Java er achteraan?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Phyxion
  • Registratie: April 2004
  • Niet online

Phyxion

_/-\o_

Hydra schreef op donderdag 18 december 2008 @ 12:24:
[...]


Op papier wel, in de praktijk zie je dat daar vanwege tijdsdruk vaak helemaal niks van komt. We zijn er bij ons eigen bedrijf ook ingestonken. Een developer hier heeft 2 tools geschreven. Toen 'ie weg ging bleek dat die zo slecht in elkaar zaten dat de opnieuw ontwikkeld moesten worden.


[...]


Daarnaast zitten de kosten van software niet in de snelheid maar in de ontwikkeltijd.
Dus echt niet, de kosten zitten in het onderhoud van het programma. De ontwikkeling is meestal maar een fractie van de tijd die er aan een product besteed wordt. En Java ontwikkelt echt niet sneller dan C/C++/Java, elke taal heeft z'n voor en nadelen maar gemiddeld gezien zal de ontwikkeltijd idem zijn.

'You like a gay cowboy and you look like a gay terrorist.' - James May


  • Lointje
  • Registratie: Oktober 2008
  • Laatst online: 25-09 14:12
phobosdeimos schreef op zondag 14 december 2008 @ 21:31:

Iemand die nu in België afstudeerd als bachelor informatica, weet niet wat een pointer is.
Ik ben afgestudeerd als licentiaat informatica vorig jaar (= master tegenwoordig). En hoewel de focus lag op java, hebben wij op zijn minst de volgende talen gezien:

Java
C
C#
C++
NesC
Pascall
Smalltalk
Visual basic
Perl
Haskell
een taal die lijkt op haskell maar waar de naam mij van ontschiet, Logo of zoiets...
Eiffel
Cobol
..

Ik vergeet er ongetwijfeld nog enkele. En dan natuurlijk nog XML, html, ...

Zou ik een probleem oplossen in java ipv C? Hangt beetje van het probleem af, maar ja waarschijnlijk. Als dat ding zelf garbage collecting doet en ik geen zorgen moet maken over pointers, waarom niet. Ken ik er daarom niets van? Fout. Geef mij een nieuwe taal en ik ben er ook in 2 dagen mee weg, gewoon omdat we de concepten kennen. Ken ik alle bovenstaande talen in detail? Neen natuurlijk niet, maar ik ken de gebruikte concepten, van de meesten nog wat syntax etc...

Java is goed als programmeertaal qua concepten, goede compilers en omdat je nog niet zo moet bezig zijn met pointers. Eens je dat kent kan je verder gaan.

De achteruitgang van de studenten (in informatica maar ook wel algemeen) ligt eerder in de luiheid van jongeren (ikzelf was zeker geen voorbeel van ijverigheid maar ik leerde mezelf dan wel programmeertalen die ik niet kende, voor school werken was iets anders :)).

En java is inderdaad niet altijd de optimale taal om dingen in te maken, door zijn traagheid soms. Zoals al vaak gezegd in dit topic. Java is niet de beste taal en ook niet de slechtste. Er is geen beste taal, dat hangt af waar je goed in bent en wat je moet schrijven.

Het artikel gelinked in de openingspost is een zoveelste rant uit de miljarden die op internet te vinden zijn. Constructieve posts maken daarentegen ... :P

  • rapture
  • Registratie: Februari 2004
  • Laatst online: 02:13

rapture

Zelfs daar netwerken?

latka schreef op donderdag 18 december 2008 @ 12:31:
Nope, de kosten zitten in het onderhoud. Schrijf het in 3 maanden en onderhoud het 5 jaar.
Is onderhoudbaarheid een vereiste van de business en wordt dat door de business met geld ondersteund?

Als je 10 projecten die misschien ooit een uitbreiding krijgen gaat overdesignen, dan kost elk project teveel. Als je deze 10 projecten snel in elkaar steekt en 1 project moet eens opnieuw geschreven worden. Is het herschreven van een project duurder of is het overdesignen van alle projecten duurder?

Er zijn voorbeelden van gigantische (technisch gezien) puinhopen, die dermate veel geld kosten (vooral groeivertraging van het bedrijf) om het te vervangen. Dat ze maar een setje IT'ers inhuren om het boeltje draaiend te houden. Verwijderd in "Belangen ontwikkelaars versus belangen b..."

  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 19-09 10:19
Janoz schreef op donderdag 18 december 2008 @ 16:25:
Het maakt .Net echter absoluut niet moderner. Ik ben erg benieuwd hoe je daarbij komt. Waarin is .NET zoveel moderner? Waarin hobbelt Java er achteraan?
Sinds .Net3/3.5 loopt .Net toch echt erg voor op java in mijn ogen, ik denk dan vooral vanuit C# maar C# heeft niet eens alle functionaliteiten die IL (*de onderliggende taal van .NET) ondersteund.

Ik heb bij java nog nooit delegates, closures,[unsafe] code blokken met pointers en alles, of props gezien, ook handige toevoegingen als threadpools (ok die kun je ook zelf maken) mis ik. Ik twijfel er nu ook over of ik eigenlijk wel structs in java ken, en ik weet vrij zeker dat je in java niet de layoutkind van je struct kan setten, en zelf kunt aan geven hoe qua geheugen locaties structs worden opgebrouwd. Ook heb ik nog nooit projecten gezien waarbij een deel van het programma hielp met zichzelf compilen. (denk aan apparte compile-projecten en content managers). Ook lijkt .Net wat betreft services veel uitgebreider en zijn er voor Threads veel mooiere contructies dan in Java waar je alleen op een parameterloze manier threads kunt starten waardoor je weer properties moet setten van te voren.

Nu krijg ik waarschijnlijk het argument 'dat kun je zelf maken' wat waarschijnlijk ook wel valide is, aangezien het uiteindelijk allemaal x86 code wordt (of nouja vaak) maar .NET loopt zover ik weet gewoon nu een stuk voor op Java. In java is het veel moeilijker om dichter bij de compiler/computer te komen (dnek aan de handige compiler statements in [] in C#) Misschien dat het met Java7 weer dichter bij elkaar komt.

(verder vind ik C#/.Net over het algemeen wat consistenter dan java, en is de MSDN in mijn ogen beduidend beter dan sun's java documentatie).


@blackangel

Je hebt helemaal gelijk, op de RuG krijgen we iig het eerste jaar absoluut geen informatie over wat een pointer uberhaupt is. Dit komt waarschijnlijk ook mede doordat je in Java geen unsafe code kunt maken (zover ik weet). Imho zou C# een stuk geschikter zijn maar somehow hebben ze op de RuG een soort van Microsoft haat wat er ook echt flink in getrapt wordt hier, (en waar ik ondertussen als ms fanboy een grondige hekel aan begin te krijgen) elke leraar heeft wel weer wat te zeuren op MS, (hoewel vele wel toegeven dat ze liever C# dan Java hadden gegeven :P).

Ik zou het absoluut niet jammer vinden als ze op de Uni's en HBO's weer Java schrappen en terug gaan naar C++ waar je toch echt veel mee zult moeten werken later (hoewel C++ natuurlijk ook absoluut een rotzooitje is de laatste tijd :P ) Misschien wordt het is tijd voor een nieuwe high-performance unsafe taal die lekker opgeschoond is (ik weet dat er iets als D++ is maar dat loopt allemaal nog niet zonder industry support.

Ons wordt zoals eerder verteld wel memory management geleerd dmv assembly.

Note: waarom is er geen speciaal vak waar je leert debuggen!!! Als je iets vaak doet als programmeur is het wel debuggen, ik durf bijna te zeggen dat je vaker achter de debugger zit dan dat je echt code aan het schrijven bent, dat is mooi te combineren met unit testing wat bij ons nu verstopt wordt in 1 college over OO.

~ Mijn prog blog!


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-09 16:37

.oisyn

Moderator Devschuur®

Demotivational Speaker

roy-t schreef op donderdag 18 december 2008 @ 17:01:
(hoewel C++ natuurlijk ook absoluut een rotzooitje is de laatste tijd :P ) Misschien wordt het is tijd voor een nieuwe high-performance unsafe taal die lekker opgeschoond is (ik weet dat er iets als D++ is maar dat loopt allemaal nog niet zonder industry support.
C++09, next year in a compiler suite near you! ;)

[ Voor 4% gewijzigd door .oisyn op 18-12-2008 17:31 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • MBV
  • Registratie: Februari 2002
  • Laatst online: 21:20

MBV

Een vak debuggen zou geen kwaad kunnen, hoe vaak ik dat aan iemand heb moeten uitleggen is niet normaal meer :S Java ontwikkelen in Eclipse met printf-debugging, iemand van een jaar of 40 met 10 jaar java-ervaring :X

Bij de C# voordelen zit je volgens mij op dingen die platform-afhankelijk zijn (Java moet overal op kunnen draaien, niet alleen x86, dus memory-mgmt aanpassen is dan een stuk minder interessant, en big/little endian is 'leuk' met pointers), en die in 98% van de applicaties niet zinvol zijn. Het kan handig zijn, als een tussenstap tussen C++ en Java-achtige talen.

C++ zit dicht op de hardware, heeft geen VM, en geen standaard toolkit om GUI's en webservices (wat eigenlijk wel?) mee te schrijven. Er zijn genoeg standaarden voor (denk aan QT, of op een ander vlak de Posix-standaard), maar die zijn niet industrie-breed. Zit je weer met het java-probleem: welk framework pakken we, met welke voors en tegens.

  • OMX2000
  • Registratie: Januari 2001
  • Laatst online: 01:21

OMX2000

By any means necessary...

Janoz schreef op donderdag 18 december 2008 @ 16:25:
@OMX2000

Eens en niet eens.

Ja, het grote verschil tussen java en .net is inderdaad dat je bij de eerste meerdere keuzes hebt om hetzelfde te doen (Spring mvc vs Struts vs JSF, TopLink vs Hibernate, Castor vs Jibx vs Jaxb) en dat het je daardoor meer tijd kwijt kan zijn wanneer je alle opties bij langs gaat. Als echter de keuzes gemaakt zijn is er helemaal geen verschil tussen .Net en JEE. Keuzemogelijkheden heeft voor en nadelen. Wat nu als de keuze die Microsoft gemaakt heeft nu net niet aansluit bij de projectwensen?

Het maakt .Net echter absoluut niet moderner. Ik ben erg benieuwd hoe je daarbij komt. Waarin is .NET zoveel moderner? Waarin hobbelt Java er achteraan?
Het klopt dat wanneer de initiele keuzes zijn gemaakt, en er veel van hetzelfde wordt gebouwd door een vaste groep mensen dat Java dan net zo snel kan zijn als Java. Maar het is niet altijd zo dat er altijd dezelfde soort applicaties worden ontwikkeld door dezelfde mensen. Bij een nieuw soort applicatie moet de "ontwikkelstraat" weer ingericht worden. Komt er een eigenwijs nieuw iemand om het project, gaat die weer doodleuk lopen sleutelen aan de standaard tooling.

Het is ook niet zo dat je bij het .Net platform geen alternatieven hebt naast de standaard geleverde libs van Microsoft. Alleen een alternatief moet dus wel toegevoegde waarde zijn. Niet een uit de hand gelopen hobby project wat mooie code oplevert, maar niet veel oplevert qua toegevoegde waarde voor de eindklant.

C# wordt in een razendtempo vernieuwd. Attributen (annotations in Java), generics, waren er eerder bij C#. En C# krijgt momenteel steeds meer eigenschappen van een dynamische taal (Lambda expressions, dynamische types). Java staat zeker niet stil, alleen door de zeer conservatieve manier van vernieuwen door Sun gaat het allemaal wat langzamer.

Dè developers podcast in je moerstaal : CodeKlets Podcast


  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 19:41

RayNbow

Kirika <3

OMX2000 schreef op donderdag 18 december 2008 @ 17:47:
[...]
En C# krijgt momenteel steeds meer eigenschappen van een dynamische taal (Lambda expressions[...]
En sinds wanneer zijn lambda expressions iets kenmerkends voor dynamische talen?

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


  • MBV
  • Registratie: Februari 2002
  • Laatst online: 21:20

MBV

@OMX: En dat is direct het probleem van .NET. Ik meen me te herinneren dat .NET 2 niet backwards compatible was naar .NET 1, maar dat weet ik niet zeker. Ik weet wel dat mijn ex-collega's de nieuwe website in .NET 2 aan het ontwikkelen zijn omdat ze bang zijn dat de huidige .NET 2 site niet 100% gaat werken op 3.5.
Met java heb je daar bij mijn weten nooit last van gehad, in elk geval niet tussen 2 versies.

@RayNBow: sinds dynamische talen dat hebben uitgevonden?
Wikipedia: Dynamic programming language
Wikipedia: Lambda calculus
Lisp was de eerste functionele programmeertaal bij mijn weten, en dat was een dynamische taal.
Misschien heb je JIT niet nodig om lambda-expressies neer te zetten, maar het zorgt volgens mij wel voor een veel betere performance.

[ Voor 31% gewijzigd door MBV op 18-12-2008 18:47 ]


  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

MBV schreef op donderdag 18 december 2008 @ 18:41:
@OMX: En dat is direct het probleem van .NET. Ik meen me te herinneren dat .NET 2 niet backwards compatible was naar .NET 1, maar dat weet ik niet zeker. Ik weet wel dat mijn ex-collega's de nieuwe website in .NET 2 aan het ontwikkelen zijn omdat ze bang zijn dat de huidige .NET 2 site niet 100% gaat werken op 3.5.
Met java heb je daar bij mijn weten nooit last van gehad, in elk geval niet tussen 2 versies.
Je weet wel dat dat het probleem is, maar je weet het ook niet zeker? :P

1.1 en 2.0 zijn idd grote verschillen, maar 3.5 is niets anders dan een extensie op 3.0 die weer een extensie is op 2.0 ...

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 19:41

RayNbow

Kirika <3

MBV schreef op donderdag 18 december 2008 @ 18:41:
@RayNbow: sinds dynamische talen dat hebben uitgevonden?
Wikipedia: Dynamic programming language
Rept met geen woord over lambda's.
Wikipedia: Lambda calculus
Lisp was de eerste functionele programmeertaal bij mijn weten, en dat was een dynamische taal.
Omdat de eerste functionele programmeertaal dynamisch was, wil dat niet zeggen dat lambda's iets kenmerkends zijn voor dynamische talen. De lambda calculus is niets anders dan een formeel systeem over 1 ding: functies (abstracties en applicaties). Je gaat me toch niet vertellen dat iets fundamenteels als een functie een geschenk van de dynamische programmeertalenwereld is?

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


  • OMX2000
  • Registratie: Januari 2001
  • Laatst online: 01:21

OMX2000

By any means necessary...

MBV schreef op donderdag 18 december 2008 @ 18:41:
@OMX: En dat is direct het probleem van .NET. Ik meen me te herinneren dat .NET 2 niet backwards compatible was naar .NET 1, maar dat weet ik niet zeker. Ik weet wel dat mijn ex-collega's de nieuwe website in .NET 2 aan het ontwikkelen zijn omdat ze bang zijn dat de huidige .NET 2 site niet 100% gaat werken op 3.5.
Met java heb je daar bij mijn weten nooit last van gehad, in elk geval niet tussen 2 versies.

@RayNBow: sinds dynamische talen dat hebben uitgevonden?
Wikipedia: Dynamic programming language
Wikipedia: Lambda calculus
Lisp was de eerste functionele programmeertaal bij mijn weten, en dat was een dynamische taal.
Misschien heb je JIT niet nodig om lambda-expressies neer te zetten, maar het zorgt volgens mij wel voor een veel betere performance.
Als je bedoelt met backwards compatible dat .NET 1.1 op .NET 2.0 moet kunnen draaien. KLopt dat gaat niet zomaar. Maar je kunt de VM's netjes side by side draaien. Als je applicatie om wat voor reden niet ge-upgrade kan worden doe je dat.

De .Net 3.5 framework draait nog steeds op een .NET 2.0 CLR (VM). Dus 2.0, 3.0 (wat een extensie is op 2.0), en 3.5 frameworks gebruiken de 2.0 Common Language Runtime.
Porten van een 1.1 applicatie naar 2.0 is niet erg spannend.

Dè developers podcast in je moerstaal : CodeKlets Podcast


  • wackmaniac
  • Registratie: Februari 2004
  • Laatst online: 25-09 11:04
roy-t schreef op donderdag 18 december 2008 @ 17:01:
[...]
@blackangel

Je hebt helemaal gelijk, op de RuG krijgen we iig het eerste jaar absoluut geen informatie over wat een pointer uberhaupt is. Dit komt waarschijnlijk ook mede doordat je in Java geen unsafe code kunt maken (zover ik weet). Imho zou C# een stuk geschikter zijn maar somehow hebben ze op de RuG een soort van Microsoft haat wat er ook echt flink in getrapt wordt hier, (en waar ik ondertussen als ms fanboy een grondige hekel aan begin te krijgen) elke leraar heeft wel weer wat te zeuren op MS, (hoewel vele wel toegeven dat ze liever C# dan Java hadden gegeven :P).
Dat brengt voor de RuG veel gelazer met zich mee; die draaien volledig op Debian Linux.

Read the code, write the code, be the code!


  • OMX2000
  • Registratie: Januari 2001
  • Laatst online: 01:21

OMX2000

By any means necessary...

RayNbow schreef op donderdag 18 december 2008 @ 19:08:
[...]

Rept geen woord over lambda's.


[...]

Omdat de eerste functionele programmeertaal dynamisch was, wil dat niet zeggen dat lambda's iets kenmerkends zijn voor dynamische talen. De lambda calculus is niets anders dan een formeel systeem over 1 ding: functies (abstracties en applicaties). Je gaat me toch niet vertellen dat iets fundamenteels als een functie een geschenk van de dynamische programmeertalenwereld is?
Als je een lijst van functionele talen opsomt, is het wel heel toevallig dat ze dan vrijwel allemaal lambda's ondersteunen.
Het is alsof je nu zegt dat optellen een standaard wiskundige operatie is dat optellen dan geen eigenschap is van C# of Java.
Als je ff doorgeklikt had, was je misschien ook dit tegen gekomen : "Lambda expression or lambda function: an expression that specifies an anonymous function object".Iets wat zo ongeveer iedere functionele taal ondersteund.

Dè developers podcast in je moerstaal : CodeKlets Podcast


  • OMX2000
  • Registratie: Januari 2001
  • Laatst online: 01:21

OMX2000

By any means necessary...

wackmaniac schreef op donderdag 18 december 2008 @ 19:25:
[...]


Dat brengt voor de RuG veel gelazer met zich mee; die draaien volledig op Debian Linux.
apt-get install mono mono-gmcs mono-gac mono-utils monodevelop monodoc-browser monodevelop-nunit monodevelop-versioncontrol

C# ontwikkelen gaat er heel goed mee. En het is open-source, leuk als je de compiler zelf eens wil bekijken.

Dè developers podcast in je moerstaal : CodeKlets Podcast


  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 19:41

RayNbow

Kirika <3

OMX2000 schreef op donderdag 18 december 2008 @ 19:25:
[...]


Als je een lijst van functionele talen opsomt, is het wel heel toevallig dat ze dan vrijwel allemaal lambda's ondersteunen.
Het is alsof je nu zegt dat optellen een standaard wiskundige operatie is dat optellen dan geen eigenschap is van C# of Java.
Als je ff doorgeklikt had, was je misschien ook dit tegen gekomen : "Lambda expression or lambda function: an expression that specifies an anonymous function object".Iets wat zo ongeveer iedere functionele taal ondersteund.
Dus? Functioneel impliceert niet dynamisch. Er bestaan ook statische functionele talen. Het functionele aspect staat orthogonaal op de statisch-dynamische as.

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

era.zer schreef op woensdag 17 december 2008 @ 21:56:
Ach ik nam dat niet persoonlijk, maar zo'n generalisatie doet niemand goed. Net zoals alle afrikanen lui zijn, alle nederlanders gierig en alle duitsers vetzakken. (dit is dus niet zo...)

Maar swat: als jij zegt dat je wizzkids en prutsers hebt dan mag jij dat denken. De wereld ziet er anders uit, je hebt wizzkids, dan gewoon normale mensen, dan minder goede mensen en dan prutsers. Iemand een prutser noemen allesbehalve respectvol... Zoiets helpt je niet verder in het leven.
Blijkbaar hebben we nog een communicatie-geschil:
Je hebt wizzkids en prutsers, maar ook die 'normale' mensen. Ik vond het alleen nogal raar klinken; alsof de andere 2 groepen niet normaal zijn. Dus op dat vlak zitten we ook op 1 lijn.
zolang de bedrijven mij graag zien komen waar ik solliciteer en het een pluspunt vinden dat ik Toegepaste informatica gedaan heb ben ik blij. En ik ben heeeel blij ;)
BTW waar heb jij je studie gedaan, want dat verschilt ook nogal eens per regio.. Ik heb namelijk genoeg diepgang gehad in de meeste vakken imho.
Ik zat aan Hogent, III kun je trouwens enkel daar doen. Er zaten echter ook studenten (SV'ers doel ik dan op) die van Brussel, Brugge, etc. kwamen.

ASSUME makes an ASS out of U and ME


  • Remus
  • Registratie: Juli 2000
  • Laatst online: 15-08-2021
era.zer schreef op donderdag 18 december 2008 @ 13:51:
[...]

Geen idee wat het nu allemaal is. Ik heb mijn eindwerk met het leuke Java Swing gemaakt en een gewone filechooser dialog tonen (standaard stuff) duurde de eerste keer 5-15 seconden op álle pc's. 4-5 jaar geleden. Sindsdien nog nauwelijks java/swing aangeraakt na deze traumatische ervaring haha :)
Natuurlijk doet java het goed op supercomputers (cern/ebay) maar (vroeger) toch niet op desktop clientpc's (met swing gui dus, en laat dat nu het meest gebruikte zijn)...

Dat er zoveel mensen denken dat 'java' traag is, zal wel niet zomaar uit de lucht gegrepen zijn...
@oisyn ik heb nergens gezegd dat java traag is, enkel dat de gui traag is (dus swing of whatever)
Dat JFileChooser traag was in veel (maar niet alle!) situaties is/was een bekende bug die voor zover ik weet sinds Java 6 Update 10 pas echt verholpen is (met wat verbeteringen in de afgelopen paar jaar). Het ging - als ik mij goed herinner - vooral mis als de start-folder veel zip-bestanden bevatte oid, en dan hoofdzakelijk onder Windows omdat Sun een bepaalde Win32-API op de verkeerde wijze gebruikte.

Overigens heb ik een paar (kleine) tooltjes gemaakt met Swing, en in mijn ervaring doen zich de meeste problemen met trage UI voor als je zaken afhandelt op de event-thread in plaats van via een SwingWorker of een losse Thread ed.
Daarnaast is het natuurlijk een feit dat Sun gewoon een vreemde beslissing heeft genomen door de systeem look- en feel te emuleren ipv de systeem-eigen widgets te gebruiken (zoals SWT bijvoorbeeld doet), die emulatie zorgt voor vertraging (ook omdat het veelal niet via de 2D accelarator gaat, pas sinds Java 6 Update 10).

In tegenstelling tot eerdere posts is Swing NIET deprecated (Sun heeft in Java 6 Update 10 zelfs een nieuwe platformonafhankelijke look-en feel geïntroduceerd.

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 21:20

MBV

RayNbow schreef op donderdag 18 december 2008 @ 19:32:
[...]

Dus? Functioneel impliceert niet dynamisch. Er bestaan ook statische functionele talen. Het functionele aspect staat orthogonaal op de statisch-dynamische as.
ik somde een paar feiten op: lambda-calculus-concepten worden ook wel functioneel programmeren genoemd wanneer je dat toepast in programma's (functies zijn 'first-class citizens'). De eerste talen die dit concept ondersteunden waren dynamische programmeertalen. Nu pak ik weer je originele reactie erbij:
RayNbow schreef op donderdag 18 december 2008 @ 18:38:
[...]
En sinds wanneer zijn lambda expressions iets kenmerkends voor dynamische talen?
Lambda expressions zijn iets heel kenmerkends voor dynamische talen. Zo ongeveer alle dynamische talen ondersteunen lambda-expressies, terwijl het een concept is wat tot voor kort niet voorkwam in statische programmeertalen. Dus jouw opmerking vond ik echt nergens op slaan.

Waarom C# en Java trouwens geen dynamische programmeertalen zouden zijn zou ik niet weten: met reflection enzo kan je run-time de uitgevoerde code veranderen, waarmee het een dynamische programmeertaal is.

offtopic:
The reflections are all wrong :P

  • zwippie
  • Registratie: Mei 2003
  • Niet online

zwippie

Electrons at work

De grootste vloek in de informatica was toch goto? :+


Ontopic:

Volgens mij verwordt deze discussie nu voornamelijk een Java vs .net verhaal. Terwijl deze talen imho toch een hele hoop zaken gemeen hebben, en deels met dezelfde ideeën in het achterhoofd zijn ontwikkeld: een heldere object georiënteerde taal, middels bytecode draaiende in een virtual machine met garbage collection, het aanbieden van een uitgebreide collectie libraries voor datastructuren, netwerken, etc etc om direct een multifunctionele taal neer te zetten, het aanpakken van de nadelen van C/C++.
Waar de platformen enigszins in verschillen zijn de nadrukken op platformonafhankelijkheid, het toch kunnen gebruiken van unsafe code en het aantal taalvarianten. Inmiddels zou je ook het licentiemodel als verschil kunnen aanmerken.

Maar goed, er was dus een tijd dat de insteek van deze twee talen helemaal de toekomst leek. (En omdat Java eerder op de markt verscheen is het misschien daardoor in het onderwijs inmiddels meer omarmd dan .net).

Dus. Moeten we de oorzaak van de gevreesde teloorgang misschien meer zoeken in het idee dat informatici begin jaren negentig de verkeerde toekomstvisie hadden?

Edit: En dan bedoel ik dus te zeggen dat het volgens mij niet zozeer om de implementatie gaat, maar om de concepten. Het doel was volgens mij om sneller software te kunnen maken, met minder fouten.

[ Voor 7% gewijzigd door zwippie op 18-12-2008 20:44 ]

How much can you compute with the "ultimate laptop" with 1 kg of mass and 1 liter of volume? Answer: not more than 10^51 operations per second on not more than 10^32 bits.


  • MBV
  • Registratie: Februari 2002
  • Laatst online: 21:20

MBV

offtopic:
De grootste vloek is Cobol. "It's not dead yet, it just smells funny." Zal ik morgen even een snippet copy/pasten? Dan wil iedereen direct weer Java programmeren >:)

Ik denk dat een paar pagina's terug de juiste opmerking is gemaakt: we willen dat meer mensen kunnen programmeren (in 1998 werd je met alleen VWO nog aangenomen als programmeur :X), dat betekent dat je niet al te selectief kan zijn. En dat betekent weer dat je ook mindere goden moet accepteren als informaticus. De Nederlandse cultuur dat we allemaal manager moeten worden als promotie helpt daar niet bij.
Een van de tools die het mogelijk maakte om relatief eenvoudig complexe programma's te schrijven was Java, die hier het zondebok lijkt te worden.

Dus nee, ik denk niet dat de toekomstvisie verkeerd was. Eerder de ambities te hoog. Het echte probleem zat namelijk niet in de techniek, maar in de praktijk van te weinig testen en structuur.

[ Voor 24% gewijzigd door MBV op 18-12-2008 20:52 ]


  • writser
  • Registratie: Mei 2000
  • Laatst online: 18:39
Roy-t, waarom zou C# volgens jou een geschikter platform zijn om studenten te leren programmeren? Je komt met allemaal argumenten (unsafe code blokken, geheugenindeling van structs, dichter bij de compiler komen) die het leren programmeren alleen maar moeilijker maken in het begin.
Ik zou het absoluut niet jammer vinden als ze op de Uni's en HBO's weer Java schrappen en terug gaan naar C++ waar je toch echt veel mee zult moeten werken later
Hoe vaak heb je al gesolliciteerd? Zoveel wordt er niet meer gedaan in C++ voorzover ik weet.

offtopic:
Welke leraren willen volgens jou liever doceren in C#? Benieuwd :)

Onvoorstelbaar!


  • writser
  • Registratie: Mei 2000
  • Laatst online: 18:39
zwippie schreef op donderdag 18 december 2008 @ 20:42:
Dus. Moeten we de oorzaak van de gevreesde teloorgang misschien meer zoeken in het idee dat informatici begin jaren negentig de verkeerde toekomstvisie hadden?
Lijkt mij niet. Deze "toekomstvisie" bestaat al sinds het begin van de informatica. Eerst draaide je schakelaartjes om, vervolgens ponste je bitjes in een ponskaart, daarna kwamen assembly, c, java en python. Voor het gros van de applicaties is het developen daardoor een stuk makkelijker (in elk geval productiever) geworden.

Onvoorstelbaar!


  • MBV
  • Registratie: Februari 2002
  • Laatst online: 21:20

MBV

writser schreef op donderdag 18 december 2008 @ 20:55:
Roy-t, waarom zou C# volgens jou een geschikter platform zijn om studenten te leren programmeren? Je komt met allemaal argumenten (unsafe code blokken, geheugenindeling van structs, dichter bij de compiler komen) die het leren programmeren alleen maar moeilijker maken in het begin.


[...]

Hoe vaak heb je al gesolliciteerd? Zoveel wordt er niet meer gedaan in C++ voorzover ik weet.

offtopic:
Welke leraren willen volgens jou liever doceren in C#? Benieuwd :)
Als je C, C++ en nog een taal hebt geleerd kan je de meeste imperatieve talen heel snel onder de knie krijgen. Ik heb laatst ook wat gedaan in C#, en met een beetje googlen kom je er wel. En of je nu een diploma hebt met 0 ervaring en een schoolprojectje in C++, of 0 ervaring en een schoolprojectje in Java, dat zal de meeste bedrijven een worst wezen. Zeker uit het HBO ga je direct op cursus, en leren ze je in 3 maanden opnieuw programmeren (bij de grote bedrijven)

  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 19:41

RayNbow

Kirika <3

MBV schreef op donderdag 18 december 2008 @ 20:40:
[...]

ik somde een paar feiten op: lambda-calculus-concepten worden ook wel functioneel programmeren genoemd wanneer je dat toepast in programma's (functies zijn 'first-class citizens'). De eerste talen die dit concept ondersteunden waren dynamische programmeertalen.
Zoals ik eerder zei is functioneel programmeren iets wat los van dynamische talen staat. Je kan imperatief programmeren in zowel dynamische als statische talen. Je kan functioneel programmeren in zowel dynamische als statische talen.

Dat een dynamische programmeertaal als eerste een concept X introduceerde maakt dat niet meteen iets kenmerkends voor dynamische talen...
Nu pak ik weer je originele reactie erbij:

[...]

Lambda expressions zijn iets heel kenmerkends voor dynamische talen. Zo ongeveer alle dynamische talen ondersteunen lambda-expressies, terwijl het een concept is wat tot voor kort niet voorkwam in statische programmeertalen.
Tot voor kort? Dus je negeert voor het gemak even ML, OCaml, Clean, Haskell, ...? Je negeert zeker ook het feit dat niet lang na het beschrijven van de untyped lambda calculus de heer Church met een typed variant kwam, namelijk λ, nog ver vóór de geboorte van Lisp?
Waarom C# en Java trouwens geen dynamische programmeertalen zouden zijn zou ik niet weten: met reflection enzo kan je run-time de uitgevoerde code veranderen, waarmee het een dynamische programmeertaal is.
Dynamisch/Statisch is dan ook niet zwart-wit. Het is een as. Een taal kan erg statisch zijn, erg dynamisch, of iets er tussen in. Denk aan concepten als dynamic binding in redelijk statische talen als Java en C#.

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


  • OMX2000
  • Registratie: Januari 2001
  • Laatst online: 01:21

OMX2000

By any means necessary...

RayNbow schreef op donderdag 18 december 2008 @ 19:32:
[...]

Dus? Functioneel impliceert niet dynamisch. Er bestaan ook statische functionele talen. Het functionele aspect staat orthogonaal op de statisch-dynamische as.
Ik maakte een fout ik bedoelde dus Dynamische talen...

Maar goed het is mierenneuken en nu behoorlijk of topic... Het enige wat ik wilde zeggen is dat C# op dit moment innovatiever is dan Java. Niet per se beter...

Dè developers podcast in je moerstaal : CodeKlets Podcast


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-09 16:37

.oisyn

Moderator Devschuur®

Demotivational Speaker

MBV schreef op donderdag 18 december 2008 @ 18:41:
Wikipedia: Lambda calculus
Lisp was de eerste functionele programmeertaal bij mijn weten, en dat was een dynamische taal.
Misschien heb je JIT niet nodig om lambda-expressies neer te zetten, maar het zorgt volgens mij wel voor een veel betere performance.
Lambda calculus heeft in feite geen zak te maken met lambda expressions in hedendaagse programmeertalen, wat niets meer zijn dan anonieme inline gedefinieerde functies met wellicht wat context informatie (dan worden het closures genoemd). Een jitter boeit bij lambda expressions dus net zoveel als bij gewone functies.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • AaroN
  • Registratie: Februari 2001
  • Laatst online: 16-08-2023

AaroN

JayGTeam (213177)

blackangel schreef op donderdag 18 december 2008 @ 16:24:
[...]
Ik zie programmeren als een functionerende applicatie ontwikkelen, en ben het dan ook niet met jou eens.

Als iemand een programma wil hebben wat een mooie 7segmenten output (even voor microcontrollers op een wekker, embedded systems, meer mijn richting), dan kan ik dat ontwikkelen met
if(x=0) { seg_A = true; seg_B = true; }
if(x=1) { seg_A = false; seg_B = true; }
Ik kan dat echter ook met een switch/case doen, veel netter. En als ik echt wil klooien met algoritmes, dan kan ik dat zelfs doen met een karnaugh-diagram en vervolgens
seg_B = !(x&0x02)
Dat laatste vind ik een algoritme, maximale performance eruit halen. Maar is dat altijd nodig? Nee. Iedereen die een ledje kan laten knipperen (electronica's Hello World), kan het goed genoeg maken. Bitfucken, switch/case of desnoods een if/else, ze krijgen het werkend.
Algortimes zijn een systematische manier om een bepaald probleem op te lossen. Dat laatste statement kan net zo goed onderdeel zijn van een algoritme als dat eerste stuk. Daarbij gaat je argument imho mank. Kennis gaat niet alleen over toepassingen. Ander begrip van kennis veroorzaakt ook spraakverwarringen. Wij hebben blijkbaar een ander begrip van de term algoritme.
Voor programmeertechnieken geld hetzelfde. Ik vind bitfucken erg leuk, maar je *hoeft* het niet te gebruiken. Met if, while en de juiste library functies aanroepen kun je het meeste wel implementeren. Tuurlijk is het handig om classes te gebruiken, overerving e.d. te gebruiken, maar niet altijd, en zonder dat kun je ook prima programmeren. Afhankelijk van je applicatie is dat een marteling, maar dat is nu even niet het punt :P
Om deze afwegingen te maken moet je de programmeertechnieken op zijn minst kennen en kunnen toepassen. Als je een brede kennis hebt op dit gebied, dan kun je goed bepalen wanneer je welke techniek toepast. Waardoor je inderdaad martelgangen voorkomt. Ik ben het compleet met je eens wat hierboven staat, maar het is geen argument tegen wat ik stelde.
Computersystemen? Vooruit, maar daarvoor heb je niet veel meer dan basiskennis nodig. Als je iets wil opslaan, dan kun je dat in een file doen. Nouja, je moet dan weten wat een file is. Tegenwoordig weten teveel mensen niet eens meer wat een pointer is en hoe ze die kunnen gebruiken. Ja, je moet er wel wat van weten, nee, niet alles. Basiskennis is voldoende.
Als je goed wilt kunnen programmeren, moet je mijns inziens de beperkingen van systemen kennen. Dat kan zijn de bandbreedte van een databus of netwerkverbinding. Het begrip van geheugen allocatie en lowlevel dingen die achter de schermen gebeuren, kunnen een hoop problemen verklaren die men vaak tegen komt. Ik ben het met je eens dat het allemaal niet noodzakelijk is, maar het is beter om deze kennis wel te hebben. Je wilt immers dat jouw product van de hoogste kwaliteit is.
Programmeertalen? Wat bedoel je daar precies mee? Ik moet kennis hebben van andere programmeertalen voordat ik iets ontwikkel? Je hebt daarin gedeeltelijk gelijk, omdat voor sommige applicaties het makkelijker is om een specifieke programmeertaal te gebruiken. Maar dat maakt het niet noodzakelijk om een andere programmeertaal te kennen. Ikzelf heb pas sinds kort fatsoenlijk met VB leren programmeren, maar met C/C++ kan ik, ongeacht de (on)gebruiksvriendelijkheid van de compiler, toch nog sneller programmeren. Maar daar weet ik van dat het aan mij ligt :P
Je moet toch de syntax en standaard structuren van een programmeertaal kennen om deze te kunnen gebruiken? Dit bedoel ik letterlijk, lijkt me volkomen terecht.
Wiskunde? Ik nodig je graag uit om bij sommige HBO-opleidingen te komen kijken. Wiskunde wordt, tot mijn grote ergenis overigens, niet standaard meer op fatsoenlijk niveau gegeven op de opleiding. Het heeft nadelen als je met beeldvorming werkt (2d, 3d, audio, externe inputs bij embedded, etc). Maar als je een CMS wil opzetten boeit het totaal niks. Niet veel meer dan if while in ieder geval.
Mja, komen we weer uit op hetzelfde punt als de kennis over computersystemen. Kennis van wiskunde helpt je complexe problemen sneller oplossen. Als je minder kennis hebt, zul je in de praktijk vaak langer doen over complexe problemen.
Ik ben het er mee eens dat kennis van de punten die je noemt weldegelijk erg handig is, maar het is geen harde eis zoals jij aangeeft. Zonder dat kun je ook programmeren. Goed? Nouja, je kunt een functionerend programma opzetten binnen reeele tijd. Als ik kijk naar de lichting die van mijn opleiding & jaar af gaan komen, kun je daar al best tevreden mee zijn :)
Het waren ook geen harde eisen hoor :) Gewoon mijn mening en het waarom achter die mening. Ik denk dat we het op veel punten eens zijn.
Mijn kritieke mening is, onder andere over Java, dat het teveel library's heeft die de leercurve van het programmeren wegnemen. PHP is in dat opzicht, wat mij betreft, nog een stapje erger: je leert er geen algoritmes (meer) mee. Ik vind dat zelf een van de interessantere dingen aan programmeren. Niet hard noodzakelijk, maar soms is het toch verdomd handig als je library je in de steek laat.
Java is erg uitgebreid, zonder enige andere kennis kun je inderdaad erg eenvoudig de weg kwijt raken. Je hoeft die libraries niet te gebruiken. Java kan een goede tool zijn, maar het wordt nu eenvoudigweg teveel gebruikt om te leren.
In zo'n topic even voor de volledigheid, dit is puur zoals ik het ervaar. Ik heb net 5 jaar programmeerervaring op opleiding(en), maar geen echt interessante programmeerervaring buiten mijn huidige stage.
Jouw ervaring kan anders zijn dan mijn mening. Ik wil benadrukken: het blijft subjectief :)

JayGTeam (213177)


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 21:20

MBV

[knip] bullshit over dynamisch/statisch en functioneel proggen[/]

[ Voor 97% gewijzigd door MBV op 19-12-2008 09:25 ]


Acties:
  • 0 Henk 'm!

  • blackangel
  • Registratie: April 2002
  • Laatst online: 25-09 12:57
AaroN schreef op vrijdag 19 december 2008 @ 08:53:
[...]

Het waren ook geen harde eisen hoor :) Gewoon mijn mening en het waarom achter die mening. Ik denk dat we het op veel punten eens zijn.
Grofweg gezien wel. Hoe meer verstand je hebt van die punten, hoe beter. Dat betekend wat mij betreft niet dat je zonder die punten ook een functionerende applicatie neer kunt zetten, alleen wordt het uiteindelijk een marteling. Voordat ik C++ kende (wel classes, geen overerving :+ ), heb ik mijzelf vaak genoeg gepijnigd inderdaad. Maar dat betekend niet dat ik het niet functionerend neer kon zetten.

En ik zie dat we een aantal verschillen in begripdefinities hebben. Als ik die van jouw zo lees, heb jij in die punten zeker gelijk :)

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 25-09 16:59

Janoz

Moderator Devschuur®

!litemod

roy-t schreef op donderdag 18 december 2008 @ 17:01:
Ik heb bij java nog nooit delegates,
Een callback is middels een interface te implementeren. Een delegate is dan ook niet meer dan syntactische suiker. Hetzelfde geld voor properties. Ja, het schrijven van getters en setters is meer werk, maar over het algemeen kan je tooling dat keurig voor je genereren.
closures,
Worden in groovy ondersteund.
[unsafe] code blokken met pointers en alles
Dat is een designkeuze van het platform en of het een voordeel is of niet is vooral subjectief.
ook handige toevoegingen als threadpools (ok die kun je ook zelf maken) mis ik.
idd zelf te schrijven, maar ook beschikbaar in Java 5.
Ik twijfel er nu ook over of ik eigenlijk wel structs in java ken, en ik weet vrij zeker dat je in java niet de layoutkind van je struct kan setten, en zelf kunt aan geven hoe qua geheugen locaties structs worden opgebrouwd.
Zie commentaar op unsafe.
Ook heb ik nog nooit projecten gezien waarbij een deel van het programma hielp met zichzelf compilen. (denk aan apparte compile-projecten en content managers).
Binnen de VM is de compiler beschikbaar. Je kunt eigen implementaties van de classloader maken en daarin zelfs de bytecode aanpassen. Ook heeft java een scripting engine waarmee je domein specifieke talen kunt ontwikkelen. Voorbeelden van implementaties van functionaliteiten die je aanhaalt zijn aan Ant (java build tool), jakarta's BCEL (bytecode engenering library), JBoss drools (een businessrules engine waarbij businessrules apart gecompileerd kunnen worden)
Ook lijkt .Net wat betreft services veel uitgebreider en zijn er voor Threads veel mooiere contructies dan in Java waar je alleen op een parameterloze manier threads kunt starten waardoor je weer properties moet setten van te voren.
Inherent aan de platform onafhankelijkheid. Op lang niet alle platformen zijn dezelfde properties aanwezig. Welke prioriteit je thread krijgt lijkt me echter redelijk ondergeschikt aan de mogelijkheden die java.util.concurrent bied.
Nu krijg ik waarschijnlijk het argument 'dat kun je zelf maken' wat waarschijnlijk ook wel valide is, aangezien het uiteindelijk allemaal x86 code wordt (of nouja vaak) maar .NET loopt zover ik weet gewoon nu een stuk voor op Java. In java is het veel moeilijker om dichter bij de compiler/computer te komen (dnek aan de handige compiler statements in [] in C#) Misschien dat het met Java7 weer dichter bij elkaar komt.
Helaas heb ik te weinig kennis van het .Net platform om met tegenvoorbeelden te komen. Ik heb geen zicht op dingen die niet in .Net zitten en wel in Java. Ik ben echter nog steeds niet overtuigd van de stelling dat Java achterop loopt. Veel voorbeelden zijn het gevolg van bewuste design beslissingen, syntactische suiker of onbekendheid met het andere platform.
(verder vind ik C#/.Net over het algemeen wat consistenter dan java, en is de MSDN in mijn ogen beduidend beter dan sun's java documentatie).
Mwah, subjectief. In essentie komen beiden op hetzelfde neer. Een duidelijk overzicht van properties, methoden en herarchie waardoor je makkelijk heen en weer kunt springen. Persoonlijk vind ik het mengen van VB en C# wat druk worden en de site zelf ook redelijk bloated, maar dat is zoals ik al zei persoonlijk. In 1996 heeft Sun iig een top beslissing genomen door niet alleen de taal te specificeren, maar ook JavaDoc te definieren waardoor er ook een standaard voor code documentatie was. Hierdoor lijkt alle java documentatie iig op elkaar.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-09 16:37

.oisyn

Moderator Devschuur®

Demotivational Speaker

Janoz schreef op vrijdag 19 december 2008 @ 11:29:
[...]

Een callback is middels een interface te implementeren. Een delegate is dan ook niet meer dan syntactische suiker.
Je zegt het een beetje alsof syntactische suiker niet belangrijk is. Bottom line is en blijft dat een delegate stukken handiger is dan een interface waar de symantische betekenis van een interface verder onbelangrijk is (callbacks en notifications). Natuurlijk kun je tools gebruiken die dat voor je doen, maar feitelijk definieer je daarmee gewoon een nieuwe taal met die nieuwe features (dus blijkbaar zijn ze dan toch wel handig). Hetzelfde geldt voor closures - ik vind het een stuk praktischer om even een stukje inline code te schrijven (zoals bijv. een predicate voor een sorteer-algoritme) dan dat je met veel meer moeite een hele Comparable interface moet gaan zitten implementeren in een class, die je vervolgens moet constructen met lokale parameters omdat ie er anders niet bij kan, etc.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 25-09 16:59

Janoz

Moderator Devschuur®

!litemod

.oisyn schreef op vrijdag 19 december 2008 @ 12:21:
[...]

Je zegt het een beetje alsof syntactische suiker niet belangrijk is. Bottom line is en blijft dat een delegate stukken handiger is dan een interface waar de symantische betekenis van een interface verder onbelangrijk is (callbacks en notifications). Natuurlijk kun je tools gebruiken die dat voor je doen, maar feitelijk definieer je daarmee gewoon een nieuwe taal met die nieuwe features (dus blijkbaar zijn ze dan toch wel handig). Hetzelfde geldt voor closures - ik vind het een stuk praktischer om even een stukje inline code te schrijven (zoals bijv. een predicate voor een sorteer-algoritme) dan dat je met veel meer moeite een hele Comparable interface moet gaan zitten implementeren in een class, die je vervolgens moet constructen met lokale parameters omdat ie er anders niet bij kan, etc.
Onbelangrijk is het zeker niet. Bedenkt trouwens dat je een interface ter plekke kunt implementeren en dat je er dus niet perse een losse class van hoeft te maken. Het is echter net als het overloaden van operaties. Dat kan ook niet in Java, maar ik vind het geen valide argument om aan te geven 'dat java mijlenver achterop loopt'.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Janoz schreef op vrijdag 19 december 2008 @ 12:42:
[...]
maar ik vind het geen valide argument om aan te geven 'dat java mijlenver achterop loopt'.
Zeker niet aangezien het om 'advanced features' gaat, waarvan het maar de vraag is hoe vaak de gemiddelde programmeur ze gebruikt.

Overigens verwacht ik dat er na de komende modularisering van de core libraries een niet-backwards compatible Java versie uitgebracht zal worden, waarin men veel van de ideeen uit Groovy en Scala integreert. Scala, een statisch getypeerde dynamische taal met uitgebebreide ondersteuning voor functionele code die toch volledig Java compatible is, is geniaal.

Wie trösten wir uns, die Mörder aller Mörder?


Acties:
  • 0 Henk 'm!

  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 19-09 10:19
MBV schreef op donderdag 18 december 2008 @ 17:32:
Een vak debuggen zou geen kwaad kunnen, hoe vaak ik dat aan iemand heb moeten uitleggen is niet normaal meer :S Java ontwikkelen in Eclipse met printf-debugging, iemand van een jaar of 40 met 10 jaar java-ervaring :X

Bij de C# voordelen zit je volgens mij op dingen die platform-afhankelijk zijn (Java moet overal op kunnen draaien, niet alleen x86, dus memory-mgmt aanpassen is dan een stuk minder interessant, en big/little endian is 'leuk' met pointers), en die in 98% van de applicaties niet zinvol zijn. Het kan handig zijn, als een tussenstap tussen C++ en Java-achtige talen.

C++ zit dicht op de hardware, heeft geen VM, en geen standaard toolkit om GUI's en webservices (wat eigenlijk wel?) mee te schrijven. Er zijn genoeg standaarden voor (denk aan QT, of op een ander vlak de Posix-standaard), maar die zijn niet industrie-breed. Zit je weer met het java-probleem: welk framework pakken we, met welke voors en tegens.
Je draait nogsteeds code in een VM, het vm vangt alles af, je hoeft dus alleen te weten of het .Net vm big of little endian is, het VM zelf zorgt er wel voor dat het goed vertaald wordt naar de computer! (.Net draait bijvoorbeeld ook op de Xbox360 en op de Zune, ik dacht dat de 360 een powerpc achtige processor had en de zune heeft iig geen x86 processor ;). Het heeft dus zeker wel nut, .Net is dan ook net zo platform afhankelijk als Java! Verder zie ik niet hoe closures en delegates ooit platform afhankelijk kunnen zijn ;).
wackmaniac schreef op donderdag 18 december 2008 @ 19:25:
[...]
Dat brengt voor de RuG veel gelazer met zich mee; die draaien volledig op Debian Linux.
Verschilt misschien per faculteit maar op de informatica faculteit zijn ale systemen dual-boot Wingtips(Windows+Novel)/Linux (dacht suse of ubuntu).


@ Oisyn, ah C++09, ik zit er echt op te wachten! Maar wat duurt het lang voordat het komt, de nieuwste versie is toch al 6 jaar oud?

@Janoz: alles in hogere programmeer talen is syntaxtische suiker voor machine-code expressies, dat gaf ik ook al aan in mijn eerste post. Hoe je het nu implementeerd of maakt of bouwt in C++/C#/Java, met of zonder VM, het wordt uiteindelijk uitgevoerd als machine code. Dit is dan ook niet een erg sterk argument. Vooral ook omdat callback interfaces toch net even iets anders zijn dan delegates. (ok je kunt er dezelfde functionaliteit mee bouwen, maar het is geen foreach loop vs een for loop :) .

[ Voor 10% gewijzigd door roy-t op 19-12-2008 17:39 ]

~ Mijn prog blog!


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-09 16:37

.oisyn

Moderator Devschuur®

Demotivational Speaker

roy-t schreef op vrijdag 19 december 2008 @ 17:36:
@ Oisyn, ah C++09, ik zit er echt op te wachten! Maar wat duurt het lang voordat het komt, de nieuwste versie is toch al 6 jaar oud?
Mwoa, C++03 was niet echt essentieel anders dan C++98. Enkel wat technicalities in de spec die zijn geupdate. C++09 heeft daarentegen wel tonnen aan nieuwe taalfeatures. Multithreaded memory model en library (werd echt tijd), lambda expressions en closures, concepts en variadic templates, r-value references en move construction, en nog wat kleinere dingetjes zoals static type inference.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
.oisyn schreef op vrijdag 19 december 2008 @ 17:55:
[...]
Multithreaded memory model en library (werd echt tijd), lambda expressions en closures, concepts en variadic templates, r-value references en move construction, en nog wat kleinere dingetjes zoals static type inference.
Wat dacht je van regular expressions en filesystem (directory traversal et cetera) support? Werd ook wel eens tijd ;-).

Acties:
  • 0 Henk 'm!

  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 19-09 10:19
.oisyn schreef op vrijdag 19 december 2008 @ 17:55:
[...]

Mwoa, C++03 was niet echt essentieel anders dan C++98. Enkel wat technicalities in de spec die zijn geupdate. C++09 heeft daarentegen wel tonnen aan nieuwe taalfeatures. Multithreaded memory model en library (werd echt tijd), lambda expressions en closures, concepts en variadic templates, r-value references en move construction, en nog wat kleinere dingetjes zoals static type inference.
Klinkt heet! Wordt ook de oude code-base opgeschoond? (deprecated warning/compleet verwijderd van depricated programming constructs?)

En wanneer in 2009 kunnen we C++09 stabiele compilers (+ide's) verwachten)

~ Mijn prog blog!


Acties:
  • 0 Henk 'm!

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

PrisonerOfPain schreef op vrijdag 19 december 2008 @ 18:23:
Wat dacht je van regular expressions en filesystem (directory traversal et cetera) support? Werd ook wel eens tijd ;-).
Boost heeft dat allemaal. Eigenlijk wil je niet allemaal clutter en bloat aan een taal toevoegen die je ook makkelijk kan implementeren als support library. De taal zelf wil je schoon houden, en de officiele support library wil je ook daadwerkelijk universeel houden. Hoe meer je daar aan toevoegt, hoe groter de kans dat er devices zijn die geen C++ runtime library kunnen draaien. Dingen als een multi-threaded memory model kan je niet zo maar als library implementeren, daar moeten echt taal garanties voor worden gegeven.

Overigens heeft C++ vanaf TR1 al regex library support.

Misschien ben ik dom, maar wat is eigenlijk het nut van een (java) VM? Ik heb dat nooit zo begrepen. De x86 is toch ook een VM, welliswaar in hardware geimplementeerd en lekker snel. Iedereen lijkt daar altijd zo dol op; owh, java, VM, niiice... snap het niet helemaal. Enige dat ik kan bedenken is dat het gedistribueerde executables wat makkelijker maakt, i.e. je kan makkelijk een remote object downloaden en rechtstreeks draaien. Maar dat zou ook kunnen met een on-the-fly compiler. Bovendien, wie gebruikt dat nou echt veel? Platform onafhankelijk. Uhmm ja, mijn code ook. Secure. Dat is aan je OS lijkt me.

[ Voor 27% gewijzigd door Zoijar op 19-12-2008 19:18 ]


Acties:
  • 0 Henk 'm!

  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 19-09 10:19
Zoijar schreef op vrijdag 19 december 2008 @ 19:07:
[...]

Boost heeft dat allemaal. Eigenlijk wil je niet allemaal clutter en bloat aan een taal toevoegen die je ook makkelijk kan implementeren als support library. De taal zelf wil je schoon houden, en de officiele support library wil je ook daadwerkelijk universeel houden. Hoe meer je daar aan toevoegt, hoe groter de kans dat er devices zijn die geen C++ runtime library kunnen draaien. Dingen als een multi-threaded memory model kan je niet zo maar als library implementeren, daar moeten echt taal garanties voor worden gegeven.

Overigens heeft C++ vanaf TR1 al regex library support.

Misschien ben ik dom, maar wat is eigenlijk het nut van een (java) VM? Ik heb dat nooit zo begrepen. De x86 is toch ook een VM, welliswaar in hardware geimplementeerd en lekker snel. Iedereen lijkt daar altijd zo dol op; owh, java, VM, niiice... snap het niet helemaal. Enige dat ik kan bedenken is dat het gedistribueerde executables wat makkelijker maakt, i.e. je kan makkelijk een remote object downloaden en rechtstreeks draaien. Maar dat zou ook kunnen met een on-the-fly compiler. Bovendien, wie gebruikt dat nou echt veel? Platform onafhankelijk. Uhmm ja, mijn code ook. Secure. Dat is aan je OS lijkt me.
Het nut van een VM is heel simpel.
-Je schrijft 1x code en die draait op elk systeem waar het VM op draait.
-Een vm kan je code beter optimalizeren voor snelheid. (je zou in theorie een java VM kunnen maken die via CUDA e.d. met je videokaart kan praten, dat VM zou er dan voor kunnen zorgen dat floatingpoint operaties op de videokaart worden uitgevoerd en de rest op de processor.)
-Een VM kan ook gebruikt worden voor extra veiligheid omdat een VM er voor kan zorgen dat de code niet buiten het VM komt. Ook kunnen applicaties die in een VM draaien meestal niet zomaar aan geheugen zitten dat niet door het VM gealloceerd is. (als in: slechte code, programma crashed, niet het hele systeem).

~ Mijn prog blog!


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 21:20

MBV

roy-t schreef op vrijdag 19 december 2008 @ 17:36:
[...]


Je draait nogsteeds code in een VM, het vm vangt alles af, je hoeft dus alleen te weten of het .Net vm big of little endian is, het VM zelf zorgt er wel voor dat het goed vertaald wordt naar de computer! (.Net draait bijvoorbeeld ook op de Xbox360 en op de Zune, ik dacht dat de 360 een powerpc achtige processor had en de zune heeft iig geen x86 processor ;). Het heeft dus zeker wel nut, .Net is dan ook net zo platform afhankelijk als Java! Verder zie ik niet hoe closures en delegates ooit platform afhankelijk kunnen zijn ;).
De Zune en XBox360 draaien het compact framework, dus ik weet niet of die alle leuke gimmicks die eerder zijn opgenoemd daarin draaien. O.a. delegates werken niet, de rest kan ik zo 1-2-3 niet vinden.

Acties:
  • 0 Henk 'm!

  • Salvatron
  • Registratie: April 2003
  • Niet online

Salvatron

Dispereert niet

roy-t schreef op vrijdag 19 december 2008 @ 23:14:
Het nut van een VM is heel simpel.
-Je schrijft 1x code en die draait op elk systeem waar het VM op draait.
Alsof compileren zo moeilijk is.
-Een vm kan je code beter optimalizeren voor snelheid. (je zou in theorie een java VM kunnen maken die via CUDA e.d. met je videokaart kan praten, dat VM zou er dan voor kunnen zorgen dat floatingpoint operaties op de videokaart worden uitgevoerd en de rest op de processor.)
Leuk dat dat in theorie kan maar als dat in de praktijk niet het geval is, dan is dat dus geen voordeel van een VM.
-Een VM kan ook gebruikt worden voor extra veiligheid omdat een VM er voor kan zorgen dat de code niet buiten het VM komt. Ook kunnen applicaties die in een VM draaien meestal niet zomaar aan geheugen zitten dat niet door het VM gealloceerd is. (als in: slechte code, programma crashed, niet het hele systeem).
Qua veiligheid is een VM wel goed, maar een programma dat crashed neemt het hele systeem in het algemeen al lang niet meer mee, dus dat is ook geen voordeel.

Ik zie de voordelen van een VM niet erg. Java-code kun je trouwens sowieso naar exe-files compileren.

Lucht en leegte, zegt Prediker, alles is leegte.


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-09 16:37

.oisyn

Moderator Devschuur®

Demotivational Speaker

roy-t schreef op vrijdag 19 december 2008 @ 19:00:

Klinkt heet! Wordt ook de oude code-base opgeschoond? (deprecated warning/compleet verwijderd van depricated programming constructs?)
Dingen als vector<bool> blijven helaas bestaan. Verder wordt wel de hele library geüpdate voor de nieuwe constructs, met name r-value references en concepts.
En wanneer in 2009 kunnen we C++09 stabiele compilers (+ide's) verwachten)
Ik denk dat 2009 wel een beetje optimistisch is, er is een hoop om te implementeren. Daarentegen ondersteunt Comeau al wat C++0x extensions als type inference, en is er ConceptGCC, een gcc fork met concepts support. Gezien het feit dat concepts denk ik de grootste feature wordt om te implementeren heeft gcc er erg veel voordeel van dat er al een implementatie bestaat. Maar Comeau zal ook wel veel moeite gaan doen en EDG zal vast ook wel met een nieuwe front-end komen (waar oa Intel gebruik van maakt). Maar C++0x support in Visual Studio 2010 zit er denk ik niet in, hoewel ik wel aangenaam verrast was door hun std::tr1 support. Maar ja, dat was ook maar een kwestie van een library toevoegen.

[ Voor 6% gewijzigd door .oisyn op 20-12-2008 01:12 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 19:41

RayNbow

Kirika <3

Zoijar schreef op vrijdag 19 december 2008 @ 19:07:
[...]
Misschien ben ik dom, maar wat is eigenlijk het nut van een (java) VM?
Wat is het nut van een OS? Precies, het vormen van een abstractielaag voor de applicaties die voor dat OS draaien. Een VM is niet veel anders, behalve dat tussen de VM en de hardware meer lagen zit.
Ik heb dat nooit zo begrepen. De x86 is toch ook een VM, welliswaar in hardware geimplementeerd en lekker snel.
Maar wat is het nut van de x86 instructieset? Juist, een abstractielaag vormen bovenop de microcode. ;)
Iedereen lijkt daar altijd zo dol op; owh, java, VM, niiice... snap het niet helemaal.
De reden is misschien dat mensen soms van wat meer abstractie houden zodat ze op een hoger niveau kunnen werken? ;)
Enige dat ik kan bedenken is dat het gedistribueerde executables wat makkelijker maakt, i.e. je kan makkelijk een remote object downloaden en rechtstreeks draaien. Maar dat zou ook kunnen met een on-the-fly compiler.
Een JVM kan (en doet dat ook) on-the-fly compilen. Het verschil zit dus in abstractie.
Bovendien, wie gebruikt dat nou echt veel? Platform onafhankelijk.
Ik ben wel blij als een door mij geschreven programma zonder moeite op een ander systeem draait. ;)
Uhmm ja, mijn code ook.
Ik ken jouw code niet, dus daar kan ik geen uitspraken over doen. Toch valt het me op dat ik als Windows gebruiker vaak genoeg code tegenkom die ik niet werkende krijg. In de gevallen dat ik het werkende kreeg, moest ik vaak door veel hoepels springen.
Secure. Dat is aan je OS lijkt me.
Security is iets wat meerdere lagen beslaat. Je OS regelt de security voor alle OS-gerelateerde zaken (diensten), maar het lijkt me best moeilijk voor een OS om te bepalen wat "secure" is in de hogere lagen.

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


Acties:
  • 0 Henk 'm!

Verwijderd

RayNbow schreef op zaterdag 20 december 2008 @ 01:30:
[...]

Maar wat is het nut van de x86 instructieset? Juist, een abstractielaag vormen bovenop de microcode. ;)
Inderdaad. Je zou ook een microcode ISA kunnen maken die de Java VM implementeert. Het maakt weinig uit waar je de abstractielaag zet, behalve dat je misschien minder hardware nodig hebt als je de x86-laag er tussenuit haalt. Als Java zo populair zou zijn dat je eigenlijk nog maar weinig x86 code draait, zou je x86 kunnen implementeren bovenop de JVM.

Voordeel van zulke goocheltrucs is dat je pijnloos kan switchen naar betere hardware-architecturen, maar de noodzaak moet natuurlijk wel aanwezig zijn.

Acties:
  • 0 Henk 'm!

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

roy-t schreef op vrijdag 19 december 2008 @ 23:14:
Het nut van een VM is heel simpel.
-Je schrijft 1x code en die draait op elk systeem waar het VM op draait.
C++ code draait ook op elk systeem waar de compiler back-end op draait. Of je nou een back-end moet implementeren of een VM, weinig verschil.
-Een vm kan je code beter optimalizeren voor snelheid. (je zou in theorie een java VM kunnen maken die via CUDA e.d. met je videokaart kan praten, dat VM zou er dan voor kunnen zorgen dat floatingpoint operaties op de videokaart worden uitgevoerd en de rest op de processor.)
Dat betwijfel ik. Ik denk dat een C++ compiler het beter zou moeten kunnen ivm een context op hoger niveau; in ieder geval niet minder goed.
-Een VM kan ook gebruikt worden voor extra veiligheid omdat een VM er voor kan zorgen dat de code niet buiten het VM komt. Ook kunnen applicaties die in een VM draaien meestal niet zomaar aan geheugen zitten dat niet door het VM gealloceerd is. (als in: slechte code, programma crashed, niet het hele systeem).
Native code kan niet buiten je process komen, daar is protected mode voor. Dat is een kwestie van een goed OS, wat er tegenwoordig wel is.
RayNbow schreef op zaterdag 20 december 2008 @ 01:30:
Wat is het nut van een OS? Precies, het vormen van een abstractielaag voor de applicaties die voor dat OS draaien. Een VM is niet veel anders, behalve dat tussen de VM en de hardware meer lagen zit.

[...]

Maar wat is het nut van de x86 instructieset? Juist, een abstractielaag vormen bovenop de microcode. ;)

[...]

De reden is misschien dat mensen soms van wat meer abstractie houden zodat ze op een hoger niveau kunnen werken? ;)
Maar het lijkt me een overbodig abstractie niveau. Er is weinig verschil tussen een compiler back-end en een VM, en back-ends waren er al voor vrijal alle systemen.
Een JVM kan (en doet dat ook) on-the-fly compilen. Het verschil zit dus in abstractie.
Ja, dus je gaat eerst een abstractie maken, en dan ga je alsnog compilen omdat het te traag loopt anders. Nodeloos ingewikkeld?
Ik ben wel blij als een door mij geschreven programma zonder moeite op een ander systeem draait. ;)

Ik ken jouw code niet, dus daar kan ik geen uitspraken over doen. Toch valt het me op dat ik als Windows gebruiker vaak genoeg code tegenkom die ik niet werkende krijg. In de gevallen dat ik het werkende kreeg, moest ik vaak door veel hoepels springen.
Eerlijk gezegd heb ik nooit problemen meer tegenwoordig. Alles compiled en draait moeiteloos op meerdere systemen. Tenzij je echt iets op laag niveau met de hardware doet. Maar daar loop je met een VM helemaal meteen vast.
Security is iets wat meerdere lagen beslaat. Je OS regelt de security voor alle OS-gerelateerde zaken (diensten), maar het lijkt me best moeilijk voor een OS om te bepalen wat "secure" is in de hogere lagen.
Het is wel handig dat je security model platform onafhankelijk is, maar het niet iets dat je niet in een OS zou kunnen stoppen per process.

Ik zie het idd als een extra laag, die traag is en weinig toevoegt voor het merendeel van de applicaties. Het enige nuttige dat ik nog steeds zie is het draaien van remote code, zoals in een browser. Dat was volgens mij ook het hele doel aan het begin, totdat iedereen er ineens volledige applicaties in ging schrijven.
Verwijderd schreef op zaterdag 20 december 2008 @ 01:43:
Voordeel van zulke goocheltrucs is dat je pijnloos kan switchen naar betere hardware-architecturen, maar de noodzaak moet natuurlijk wel aanwezig zijn.
Dat klinkt allemaal leuk in theorie, maar in de praktijk is er vaak geen efficiente mapping naar een andere architectuur.

Overigens vind ik niks mis met java hoor, nu het er is. Op het moment dat je het kan compilen naar native code EN er is een VM aanwezig, dan is dat natuurlijk strict beter dan alleen een compiler. Ook vind ik de multi-threading support in java goed. Ik vond het alleen altijd vervelend om in te programmeren; de taal is zo... langdradig. Ook vind ik de argumenten om java te gebruiken vaak slecht. Uiteindelijk is het een keuze, en het maakt niet zo veel meer uit wat je kiest.

[ Voor 10% gewijzigd door Zoijar op 20-12-2008 05:47 ]


Acties:
  • 0 Henk 'm!

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Zoijar schreef op zaterdag 20 december 2008 @ 05:28:
Dat betwijfel ik. Ik denk dat een C++ compiler het beter zou moeten kunnen ivm een context op hoger niveau; in ieder geval niet minder goed.
Het is onvermijdelijk dat een dynamische compiler, die optimaliseert aan de hand van runtime benodigdheden en gewoon meer informatie tot zijn beschikking heeft, sneller kan zijn dan welke statische compiler dan ook. De moderne JVM blijkt in veel gevallen Java code sneller uit te voeren dan vergelijkbare C++ code, door Just-In-Time optimalisaties. Ik vind dat verder geen doorslaggevende reden, omdat de verschillen in het grootste deel van de gevallen marginaal zijn.
Native code kan niet buiten je process komen, daar is protected mode voor. Dat is een kwestie van een goed OS, wat er tegenwoordig wel is.
Het Java security model staat meer fine-grained security toe dan dat. Als je de security aan zet, dan heeft code bijvoorbeeld standaard geen enkel schrijfrecht, waar dan ook. Dat biedt in sommige gevallen meerwaarde, maar in veruit de meeste gevallen wordt de security uit gezet. Zo'n security model is zonder VM een stuk moeilijker te bouwen, maar niet onmogelijk. Misschien dat er voor C++ al zoiets is.
Ik vond het alleen altijd vervelend om in te programmeren; de taal is zo... langdradig.
Misschien is dat juist een sterk punt: het maakt glashelder wat er gebeurd en het maakt het moeilijk bochtjes af te snijden. Scripting talen als Python zijn expressiever, in de zin dat ze meer operaties in minder regels toestaan. Het grote nadeel daarvan is dat ze het voor programmeurs heel makkelijk maken hun opvolger in de voet te schieten, door fancy-dancy constructies, die zich niet gemakkelijk laten begrijpen door een andere programmeur. Je moet bij wijze van spreken in Java moeite doen om code te schrijven die de volgende niet gaat begrijpen, terwijl je in Python moeite moet doen om je niet te laten verleiden tot schijnbaar elegante oplossingen die eigenlijk heel ondoorzichtig zijn.

Hoeveel regels code je moet schrijven zou geen criterium moeten zijn om voor een bepaalde taal te kiezen: code wordt tenslotte veel vaker gelezen dan geschreven.

[ Voor 28% gewijzigd door Confusion op 20-12-2008 11:32 ]

Wie trösten wir uns, die Mörder aller Mörder?


Acties:
  • 0 Henk 'm!

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Confusion schreef op zaterdag 20 december 2008 @ 11:08:
Het is onvermijdelijk dat een dynamische compiler, die optimaliseert aan de hand van runtime benodigdheden en gewoon meer informatie tot zijn beschikking heeft, sneller kan zijn dan welke statische compiler dan ook. De moderne JVM blijkt in veel gevallen Java code sneller uit te voeren dan vergelijkbare C++ code, door Just-In-Time optimalisaties. Ik vind dat verder geen doorslaggevende reden, omdat de verschillen in het grootste deel van de gevallen marginaal zijn.
Ok, ik dacht er verkeerd over na idd. In dat geval zal het niet veel uitmaken, Java en C++ zijn eigenlijk allebei compiled languages nu, maar java wrapped de compiler in de executable als het ware. Dynamische optimalisaties kunnen sneller zijn, maar er hangt natuurlijk wel een cost aan... dus in de praktijk wisselt het. Beetje flauwe discussie dan eigenlijk. Ik heb de java ontwikkelingen niet zo bijgehouden. Laatste keer dat ik het gebruikte was in 1999. Dus helaas ben ik denk ik schuldig aan het uit m'n nek lullen op basis van oude informatie :P

Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 23-09 20:04
Confusion schreef op zaterdag 20 december 2008 @ 11:08:
Het is onvermijdelijk dat een dynamische compiler, die optimaliseert aan de hand van runtime benodigdheden en gewoon meer informatie tot zijn beschikking heeft, sneller kan zijn dan welke statische compiler dan ook. De moderne JVM blijkt in veel gevallen Java code sneller uit te voeren dan vergelijkbare C++ code, door Just-In-Time optimalisaties. Ik vind dat verder geen doorslaggevende reden, omdat de verschillen in het grootste deel van de gevallen marginaal zijn.
Nou is dit al de weet ik veel hoeveelste keer dat ik dit argument hoor om aan te tonen dat Java / .Net toch echt wel sneller zou zijn dan vergelijkbare code in C of C++, terwijl ik nog geen enkele keer overtuigend bewijs heb mogen zien van die stelling. ( Dat het theoretisch sneller zou moeten kunnen zijn heb ik weinig aan )

Mijn subjectieve ervaring is echter nog steeds dat .Net code ( Java heb ik minder ervaring mee ) orde groottes langzamer draait dan een vergelijkbaar iets in C of C++.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 21:20

MBV

Jack Walsh schreef op zaterdag 20 december 2008 @ 00:25:
[...]
Alsof compileren zo moeilijk is.
Ja: veel bedrijven willen geen sourcecode meeleveren om te zorgen dat de klant het op zijn specifieke platform kan draaien, je moet maar genoegen nemen met executables. Ik geloof dat Adobe nog steeds geen flash-plugin levert voor BSD. Even compileren is leuk, maar dan moet je het nieuwe platform ook expliciet gaan supporten, en ondanks de vele standaarden lukt het maar niet om te zorgen dat C++-code overal werkt. Vaak werkt die POSIX-library toch net iets anders in BSD, of ontbreken er tools die in een ander OS wel aanwezig zijn.
Leuk dat dat in theorie kan maar als dat in de praktijk niet het geval is, dan is dat dus geen voordeel van een VM.
Zoek eens op wat JIT betekent, en wat de voordelen zijn :X Gebeurt standaard in Java, en daardoor hoef je door een stuk minder hoepels te springen om dezelfde snelheid te halen.
Verwijderd schreef op zaterdag 20 december 2008 @ 01:43:
[...]

Inderdaad. Je zou ook een microcode ISA kunnen maken die de Java VM implementeert.
Die is er ook: nieuws: Azul kondigt tweede generatie Java-processor aan
En het leeft nog steeds: Wikipedia: Azul Systems.
Zoijar schreef op zaterdag 20 december 2008 @ 05:28:
[...]

C++ code draait ook op elk systeem waar de compiler back-end op draait. Of je nou een back-end moet implementeren of een VM, weinig verschil.
Da's heel aardig, maar wil jij een niet-triviaal systeem schrijven wat zonder problemen op Windows en Linux draait, dan heb je een probleem. Daarbij zal je namelijk óf netwerk, óf een GUI nodig hebben, en dat zit allebei niet in C++. Met QT kan je dan weer prima portable applicaties schrijven, maar dat is amper nog een toolkit te noemen.
[...]

Dat betwijfel ik. Ik denk dat een C++ compiler het beter zou moeten kunnen ivm een context op hoger niveau; in ieder geval niet minder goed.
Runtime is er veel meer info beschikbaar, zoals hoe vaak een functie wordt aangeroepen etc.
Ja, dus je gaat eerst een abstractie maken, en dan ga je alsnog compilen omdat het te traag loopt anders. Nodeloos ingewikkeld?
Que :? Je zal wel JIT moeten compileren, anders kan het niet worden uitgevoerd. Simpel toch?
Ik zie het idd als een extra laag, die traag is en weinig toevoegt voor het merendeel van de applicaties. Het enige nuttige dat ik nog steeds zie is het draaien van remote code, zoals in een browser. Dat was volgens mij ook het hele doel aan het begin, totdat iedereen er ineens volledige applicaties in ging schrijven.
Heb je een benchmark waaruit blijkt dat java (exclusief opstarttijd VM) veel trager (minimaal 2x) in een real-time applicatie?
Ik vond het alleen altijd vervelend om in te programmeren; de taal is zo... langdradig. Ook vind ik de argumenten om java te gebruiken vaak slecht. Uiteindelijk is het een keuze, en het maakt niet zo veel meer uit wat je kiest.
Ik dacht eigenlijk dat een toolkit als QT minstens zo langdradig is als Java, maar daar kan ik naast zitten.

Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 21:20

MBV

farlane schreef op zaterdag 20 december 2008 @ 11:58:
[...]


Nou is dit al de weet ik veel hoeveelste keer dat ik dit argument hoor om aan te tonen dat Java / .Net toch echt wel sneller zou zijn dan vergelijkbare code in C of C++, terwijl ik nog geen enkele keer overtuigend bewijs heb mogen zien van die stelling. ( Dat het theoretisch sneller zou moeten kunnen zijn heb ik weinig aan )

Mijn subjectieve ervaring is echter nog steeds dat .Net code ( Java heb ik minder ervaring mee ) orde groottes langzamer draait dan een vergelijkbaar iets in C of C++.
http://shootout.alioth.de...all&lang=gpp&lang2=javaxx De eerste en een-na-laaste test ;) Ja ik heb gezien dat de recentere tests op die site java nergens meer als winnaar aanmerken


En wat bedoel je met ordes? ik neem aan dat een lineair programma lineair blijft in Java :?
Ik denk dat als een taal 2x zo langzaam is, dat helemaal geen probleem is. Zolang je algoritmen maar snel genoeg zijn en het schaal-gedrag dus goed is. Extra ontwikkeltijd is veel duurder dan een extra computer.

Acties:
  • 0 Henk 'm!

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Ik zie al dat het een holy war is als ik even google :) Volgens mij maakt het allemaal niet zo veel uit. Wel zie ik veel benchmarks van Java JIT tegen slecht optimized C++. Beetje flauw om JIT gewoon SSE etc te laten gebruiken en dan je C++ code te compilen met -march=i386. Verder kan je op je C++ compilatie ook dingen doen als -fprofile-generate, -fprofile-use dat dan ook run-time info gebruikt. Voor dat soort optimized benchmarks komt (volgens mij, ik heb zelf geen data) toch nog steeds wel uit dat java iets trager is. Het zal geen gigantisch verschil zijn, maar veel mensen doen wel erg makkelijk over 20-30%.

Ik wil best Java gebruiken hoor, dat zei ik eerder al. Lijkt me een prima taal tegenwoordig. Maar ik vind wel dat pro-Java mensen altijd een beetje oneerlijke vergelijkingen maken. Bij Java mag je altijd alles meerekenen: de JIT compiler, de gehele library, het feit dat voor elk platform een JVM/JIT implementatie moet worden/is geschreven, etc. Dat hoort erbij, dat is Java! Ja, maar dat kan ik met C++ bv toch ook allemaal. Oh, je gebruikt QT, nee dat kan natuurlijk niet, DAT is geen C++... Compilen en run-time optimizen op je platform? Nee, dat mag niet, je moet op de allerdomste manier je C++ code genereren: een keer op een 386 compilen en dan overal draaien. Maar ondertussen mag Java wel die hele JIT compiler draaien voor elk programma :)

Maar nogmaals, prima talen allemaal. C# kan je ook nog uit kiezen.

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 23-09 21:37

Creepy

Tactical Espionage Splatterer

MBV schreef op zaterdag 20 december 2008 @ 12:08:
[...]

http://shootout.alioth.de...all&lang=gpp&lang2=javaxx De eerste en een-na-laaste test ;) Ja ik heb gezien dat de recentere tests op die site java nergens meer als winnaar aanmerken


En wat bedoel je met ordes? ik neem aan dat een lineair programma lineair blijft in Java :?
Ik denk dat als een taal 2x zo langzaam is, dat helemaal geen probleem is. Zolang je algoritmen maar snel genoeg zijn en het schaal-gedrag dus goed is. Extra ontwikkeltijd is veel duurder dan een extra computer.
En met de -server commenline optie is java in nog wat meer gevallen sneller (http://shootout.alioth.debian.org/u32q/java.php)

Maar zolang er nog zat programma's zijn die op de 1 of andere manier I/O bound (disc, memory, netwerk, keyboard :+ ) zijn hoeven we ons om dit soort vergelijkingen niet echt druk te maken wat mij betreft.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 23-09 20:04
MBV schreef op zaterdag 20 december 2008 @ 12:08:
http://shootout.alioth.de...all&lang=gpp&lang2=javaxx De eerste en een-na-laaste test ;) Ja ik heb gezien dat de recentere tests op die site java nergens meer als winnaar aanmerken
Haha, ja en de rest van de 15 is C++ sneller, waarbij er toch 20% en meer verschil in zit.
En wat bedoel je met ordes?
Daar bedoel ik mee dat het verschil niet klein is.
Ik denk dat als een taal 2x zo langzaam is, dat helemaal geen probleem is. Zolang je algoritmen maar snel genoeg zijn en het schaal-gedrag dus goed is. Extra ontwikkeltijd is veel duurder dan een extra computer.
Jah dat is de algemene opvatting, waar ik me absoluut niet in kan vinden, misschien geldt dat voor "enterprise" applicaties maar er zijn genoeg voorbeelden te verzinnen waar dit niet opgaat. ( embedded software bv )
Ik heb het idee dat dit argument te vaak wordt gebruikt om maar niet al te veel moeite te hoeven doen om een goed stuk software af te leveren.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 21:20

MBV

Creepy schreef op zaterdag 20 december 2008 @ 12:36:
[...]

En met de -server commenline optie is java in nog wat meer gevallen sneller (http://shootout.alioth.debian.org/u32q/java.php)
Wel met C++ vergelijken, die is veel sneller :S
Zoijar schreef op zaterdag 20 december 2008 @ 12:23:
Ik zie al dat het een holy war is als ik even google :) Volgens mij maakt het allemaal niet zo veel uit. Wel zie ik veel benchmarks van Java JIT tegen slecht optimized C++. Beetje flauw om JIT gewoon SSE etc te laten gebruiken en dan je C++ code te compilen met -march=i386. Verder kan je op je C++ compilatie ook dingen doen als -fprofile-generate, -fprofile-use dat dan ook run-time info gebruikt. Voor dat soort optimized benchmarks komt (volgens mij, ik heb zelf geen data) toch nog steeds wel uit dat java iets trager is. Het zal geen gigantisch verschil zijn, maar veel mensen doen wel erg makkelijk over 20-30%.
Enig idee hoeveel ontwikkeltijd dat kost op een groot project? Het voordeel van Java is dat dat allemaal 'gratis' is, en je dus direct die performance geniet. March=386 is inderdaad niet eerlijk, maar 100.000 compile-opties geven voor het laatste beetje performance ook niet.
Ik wil best Java gebruiken hoor, dat zei ik eerder al. Lijkt me een prima taal tegenwoordig. Maar ik vind wel dat pro-Java mensen altijd een beetje oneerlijke vergelijkingen maken. Bij Java mag je altijd alles meerekenen: de JIT compiler, de gehele library, het feit dat voor elk platform een JVM/JIT implementatie moet worden/is geschreven, etc. Dat hoort erbij, dat is Java! Ja, maar dat kan ik met C++ bv toch ook allemaal. Oh, je gebruikt QT, nee dat kan natuurlijk niet, DAT is geen C++... Compilen en run-time optimizen op je platform? Nee, dat mag niet, je moet op de allerdomste manier je C++ code genereren: een keer op een 386 compilen en dan overal draaien. Maar ondertussen mag Java wel die hele JIT compiler draaien voor elk programma :)

Maar nogmaals, prima talen allemaal. C# kan je ook nog uit kiezen.
QT riep ik specifiek, omdat het ook een uitbreiding op de taal is (voegt syntactic sacharin toe :P). Behalve dat is QT geen onderdeel van de taal: het is een library daarin om programmeren makkelijker te maken. Dus in C++ zelf zit helemaal niks om cross-platform een GUI te schrijven, net zoals er in Java niks cross-platform zit om de com-poort aan te sturen.

Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 21:20

MBV

farlane schreef op zaterdag 20 december 2008 @ 12:56:
[...]

Haha, ja en de rest van de 15 is C++ sneller, waarbij er toch 20% en meer verschil in zit.
Hij was ook niet serieus bedoeld, maar er vroeg iemand om een voorbeeld waar Java sneller was. Alstu ;)
Daar bedoel ik mee dat het verschil niet klein is.
Ok, dus 20% is een orde? Voor mij is een orde-verschil het verschil tussen een lineair en een kwadratisch algoritme.
Jah dat is de algemene opvatting, waar ik me absoluut niet in kan vinden, misschien geldt dat voor "enterprise" applicaties maar er zijn genoeg voorbeelden te verzinnen waar dit niet opgaat. ( embedded software bv )
Ik heb het idee dat dit argument te vaak wordt gebruikt om maar niet al te veel moeite te hoeven doen om een goed stuk software af te leveren.
Voor embedded high-performance dingen zal ik niet snel java aanraden, o.a. vanwege het geheugengebruik. Voor sommige specifieke applicaties is 20% performance wel cruciaal (3d), en daar moet je vooral gaan bit-fucken.
Maar Java is prima voor algemene software. Voor veel software op de desktop is het verschil tussen 50ms en 100ms verwerkingstijd niet relevant, zolang het maar snel blijft werken bij grotere aantallen (gegroeid aantal medewerkers/klanten/artikelen/...). Daar is de big-O-notatie zo belangrijk voor.

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 23-09 21:37

Creepy

Tactical Espionage Splatterer

MBV schreef op zaterdag 20 december 2008 @ 12:59:
Wel met C++ vergelijken, die is veel sneller :S
Whoops... :o

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-09 16:37

.oisyn

Moderator Devschuur®

Demotivational Speaker

MBV schreef op zaterdag 20 december 2008 @ 12:59:
March=386 is inderdaad niet eerlijk, maar 100.000 compile-opties geven voor het laatste beetje performance ook niet.
Ik heb nog nooit 100.000 compile opties mee hoeven geven, en ik heb ook nog nooit mijn compile opties voor een specifiek app aan hoeven passen om dat app sneller te draaien. In VC++ kies je simpelweg voor whole program optimization en een minimum gesupporte architectuur (bijv. SSE2), that's it.

En waar de vele C++ compilers helemaal mee winnen is dat ze intrinsics ondersteunen voor bijv. SSE, zodat je gewoon vector classes kunt maken die direct compileren naar inline SSE code. Ik heb nog geen compiler/jitter gezien die generiekere float bewerkingen fatsoenlijk kunnen parallelliseren naar SIMD.

Overigens kan ik in 10 minuten tijd die binary_tree app sneller maken dan z'n java implementatie, simpelweg door een andere memory allocator te gebruiken.

[ Voor 30% gewijzigd door .oisyn op 20-12-2008 13:29 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 19:41

RayNbow

Kirika <3

MBV schreef op zaterdag 20 december 2008 @ 13:05:
Maar Java is prima voor algemene software.
Java is ook prima voor wireless sensor nodes. 8)

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


Acties:
  • 0 Henk 'm!

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Ik ook nog drie puntjes :)

- Waarom is de ontwikkeltijd van een java project zoveel lager dan een C++ project? Het lijken me redelijk dezelfde talen als je ze beheerst. Zie niet in waarom hier een significant verschil in zit.

- Iedereen roept altijd: je moet niet op de snelheid van de taal letten, maar op de algoritmes. Uiteraard implementeer je dezelfde algoritmes in beide talen. Het enige performance verschil komt dan uit de taal. 2x verschil vind ik aanzienlijk. Natuurlijk kan je er een computer bij zetten, maar dat kan dan in het andere geval ook. Het blijft een factor 2 (bijvoorbeeld). Soms maakt dat niet uit, soms wel, maar waarom zou je het niet sneller willen hebben? Dat is die hele code bloat mentaliteit van tegenwoordig en naar mijn idee een van de redenen dat ik nog steeds 5 minuten moet wachten op een boot tot ik mijn mail kan checken op een multi-Ghz quad core. (iets dat overigens niet veel sneller gaat nu dan 10 jaar geleden op m'n pentium 60)

- Eens met oisyn over geheugen management. Ik lees vaak dat een voordeel van garbage collection het contiguous alloceren van geheugen oid zou zijn, dat dat het zelfs sneller maakt. Het is vrij common practice om in C++ verschillende allocators te gebruiken (indien van belang), bijvoorbeeld een small-object-allocator die rechstreeks uit een block alloceert en vele maller sneller is dan default new.

[ Voor 3% gewijzigd door Zoijar op 20-12-2008 15:07 ]


Acties:
  • 0 Henk 'm!

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

farlane schreef op zaterdag 20 december 2008 @ 11:58:
Nou is dit al de weet ik veel hoeveelste keer dat ik dit argument hoor om aan te tonen dat Java / .Net toch echt wel sneller zou zijn dan vergelijkbare code in C of C++, terwijl ik nog geen enkele keer overtuigend bewijs heb mogen zien van die stelling. ( Dat het theoretisch sneller zou moeten kunnen zijn heb ik weinig aan )
Op basis van willekeurige benchmarks is geen overtuigend bewijs te geven, aangezien het er juist om gaat dat een JIT bijvoorbeeld ziet welke codepaden vaak gebruikt worden en het programma dan voor die veelgebruikte paden optimaliseert. Een benchmark heeft onvoldoende verscheidenheid aan codepaden om dat soort effecten zichtbaar te maken. Je hebt er wel degelijk iets aan dat het theoretisch sneller zou moeten zijn, omdat dit juist theorie is die zich in de gebruikspraktijk manifesteert. Je kan het effect demonstreren en je zou het demonstratieprogramma een benchmark kunnen noemen, maar als je er op staat dat het in een willekeurige benchmark sneller zou moeten zijn, dan is het per definitie niet aan te tonen.
Zoijar schreef op zaterdag 20 december 2008 @ 12:23:
Ik zie al dat het een holy war is als ik even google :)
Volgens mij is dat omdat het discussies zijn waar zowel de voor- als de tegenstanders eigenlijk niet begrijpen, of niet goed verwoorden, op welke manier de JIT nu eigenlijk voordeel kan bieden boven een statische compiler. Op basis van een set benchmarks, zoals de Debian shootout, hierover discussieren, is zoiets als vergelijken welke auto op een F1 circuit sneller is, terwijl het punt was dat een Subaru Impreza over een gemiddelde van tal van terreinsoorten een snellere tijd neer zal zetten dan een Lotus Esprit. God mag ook weten waarom ze zich er zo druk over maken, aangezien de verschillen waarschijnlijk voor de meeste applicaties marginaal blijven, hoewel het verschil met de toenemende kwaliteit van de JIT natuurlijk wel groter wordt en iedere tiende procent voor serverfarms een behoorlijk verschil kan betekenen.
Zoijar schreef op zaterdag 20 december 2008 @ 15:05:
- Waarom is de ontwikkeltijd van een java project zoveel lager dan een C++ project? Het lijken me redelijk dezelfde talen als je ze beheerst. Zie niet in waarom hier een significant verschil in zit.
Ik ken de cijfers niet en zonder een standpunt in te nemen: ik kan me voorstellen dat er de laatste jaren in Java zo ontzettend veel libraries en frameworks zijn uitgebracht, dat je jezelf door het gebruik van zo'n library aardig wat tijd kan besparen, die je in C++ wel moet besteden, omdat een vergelijkbare library ontbreekt. Maar dit geheel zonder enige kennis van C++ en de daar beschikbare libraries.

Telkens als ik de nieuwe TIOBE rankings zie, dan vraag ik me af waarom Java zo ontzettend veel meer gebruikt wordt dan andere talen. Ik kan me niet voorstellen dat dat enkel door marketing komt.

[ Voor 26% gewijzigd door Confusion op 20-12-2008 15:34 ]

Wie trösten wir uns, die Mörder aller Mörder?


Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 23-09 20:04
Confusion schreef op zaterdag 20 december 2008 @ 15:19:
Op basis van willekeurige benchmarks is geen overtuigend bewijs te geven, aangezien het er juist om gaat dat een JIT bijvoorbeeld ziet welke codepaden vaak gebruikt worden en het programma dan voor die veelgebruikte paden optimaliseert. Een benchmark heeft onvoldoende verscheidenheid aan codepaden om dat soort effecten zichtbaar te maken. Je hebt er wel degelijk iets aan dat het theoretisch sneller zou moeten zijn, omdat dit juist theorie is die zich in de gebruikspraktijk manifesteert. Je kan het effect demonstreren en je zou het demonstratieprogramma een benchmark kunnen noemen, maar als je er op staat dat het in een willekeurige benchmark sneller zou moeten zijn, dan is het per definitie niet aan te tonen.
Het zou dan toch gemiddeld over de vele verchillende benchmarks die gedraaid worden moeten aangeven dat het even snel zo niet sneller zou zijn dan C en/of C++, ook die indruk krijg ik niet.
Het blijft altijd bij de uitspraak dat het theoretisch zo zou moeten zijn, mijn punt is dat het zo lang het in de praktijk niet zo is het een bewering is waar ik niets mee kan.
Ik ken de cijfers niet en zonder een standpunt in te nemen: ik kan me voorstellen dat er de laatste jaren in Java zo ontzettend veel libraries en frameworks zijn uitgebracht, dat je jezelf door het gebruik van zo'n library aardig wat tijd kan besparen, die je in C++ wel moet besteden, omdat een vergelijkbare library ontbreekt. Maar dit geheel zonder enige kennis van C++ en de daar beschikbare libraries.
Als er ergens veel libraries voor te krijgen zijn is het wel C. (en daarmee dus ook C++)
Telkens als ik de nieuwe TIOBE rankings zie, dan vraag ik me af waarom Java zo ontzettend veel meer gebruikt wordt dan andere talen. Ik kan me niet voorstellen dat dat enkel door marketing komt.
Omdat Java developers vaker dingen intikken op Google? Geen idee eerlijk gezegd..

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 19:41

RayNbow

Kirika <3

Zoijar schreef op zaterdag 20 december 2008 @ 15:05:
Ik ook nog drie puntjes :)

- Waarom is de ontwikkeltijd van een java project zoveel lager dan een C++ project? Het lijken me redelijk dezelfde talen als je ze beheerst. Zie niet in waarom hier een significant verschil in zit.
Is er uberhaupt ooit onderzoek gedaan naar de productiviteit van programmeertalen? Vervolgens is de vraag van wat het belangrijkst is. Ontwikkeltijd? Is dit dan de totale ontwikkeltijd of alleen de tijd die je nodig had om de code in te tikken? Is het belangrijk om rekening te houden met hoeveel tijd je kwijt bent aan onderhoud na de ontwikkeling? Hoeveel invloed heeft de taal op vermindering van bugs en fouten? Heeft deze vermindering daadwerkelijk te maken met de taal zelve of met de programmeurs die het aantrekt om erin te gaan programmeren? Et cetera.
- Iedereen roept altijd: je moet niet op de snelheid van de taal letten, maar op de algoritmes.
Je moet letten op de requirements. ;)
Uiteraard implementeer je dezelfde algoritmes in beide talen. Het enige performance verschil komt dan uit de taalcompiler.
Het verschil in performance zou ik eerder aan de compiler toekennen dan de taal, maar .oisyn zal hier vast nog wel een voetnoot bij plaatsen. :p
2x verschil vind ik aanzienlijk. Natuurlijk kan je er een computer bij zetten, maar dat kan dan in het andere geval ook. Het blijft een factor 2 (bijvoorbeeld).
Krijg je die factor 2 altijd gratis als je bijv. C++ kiest in plaats van Java? Of hangt het ook nog af van het soort toepassing waar je aan werkt? ;)
Soms maakt dat niet uit, soms wel, maar waarom zou je het niet sneller willen hebben?
Sneller is altijd mooi meegenomen, maar je moet wel afwegen of het niet ten koste van andere dingen gaat.
Dat is die hele code bloat mentaliteit van tegenwoordig en naar mijn idee een van de redenen dat ik nog steeds 5 minuten moet wachten op een boot tot ik mijn mail kan checken op een multi-Ghz quad core. (iets dat overigens niet veel sneller gaat nu dan 10 jaar geleden op m'n pentium 60)
Tanenbaum zou in dit geval de monolithische kernels de schuld geven. :+
- Eens met oisyn over geheugen management. Ik lees vaak dat een voordeel van garbage collection het contiguous alloceren van geheugen oid zou zijn, dat dat het zelfs sneller maakt.
Ik weet wel dat in Java het opruimen van de meeste objecten geen tijd kost. :)
Het is vrij common practice om in C++ verschillende allocators te gebruiken (indien van belang), bijvoorbeeld een small-object-allocator die rechstreeks uit een block alloceert en vele maller sneller is dan default new.
In dit geval biedt C++ meer flexibiliteit door de programmeur meer controle te geven. Ik heb geen idee hoeveel vrijheid de JVM biedt met het finetunen van de GC, maar de standaardinstellingen zijn denk ik good enough voor de meesten.

(In feite is dit gewoon een geval van hoeveel tijd je wilt en hebt te besteden.)
farlane schreef op zaterdag 20 december 2008 @ 16:00:
[...]

Het zou dan toch gemiddeld over de vele verchillende benchmarks die gedraaid worden moeten aangeven dat het even snel zo niet sneller zou zijn dan C en/of C++, ook die indruk krijg ik niet.
Het blijft altijd bij de uitspraak dat het theoretisch zo zou moeten zijn, mijn punt is dat het zo lang het in de praktijk niet zo is het een bewering is waar ik niets mee kan.
"In de praktijk"? :p
The Dangers of Benchmarks
[...]

Als er ergens veel libraries voor te krijgen zijn is het wel C. (en daarmee dus ook C++)
Louter het aantal beschikbare libraries is niet het enige wat belangrijk is. Is de library stable? Is het portable? Wordt het nog onderhouden? Hoe is de documentatie? Is er support? Is het gemakkelijk te installeren en te gebruiken?

[ Voor 13% gewijzigd door RayNbow op 20-12-2008 16:18 ]

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-09 16:37

.oisyn

Moderator Devschuur®

Demotivational Speaker

Die index is dan ook best suf. Ze pakken gewoon search engine ratings voor de zoekterm "<language> programming". Dus ze tellen ten eerste gewoon het aantal websites over dat onderwerp (is niet gelijk aan hoeveel het gebruikt wordt), en ten tweede alleen die websites waar de programmeertaal gevolgd wordt door het woord "programming".

Neem bijvoorbeeld PHP, "PHP Programming" heeft bij google 1.35 miljoen hits. Echter wordt er bij PHP vaak ook gesproken over scripting, en als ik zoek naar ["PHP programming" OR "php scripting"], dan kom ik op 3.17 miljoen hits. Dat is meer dan "Java programming" (3.28 miljoen hits). Dus waarom staat PHP niet bovenaan? En denk je ook dat PHP daadwerkelijk meer gebruikt in de software industrie dan Java? En waarom gebruiken al die mensen dan Java, als PHP blijkbaar zo populair is?
RayNbow schreef op zaterdag 20 december 2008 @ 16:10:
Ik weet wel dat in Java het opruimen van de meeste objecten geen tijd kost. :)
Het is dan ook geen opruimen, maar gewoon aan de kant schuiven totdat je de resources daadwerkelijk weer nodig hebt. Ik heb een C++ memory allocator gemaakt die precies dat doet, en dat zorgt in m'n got contest implementatie voor een factor 3 tot 4 snelheidsverschil. En je daadwerkelijke programmacode hoeft er niet eens anders voor geschreven te worden.

[ Voor 24% gewijzigd door .oisyn op 20-12-2008 16:29 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 21:20

MBV

Zoijar schreef op zaterdag 20 december 2008 @ 15:05:
Ik ook nog drie puntjes :)

- Waarom is de ontwikkeltijd van een java project zoveel lager dan een C++ project? Het lijken me redelijk dezelfde talen als je ze beheerst. Zie niet in waarom hier een significant verschil in zit.
- Geen garbage collector zelf schrijven/uitzoeken/overal netjes verwijderen.
- Daardoor minder kans op memory leaks, die best wel wat tijd kunnen kosten in de onderhoudsfase
- Eenvoudiger debuggen
- Minder quirks (ik hoor steeds iets roepen over bools in vectors in C++, wat is daarmee?)
- Iedereen roept altijd: je moet niet op de snelheid van de taal letten, maar op de algoritmes. Uiteraard implementeer je dezelfde algoritmes in beide talen. Het enige performance verschil komt dan uit de taal. 2x verschil vind ik aanzienlijk. Natuurlijk kan je er een computer bij zetten, maar dat kan dan in het andere geval ook. Het blijft een factor 2 (bijvoorbeeld). Soms maakt dat niet uit, soms wel, maar waarom zou je het niet sneller willen hebben? Dat is die hele code bloat mentaliteit van tegenwoordig en naar mijn idee een van de redenen dat ik nog steeds 5 minuten moet wachten op een boot tot ik mijn mail kan checken op een multi-Ghz quad core. (iets dat overigens niet veel sneller gaat nu dan 10 jaar geleden op m'n pentium 60)
Ik weet niet wat voor flut-OS jij gebruikt >:), maar Linux is echt veel sneller geworden, en met de technieken die nu voor de deur staan wordt dat alleen maar beter. Probleem is dat het OS veel groter wordt, steeds meer moet kunnen doen (bluetooth, wifi, fancy 3d-animaties), en bij het opstarten gelimiteerd wordt door de HDD. Wil je 2x zo veel doen, dan zal je waarschijnlijk 2x zoveel van je HDD moeten halen, en zo veel sneller zijn de harde schijven (relatief gezien) niet geworden de afgelopen jaren.
Dat je hetzelfde algoritme implementeert in verschillende talen vind ik niet vanzelfsprekend: als de libraries een heel efficiente sort-functie hebben, ga ik dat gebruiken, en geen eigen algoritme. Ga je functionele programmeertalen gebruiken, dan wordt het nog leuker.
RayNbow schreef op zaterdag 20 december 2008 @ 16:10:
[...]

Is er uberhaupt ooit onderzoek gedaan naar de productiviteit van programmeertalen? Vervolgens is de vraag van wat het belangrijkst is. Ontwikkeltijd? Is dit dan de totale ontwikkeltijd of alleen de tijd die je nodig had om de code in te tikken? Is het belangrijk om rekening te houden met hoeveel tijd je kwijt bent aan onderhoud na de ontwikkeling? Hoeveel invloed heeft de taal op vermindering van bugs en fouten? Heeft deze vermindering daadwerkelijk te maken met de taal zelve of met de programmeurs die het aantrekt om erin te gaan programmeren? Et cetera.
Een paper "Comparing observed bug and productivity rates for Java and C++" uit '99 door ene Geoffrey Philips is een van de weinige papers die ik via google scholar kon vinden. Summary:
An experiment was conducted to compare programmer productivity and defect rates for Java and C++.
A modified version of the Personal Software Process (PSP) was used to gather defect rate, bug rate, and productivity data on C++ and Java during two real world development projects. A bug is defined to be a problem detected during testing or deployment. A defect is either a bug, or an error detected during compile time. A typical C++ program had two to three times as many bugs per line of code as a typical Java program. C++ also generated between 15 per cent and 50 per cent more defects per line, and perhaps took six times as long to debug. Java was between 30 per cent and 200 per cent more productive, in terms of lines of code per minute. When defects were measured against development time, Java and C++ showed no difference, but C++ had two to three times as many bugs per hour. Statistics were generated using student’s t-test at a 95 per cent confidence level. Some discussion of why the differences occurred is included, but the reasons offered have not been tested experimentally. The study is limited to one programmer over two projects, so it is not a definitive experimental result. The programmer was experienced in C++, but only learning Java, so the results would probably favour Java more strongly for equally-experienced programmers. The experiment shows that it is possible to experimentally measure the fitness of a programming language.
Copyright Ó 1999 John Wiley & Sons, Ltd.
Nogal een flutonderzoek dus. Als iemand een betere paper tegenkomt via scholar.google.com ofzo, kan ik ze meestal gratis inzien (TU/e :Y)), ik ben wel benieuwd.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-09 16:37

.oisyn

Moderator Devschuur®

Demotivational Speaker

MBV schreef op zaterdag 20 december 2008 @ 18:01:
- Geen garbage collector zelf schrijven/uitzoeken
Doe je maar 1 keer.
- Daardoor minder kans op memory leaks, die best wel wat tijd kunnen kosten in de onderhoudsfase
Onzin, ik heb nog nooit meegemaakt dat memory leaks "best wel wat tijd kostte". Een leak in Java lijkt me bovendien veel lastiger te detecteren, maar daar weet ik verder weinig van.
- Eenvoudiger debuggen
Argumentatie?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
Zoijar schreef op vrijdag 19 december 2008 @ 19:07:
[...]

Boost heeft dat allemaal. Eigenlijk wil je niet allemaal clutter en bloat aan een taal toevoegen die je ook makkelijk kan implementeren als support library.
TR1 en 2 zijn practisch rechtstreeks gecopieerd uit boost dat neemt niet weg dat het wat mij betreft extreem handig is om deze, toch vrij fundamentele, functionaliteiten als filesystem support centraal in een taal aanwezig zijn.

Dat het in boost aanwezig is vind ik verder prima hoor, alleen vind ik het een beetje triest dat je voor iedere nuttige feature naar een support library word door verwezen. Dat je dingen als boost::order_my_pizza niet in je taal wilt hebben zitten snap ik ook wel.
De taal zelf wil je schoon houden, en de officiele support library wil je ook daadwerkelijk universeel houden.
Dat zijn filesystem support en regular expressions dan wat mij betreft ook, de laatste keer dat ik een filesystem zonder directories zag was in 1783. Regular expressions net zo, op het moment is text parsen in C++ gewoon niet op een normale manier te doen.
Hoe meer je daar aan toevoegt, hoe groter de kans dat er devices zijn die geen C++ runtime library kunnen draaien. Dingen als een multi-threaded memory model kan je niet zo maar als library implementeren, daar moeten echt taal garanties voor worden gegeven.
Ik heb me nog niet in het multi-threaded memory model verdiept maar ik kan me zo voorstellen dat juist dat een van de dingen is die het aantal devices sterk zou kunnen limiteren.
Waarna dat ding in maintenance beland en daar door een hoop geld kost.
Onzin, ik heb nog nooit meegemaakt dat memory leaks "best wel wat tijd kostte". Een leak in Java lijkt me bovendien veel lastiger te detecteren, maar daar weet ik verder weinig van.
Probeer iets als dit maar eens te debuggen.

[ Voor 14% gewijzigd door PrisonerOfPain op 20-12-2008 19:37 ]


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-09 16:37

.oisyn

Moderator Devschuur®

Demotivational Speaker

Te simpel. Break op de allocatie. Plaats een data watchpoint op de pointer member van de auto_ptr, en kom erachter dat de pointer wordt overschreven maar het geheugen niet wordt vrijgegeven.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Of even door valgrind :)

Maar ik zie weer dezelfde argumenten mbt beschikbare libraries. Zowel Java als C++ hebben genoeg 'standaard' libraries om het meeste dat je wilt te kunnen doen. Of je nu #include <tr1/regex> moet typen of import java.util.regex, ik zie het verschil niet. Of is import java.* ineens "java" maar een include niet. Onzin natuurlijk. Het ging om de taal. Grappig dat iemand iets zei over monolitische OS kernels: je wilt een taal ook modulair opzetten met zo'n klein mogelijke, gestandaardiseerde "kernel" en de rest in pluggen aan de hand van support libraries. Ik vind dat dus geen argument om deze twee talen te vergelijken. Op dat punt scoren ze gelijk naar mijn idee. (C++ support meer legacy libraries, maar dat terzijde)

Dat Java makkelijker debugged heb ik nog geen overtuigend argument voor gehoord.

Garbage collection is een manier van programmeren in C++ (raii / smart pointers) die je gewoon aan moet houden, dan is het eigenlijk geen enkel probleem en hebben al je objecten precies de lifetime je verwacht. Het ging me ook om twee programmeurs die beide de taal beheersen. Ik kan voor mezelf nog steeds niet het performance verschil verantwoorden.

Acties:
  • 0 Henk 'm!

  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 19:41

RayNbow

Kirika <3

Zoijar schreef op zaterdag 20 december 2008 @ 21:02:
Maar ik zie weer dezelfde argumenten mbt beschikbare libraries. Zowel Java als C++ hebben genoeg 'standaard' libraries om het meeste dat je wilt te kunnen doen. Of je nu #include <tr1/regex> moet typen of import java.util.regex, ik zie het verschil niet. Of is import java.* ineens "java" maar een include niet. Onzin natuurlijk. Het ging om de taal.
Het probleem in discussies is dat met "Java" zowel de taal, de JVM als het gehele platform kan worden bedoeld.
Grappig dat iemand iets zei over monolitische OS kernels: je wilt een taal ook modulair opzetten met zo'n klein mogelijke, gestandaardiseerde "kernel" en de rest in pluggen aan de hand van support libraries. Ik vind dat dus geen argument om deze twee talen te vergelijken. Op dat punt scoren ze gelijk naar mijn idee. (C++ support meer legacy libraries, maar dat terzijde)
Het is idd mooi als een taal zelf zo klein mogelijk blijft. Standaard libraries zijn echter ook belangrijk, het Batteries Included principe. Dit laatste beseften de hackers in de Haskell community laatst en is er een plan opgezet om zo veel mogelijk libraries van GHC af te splitsen en een zo goed mogelijk en kwalitatief Haskell platform op te zetten (1, 2, 3).
Garbage collection is een manier van programmeren in C++ (raii / smart pointers) die je gewoon aan moet houden, dan is het eigenlijk geen enkel probleem en hebben al je objecten precies de lifetime je verwacht. Het ging me ook om twee programmeurs die beide de taal beheersen. Ik kan voor mezelf nog steeds niet het performance verschil verantwoorden.
Ik heb geen verstand van smart pointers, maar kun je met smart pointers ook gemakkelijk iets implementeren als een copying collector?

Ik kwam trouwens net deze OOPSLA paper tegen over GC vs explicit memory management, maar heb 'm nog niet gelezen.

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


Acties:
  • 0 Henk 'm!

  • bomberboy
  • Registratie: Mei 2007
  • Laatst online: 24-09 21:12

bomberboy

BOEM!

Zoijar schreef op zaterdag 20 december 2008 @ 05:28:
C++ code draait ook op elk systeem waar de compiler back-end op draait. Of je nou een back-end moet implementeren of een VM, weinig verschil.
Ik moet toegeven dat ik zeker geen specialist ben wat betreft C++, maar geloof je dat nou echt zelf?
Ok, noch backend, noch VM moet je typisch zelf implementeren, dus daar zit inderdaad geen verschil. Maar de portabiliteit is typisch toch veel minder groot voor C++ code. zeker als er ook GUIs komen bij kijken.
En bv. ook threads, niet altijd vanzelfsprekend dat dezelfde threadinglibraries beschikbaar zijn op alle platformen. Of vergis ik me hierin (oprechte vraag).

Een andere vraag, wat voor applicatieservers bestaan er voor C++ componenten? Het type componenten die in binary vorm aangeleverd worden (denk aan J2EE, JAIN SLEE, OSGi, Tomcat etc)
Hercompileren is leuk, maar soms heb je de source niet of wil je die niet vrijgeven. Bovendien wil je als vendor ook geen 7 verschillende platformen ondersteunen als het ook met één platform kan. (nl een J2EE server, en ja, ik weet dat een typische J2EE app wat massage nodig heeft om op de applicatieservers van verschillende vendors te werken)

Zoals eerder al aangehaald is onderhoud van software op de lange termijn een heel grote kost, en dat is een manier waarop je daar heel grote besparingen kan doen.

Tot slot, in de tweakers programming contest doen de Java applicaties het typisch niet zo slecht ;-) Dus qua performance kan dat niet zo slecht zijn

Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 21:20

MBV

Zoijar schreef op zaterdag 20 december 2008 @ 21:02:
Of even door valgrind :)

Maar ik zie weer dezelfde argumenten mbt beschikbare libraries. Zowel Java als C++ hebben genoeg 'standaard' libraries om het meeste dat je wilt te kunnen doen. Of je nu #include <tr1/regex> moet typen of import java.util.regex, ik zie het verschil niet. Of is import java.* ineens "java" maar een include niet. Onzin natuurlijk. Het ging om de taal.
Het is heel simpel. Met Java heb je 1 leverancier, met C++ moet je op 10 plekken je support krijgen. Als iets het niet doet in java kan je als bedrijf java bellen dat ze het moeten fixen, terwijl je van Trolltech te horen krijgt dat GCC een foutje maakt, en het uit eindelijk aan boost bleek te liggen. Je kiest een pakket, en bent klaar.
De taal alleen is C++ zonder stdlib, java zonder imports, en allebei zijn onwerkbaar. Alles wat je los schrijft moet onderhouden worden, en zoals hier al vaker is gezegd: onderhoud is he tduurste.
Dat Java makkelijker debugged heb ik nog geen overtuigend argument voor gehoord.
Misschien is het ook niet eerlijk, omdat ik in Java veel simpelere dingen doe (parser bouwen voor embedded SQL) dan ik in C++ heb gedaan (3D applicatie). Maar in C++ ben ik altijd veel langer bezig geweest met debuggen waar mijn fout zit dan in Java.
Garbage collection is een manier van programmeren in C++ (raii / smart pointers) die je gewoon aan moet houden, dan is het eigenlijk geen enkel probleem en hebben al je objecten precies de lifetime je verwacht. Het ging me ook om twee programmeurs die beide de taal beheersen. Ik kan voor mezelf nog steeds niet het performance verschil verantwoorden.
Daar heb je het dus al: je moet je aan de manier van programmeren houden. Volgend jaar beslis jij dat je iets anders wilt gaan doen, en komt er iemand waarvan jouw baas denkt dat hij C++ kent om jouw applicatie te onderhouden. Doordat je in Java automatische garbage collection hebt, en dat in C++ afhangt van de programmeur, maak je de kans op fouten tijdens onderhoud groter.

En performance is het argument waar je maar op terug blijft komen, ondanks dat iedereen toch wel zo ver wilt gaan dat het (bijvoorbeeld) 20% langzamer is. Is java de grootste vloek van de informatica omdat het 20% langzamer is dan C++? Jij gebruikt Java liever niet omdat jouw applicaties kennelijk heel erg goed moeten performen. Zijn er nog andere redenen?

Even een side-note: welk C++ framework zouden jullie gebruiken om een enterprise-applicatie met webinterface te schrijven?

Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
MBV schreef op zondag 21 december 2008 @ 00:28:
Even een side-note: welk C++ framework zouden jullie gebruiken om een enterprise-applicatie met webinterface te schrijven?
Welke rendering engine zou jij in Java gebruiken om een 3d platformer te maken?

Je raakt met die vraag nu net de essentie van de verschillende standpunten, iedere taal heeft een z'n eigen probleem domein (of domeinen) en dat is meestal ook het geen waar die taal het sterkst in is. Ondanks dat het mogelijk is om beide soorten applicaties in beide talen te schrijven wil het niet zeggen dat de ene taal meer geschikt is om een bepaald probleem op te lossen dan de andere. Daar door ontwikkelt iedere taal zich op een andere manier.

Zo wil C++ waarschijnlijk zo min mogelijk dingen ongespecificeerd laten zodat de verschillende compilers betere optimalisaties kunnen doen voor hun specifieke platform. Terwijl Java meer baat heeft bij een uniform platform omdat het makkelijker en goedkoper is om daar voor te ontwikkelen.

[ Voor 0% gewijzigd door PrisonerOfPain op 21-12-2008 01:48 . Reden: O-) ]


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-09 16:37

.oisyn

Moderator Devschuur®

Demotivational Speaker

Exactly :+
Sorry, 't was too obvious :P

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
.oisyn schreef op zondag 21 december 2008 @ 01:41:
[...]

Exactly :+
Sorry, 't was too obvious :P
My post just entered maintenance O-) .

Acties:
  • 0 Henk 'm!

  • writser
  • Registratie: Mei 2000
  • Laatst online: 18:39
Zoijar schreef op zaterdag 20 december 2008 @ 21:02:
Maar ik zie weer dezelfde argumenten mbt beschikbare libraries. Zowel Java als C++ hebben genoeg 'standaard' libraries om het meeste dat je wilt te kunnen doen. Of je nu #include <tr1/regex> moet typen of import java.util.regex, ik zie het verschil niet.
Een verschil is onder andere dat de C++ versie (nog) niet standaard met je compiler wordt meegeleverd en dat "tr1/regex" nog geen 2000 hits oplevert op google. Ik heb geen idee wat het is. Dat is bij de java-concurrent dan toch wel een stukje beter geregeld.
Garbage collection is een manier van programmeren in C++ (raii / smart pointers) die je gewoon aan moet houden, dan is het eigenlijk geen enkel probleem en hebben al je objecten precies de lifetime je verwacht.
Dat is niet echt een argument imo. Oude code, collega's of bugs kunnen er allemaal voor zorgen dat er memory-leaks optreden in je programma. In C++ _moet_ iedereen zich aan een bepaalde manier van programmeren houden en foutloos programmeren. In Java zorgt de VM er voor dat er geen memory leaks optreden. Dat is toch wel een klein verschil ..

Onvoorstelbaar!


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-09 16:37

.oisyn

Moderator Devschuur®

Demotivational Speaker

writser schreef op zondag 21 december 2008 @ 02:00:
[...]

Een verschil is onder andere dat de C++ versie (nog) niet standaard met je compiler wordt meegeleverd en dat "tr1/regex" nog geen 2000 hits oplevert op google. Ik heb geen idee wat het is.
Zoijar bedoelde <regex>. Std::tr1 zit bijv. al standaard bij MSVC++ 2008 en is ook verkrijgbaar via boost.
In Java zorgt de VM er voor dat er geen memory leaks optreden.
Onzin, waarom denken mensen dat toch altijd? De VM zorgt er hoogstens voor dat de dingen waar jij geen referentie meer naar hebt worden opgeruimd, maar dat betekent niet dat je niet alsnog referenties kunt leaken waarvan je even vergeet dat ze bestaan (zoals bijv. in een eigen ArrayList implementatie waarbij je bij het verwijderen van elementen vergeet de vrijgekomen posities op null te zetten)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

bomberboy schreef op zaterdag 20 december 2008 @ 22:30:
Ik moet toegeven dat ik zeker geen specialist ben wat betreft C++, maar geloof je dat nou echt zelf?
Ok, noch backend, noch VM moet je typisch zelf implementeren, dus daar zit inderdaad geen verschil. Maar de portabiliteit is typisch toch veel minder groot voor C++ code. zeker als er ook GUIs komen bij kijken.
En bv. ook threads, niet altijd vanzelfsprekend dat dezelfde threadinglibraries beschikbaar zijn op alle platformen. Of vergis ik me hierin (oprechte vraag).
Vroeger had je wel gelijk, maar tegenwoordig heb je op de meeste praktische platforms niet echt last. Als je echt embedded dingen doet weet ik het niet. Maar als het gaat om linux/macos/windows is er geen enkel probleem.
Een andere vraag, wat voor applicatieservers bestaan er voor C++ componenten? Het type componenten die in binary vorm aangeleverd worden (denk aan J2EE, JAIN SLEE, OSGi, Tomcat etc)
Hercompileren is leuk, maar soms heb je de source niet of wil je die niet vrijgeven. Bovendien wil je als vendor ook geen 7 verschillende platformen ondersteunen als het ook met één platform kan. (nl een J2EE server, en ja, ik weet dat een typische J2EE app wat massage nodig heeft om op de applicatieservers van verschillende vendors te werken)

Zoals eerder al aangehaald is onderhoud van software op de lange termijn een heel grote kost, en dat is een manier waarop je daar heel grote besparingen kan doen.
Ja, dat is idd een voordeel van Java. Ik hou me daar eerlijk gezegd niet zo mee bezig, dus ik weet er weinig van...
Tot slot, in de tweakers programming contest doen de Java applicaties het typisch niet zo slecht ;-) Dus qua performance kan dat niet zo slecht zijn
Op zich een mooi voorbeeld. Stel dat je daar een zoekboom hebt en je mag maar een bepaalde tijd rekenen, dan kom je zelfs met slechts 20-30% meer performance gewoon dieper en heb je een goede kans op een beter antwoord. Scheelt het veel? Het kan je de overwinning schelen ;)

---
RayNbow schreef op zaterdag 20 december 2008 @ 22:12:
Ik heb geen verstand van smart pointers, maar kun je met smart pointers ook gemakkelijk iets implementeren als een copying collector?
Geen verstand van. Een collector is dat GC? Is dat iets als two-space GC? Dat is het enige dat ik ooit in C heb geimplementeerd voor een toy OO compiler (uni opdracht...)
Ik kwam trouwens net deze OOPSLA paper tegen over GC vs explicit memory management, maar heb 'm nog niet gelezen.
Wat een abstract... een hele kolom :P
These results quantify
the time-space tradeoff of garbage collection: with five times as
much memory, an Appel-style generational collector with a noncopying
mature space matches the performance of reachabilitybased
explicitmemory management. With only three times asmuch
memory, the collector runs on average 17% slower than explicit
memory management. However, with only twice as much memory,
garbage collection degrades performance by nearly 70%.
Auw... :) Het is even snel hoor, als je 5x zo veel geheugen hebt ;)

[ Voor 22% gewijzigd door Zoijar op 21-12-2008 11:31 ]


Acties:
  • 0 Henk 'm!

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

.oisyn schreef op zondag 21 december 2008 @ 04:05:
Onzin, waarom denken mensen dat toch altijd? De VM zorgt er hoogstens voor dat de dingen waar jij geen referentie meer naar hebt worden opgeruimd, maar dat betekent niet dat je niet alsnog referenties kunt leaken waarvan je even vergeet dat ze bestaan (zoals bijv. in een eigen ArrayList implementatie waarbij je bij het verwijderen van elementen vergeet de vrijgekomen posities op null te zetten)
Denk je niet dat we als we de hoeveelheid C++ programmeurs die een keer tegen een memoryleak zijn opgelopen afzetten tegen de hoeveelheid Java programmeurs die ooit tegen een memoryleak zijn opgelopen, dat de eerste groep dan orden van grootte groter is?

Overigens kwam ik net dit artikel van Steve Yegge tegen, waarin hij een aantal redenen voor VM's boven compilers geeft, waaronder
Virtual machines are great for language interoperability. If everybody in the world used his language, then yeah, you probably wouldn't need a virtual machine. You'd probably still want one eventually, because of the just-in-time compilers, and all the runtime information they can get.
maar lees vooral verder vanaf daar, want hij heeft een aardig verhaal over een meeting waar een hele rits bekende VM-implementers aanwezig waren.

Wie trösten wir uns, die Mörder aller Mörder?


Acties:
  • 0 Henk 'm!

  • bomberboy
  • Registratie: Mei 2007
  • Laatst online: 24-09 21:12

bomberboy

BOEM!

Zoijar schreef op zondag 21 december 2008 @ 11:28:
[TweakersContest]
Op zich een mooi voorbeeld. Stel dat je daar een zoekboom hebt en je mag maar een bepaalde tijd rekenen, dan kom je zelfs met slechts 20-30% meer performance gewoon dieper en heb je een goede kans op een beter antwoord. Scheelt het veel? Het kan je de overwinning schelen ;)
Ik heb het net nog even gechecked, en van de 3 reeds afgelopen contests zijn er 2 gewonnen door een Java oplossing, en één door een C++ oplossing. :+ Niet echt representatief natuurlijk.
Kijkend naar de top 3 waren er 6 java-oplossingen en 2 C/C++ oplossingen.
Nog steeds niet representatief natuurlijk, maar om even terug naar het originele topic te gaan, is Java dan misschien toch niet zo verschrikkelijk. Want als het dan trager is, moeten de algoritmes van de Java-oplossingen toch wel beter zijn dan die van de C++ oplossingen O+

note: deze reactie is niet heel erg serieus bedoeld he O-)

Acties:
  • 0 Henk 'm!

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

MBV schreef op zondag 21 december 2008 @ 00:28:
En performance is het argument waar je maar op terug blijft komen, ondanks dat iedereen toch wel zo ver wilt gaan dat het (bijvoorbeeld) 20% langzamer is. Is java de grootste vloek van de informatica omdat het 20% langzamer is dan C++? Jij gebruikt Java liever niet omdat jouw applicaties kennelijk heel erg goed moeten performen. Zijn er nog andere redenen?
writser schreef op zondag 21 december 2008 @ 02:00:
Dat is niet echt een argument imo. Oude code, collega's of bugs kunnen er allemaal voor zorgen dat er memory-leaks optreden in je programma. In C++ _moet_ iedereen zich aan een bepaalde manier van programmeren houden en foutloos programmeren. In Java zorgt de VM er voor dat er geen memory leaks optreden. Dat is toch wel een klein verschil ..
Ah, en nu komen we eindelijk bij de conclusie: java programmeurs worden lui en onoplettend, en nieuwe programmeurs worden op die manier opgeleid, en iedereen weet dat daar fouten van komen ;) Het gaat zeg maar van "Java kan niet leaken" naar "Wat is een leak?". (niet dat ik het daar helemaal mee eens ben hoor; je kan natuurlijk prima een top java programmeur zijn die gewoon alles weet.)
Even een side-note: welk C++ framework zouden jullie gebruiken om een enterprise-applicatie met webinterface te schrijven?
Wt? .NET? ;) Geen idee.

Ik vraag me toch een beetje af hoeveel run-time information een (JIT) compiler nou echt nuttig kan gebruiken. Dat lees ik steeds: we have run-time info. En wat doen ze daar dan nuttig mee? Iets meer performance? En dan vervolgens roepen dat een applicatie die 2x zo langzaam is niet uitmaakt? En wat kost het om die run-time info te verzamellen? Meer of minder dan wat het oplevert?
bomberboy schreef op zondag 21 december 2008 @ 11:46:
Ik heb het net nog even gechecked, en van de 3 reeds afgelopen contests zijn er 2 gewonnen door een Java oplossing, en één door een C++ oplossing. :+ Niet echt representatief natuurlijk.
Kijkend naar de top 3 waren er 6 java-oplossingen en 2 C/C++ oplossingen.
Nog steeds niet representatief natuurlijk, maar om even terug naar het originele topic te gaan, is Java dan misschien toch niet zo verschrikkelijk. Want als het dan trager is, moeten de algoritmes van de Java-oplossingen toch wel beter zijn dan die van de C++ oplossingen O+

note: deze reactie is niet heel erg serieus bedoeld he O-)
En gewogen naar frequentie van inzendingen? 99 mensen die java gebruikten en eentje met C++ die steeds in de top 3 komt? ;)

Ik ben ook niet zo serieus hoor; ik zie gewoon veel argumenten die naar mijn idee niet kloppen :)

[ Voor 20% gewijzigd door Zoijar op 21-12-2008 11:55 ]


Acties:
  • 0 Henk 'm!

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Zoijar schreef op zondag 21 december 2008 @ 11:51:
Ah, en nu komen we eindelijk bij de conclusie: java programmeurs worden lui en onoplettend, en nieuwe programmeurs worden op die manier opgeleid, en iedereen weet dat daar fouten van komen ;)
Volgens mij beginnen we nu in herhaling te vallen: Zoijar in "Is java de grootste vloek in de informat..." ;)

Wie trösten wir uns, die Mörder aller Mörder?


Acties:
  • 0 Henk 'm!

  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 19:41

RayNbow

Kirika <3

Zoijar schreef op zondag 21 december 2008 @ 11:28:
[...]

Geen verstand van. Een collector is dat GC? Is dat iets als two-space GC? Dat is het enige dat ik ooit in C heb geimplementeerd voor een toy OO compiler (uni opdracht...)
Ja, een Two-space GC is een copying collector.
[...]

Auw... :) Het is even snel hoor, als je 5x zo veel geheugen hebt ;)
Het is dan altijd ook een tradeoff tussen performance qua geheugen en performance qua tijd. Als je het geheugen tot je beschikking hebt, dan zie ik iig geen probleem om het te gebruiken.

De paper laat wel zien dat GC soms een kleine fractie sneller is met grotere heaps. :p

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


Acties:
  • 0 Henk 'm!

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Haha :) Ja, deze hele discussie is een grote herhaling van andere fora :P
RayNbow schreef op zondag 21 december 2008 @ 13:52:
Ja, een Two-space GC is een copying collector.
Ah ok. Nee, dat heb je dan dus niet nodig met smart pointers. Die gebruiken reference counting. Het principe gaat op voor alle resources eigenlijk, inclusief geheugen dus. Een "object" blijft bestaan zolang het referencable is. Bij elk kopie van de smart pointer gaat de reference count omhoog, en bij elke destructie omlaag (zijn nog wat details, maar die zijn niet belangrijk nu). Als de reference count naar 0 gaat wordt het opgeruimd. Daar hoef je verder niet op te letten. Zoiets krijg je dan:

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
typedef boost::smart_ptr<Object> OPtr;

void foo(OPtr x) {
   // do stuff with x, ie x->foo(); etc.

   // assign new object
   x = new Object();

   // oops, error here
   throw "error";
}

void main() {
   try {
      OPtr obj = new Object(); // make object on heap
      foo(obj);
   } catch (...) {}
}

Deze code leaked niet, zelfs niet bij de exception. Als je ziet hoe makkelijk dit gaat, wat is dan eigenlijk nog het echte nut van GC? Overigens hebben smart pointers ook een cost natuurlijk, zeker in multi-threaded omgevingen.
Het is dan altijd ook een tradeoff tussen performance qua geheugen en performance qua tijd. Als je het geheugen tot je beschikking hebt, dan zie ik iig geen probleem om het te gebruiken.

De paper laat wel zien dat GC soms een kleine fractie sneller is met grotere heaps. :p
5x zo veel geheugen geen probleem? Dat betekent dat elk huidig 4GB systeem maar effectief 800MB kan gebruiken in een complete GC omgeving. Jouw app is niet de enige die draait :) Ik vind het wederom een vrij grote cost voor weinig benefit. Uiteraard is dat op te lossen door er gewoon 20GB in te prikken... ;)

Acties:
  • 0 Henk 'm!

  • Remus
  • Registratie: Juli 2000
  • Laatst online: 15-08-2021
writser schreef op zondag 21 december 2008 @ 02:00:
[...]
Dat is niet echt een argument imo. Oude code, collega's of bugs kunnen er allemaal voor zorgen dat er memory-leaks optreden in je programma. In C++ _moet_ iedereen zich aan een bepaalde manier van programmeren houden en foutloos programmeren. In Java zorgt de VM er voor dat er geen memory leaks optreden. Dat is toch wel een klein verschil ..
Dat is dus niet helemaal waar, als ik in Java een referentie vasthoudt terwijl ik het object eigenlijk niet meer nodig heb, dan is er net zo goed sprake van een memory leak, dan als ik in C vergeet een object te free-en.

Hoewel ik zelf meer met Java heb, is het natuurlijk wel zo dat het bewust bezig zijn met (de)allocatie in C de programmeur wel scherper houdt. Het grote nadeel is natuurlijk dat als je dan steken laat vallen (en mensen zijn faalbaar, dus dat gebeurt ook), dat de 'problemen' groter zijn dan in een taal met garbagecollection.

Acties:
  • 0 Henk 'm!

  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 19:41

RayNbow

Kirika <3

Zoijar schreef op zondag 21 december 2008 @ 14:39:
[...]

Ah ok. Nee, dat heb je dan dus niet nodig met smart pointers. Die gebruiken reference counting. Het principe gaat op voor alle resources eigenlijk, inclusief geheugen dus. Een "object" blijft bestaan zolang het referencable is. Bij elk kopie van de smart pointer gaat de reference count omhoog, en bij elke destructie omlaag (zijn nog wat details, maar die zijn niet belangrijk nu). Als de reference count naar 0 gaat wordt het opgeruimd. Daar hoef je verder niet op te letten. Zoiets krijg je dan:

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
typedef boost::smart_ptr<Object> OPtr;

void foo(OPtr x) {
   // do stuff with x, ie x->foo(); etc.

   // assign new object
   x = new Object();

   // oops, error here
   throw "error";
}

void main() {
   try {
      OPtr obj = new Object(); // make object on heap
      foo(obj);
   } catch (...) {}
}

Deze code leaked niet, zelfs niet bij de exception. Als je ziet hoe makkelijk dit gaat, wat is dan eigenlijk nog het echte nut van GC? Overigens hebben smart pointers ook een cost natuurlijk, zeker in multi-threaded omgevingen.
Maar werkt reference counting ook als je te maken hebt met cyclische structuren? :)
[...]

5x zo veel geheugen geen probleem? Dat betekent dat elk huidig 4GB systeem maar effectief 800MB kan gebruiken in een complete GC omgeving. Jouw app is niet de enige die draait :) Ik vind het wederom een vrij grote cost voor weinig benefit. Uiteraard is dat op te lossen door er gewoon 20GB in te prikken... ;)
Daarom is het ook een afweging. Je kan ook besluiten om een GC te gebruiken en minder performance. Het hangt totaal af van de requirements en je beschikbare resources (CPU, RAM, aantal ontwikkelaars in dienst, beschikbaar budget, beschikbare ontwikkeltijd, aanwezigheid bestaande tools en libs, etc.).

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


Acties:
  • 0 Henk 'm!

  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 19-09 10:19
MBV schreef op vrijdag 19 december 2008 @ 23:36:
[...]

De Zune en XBox360 draaien het compact framework, dus ik weet niet of die alle leuke gimmicks die eerder zijn opgenoemd daarin draaien. O.a. delegates werken niet, de rest kan ik zo 1-2-3 niet vinden.
Zover ik weet, maar ik zou het even moeten testen, werken alle language features zoals delegates juist wel op het compact framework maar zijn het vooral wat libraries die er niet in zitten. Ik zou het even moeten testen door een deploy naar mijn Xbox te doen maar ik ben toevallig niet thuis, zal het snel proberen!

@ Zoijar:

Java ontwikkeltijd is wat lager omdat er minder gekke fouten gemaakt kunnen worden. (je krijgt bij een rare fout meteen een exception naar de regel code waar het fout gaat, terwijl je in C++ zover ik weet door rare mem fouten wel is heel erg op het verkeerde been gebracht kunt worden) Ook omdat Java een managed en safe taal is heb je minder test-tijd nodig (vind men).

Verder is C++ ondanks al die Java en .Net test (en het feit dat ik een ontzettend .Net fanboy ben) imho toch nog steeds sneller, maar dan hebben we het over 10~20% wat in programmeer kosten (C++ programmeurs zijn duurder en de ontwikkeltijd iets langer) natuurlijk niet meer uit maakt voor zoiets als een standaard backoffice programma.

C++ heeft wel nog steeds nut bij het maken van applicaties waar elke ns telt, of waar er erg weinig resources zijn.

Ik vraag me wel heel erg af wanneer/of de game industrie over gaat naar een managed taal, mijn geklooi met C#+XNA/MDX geeft voor mij het gevoel dat managed talen toch rijp zijn om daar gebruikt te gaan worden.Vooral nu de ontwikkelkosten van games zo de pan uit reizen zou het leuk zijn als hiermee de ontwikkeltijd en kosten ietwat gedrukt kunnen worden. Helaas beschik ik zelf niet over de expertise om 2 dezelfde games/test te maken in C++ en C# om te zien of er echt performance verschil is. Maar misschien dat Oisyn hier wat meer over kan vertellen?

[ Voor 52% gewijzigd door roy-t op 21-12-2008 16:45 ]

~ Mijn prog blog!


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-09 16:37

.oisyn

Moderator Devschuur®

Demotivational Speaker

Confusion schreef op zondag 21 december 2008 @ 11:41:
[...]

Denk je niet dat we als we de hoeveelheid C++ programmeurs die een keer tegen een memoryleak zijn opgelopen afzetten tegen de hoeveelheid Java programmeurs die ooit tegen een memoryleak zijn opgelopen, dat de eerste groep dan orden van grootte groter is?
Lees nu nog eens de reactie waar ik op reageer. Sommige mensen hebben de misvatting dat je met Java geen memory leaks kunt hebben. Complete onzin. Ik heb niet gezegd dat het net zo makkelijk is als in C++, en dat brengt ons meteen naar het punt waarom ik je vergelijking zo nutteloos vind - zet nu eens de ervaren C++ programmeurs af tegen de ervaren Java programmeurs, dan geloof ik al niet meer dat het om ordes van groottes gaat. Ik zou niet eens weten of memleaks(C++) > memleaks(Java) in dat geval, juist omdat C++'ers er meer mee bezig zijn dan Java'ers, waarbij die laatste groep veel meer het idee kan hebben "ach, dat wordt toch wel opgeruimd". Maar goed, dat was verder ook niet het punt dat ik probeerde te maken in mijn vorige post.

[ Voor 9% gewijzigd door .oisyn op 21-12-2008 16:37 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

Verwijderd

.oisyn schreef op zondag 21 december 2008 @ 16:34:
Ik zou niet eens weten of memleaks(C++) > memleaks(Java) in dat geval, juist omdat C++'ers er meer mee bezig zijn dan Java'ers, waarbij die laatste groep veel meer het idee kan hebben "ach, dat wordt toch wel opgeruimd". Maar goed, dat was verder ook niet het punt dat ik probeerde te maken in mijn vorige post.
Maar op zich hebben die Java'ers wel gelijk dat de VM dat toch wel opruimt. Zodra je een nieuw object in de arraylist stopt is de reference naar de oude verdwenen. Als je vergeet een verwijderd element te nullen, dan zullen een aantal objecten in de arraylist blijven zitten totdat een nieuw object de plaats inneemt, maar dat kan nooit een significante hoeveelheid geheugen zijn (anders had je toch al niet genoeg geheugen voor de arraylist).

Ik heb geleerd om de VM nooit te proberen te 'helpen', omdat het toch niet nodig is. De VM kan prima zelf bepalen wanneer iets verwijderd moet worden. En in dit geval is het dus ook geen leak.

Acties:
  • 0 Henk 'm!

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

.oisyn schreef op zondag 21 december 2008 @ 16:34:
Lees nu nog eens de reactie waar ik op reageer. Sommige mensen hebben de misvatting dat je met Java geen memory leaks kunt hebben. Complete onzin. Ik heb niet gezegd dat het net zo makkelijk is als in C++,
Maar dat is wel een beetje de suggestie die gewekt wordt: mensen geven het argument dat je in Java geen memory leaks kunt hebben en hoewel dat feitelijk onjuist is, maakt dat de strekking van het argument niet direct onwaar. Nu wordt het argument afgedaan op basis van de feitelijke onjuistheid en wordt er aan de strekking voorbij gegaan.
en dat brengt ons meteen naar het punt waarom ik je vergelijking zo nutteloos vind - zet nu eens de ervaren C++ programmeurs af tegen de ervaren Java programmeurs, dan geloof ik al niet meer dat het om ordes van groottes gaat. Ik zou niet eens weten of memleaks(C++) > memleaks(Java) in dat geval, juist omdat C++'ers er meer mee bezig zijn dan Java'ers, waarbij die laatste groep veel meer het idee kan hebben "ach, dat wordt toch wel opgeruimd".
Ervaren programmeurs zijn moeilijk om aan te komen. Mijn idee was meer: de grote hoeveelheid programmeurs die niet ervaren zijn (en misschien dat ook nooit zullen zijn) zullen het er in Java beter vanaf brengen dan in C++, omdat bijvoorbeeld de memory-management kopzorg voor ze weggenomen is (en ze toch nooit dingen hoeven te bouwen die complex genoeg zijn om in Java tegen een memory leak aan te lopen).

Wie trösten wir uns, die Mörder aller Mörder?


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-09 16:37

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op zondag 21 december 2008 @ 16:49:
Als je vergeet een verwijderd element te nullen, dan zullen een aantal objecten in de arraylist blijven zitten totdat een nieuw object de plaats inneemt, maar dat kan nooit een significante hoeveelheid geheugen zijn (anders had je toch al niet genoeg geheugen voor de arraylist).
Die redenatie klopt dus niet. Ten eerste hoef je de arraylist niet opnieuw te vullen - stel je doet gewoon een clear() en je laat 'm voor wat ie is, al die objecten blijven dan in leven. En je kunt er geen reet over zeggen of dat veel geheugen kost, omdat de resources niet gelimiteerd zijn door alleen die objecten, maar ook alle objecten die weer door die objecten worden gerefereerd, enzovoorts.
Ik heb geleerd om de VM nooit te proberen te 'helpen', omdat het toch niet nodig is. De VM kan prima zelf bepalen wanneer iets verwijderd moet worden. En in dit geval is het dus ook geen leak.
Het hele punt is dat de VM dat niet kan als jij onnodig referenties houdt naar objecten. Als jij een globale reference hebt voor iets dat je maar heel tijdelijk nodig hebt, dan is het heel verstandig om die reference na gebruik weer op null te zetten. Het is niet dat Java een GC heeft dat je daarom maar niet meer na hoeft te denken over object lifetimes.

http://www.ibm.com/developerworks/library/j-leaks/index.html
Ik las ooit eens een artikel over *ik geloof* AWT die een hele zwik resources vasthield als je ergens vergat een listener te verwijderen van een component, maar die kan ik niet meer vinden. Misschien was het niet AWT, maar het ging iig om een GUI library.

Nou develop ik weinig in Java, maar zijn hier veel mensen die in Java veel gebruik maken van weak references? En dan denk ik met name aan library ontwikkelaars.

[ Voor 12% gewijzigd door .oisyn op 21-12-2008 17:05 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-09 16:37

.oisyn

Moderator Devschuur®

Demotivational Speaker

Confusion schreef op zondag 21 december 2008 @ 16:54:
[...]

Maar dat is wel een beetje de suggestie die gewekt wordt: mensen geven het argument dat je in Java geen memory leaks kunt hebben en hoewel dat feitelijk onjuist is, maakt dat de strekking van het argument niet direct onwaar. Nu wordt het argument afgedaan op basis van de feitelijke onjuistheid en wordt er aan de strekking voorbij gegaan.
Daar ben ik het dus niet mee eens, zie vooral de laatste alinea in mijn vorige post. Nadenken over object lifetime is een essentieel onderdeel van software design imho, en denken "dat de VM het wel opruimt" is iets dat de Java ontwikkelaars geen goed doet. Natuurlijk, als je dat niet doet in C++ dan heb je daar een stuk meer last van dan als je dat niet doet in Java.
Ervaren programmeurs zijn moeilijk om aan te komen. Mijn idee was meer: de grote hoeveelheid programmeurs die niet ervaren zijn (en misschien dat ook nooit zullen zijn) zullen het er in Java beter vanaf brengen dan in C++, omdat bijvoorbeeld de memory-management kopzorg voor ze weggenomen is (en ze toch nooit dingen hoeven te bouwen die complex genoeg zijn om in Java tegen een memory leak aan te lopen).
Ik heb dan ook niet gezegd dat C++ net zo makkelijk is te leren als Java, en dat vind ik ook niet. Java is een heel stuk makkelijker. Misschien zelfs iets te makkelijk.

[ Voor 3% gewijzigd door .oisyn op 21-12-2008 17:06 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 23-09 21:37

Creepy

Tactical Espionage Splatterer

Verwijderd schreef op zondag 21 december 2008 @ 16:49:
[...]

Maar op zich hebben die Java'ers wel gelijk dat de VM dat toch wel opruimt.
Nee, dat hebben ze niet altijd en dat is ook .oisyns punt. De JVM ruimt niet alles volautomatisch voor je op. Wel veel, maar niet altijd alles: http://www.google.nl/sear...=UTF-8&q=java+memory+leak ;)

Er zijn mensen die denken dat het onmogelijk is om een mem. leak te hebben in Java. En dat verbaast me aan de ene kant. Aan de andere kant ook niet omdat niet iedereen zich echt lijkt te verdiepen in de omgeving waarmee ze ontwikkelen.

[ Voor 21% gewijzigd door Creepy op 21-12-2008 17:57 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

.oisyn schreef op zondag 21 december 2008 @ 17:02:
Daar ben ik het dus niet mee eens, zie vooral de laatste alinea in mijn vorige post. Nadenken over object lifetime is een essentieel onderdeel van software design imho, en denken "dat de VM het wel opruimt" is iets dat de Java ontwikkelaars geen goed doet.
Nadenken over object lifetimes is breder dan nadenken over memory management. Daarin zit geen verschil tussen C++ en Java: de VM beslist bijvoorbeeld niet voor je wanneer een object uit een cache gegooid moet worden. Over hoeveel geheugen je gebruikt moet je in alle talen nadenken, maar niet over de manier waarop dat geheugen gebruikt wordt op het moment dat het gebruikt wordt. Het lijkt me dat dat is wat hier relevant is: stukje boekhouding die je niet meer hoeft te doen.

Wie trösten wir uns, die Mörder aller Mörder?


Acties:
  • 0 Henk 'm!

  • Salvatron
  • Registratie: April 2003
  • Niet online

Salvatron

Dispereert niet

roy-t schreef op zondag 21 december 2008 @ 16:31:
Helaas beschik ik zelf niet over de expertise om 2 dezelfde games/test te maken in C++ en C# om te zien of er echt performance verschil is. Maar misschien dat Oisyn hier wat meer over kan vertellen?
Hier is in ieder geval een vergelijking tussen C en Java bij het spel Quake2:
http://bytonic.de/html/benchmarks.html

Lucht en leegte, zegt Prediker, alles is leegte.


Acties:
  • 0 Henk 'm!

Verwijderd

.oisyn schreef op zondag 21 december 2008 @ 16:58:
http://www.ibm.com/developerworks/library/j-leaks/index.html
Ik las ooit eens een artikel over *ik geloof* AWT die een hele zwik resources vasthield als je ergens vergat een listener te verwijderen van een component, maar die kan ik niet meer vinden. Misschien was het niet AWT, maar het ging iig om een GUI library.
Hier is een artikel: http://www.oracle.com/tec...masterj2ee/j2ee_wk11.html

Het gaat om EventListeners in het algemeen. Die problemen los je op met een weak reference.
Nou develop ik weinig in Java, maar zijn hier veel mensen die in Java veel gebruik maken van weak references? En dan denk ik met name aan library ontwikkelaars.
Pagina: 1 2 3 4 Laatste