Article View: be.comp.programming
Article #10897Re: oproep aan de programmeurs:wat moet ik kiezen ?
From: Sjoerd Schreuder
Date: Fri, 22 Feb 2002 14:38
Date: Fri, 22 Feb 2002 14:38
118 lines
7423 bytes
7423 bytes
Frans Bouma wrote: > > "Sjoerd Schreuder" <sa_schreuder@wanadoo.nl> wrote in message news:3C762FF1.B9125B5B@wanadoo.nl... > > Frans Bouma wrote: [..stukken geknipt om het overzichtelijk te houden..] > > Waarom zou je je eigenlijk vastleggen op little of big endian? > > hoe zou je het dan willen oplossen? :) Kiezen voor "native", wat dat ook moge zijn. En verder converteren bij I/O. Redelijk recht-toe-recht-aan, en optimaal voor elk platform. Hooguit wat meer code, maar die code kan automatisch gegenereerd worden. > > Dat is alleen van belang als je de individuele bytes van een word > > kunt aanspreken. Dus in de volgende gevallen: > > * Het casten van een pointer-to-word naar een pointer-to-byte. > > * Het streamen van words naar externe bronnen zoals een file of > > het netwerk. > > > > Het eerste geval wil je gewoon niet in je taal hebben zitten > > (of maak je "implementation defined", zoals C en C++ doen). > > In het tweede geval kun je zonder probleem een conversieslag doen > > omdat je I/O toch al snelheidsbepalend is. > > > > Dus mij lijkt het dat de beste oplossing is vrij te laten welke > > vorm intern wordt gebruikt. Voor externe representatie moet je > > dan wel een standaard kiezen, maar daar zijn al een heleboel > > standaards voor: Unicode, TCP/IP, CORBA, ... > > Nou, als er gekozen zou zijn binnen de CLR voor big endian, dan > had elke operatie naar fysiek memory een conversie nodig gehad, > wanneer je in mixed mode werkt, of wanneer code buiten de CLR > aangeroepen worden. Lijkt me niet zo verstandig. Je negeert totaal mijn oplossing: laat het vrij in de standaard en gebruik de native ordening. Bij mixed-mode hoef je dan niet te converteren, want die andere code gebruikt ook de native ordening. Bij jouw oplossing moet je ook converteren als je native code aanroept op een verkeerde endian machine. Aangezien je niet weet of je code op zo'n machine gaat draaien, zul je die code altijd moeten schrijven indien je native code wilt aanroepen. > Maar ik denk dat hier van een mug een olifant gemaakt > wordt. In een hogere ordetaal werkt men met typed data, en > hoe individuele bytes zijn gerangschikt is veelal niet van belang: > voor het optellen van een short bij een int is het niet van belang > die volgorde te weten, alleen bij het lezen van data uit een file > die is geschreven met een C programmaatje bv, dan moet je weten > of de 4 bytes die een int voorstellen, ook in hetzelfde format > staan als de endian-configuratie van het platform waar de inlezende > partij op draait. Voorbeeld hiervan is het inlezen van TGA files > op inteldozen :) Met je eens. Alleen bij I/O maakt het uit, dus waarom zou je het vastleggen voor berekeningen die niets met I/O te maken hebben? > > > > Gezien de keuzes die ze hebben gemaakt, lijkt de huidige Pentium > > > > processor de voornaamste target van de standaard te zijn. > > > > > > Je moet EEN keuze maken. > > > > Waarom zou je een keuze MOETEN maken? C en C++ doen dat ook niet, > > en je kunt moeilijk zeggen dat die talen niet bestaan. > > je moet toch je 4 byte dwords opslaan in een volgorde. Voor > de C/C++ programmeur is dat steevast niet belangrijk, totdat > er bv een blok data ingelezen wordt wat de inhoudt van een struct > is, dus wat je bv direct naar een struct cast. Dat moet je dus niet doen. De functies ntohl() bestaan toch ook al jaren? Verder bestaan er al genoeg standaards om gegevens binair uit te wisselen. Zo heeft elke CORBA implementatie wel een idl-compiler die de marshalling voor je genereert. Dan heb je er geen omkijken meer naar. > Is die data > weggeschreven op een big-endian bak, dan is het lastig werken > op een intelbak. Ookal zit je in C/C++. Maar omdat dit niet > alledaagse problemen zijn: nogmaals: hier wordt van een mug > een olifant gemaakt, wat niet vreemd is bij rethoriek, afkomstig > uit de Warmelink-hoek :) Zucht. Bij gebrek aan argumenten ga je maar op de man spelen? Had ik niet van je verwacht. > > Maar misschien ben ik te veel beinvloed door C en C++, waar dat allemaal > > aan de compilerbouwer wordt overgelaten. Die kan een keuze maken die > > voor dat platform natuurlijk is. > > valt uiteraard veel voor te zeggen. Maar als je zit te werken in taal A, > zonder maximale waarden voor lengtes en 64bit wordt gekozen voor ints, > hoe zijn dan de datablokken inwisselbaar met classes geschreven in taal > B met maximale lengte voor ints van 32bits? Dat levert weer marshalling > ellende op, iets wat men juist wil vermijdden. Die marshalling kunnen idl-compilers prima voor hun rekening nemen. En het idl formaat is toch ondertussen al redelijk standaard. Misschien nog niet de jure, maar wel de facto. In een poging de discussie af te ronden: We zijn het dus eens dat alleen bij I/O (inclusief aanroep andere code) het noodzakelijk is om het formaat vast te leggen. Mijn oplossing is om het formaat van I/O vast te leggen en te converteren tijdens I/O, jouw oplossing is om voor het hele programma de little/big endian vast te leggen. In beide gevallen moet er soms geconverteerd worden, maar die code kan automatisch gegenereerd worden. Beide oplossingen zijn mogelijk (alhoewel misschien niet optimaal), ik hoop dat we dat eens zijn. We wegen de voor- en nadelen verschillend, waardoor we op een verschillende voorkeur uitkomen. Dus: let's agree to disagree. Sjoerd Schreuder
Technical Details
Message-ID:
<3C7657FD.F7B825F7@wanadoo.nl>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!supernews.com!news-x2.support.nl!news2.euro.net!news.euronet.nl!not-for-mailReferences:
<uXu88.122912$rt4.11582@afrodite.telenet-ops.be> <1013109746.799866@seven.kulnet.kuleuven.ac.be> <3C63C40B.BA1DDAA9@iae.nl> <3c6e35cf.1533535@newszilla.xs4all.nl> <1013895537.659605@seven.kulnet.kuleuven.ac.be> <slrna6tm41.3mc.usenet@dolens.mobach.nl> <1013913710.524385@seven.kulnet.kuleuven.ac.be> <3C6FD2B5.1D31CC72@wanadoo.nl> <1013970800.921078@seven.kulnet.kuleuven.ac.be> <3C7019B8.2C74A2B4@wanadoo.nl> <rn664vbyt2.fsf@keyser.soze.com> <ju4u4a.sgo.ln@erik.selwerd.nl> <rnheod9sbh.fsf@keyser.soze.com> <1vp25a.n3h.ln@erik.selwerd.nl> <slrna79tt1.2lt7.robert@00008.org> <3C752437.D8E52A8B@wanadoo.nl> <3c76156d$0$214$e4fe514c@dreader4.news.xs4all.nl> <3C762FF1.B9125B5B@wanadoo.nl> <3c763d5c$0$4583$e4fe514c@dreader3.news.xs4all.nl>Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit X-Google-Thread: 107324,65d4c4d6a1e8dc39 X-Google-Attributes: gid107324,public X-Google-Thread: fcea4,65d4c4d6a1e8dc39 X-Google-Attributes: gidfcea4,public X-Google-ArrivalTime: 2002-02-22 06:39:16 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!supernews.com!news-x2.support.nl!news2.euro.net!news.euronet.nl!not-for-mail From: Sjoerd Schreuder <sa_schreuder@wanadoo.nl> Newsgroups: be.comp.programming,nl.comp.programmeren Subject: Re: oproep aan de programmeurs:wat moet ik kiezen ? Date: Fri, 22 Feb 2002 15:38:53 +0100 Organization: Wanadoo NL Lines: 118 Message-ID: <3C7657FD.F7B825F7@wanadoo.nl> References: <uXu88.122912$rt4.11582@afrodite.telenet-ops.be> <1013109746.799866@seven.kulnet.kuleuven.ac.be> <3C63C40B.BA1DDAA9@iae.nl> <3c6e35cf.1533535@newszilla.xs4all.nl> <1013895537.659605@seven.kulnet.kuleuven.ac.be> <slrna6tm41.3mc.usenet@dolens.mobach.nl> <1013913710.524385@seven.kulnet.kuleuven.ac.be> <3C6FD2B5.1D31CC72@wanadoo.nl> <1013970800.921078@seven.kulnet.kuleuven.ac.be> <3C7019B8.2C74A2B4@wanadoo.nl> <rn664vbyt2.fsf@keyser.soze.com> <ju4u4a.sgo.ln@erik.selwerd.nl> <rnheod9sbh.fsf@keyser.soze.com> <1vp25a.n3h.ln@erik.selwerd.nl> <slrna79tt1.2lt7.robert@00008.org> <3C752437.D8E52A8B@wanadoo.nl> <3c76156d$0$214$e4fe514c@dreader4.news.xs4all.nl> <3C762FF1.B9125B5B@wanadoo.nl> <3c763d5c$0$4583$e4fe514c@dreader3.news.xs4all.nl> NNTP-Posting-Host: 212.203.20.29 Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Trace: scavenger.euro.net 1014388734 32858 212.203.20.29 (22 Feb 2002 14:38:54 GMT) X-Complaints-To: abuse@wanadoo.nl NNTP-Posting-Date: Fri, 22 Feb 2002 14:38:54 +0000 (UTC) X-Mailer: Mozilla 4.7 [en] (WinNT; I) X-Accept-Language: en