Toon posts:

[DISC] C of C++ :?

Pagina: 1 2 Laatste
Acties:
  • 637 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
mja.. ik wil dus een van de 2 talen gaan leren..
uiteindelijk wil ik ze het liefst allebei leren.. maar met welke begin ik? persoonlijk trekt C++ mij net even iets meer dan C, maar is het verstandig om C++ eerder dan C te leren?

ik zie bijvoorbeeld genoeg boeken om over te stappen van C naar C++, maar niet andersom.. :?

ik wil de talen in principe voor mezelf leren, voor mijn werk hoeft het (nog) niet..

ik kom er zelf echt niet uit, misschien kunnen jullie me helpen een keuze te maken.. :)

  • Nielsz
  • Registratie: Maart 2001
  • Niet online
Op maandag 29 juli 2002 09:37 schreef areana het volgende:
mja.. ik wil dus een van de 2 talen gaan leren..
uiteindelijk wil ik ze het liefst allebei leren.. maar met welke begin ik? persoonlijk trekt C++ mij net even iets meer dan C, maar is het verstandig om C++ eerder dan C te leren?

ik zie bijvoorbeeld genoeg boeken om over te stappen van C naar C++, maar niet andersom.. :?

ik wil de talen in principe voor mezelf leren, voor mijn werk hoeft het (nog) niet..

ik kom er zelf echt niet uit, misschien kunnen jullie me helpen een keuze te maken.. :)
Waarom trekt C++ je meer? Heb je daar een goede reden voor? Of weet je eigenlijk niet wat het verschil is?

  • nAFutro
  • Registratie: Oktober 2000
  • Laatst online: 17-04-2020

nAFutro

hmm

neem gewoon de taal welke het meest gebruikt wordt en GAAT worden. heb je het meeste aan.
kies zelf dus maar :)

  • michiel100
  • Registratie: November 2000
  • Laatst online: 01-09 07:27
C is iig een stuk makkelijker dan C++, zeker als je helemaal nog geen programmeerervaring hebt.

  • Greyfox
  • Registratie: Januari 2001
  • Laatst online: 30-08 17:13

Greyfox

MSX rulez

Begin met C, dat is mijn advies.
Dan heb je het veel makkelijker als je daarna C++ wilt gaan doen.
De basis van C++ is toch C.

MSX 2 rulez more


Verwijderd

Topicstarter
Op maandag 29 juli 2002 09:41 schreef michiel100 het volgende:
C is iig een stuk makkelijker dan C++, zeker als je helemaal nog geen programmeerervaring hebt.
ah.. okeej.. :P - ik heb wel programmeerervaring, voornamelijk met diverse BASICS en scripting languages..

  • MrEdge_
  • Registratie: April 2000
  • Laatst online: 17-11-2023
Wat ga je ermee doen? Zegt OO je wat?
ik zie bijvoorbeeld genoeg boeken om over te stappen van C naar C++, maar niet andersom..
Op zich niet zo raar, aangezien C er eerder was dan C++ en die laatste vaak ook wordt gezien als uitbreiding op C, al is dat niet geheel terecht.

Maar als het je toch om het even is zou ik voor C++ gaan. Meer mogelijkheden, object georienteerd etc.

Maar vanwaar de interesse in C/C++? Er zijn nog genoeg andere leuke talen die vele malen eenvoudiger zijn, vooral voor thuisgebruik.

  • Muyz
  • Registratie: Februari 2000
  • Laatst online: 24-08 20:04
Als je nog geen enkele ervaring hebt met een object-georienteerde programmeertaal lijkt het mij verstandiger om eerst met C te beginnen.

Verwijderd

Topicstarter
Op maandag 29 juli 2002 09:45 schreef Mr Edge het volgende:
Maar vanwaar de interesse in C/C++? Er zijn nog genoeg andere leuke talen die vele malen eenvoudiger zijn, vooral voor thuisgebruik.
de interesse uit C komt denk ik voornamelijk voort uit het feit dat ik een *nix freak ben (en ook niets anders gebruik) en tevens gek ben van programmeren.. misschien het idee iets met kernel hacking of iets dergelijks te doen.. C++? geen idee waar ik dat vandaan haal.. er zijn meerdere programmeertalen die ik wil leren, en ik weet dat er genoeg 'makkelijkere' talen zijn.. maar goed.. ik ben eigenwijs en wil dus gewoon beginnen met C of C++... :P

je geeft overigens C++ als 'advies'.. enig idee hoeveel 'moeilijker' het is om over te stappen van C++ naar C in tegenstelling tot C > C++ ..?

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 21-08 17:14
C++, overduidelijk.

Weliswaar is C++ een grotere taal, maar dat komt voor een groot deel omdat het upwards compatible is met C. Al die features hoef je niet te gebruiken of te leren.

Zo moet je in C leren hoe je een string kopieert, en dat zijn 4 regels. In C++ is er een simpelere vorm string1 = string2, maar de 4-regel C versie doet het ook.

Het beste boke om C++ te leren is "Accelerated C++"

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Verwijderd

Ik wou net zeggen: gezien je onderschrift kun je je wel identificeren met Kernel hackers. Misschien is C dan toch de betere keuze, om Posix-compliant te kunnen coden.

  • ritsjoena
  • Registratie: December 2001
  • Laatst online: 16-06-2024
Als je ze toch beide wil leren zou ik beginnen met C om de volgende redenen (waarvan sommige al genoemd):
1) C vormt de basis waaruit C++ is ontwikkeld.
2) Bij het bestuderen van C++ kom je sneller in aanraking me ingewikelder strukturen dan je gewend ben (ik bedoel qua struktuur , niet qua snleheid, daar kan ik niet over oordelen ;) ). Als je met C begint, kun je je niveau geleidelijk uitbreiden.
3)Ik ken geen goed leerboek voor C++, maar het boek dat ik voor C gebruik zou ik omschrijven als 1 van de beste computerboeken en leerboeken (algemeen) die ik ken. Zelfs de nederlandse vertaling is erg goed:
Kernighan and Ritchie: C Handboek / The C Programming Language. (de nederlandse versie is veel goedkoper, stond een half jaar geleden op 66 GULDEN, terwijl de engelse versie op 66 EURO stond :D )
4) Er zijn vast nog wel meer redenen die me zo gauw niet te binnen schieten.

Nadeel: je moet effectief 1.5 talen leren ipv 1 en ze lijken ook nog eens sterk op elkaar.
Voor wat voor systemen wil j eigenlijk gaan programmeren? Win/Lin/UNi ?

Uiteindelijk moet je het natuurlijk allemaal zelf weten, maar aangezien je ze toch allebei wil leren....

  • axis
  • Registratie: Juni 2000
  • Laatst online: 26-01-2023
Waarom zou je nu met een taal gaan beginnen die al aan het uitfaseren is? Waarom niet de opvolger, C#!? Lijkt me logischer.

Two advices for network troubleshooting.. learn to draw diagrams in Visio, and THINK IN LAYERS!


  • MrEdge_
  • Registratie: April 2000
  • Laatst online: 17-11-2023
Op maandag 29 juli 2002 09:49 schreef areana het volgende:

[..]

de interesse uit C komt denk ik voornamelijk voort uit het feit dat ik een *nix freak ben
[knip]
Ik programmeer zelf in C++ en ben daar ook mee begonnen zonder al te veel C kennis. Het argument van anderen om eerst C te proberen omdat het makkelijker is vind ik niet terecht. C is inline programmeren, C++ object georienteerd. Dat geeft je wat meer vrijheid in wat je doet.
Ik heb zelf geen verstand van Unix/Linux maar wat ik wel weet is dat we op het werk een aantal klanten hebben die op Unix ontwikkelen en op de een of andere manier gebruiken ze allemaal C. Maar dat zal wel toeval zijn :)

Maareh, ik zou zeggen, C++ ...

Verwijderd

C++ is een superset van C, en daarin mogen een aantal dingen die in C niet mogen (variabelen hoeven niet perse allemaal bovenaan functies gedeclareerd te worden bv.).
Als je met C++ begint, is het vreselijk irritant om nog puur C te programmeren (zeker als je net gewend bent geraakt aan iostreams).

Of je moet er voor kiezen geen puur C te willen programmeren, en gewoon C++ gaan programmeren. Het voordeel is dan dat een hoop dingen mogen die het programmeer-leven een stuk makkelijker maken.

Of je zou moeten beginnen met C. Dan is het soms wat ingewikkelder dan in C++, maar daarom is C++ ook ontwikkeld (naast object orientatie natuurlijk).

Verwijderd

Topicstarter
woooeeei.. GoT is back :*) :+
Verwijderd schreef op 29 juli 2002 @ 10:06:
C++ is een superset van C, en daarin mogen een aantal dingen die in C niet mogen (variabelen hoeven niet perse allemaal bovenaan functies gedeclareerd te worden bv.).
Als je met C++ begint, is het vreselijk irritant om nog puur C te programmeren (zeker als je net gewend bent geraakt aan iostreams).

Of je moet er voor kiezen geen puur C te willen programmeren, en gewoon C++ gaan programmeren. Het voordeel is dan dat een hoop dingen mogen die het programmeer-leven een stuk makkelijker maken.

Of je zou moeten beginnen met C. Dan is het soms wat ingewikkelder dan in C++, maar daarom is C++ ook ontwikkeld (naast object orientatie natuurlijk).
okee, duidelijke taal.. ik wil dus wel 'puur' C leren programmeren.. en uiteraard ook C++..
aangezien C++ een superset is van C, is het dus (voor zover ik begrijp) relatief eenvoudig over te stappen van C naar C++, in tegenstelling tot een tegenovergestelde situatie (C++ naar C)?

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Verwijderd schreef op 30 juli 2002 @ 20:11:
woooeeei.. GoT is back :*) :+

[...]

okee, duidelijke taal.. ik wil dus wel 'puur' C leren programmeren.. en uiteraard ook C++..
aangezien C++ een superset is van C, is het dus (voor zover ik begrijp) relatief eenvoudig over te stappen van C naar C++, in tegenstelling tot een tegenovergestelde situatie (C++ naar C)?
Dat is logisch. C++ bevat meer constructies dan C, oftewel als je iets begrijpt in C++ zal je het ook wel begrijpen in C. Andersom is dit niet het geval.
Als jij zegt dat je wat met linux/unix wil hacken dan is het idd niet onverstandig om C te leren. Je zal daar namelijk meer aan hebben dan dat je C++ leert en erachter komt dat je heel veel technieken niet kan gebruiken wanneer je C moet programmeren.

Voor nieuwe programmatuur zou ik absoluut C++ aanraden. Er zijn hier al vele redenen genoemd waarom de taal zoveel aanhang heeft tegenwoordig, en terecht.

Het is dat de search het nu (nog) niet doet, maar in het verleden zijn er genoeg discussies op GoT geweest over C vs C++ en uit die topics zul je genoeg informatie kunnen halen om een keuze te maken.

offtopic:
dit was stiekem ook een testje :P

  • -RenE-
  • Registratie: September 2001
  • Laatst online: 31-08 13:03
op jouw vraag is geen eenduidig antwoord te geven. C++ is bedoelt voor het programmeren met een ander design paradigma dan C, nl. object-georienteerd i.p.v. procedureel. Elk van deze paradigma's heeft zijn voor en nadelen voor het oplossen van verschillende problemen.

Over het algemeen kun je het volgende stellen:

C++
- enhanced C
- uitgebreidere libraries
- object-georienteerd; het concept van object-georienteerd programmeren is lastiger te doorgronden dan procedureel programmeren
- marketing: C++ is een mode taal; iedereen roept dat dit het beste is

C
- procedureel; echter via objective-C is (een soort van) object-georienteerd programmeren mogelijk
- sneller dan C++
- op een lager niveau dan c++ (dichter op de hardware)
- eenvoudiger te leren
- betere compatibiliteit: Ansi-C werkt op elk platform
- veel besturingssytemen zijn in C geprogrammeerd

Verwijderd

Topicstarter
-RenE- schreef op 30 juli 2002 @ 21:36:
Over het algemeen kun je het volgende stellen:

C++
- object-georienteerd; het concept van object-georienteerd programmeren is lastiger te doorgronden dan procedureel programmeren
- marketing: C++ is een mode taal; iedereen roept dat dit het beste is

C
- sneller dan C++
- op een lager niveau dan C++ (dichter op de hardware)
- eenvoudiger te leren
- betere compatibiliteit: Ansi-C werkt op elk platform
- veel besturingssytemen zijn in C geprogrammeerd
ah... goede punten.. :*)
mm.. ben er wel uit denk ik... het wordt C..

thnx voor de replies.. :> :P

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Wat voor programmeer ervaringen heb je op dit moment? Persoonlijk zou ik niemand laten beginnen met c/c++. Dit zijn cryptische talen waarin je de essentie van programmeren veel minder snel onder de knie krijgt. Ik zou zelf pascal/modula aanraden omdat veel makkelijkere talen zijn om in te stappen, en als je meteen op de oo toer wil dan zou ik gaan voor java of voor c#.

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Hmm zo zou ik het niet noemen, maar ok.
- uitgebreidere libraries
Alleen de std lib eigenlijk
- object-georienteerd; het concept van object-georienteerd programmeren is lastiger te doorgronden dan procedureel programmeren
Je hoeft niet perse OO te proggen in C++
- marketing: C++ is een mode taal; iedereen roept dat dit het beste is
Compleet onzin
C
- procedureel; echter via objective-C is (een soort van) object-georienteerd programmeren mogelijk
C++ kan je ook procedureel gebruiken. Wat wil je nou precies, wel of geen OO?
- sneller dan C++
Puh-leeze... hoe lang blijven mensen dit denken. Compleet onzin.
- op een lager niveau dan c++ (dichter op de hardware)
Ook onzin, kan hetzelfde
- eenvoudiger te leren
Ja dat misschien wel.
- betere compatibiliteit: Ansi-C werkt op elk platform
Ik neem aan dat je gewoon voor een PC programeren wil, en geen legacy system ofzo.
- veel besturingssytemen zijn in C geprogrammeerd
Dus? Dat is alleen maar zodat ze op oude systemen werken. En ga je dan een OS schrijven?

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Ik snap ook niet dat mensen zich zo druk blijven maken als je gebruik kan maken van super interessante onderdelen van talen zoals garbage collecition, safe language (er kunnen dus onmogelijk fouten niet opgemerkt worden) en daarnaast kan je ook nog eens van uitermate fraaie oo constructies gebruik maken zoals bv polymorfisme, of generics (java heeft op dit moment generics compiler en binnenkort komt dit ook in c#)

Ik gebruik op dit moment constructies waarvan ik weet dat ze veel sneller op de ouderwetse manier gemaakt kunnen worden. Maar het is fantastisch om vanuit een volledig anders perspectief (op dit moment vaak vanuit een functioneel perspectief) naar je software te kijken. Hierdoor gaan er werelden voor je open, en niet door een paar extra instructies per seconde. Daarnaast gaan de computers ook steeds sneller, dus who cares dat dat programma niet super snel is?

[ Voor 0% gewijzigd door Alarmnummer op 30-07-2002 22:32 . Reden: aanvulling ]


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Buiten dat is de uiteindelijke code die uit je compiler komt rollen vaak helemaal niet zo traag. Compilers optimizen "best goed"

Verwijderd

Topicstarter
Alarmnummer schreef op 30 juli 2002 @ 22:23:
Wat voor programmeer ervaringen heb je op dit moment? Persoonlijk zou ik niemand laten beginnen met c/c++. Dit zijn cryptische talen waarin je de essentie van programmeren veel minder snel onder de knie krijgt. Ik zou zelf pascal/modula aanraden omdat veel makkelijkere talen zijn om in te stappen, en als je meteen op de oo toer wil dan zou ik gaan voor java of voor c#.
lees een stukje naar boven: ik heb reeds ervaring met diverse BASICS en een aantal scripting languages.. ik heb dus al een redelijke ervaring, echter nog niet met C of C++ (of welke object georienteerde taal dan ook).. C# en pascal? out of the question (don't you dare to ask why) !!! :+ ;)
C++ kan je ook procedureel gebruiken. Wat wil je nou precies, wel of geen OO?
ikke? ...allebei :+
Ik neem aan dat je gewoon voor een PC programeren wil, en geen legacy system ofzo.
eehm.. voorlopig wel ja..
Dus? Dat is alleen maar zodat ze op oude systemen werken. En ga je dan een OS schrijven?
als dat zou kunnen.. hehe.. misschien.. ooit.. 8)

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Verwijderd schreef op 30 juli 2002 @ 23:14:
lees een stukje naar boven: ik heb reeds ervaring met diverse BASICS en een aantal scripting languages.. ik heb dus al een redelijke ervaring
Ik zou persoonlijk redelijk verwijderen. Ik heb redelijke ervaring en ik doe het al vrij lang.
echter nog niet met C of C++ (of welke object georienteerde taal dan ook).. C# en pascal? out of the question (don't you dare to ask why) !!! :+ ;)
Wat is er mis met pascal? Het gaat erom of je goed imperatief leert proggen en dat kan je met pascal uitermate goed. Pascal is ontwikkeld om mensen te leren programmeren.

En wat is er mis met c#? Als jij als argument wilt aanvoeren dat het van ms is dan zal ik dat met veel plezier even onderuit halen.

1) c# wordt voor andere platformen dan windows ook ontwikkeld, zie mono project, dus als je graag voor andere platformen wilt proggen moet dit niet al te veel problemen opleveren.

2) als microsoft dan slecht is ook een vrij slecht uitgangspunt. Microsoft die heeft veel bagger gemaakt en zal dat ongetwijfeld ook nog vele jaren blijven doen, maar ik heb nu ook .NET op mijn bak staan en ben zo nu en dan even aan het spelen met c# en het zit erugh mooi in elkaar. (java en c# zijn beetje neef en nicht van elkaar... zal maar geen cloon discussie beginnen :)

Je zou eventueel ook kunnen gaan voor Java. Ik programmeer er nu al een aantal jaren in, en ik vind het een erg schone taal. Ik heb hiervoor veel in c en pascal geprogged (en nog een beetje c++), maar ik zou nooit meer met zoiets klungeligs willen werken als dat. Java is qua runtime veel veiliger dan die talen, en is veel schoner en simpeler dan c++)

Als je goed object georienteerd programmeren wilt leren, dan raad ik je java of c# aan. En als je eerst procedureel wilt leren programmeren dan raad ik je pascal aan. (Eventueel zou je het ook wel in java of c# kunnen doen, maar de meeste mensen laten zich misleiden door al die api`s die aanwezig zijn en prutsen daardoor er maar wat op los).

Trouwens op veel hts`en en universiteiten wordt ook java gebruikt als taal om mensen te leren programmeren en daar zullen ze wel een reden voor hebben. (Dit is niet als flame bedoelt tov c#, dus geen discussie aub hierover ;) )

Verwijderd

Topicstarter
Alarmnummer schreef op 30 juli 2002 @ 23:36:
Ik zou persoonlijk redelijk verwijderen. Ik heb redelijke ervaring en ik doe het al vrij lang.
goh.. let niet zo op de details joh.. :> :P
Wat is er mis met pascal? Het gaat erom of je goed imperatief leert proggen en dat kan je met pascal uitermate goed. Pascal is ontwikkeld om mensen te leren programmeren.

En wat is er mis met c#? Als jij als argument wilt aanvoeren dat het van ms is dan zal ik dat met veel plezier even onderuit halen.

1) c# wordt voor andere platformen dan windows ook ontwikkeld, zie mono project, dus als je graag voor andere platformen wilt proggen moet dit niet al te veel problemen opleveren.

2) als microsoft dan slecht is ook een vrij slecht uitgangspunt. Microsoft die heeft veel bagger gemaakt, maar ik heb nu ook .NET op mijn bak staan en ben zo nu en dan even aan het spelen met c# en het zit erugh mooi in elkaar. (java en c# zijn beetje neef en nicht van elkaar... zal maar geen cloon discussie beginnen :)
zoals ik zei: don't ask.. ga ik niet over in discussie.. ;)
Je zou eventueel ook kunnen gaan voor Java. Ik programmeer er nu al een aantal jaren in, en ik vind het een erg schone taal. Ik heb hiervoor veel in c en pascal geprogged (en nog een beetje c++), maar ik zou nooit meer met zoiets klungeligs willen werken als dat. Java is qua runtime veel veiliger dan die talen, en is veel schoner en simpeler dan c++)

Als je goed object georienteerd programmeren wilt leren, dan raad ik je java of c# aan. En als je eerst procedureel wilt leren programmeren dan raad ik je pascal aan. (Eventueel zou je het ook wel in java of c# kunnen doen, maar de meeste mensen laten zich misleiden door al die api`s die aanwezig zijn en prutsen daardoor er maar wat op los).

Trouwens op veel hts`en en universiteiten wordt ook java gebruikt als taal om mensen te leren programmeren en daar zullen ze wel een reden voor hebben. (Dit is niet als flame bedoelt tov c#, dus geen discussie aub hierover ;) )
bedankt voor je advies, maar zoals ik zei: het gaat me hier alleen om C of C++, en niet om welke andere programmeertaal dan ook.. en ik heb overigens al een keuze gemaakt: C..

[ Voor 0% gewijzigd door Verwijderd op 30-07-2002 23:53 . Reden: aanvulling ]


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Het zal mij persoonlijk worst zijn wat je gaat programmeren, maar ik ben eerlijk gezegd wel geinteresseerd in je argumenten om c of c++ leren omdat het waarschijnlijk gaat om het stoerheidsgehalte of je hebt te veel van horen zeggen. Trouwen c deelverz van c++ dus je kan altijd eerst c leren en daarna c++ erbij leren.

Verwijderd

Topicstarter
stoerheidsgehalte of je heb te veel van horen zeggen.
...nee, geen van beiden.. ik heb meerdere talen 'bekeken', veel (echt veel) boeken doorgespit, sites bezocht en dus veeeeel gelezen.. ik heb er echt wel over nagedacht, het is niet 'zomaar' een beslissing om in C of C++ te gaan programmeren, het heeft niets met 'stoerheidsgehalte' of iets dergelijks te maken.. dat zou ontzettend stom zijn imho als dat daadwerkelijk zo zijn..

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Ik ga me niet mengen in allerlei kansloze discussies :+ , maar wilde wel even zeggen dat het mij geen moer uitmaakt wat je leert, zolang je maar verder kijkt dan je neus lang is. Kunnen programmeren in een taal is stap 1, conceptueel inzicht in een taal ligt een paar stappen verder.

Als je goed conceptueel inzicht hebt in 1 procedurele taal kan je je al snel erg goed redden in alle procedurele talen. Vaak is het dan meer een kwestie van libraries en conventies leren, dan dat je echt fundamenteel veel tijd moet steken in het leren van de taal.

Als je goed conceptueel inzicht hebt in 1 object georienteerde taal (of een taal die onder andere object georienteerde faciliteiten biedt), kan je je al snel erg goed redden in andere object georienteerde talen. Vaak is het dan meer een kwestie van libraries en conventies leren, dan dat je echt fundamenteel veel tijd moet steken in het leren van de taal.

Als je goed conceptueel inzicht hebt in 1 functionele taal (of een taal die onder andere functionele faciliteiten biedt), kan je je al snel erg goed redden in andere functionele talen. Vaak is het dan meer een kwestie van libraries en conventies leren, dan dat je echt fundamenteel veel tijd moet steken in het leren van de taal.

Zojuist heb je drie keer hetzelfde gelezen :+ . Dat is niet voor niets: het gaat niet om het leren van concrete talen, maar om het leren werken met paradigma's. Verschillen tussen talen in hetzelfde paradigma zijn vaak details waar je weinig moeite mee zult hebben.

Als ik je nu iets zou moeten aanraden hangt het vooral af van wat je wilt. Als je veel inzicht wilt krijgen in de lagere regionen van een computer, is C erg interessant. Ik zie C eigenlijk bijna als een soort platform onafhankelijk assembly en als daar je hart ligt: prima. Ik denk niet dat het in deze tijd erg productief zal zijn om vanalles in C te gaan programmeren, maar conceptueel kan je erg veel leren van C.

Als je een sexy taal wilt leren moet ik je toch sterk aanraden om in de richting van Java op het Java Platform of C# op .NET te gaan. Als je echter goed conceptueel inzicht hebt in C++ is deze stap erg klein en heb je eigenlijk alleen nog maar problemen met de gewenning aan de libraries die een platform biedt. Das de kern van mijn verhaal :) : als iemand beweert C++ goed te kennen, maar deze persoon moeilijkheden heeft met het leren van C# of Java, getuigt dat van heel weinig conceptueel inzicht. Hetzelfde geldt voor vrijwel alle andere overgangen.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Ik programmeer nu al weer heel wat jaartjes en en de laatste paar jaar (voornamelijk afgelopen jaar) is mijn kennis de lucht in geschoten. Ik heb zelf ook in heel wat talen zitten programmeren, en daarom weet ik waar ik over spreek. Ik was vroeger ook 'die hard' c programmeur en de rest vond ik maar niets. Ik ben daarna in aanraking gekomen met java, en ik vond het echt een minderwaardig snert taaltje.

Maar ik prog er nu al weer een paar jaar in, en ik kan niet anders zeggen dat het echt een veel mooiere taal is dan dat geklungel in (en ook in c++) met al die onnodige pointers ed. Ik zou echt gaan voor een modernere taal zoals c# of java omdat je je daar echt bezig kan houden met het oplossen van jouw probleem (dus maken wat jij leuk vind) ipv dat jij je tijd ook nog een keer moet verdoen met het oplossen van tekortkomingen aan de taal (of aan de runtime omgeving)..

Als je echt in c wilt leren proggen dan moet je dat zelf weten. Maar ik zou dit ouderwetse wanproduct weggooien en me bezighouden met iets moderners. Ik zal er verder ook maar over ophouden, want het is jouw keus en niet de mijne :)

Verwijderd

Topicstarter
mbravenboer schreef op 31 juli 2002 @ 00:30:
IAls je een sexy taal wilt leren moet ik je toch sterk aanraden om in de richting van Java op het Java Platform of C# op .NET te gaan.
*oren dichtstopt* :+

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Tja, dat moet je verder lekker zelf weten :+ . Mij boeit het echt niet wat jij gaat leren en of je de goede keuze maakt voour jouw situatie. Ik post hier niet van die kletsverhalen om zieltjes te winnen. Het zou jou echter wel moeten boeien :z .

Alles is leerzaam: C is leerzaam, C++ is leerzamen, Java is leerzaam. Maar waar liggen je interesses? Wat wil je er later mee gaan doen? Je 'argumenten' tegen Java, Pascal en C# lijken nogal subjectief, gebaseerd op FUD en in ieder geval niet inhoudelijk als ik je posts zo lees. Dat is misschien jammer.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
Je 'argumenten' tegen Java, Pascal en C# lijken nogal subjectief
eerm.. argumenten? ik heb helemaal geen argumenten genoemd.. ?? B) :P
ik heb alleen gezegd dat ik daarover niet in discussie ga.. :)

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

ik heb alleen gezegd dat ik daarover niet in discussie ga..
Afbeeldingslocatie: http://www.longhopes.org/files/donkey.JPG
;)

veel plezier ermee..

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
ik heb alleen gezegd dat ik daarover niet in discussie ga.. :)
Juist, dat zegt genoeg :D .

Overigens merkwaardig dat je een mening denkt te hebben over Java en C# (waarom wil je anders niet in discussie gaan op dit punt) terwijl je komt vragen wat voor taal je moet gaan leren en aangeeft 0.0 ervaring met OO te hebben :? .

Ik vind ezels trouwens een ondergewaardeerd diersoort :+

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
dat zegt genoeg? nee, dat doet het niet... in dit topic ging het mij puur om de talen C en C++, niet om andere talen.. leuk dat jullie vervolgens toch met java, pascal ed. aan komen zetten, maar dat interesseert me op dit moment even niets.. nogmaals: het gaat me om de 2 genoemde talen.. ik heb voor mijzelf reeds een paar maanden geleden de beslissing genomen dat het C of C++ wordt.. een beslissing waarover lang en goed is nagedacht, dat garandeer ik je... ik zie geen enkele reden om opnieuw na te gaan denken over andere talen als bijvoorbeeld java of pascal.. nergens voor nodig, aangezien ik dat een paar maanden geleden al uitgebreid heb gedaan... daar slaat dat 'daarover ga ik niet in discussie' dus op..

  • ritsjoena
  • Registratie: December 2001
  • Laatst online: 16-06-2024
Bij de migratie is klaarblijkelijk het berichtje waariop ik een reply had geschreven, maar niet meer kon doorsturen weggevallen 8)7. Maar hier alsnog:
Waarom zou je nu met een taal gaan beginnen die al aan het uitfaseren is? Waarom niet de opvolger, C#!? Lijkt me logischer.
Hoezo uitgefaseerd? En dan wel door C#.

Er zijn inmiddels meerdere potentiele opvolgers van C++ geweest (bv Java), maar nog geen heeft die status kunnen behalen. Nu probeert men (met name MS) C# door te duwen als opvolger voor C++. Ze doen dan ook alsof C# de opvolger is, maar dat valt nog te bezien. Het zit niet allemaal in de naam.

Een andere reden om niet te snel op een opvolger over te stappen is dat C en C++ inmiddels veelgebruikt zijn. Dit betekent dat als je de talen kent, je niet alleen zelf programma's kan schrijven, maar ook die van andere edditten of elementen eruit over kan nemen. En er is inmiddels veel in geschreven.

Als ik het goed heb ondersteunen de standaardcompilers voor UNIX en Linux (gcc) niet eens C# (als er al compilers zijn die dat wel doen), dus dan schiet je er nog niets mee op. Onder Windows wordt C# vooral aan hun .net technologie gehangen.Als de verwachtingen van MS uitkomen leren we C# mettertjid (jaren) wel. Voor nu zou ik zeggen C of C++ tenzij je specifieke redenen hebt om met C# te werken (of ht gewoon leuk vindt, maar dan hoef je het niet te vragen, maar gewoon gaan doen).

  • ritsjoena
  • Registratie: December 2001
  • Laatst online: 16-06-2024
Voor jouw lijkt me de keuze duidelijk (C), maar ik wil hier nog reageren op Alarmnummer:
omdat je je daar echt bezig kan houden met het oplossen van jouw probleem (dus maken wat jij leuk vind) ipv dat jij je tijd ook nog een keer moet verdoen met het oplossen van tekortkomingen aan de taal
Dit is een reden om uiteindelijk over te stappen op bv Java, daarentegen is dit ook de reden om met C, C++ te beginnen (zeker educatief gezien). Zo leer je namelijk wat je computer doet en ontwikkel je meer inzicht in de werking van je programma. Uiteindelijk moet je er rekening mee houden dat je in je leven meerder malen overstapt in de talen die je in praktijk het meest gebruikt (specifieke toepassingen daargelaten). Mijn advies is dan ook te beginnen in de talen die je het meest leren over hoe programmeren en computers in de praktijk werken (C, C++ in die volgorde). En pas dan over te stappen op nog hogere talen.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Ik kan me op zich wel vinden in jouw redenering omdat ik zelf ook c progger ben geweest, maar ik vind c een onnodig cryptische taal en als je toch low level bezig wil, dan zou ik pascal gebruiken om te leren programmeren, omdat de syntax een stuk helderder is.

Daarnaast heeft c geen safe running environment en kunnen er dus fouten in je programma ontstaan die je in principe niet of laat ontdekt. Als ik met java een array fout indexeer dan krijg ik een ArrayIndexOutOfBoundsException en c die draait leuk verder (pascal netzo). Een beginnende c programmeur die heeft veel meer moeilijkheden om fouten uit zijn programma te halen dan een java programmeur.

Verder vind ik de api`s van c ronduit slecht vergeleken met java, en die onnodige pointer logica dat is ook onnodig. Iemand die kan programmeren die kan zich daar een keer mee bezig houden, maar iemand die nog niet kan programmeren die mag zich best met abstractere zaken bezig houden en die hoeft niet te bitneuken zoals iedere c programmeur dat doet (moet toegeven dat zo nu en dan even bitneuken nog wel eens een keer leuk is ;) )

[ Voor 0% gewijzigd door Alarmnummer op 31-07-2002 10:34 . Reden: typo`s ]


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

[b][message=14557842,noline]ritsjoena schreef op 31 juli 2002 @
Als ik het goed heb ondersteunen de standaardcompilers voor UNIX en Linux (gcc) niet eens C# (als er al compilers zijn die dat wel doen), dus dan schiet je er nog niets mee op.
Het mono project is voor linux de manier om c# te draaien. Dus je zit niet aan windows vast.

  • ritsjoena
  • Registratie: December 2001
  • Laatst online: 16-06-2024
Pointers zijn juist leuk :D Ok, nu moet ik toegeven dat ik nooit problemen met pointers heb gehad, maar wel met simpeler geachte structuren. :9

  • ritsjoena
  • Registratie: December 2001
  • Laatst online: 16-06-2024
Alarmnummer schreef op 31 juli 2002 @ 10:33:
Ik kan me op zich wel vinden in jouw redenering omdat ik zelf ook c progger ben geweest, maar ik vind c een onnodig cryptische taal en als je toch low level bezig wil, dan zou ik pascal gebruiken om te leren programmeren, omdat de syntax een stuk helderder is.
Ik ben ooit, lang geleden, ook begonnen met Pascal (ok, ik had wat gespeeld met Basic en Logic). Het is een uitstekende taal om te leren programmeren, maar om iets zinnigs te kunnen doen moest ik toch overstappen op C. Beginnen/werken met C vereist een grotere discipline mbt netjes werken, maar het is verder geen slechte taal om mee te beginnen, zeker als je al enige programmeerervaring in bv Basic hebt, zoals de topicstarter. Dan voegt Pascal namelijk niet zoveel toe aan Basic+C om de tijd nog waard te zijn.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Dat pointers leuk zijn is een andere zaak, maar ze verhinderen een beginnen wel om zich met de meer basis zaken bezig te houden zoals functies,procedures, while/for lussen en if statements. Met pascal kan dit eenvoudig opgelost worden mbv het var keyword, maar met c zul je meteen met pointers moeten prutsen.

En daarnaast hebben grote bedrijven zoals sun en microsoft ingezien dat voor 90% van de applicaties pointers vrij onnodig zjn, omdat ze niet in java zitten (althans niet op die knullidge manier zoals) en ook nagenoeg niet in c# (als je wilt kan je wel met pointers prutsen geloof ik).

Daarnaast heeft c ook geen strings en booleans (zijn toch wel klassieke types die je nodig hebt). Het feit dat je meteen zit te klooien met een array van chars en een boolean simuleerd met een 0 en een 1 dat maakt het er niet duidelijker op.

C moet je gebruiken als je low level bezig wilt, of als je iemand echt de ins en outs wilt leren, maar om iemand te leren programmeren zou het vrij dom zijn om hem met c te laten programmeren.

  • ritsjoena
  • Registratie: December 2001
  • Laatst online: 16-06-2024
Alarmnummer schreef op 31 juli 2002 @ 10:52:
Dat pointers leuk zijn is een andere zaak, maar ze verhinderen een beginnen wel om zich met de meer basis zaken bezig te houden zoals functies,procedures, while/for lussen en if statements. Met pascal kan dit eenvoudig opgelost worden mbv het var keyword, maar met c zul je meteen met pointers moeten prutsen.
Klopt, maar een beginner kan zich mbt pointers beperken tot referencing en hoeft zich van de overige mogelijkheden geen gebruik te maken. Zoals ik al in mijn vorige reactie zei is Pascal de betere leren programmeren taal.
En daarnaast hebben grote bedrijven zoals sun en microsoft ingezien dat voor 90% van de applicaties pointers vrij onnodig zjn, omdat ze niet in java zitten (althans niet op die knullidge manier zoals) en ook nagenoeg niet in c# (als je wilt kan je wel met pointers prutsen geloof ik).
Moet toch eens kijken hoe ze het daar doen.
ALLES dat je met pointers kan IS op een andere manier op te lossen. Ik kan me heel goed voorstellen dat de taalontwikkelaars om pointers heen proberen te werken omdat de meeste mensen er problemen mee hebben. Doch intern werkt de computer nog steeds met pointers en dat is dan ook het snelst. Nu kun je wel zeggen dat de computers tegenwoordig sneller zijn, maar de applicaties worden ook steeds zwaarder!
Daarnaast heeft c ook geen strings en booleans (zijn toch wel klassieke types die je nodig hebt). Het feit dat je meteen zit te klooien met een array van chars en een boolean simuleerd met een 0 en een 1 dat maakt het er niet duidelijker op.
De boolean mis ik inderdaad ook en die staat dan ook in mijn eigen stdlib.
Strings in C zijn even wennen maar als je ze door hebt en combineert met pointers, zijn ze een stuk handiger dan de Pascal strings.
C moet je gebruiken als je low level bezig wilt, of als je iemand echt de ins en outs wilt leren, maar om iemand te leren programmeren zou het vrij dom zijn om hem met c te laten programmeren.
C vereist meer van de programmeur en Pascal is veel beter geschikt als leertaal, daar zijn we het wel over eens. Doch iemand met een beetje Basic ervaring en die een beetje zorgvuldig kan werken kan met goede literatuur/hulp (bv Kernighan and Ritchie) gerust met C beginnen.


Edit:ps
Dat C geen boolean bevat komt doordat je die in principe niet nodig hebt voor de taal. Ze hebben zich met C proberen te beperken tot wat je echt nodig hebt (voor een goede taal), zodat de programmeur vrij is om te doen wat hij wil.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Mensen hebben er problemen mee omdat mensen fouten maken en een pointerfout uit je applicatie halen is een drama, omdat je hem niet meteen opmerkt. Verder heb je met java geen zichbare pointers, maar alles is in principe een pointer.

[java]
Persoon p = new Persoon();
p.setLeeftijd(20);

[c++]
Persoon *p = new Persoon();
p->setLeeftijd(20);

Zoals je ziet hoef je met java geen pointers te noteren, maar alles is een pointer. Daarnaast is pointer rekenen ook vrij onlogisch omdat je dus niet kan garanderen dat de plek waar je terecht komt van het juiste type is.

En als je dan toch genoeg weet van procedurele talen, dan zou ik dus voor een oo taal gaan. Ik zou je dan weer zwaar adviseren om je niet bezig te houden met c++, maar met java of c# omdat dit niet zo`n puinzooi is als c++ en beter is ontwerpen door oa interfaces ed.

Een taal moet een hulpmiddel zijn om jouw ideeen te kunnnen uitvoeren, en dat er nog eens een keer een pc aan vast zit die alles moet uitvoeren is handig, maar daar wil ik mijn ontwerp niet op aanpassen.

  • -RenE-
  • Registratie: September 2001
  • Laatst online: 31-08 13:03
Zoijar schreef op 30 juli 2002 @ 22:24:
- object-georienteerd; het concept van object-georienteerd programmeren is lastiger te doorgronden dan procedureel programmeren

Je hoeft niet perse OO te proggen in C++
[...]
Dan is het dus ook geen C++, maar C!
- sneller dan C++

Compleet onzin
[...]
Dat is zeer zeker geen onzin. De beste schaakprogramma's, waarbij snelheid zeer belangrijk is, worden in C (of assembler) geschreven en niet in C++.

Ik ben het met je eens dat C++ net zo snel kan zijn als C, maar als je C++ gebruikt waar het voor is gemaakt -nl object-georienteerd programmeren en dus niet procedureel- dan zal C++ langzamer zijn dan C. Het verschil hoeft niet groot te zijn, maar is er wel.

Overigens is C++ IMHO een betere taal voor grote software projecten. Dit met name door de mogelijkheid van het hergebruiken van modules.

Verder denk ik dat als je serieus wil programmeren je JUIST
procedureel en OO moet leren denken. Pas dan kun je voor elk project de goede
taal kiezen en zit je niet vastgeroest in een gebied. C lijkt me dan de eerste taal om te leren omdat het beter aansluit bij de talen die hij al kent en voor de meeste mensen makkelijker te begrijpen is.

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Verwijderd schreef op 31 juli 2002 @ 01:48:
.. ik heb voor mijzelf reeds een paar maanden geleden de beslissing genomen dat het C of C++ wordt..
Maar dan niet de keuze kunnen maken tussen C en C++ en daar de verschillen en voordelen van weten maar wel weten dat je het wilt gaan doen nav intensief onderzoek vind ik gewoon.... tja lulkoek eigenlijk :9

  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 01-09 21:46

johnwoo

3S-GTE

Het verschil zit hem, naast het paradigma (alhoewel dit ook weer samenhangt) ook in de mate van abstractie. Bij C (en assembly al helemaal) pas jij je aan aan je computer, bij Java/C#/VB en C++ (in iets mindere mate) past je computer ( = de compiler/linker/VM/runtime) zich meer aan aan jou.
Persoonlijk vind ik het wel fijn om 'de taal van de computer' te kennen; maar voor het meeste werk pak ik toch nog steeds VB omdat dat lekker snel werkt.
Het is maar net wat je ermee wilt doen...

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


Verwijderd

Topicstarter
Glimi schreef op 31 juli 2002 @ 11:34:
Maar dan niet de keuze kunnen maken tussen C en C++ en daar de verschillen en voordelen van weten...
lees de eerste post nog eens heel goed..
Verwijderd schreef op 29 juli 2002 @ 09:37:
persoonlijk trekt C++ mij net even iets meer dan C, maar is het verstandig om C++ eerder dan C te leren?

ik zie bijvoorbeeld genoeg boeken om over te stappen van C naar C++, maar niet andersom..
speciaal voor jou leg ik het nog een keertje uit: ik wil beide talen leren.. het enige wat ik in principe wou weten is of het eenvoudig is om over te stappen van C++ naar C, aangezien C++ me iets meer trekt dan C.. er staat nergens dat ik de verschillen en voordelen niet weet, die zijn mij namelijk wel bekend, echt wel.. uit een aantal posts blijkt dat het eenvoudiger en 'verstandiger' is om te beginnen met C... goedzo, dat is het enige wat ik wilde weten.. het wordt dus C..

(goh, wat ben ik weer vriendelijk vandaag...)

  • -RenE-
  • Registratie: September 2001
  • Laatst online: 31-08 13:03
Alarmnummer schreef op 30 juli 2002 @ 23:36:
[...]
1) c# wordt voor andere platformen dan windows ook ontwikkeld, zie mono project, dus als je graag voor andere platformen wilt proggen moet dit niet al te veel problemen opleveren.
Dat is prachtig.

Ik heb net even geprobeerd de specificaties van C# te downloaden (http://msdn.microsoft.com...pgrade/Csharpdownload.asp)
en wat krijg ik: een EXE formaat. Het is toch waardeloos dat ik een windows only exe file moet runnen om de specificaties van een "platform neutrale" taal te kunnen bekijken! Toevallig draai ik nu Linux dus, al zou ik willen, kan ik niet eens de specificaties bekijken.

Dit soort praktijken doet mij nog het ergste vermoeden met betrekking tot de openheid van de C# standaard. Ik vrees dat de portability van code hiermee nog minder zal worden.

Verder denk ik dat het beter is om java met C# te vergelijken en niet C++ met C#. De eerste lijken om het eerste oog meer overeenkomsten te hebben dan de tweede.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Ik neem aan dat je anders even moet kijken bij het mono project, aangezien er wel meer mensen zijn die niet onder windows draaien. Ik heb zelf geen ervaring met mono omdat ik wel onder windows werk.

En ik ben het helemaal met je eens dat je c# en java beter met elkaar kan vergelijken dan c++ en c#. Er is laatst al een keer een topic gestart hierover. Je moet dan even zoeken naar c# java cloon.

Als je trouwens hier meer van wilt weten moet je even zoeken naar:
mbravenboer c# .net Dan moet je wel veel info tegenkomen.

[ Voor 0% gewijzigd door Alarmnummer op 31-07-2002 12:50 . Reden: typo`s ]


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
-RenE- schreef op 31 juli 2002 @ 12:14:
Dit soort praktijken doet mij nog het ergste vermoeden met betrekking tot de openheid van de C# standaard. Ik vrees dat de portability van code hiermee nog minder zal worden.
C# is een geregistreerde standaard bij de ECMA : http://www.ecma.ch/ecma1/STAND/ecma-334.htm
Verwijderd schreef op 31 juli 2002 @ 12:09:
lees de eerste post nog eens heel goed..
Oei! inderdaad, excuus daarvoor, maar vaagt dat mijn punt weg :?
speciaal voor jou leg ik het nog een keertje uit: ik wil beide talen leren.. het enige wat ik in principe wou weten is of het eenvoudig is om over te stappen van C++ naar C, aangezien C++ me iets meer trekt dan C.. er staat nergens dat ik de verschillen en voordelen niet weet, die zijn mij namelijk wel bekend, echt wel.. uit een aantal posts blijkt dat het eenvoudiger en 'verstandiger' is om te beginnen met C... goedzo, dat is het enige wat ik wilde weten.. het wordt dus C..

(goh, wat ben ik weer vriendelijk vandaag...)
Als je de verschillen en voordelen weet, dan kun je daaruit toch ook extraheren wat 'beter'/makkelijker/ed is om mee te beginnen, of zie ik dat nou verkeerd? Dat is het punt wat ik aan het maken en volgens mij staat dat nog steeds

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 21-08 17:14
Alarmnummer schreef op 31 juli 2002 @ 10:52:
[ C heeft ] ook geen strings en booleans (zijn toch wel klassieke types die je nodig hebt). Het feit dat je meteen zit te klooien met een array van chars en een boolean simuleerd met een 0 en een 1 dat maakt het er niet duidelijker op.
C heeft wel degelijk strings. Alleen is C geen OO-taal. Als je met een OO-achtergrond dus een string object verwacht is C een verassing. Kom je daarentegen vanuit assembly dan is de C aanpak (array van chars ) logisch.

Booleans daarentegen bestaan wel gewoon, zie _Bool (maar ze zijn pas 3 jaar oud in C). Dat je ze "nodig" hebt is natuurlijk onzin; geen enkele nieuwe CPU heeft directe ondersteuning voor single-bit variabelen. En toch werken die CPUs.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 10:45

Creepy

Tactical Espionage Splatterer

MSalters schreef op 31 juli 2002 @ 15:10:
[...]
C heeft wel degelijk strings. Alleen is C geen OO-taal. Als je met een OO-achtergrond dus een string object verwacht is C een verassing. Kom je daarentegen vanuit assembly dan is de C aanpak (array van chars ) logisch.

Booleans daarentegen bestaan wel gewoon, zie _Bool (maar ze zijn pas 3 jaar oud in C). Dat je ze "nodig" hebt is natuurlijk onzin; geen enkele nieuwe CPU heeft directe ondersteuning voor single-bit variabelen. En toch werken die CPUs.
En kom je vanaf een taal zoals pascal (heeft een string type, GEEN string object!) dan blijft de C aanpak ook nog vaag.

Naar mijn idee heeft C geen stringtype, maar ter "vervanging" kan een array van char's (of eigenlijk een pointer naar char) gebruikt worden.

in pascal kan je string1:=string2+string3 doen.. in C ook, maar dit geeft niet het goede resultaat, en een mem-leak (de originele ref. naar string1 ben je kwijt)

"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


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Ik zou toch met C++ beginnen gewoon. Maar het is jouw keuze. Waarom denk je dat ze bij mij op de universiteit met Java begonnen? C++ is een multi-paradigm taal, je kan gewoon eerst de procedurele aspecten leren als je dat wilt, en helemaal niet naar OO kijken. Maar je hoeft dan geen tijd te verspillen aan die vage C dingetjes. Bv idd met strings kan je gewoon std::string gebruiken wat veel natuurlijker werkt. En voor IO de streams, hoef je niet met printf te kloten enzo. De "ruis" is lager in C++ dan in C, en in Java nog lager dan in C++. Daarom kan je je beter focussen op de echte programmeer dingen, dan op de taal afhankelijke weetjes.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

MSalters schreef op 31 juli 2002 @ 15:10:
Booleans daarentegen bestaan wel gewoon, zie _Bool (maar ze zijn pas 3 jaar oud in C).
Volgens mij is een bool type niets anders dan een integer type en dat op veel plekken in de code ook nog een integer wordt geaccepteerd ipv een boolean, bv een ifstatement.

Wat er gebeurd is dat je het ifstatement die integer waarde laat interpreteren als een boolean. En dat is het gene wat zo slecht is, want een boolean is toch van een heel ander type dan een numerieke waarde. Jouw boolean in c is niet hetzelfde als een boolean in de meeste andere talen zoals: pascal, modula, java, c#, delphi.
Dat je ze "nodig" hebt is natuurlijk onzin; geen enkele nieuwe CPU heeft directe ondersteuning voor single-bit variabelen. En toch werken die CPUs.
Dat duidt misschien wel op een groot verschil tussen jouw en mij. Ik vind die cpu totaal niet relevant en het is eigelijk niets anders dan een dom stuk gereedschap die uiteindelijk mijn code uitvoert, en hoe hij dat doet is onbelangrijk. Wat ik wel erg belangrijk vind is dat ik veel ondersteuning kan krijgen vanuit de runtime en/of de compiler. Ik probeer met oa booleans een bepaalde typering ergens aan te geven, en dan moet ik mij daar bij het gebruiken ook aan houden.

Waarom dacht je anders dat types uitgevoerd zijn? Om jouw te helpen hoor, en niet de computer. Voor de computer is alles een 1 of een 0, en die zal het echt een worst zijn dat het een auto record is of een boolean. Die programmeer taal is er dus voor jouw en om jouw zo veel mogelijk te ondersteunen (door eventueel streng te zijn).

Verwijderd

axis schreef op 29 juli 2002 @ 10:03:
Waarom zou je nu met een taal gaan beginnen die al aan het uitfaseren is? Waarom niet de opvolger, C#!? Lijkt me logischer.
Bah, die MS propaganda ook altijd. Nothing personal, maar met dit soort uitspraken laat je zien dat je nog helemaal niks van programmeren snapt... C is niet dood, C is de basis van zowat alle unices in de wereld (dus ook MacOS X) en mijn Linux systeem bestaat voor 75% uit programma's die in C zijn geschreven (Gnome als desktop). C++ is net zomin dood. C# bestaat nog niet eens fatsoenlijk en heeft al helemaal geen status. En om het als opvolger neer te poten is net zoiets als zeggen dat ik de nieuwe Einstein ben. Come and get me, universiteiten, slechts $999/uur. Special offer because you are my friend. :9~. |:(.
Creepy schreef op 31 juli 2002 @ 15:14:
in pascal kan je string1:=string2+string3 doen.. in C ook, maar dit geeft niet het goede resultaat, en een mem-leak (de originele ref. naar string1 ben je kwijt)
Ja, zo ken ik er nog een. x = 10^2 geeft geen 100 in C/C++, ohwee, C/C++ is vast enorm klote. Dat operators anders zijn betekent niet dat de taal opeens onlogisch is. Dat is 't zelfde als zeggen dat MacOS X kut is vergeleken met Windows omdat de taakbalk boven zit in plaats van onder.

De taal werkt anders, maar dan is ie niet automatisch slechter.

Genoeg cynisme. ;). areana, gezien jouw linux interesse zou ik voor C gaan. Kerneldingen prog je nou eenmaal eerder in C en de meeste apps in linux zijn ook in linux geschreven, dus C is vaak een goed begin. C++ leren vanuit C is niet al te moeilijk, vooral niet als je al iets van OO ervaring hebt (GObject of java). :).

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 10:45

Creepy

Tactical Espionage Splatterer

Verwijderd schreef op 31 juli 2002 @ 20:54:
[...]

Ja, zo ken ik er nog een. x = 10^2 geeft geen 100 in C/C++, ohwee, C/C++ is vast enorm klote. Dat operators anders zijn betekent niet dat de taal opeens onlogisch is. Dat is 't zelfde als zeggen dat MacOS X kut is vergeleken met Windows omdat de taakbalk boven zit in plaats van onder.

De taal werkt anders, maar dan is ie niet automatisch slechter.
Wie heeft het hier over slechter???????????????????? Ik krijg het gevoel dat je je aangevallen voelt, omdat je veel in C programmeert???? Kan je alvast vertellen dat dat wat mij betreft niet zo is. Ik prog net zo makkelijk in C als in Pascal

Het gezever ala "Nee, C is beter..... nee Pascal is beter.. nee man.. java is beter...... blaat" ga ik echt niet aan beginnen hoor.. ben geen ego-trippende-super-l33t3-coole-puber-die-net-(insert willekeurige prog taal hier)-heeft-geleerd of een-echte-programmeur-klopt-code-in-fortran-figuur. ;)

Feit blijft dat een char[] of * char niet hetzelfde zijn als een native string type. In bijv pascal kan je ook een array van char's of een pointer naar een (array van) char maken, toch is er ook nog een string type. Ik heb het hier dus niet puur over syntactische verschillen alleen!

"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


Verwijderd

Creepy schreef op 31 juli 2002 @ 21:17:
[...]
Wie heeft het hier over slechter???????????????????? Ik krijg het gevoel dat je je aangevallen voelt, omdat je veel in C programmeert???? Kan je alvast vertellen dat dat wat mij betreft niet zo is. Ik prog net zo makkelijk in C als in Pascal
Hm, ik overdreef... sorry. :*.
Feit blijft dat een char[] of * char niet hetzelfde zijn als een native string type. In bijv pascal kan je ook een array van char's of een pointer naar een (array van) char maken, toch is er ook nog een string type. Ik heb het hier dus niet puur over syntactische verschillen alleen!
Hangt er (m.i.) maar net vanaf hoe je er gebruik van maakt.... pascal/c++: String string3 = String string1 + String string2 [ + String string3 ...]; C/glib: gchar *string3 = g_strconcat(gchar *string1, gchar *string2, [gchar *string3, ...] NULL); :P. Mijns inziens is C++ (of pascal, of wat dan ook) een uitbreiding op C die je ook in C zelf kan bereiken... GLib is daar een behoorlijk goed voorbeeld van.

Maargoed, nu doe ik het alweer - ik neuzel. :+.

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 21-08 17:14
Alarmnummer schreef op 31 juli 2002 @ 16:45:
[...]
Volgens mij is een bool type niets anders dan een integer type en dat op veel plekken in de code ook nog een integer wordt geaccepteerd ipv een boolean, bv een ifstatement.

Wat er gebeurd is dat je het ifstatement die integer waarde laat interpreteren als een boolean. En dat is het gene wat zo slecht is, want een boolean is toch van een heel ander type dan een numerieke waarde. Jouw boolean in c is niet hetzelfde als een boolean in de meeste andere talen zoals: pascal, modula, java, c#, delphi.
Om even bot te zijn, wat er volgens jou in C zit boeit niet. C heeft dus wel een boolean type, _Bool. Je had gelijk gehad voor 1999, toen C nog met ints moest werken.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

C99 now supports a boolean type _Bool and also bool via <stdbool.h>. Consider:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include &lt;stdio.h&gt;
int main()
{
    // _Bool can hold 0 or 1
    // _Bool is an unsigned integer type
    _Bool b = 1;
    struct xyz {
         _Bool mem : 1; // _Bool bitfields allowed
    };

    printf(&quot;%d\n&quot;, b); // 1
    b = 0;
    printf(&quot;%d\n&quot;, b); // 0

    _Bool *pb = &amp;b;
    // If the expression evaluates to 0, then it converts to _Bool as 0, else 1
    b = pb;
    printf(&quot;%d\n&quot;, b); // 1
    b = -1;
    printf(&quot;%d\n&quot;, b); // 1
    b = (pb == 0);
    printf(&quot;%d\n&quot;, b); // 0
    return 0;
}

// #define's bool, true, false, __bool_true_false_are_defined macros
// as _Bool, 1, 0, and 1 respectively
#include &lt;stdbool.h&gt;
void foo()
{
    int this = 99;
    int that = -99;
    bool b;
    if (this || that)
        b = true;
    else
        b = false;
}
source http://www.comeaucomputing.com/techtalk/c99/#bool

ziet er toch vrij interig uit, dus volgens mij moet int a=true+false; wel lukken. Dit betekend dat _Bool dus geen type is. Ik wist trouwens niet dat ze een remake hebben gedaan voor c, dit vind ik persoonlijk een erg goeie zaak.

[ Voor 0% gewijzigd door Alarmnummer op 01-08-2002 10:36 . Reden: quotes vergeten. ]


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Vroeger (turbo c 2.0) kon je trouwens dit schrijven:
float a= sin; //dus zonder argument en haakjes.
Nu staat in a het adres van de sinus functie. Kan dit nog steeds?

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Jupz, zover ik weet werken function pointers nog steeds in C en C++. Imho past het niet echt goed in het OO gebreuren en werkt het erg verwarrend om het pas en te onpas te gebruiken. :)

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Een functie meegeven als argument (functie is dan 1 first class citizen en er is dan sprake van een hogere orde functie) is uitermate handig. In java moet je het oplossen met een strategy design pattern, maar het zou handiger zijn om het in de taal zelf te stoppen.

Ik geloof dat ze met c# ook nagenoeg zo`n constructie hebben: delegate.

Hogere orde functies zijn erugh handig hoor :)

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Zoals alles vind ik eigenlijk: Gebruik het met mate. Ook een function pointer gebruikt een bepaalde mate van 'verwijzing naar een verwijzing' en wordt soms (zoals op de HvA) gebruikt ten overvloede. Op het laast weet je niet meer wat nou naar wat verwijst.

In java is het btw ook mogelijk dmv java.util.Reflection. Ik dacht dat je de method dan dmv een proxy kon invoken.

Verwijderd

Alarmnummer schreef op 01 augustus 2002 @ 10:34:
C99 now supports a boolean type _Bool and also bool via <stdbool.h>.

[..]

ziet er toch vrij interig uit, dus volgens mij moet int a=true+false; wel lukken. Dit betekend dat _Bool dus geen type is.
:+ Dit slaat op oorlog. Als je met booleans kunt rekenen is het geen type? Waarom mag bool a= true | false; wel, maar bool a= true + false; niet? (En wat is het verschil tussen die operaties...)

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Ik snap niet dat je dat zelf niet ziet :?

Je kan toch zelf wel nagaan dat een true+false toch nergens op slaat? De enigste reden dat jij er iets zinnigs van kan maken is dat jij weet dat de een true 1 is en false 0, dus 1+0 =1. Maar dit zijn alleen maar afspraken waar een programmeur in principe helemaal geen weet van mag hebben.

Die optelling zou niet toegestaan mogen worden, en dat is precies wat je met een type kan regelen. Daarmee kan je bepaalde operaties op basis van hun formele argument types afkeuren op basis de actuele argumenttypes. Aangezien je dat bij _BOOL dus niet kan doen, en een _BOOL dus een integer is, is _BOOL dus geen type zoals hij behoort te zijn.

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 10:45

Creepy

Tactical Espionage Splatterer

Verwijderd schreef op 01 augustus 2002 @ 13:09:
[...]

:+ Dit slaat op oorlog. Als je met booleans kunt rekenen is het geen type? Waarom mag bool a= true | false; wel, maar bool a= true + false; niet? (En wat is het verschil tussen die operaties...)
bool a = true + true.

Wat is a nu? 2? En is dat ook nog true dan?

Voordat erweer gedacht wordt dat ik de ene taal beter vindt dan de andere (zwaai zwaai Beelzebubu ;) ) wil ik even benadrukken dat dat NIET zo is.

Goed.. dat ben ik kwijt :P

In Pascal geeft dit een mooie compiler error:
code:
1
2
3
4
var blaat: boolean;
begin
       blaat:=true + false;
end;

De melding is dat deze operator (+) niet toegepast kan worden op het type (boolean).

Met _bool kan dit blijkbaar wel.

En om ff antwoord te geven op mijn eigen vraag:
Wel is het zo dat een _bool altijd 0 of 1 is. Dus _bool b = true + true + true levert op dat _bool b==true

Waarom _bool stiekum een int type kan wezen is omdat in C 0 gezien wordt als false, en al het andere als true (vandaar ook dat dat een _bool op 1 wordt gezet als deze NIET 0 is).

MI ben ik het met Alarmnummer eens, dat een _bool geen eigen type is, maar eigenlijk een int type, die op 0 staat, of op 1 wordt gezet als deze geen 0 is. Het komt wel erg dicht in de buurt van een boolean type.

"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


Verwijderd

Creepy schreef op 01 augustus 2002 @ 13:36:
[...]

bool a = true + true.

Wat is a nu? 2? En is dat ook nog true dan?
Iedereen die wat formele logica gehad heeft, weer dat een booleaanse "OR" gelijk is aan numeriek optellen, en dat de booleaanse "AND" gelijk is aan numeriek vermenigvuldigen.

Dus: bool a= true + false; is volledig equivalent met bool a= true | false;
en bool a= true * false; is volledig equivalent met bool a= true & false;
In Pascal geeft dit een mooie compiler error:

De melding is dat deze operator (+) niet toegepast kan worden op het type (boolean).

Met _bool kan dit blijkbaar wel.
Ja en? Dat betekent alleen dat C99 meer orthogonaliteit biedt dan Pascal, maar je kunt dit toch niet gebruiken als argument dat C99 geen bool type kent, terwijl de specs duidelijk zeggen dat er wel een eigen bool type is.
Waarom _bool stiekum een int type kan wezen is omdat in C 0 gezien wordt als false, en al het andere als true (vandaar ook dat dat een _bool op 1 wordt gezet als deze NIET 0 is).

MI ben ik het met Alarmnummer eens, dat een _bool geen eigen type is, maar eigenlijk een int type, die op 0 staat, of op 1 wordt gezet als deze geen 0 is. Het komt wel erg dicht in de buurt van een boolean type.
Wat je hier beschrijft is een boolean type, een binaire waarheidswaarde waar je binair mee kunt rekenen. Hoe deze door de compiler intern gerepresenteerd worden zal mij worst wezen.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

C staat er inderdaad om bekend dat het heel dicht op de hardware zit. In dat opzicht is misschien die _BOOL aanpak van hun ook toepasselijk. Maar in andere talen is het ongebruikelijk om op deze manier met waarden om te gaan.

Ik zou deze aanpak van _BOOL in andere talen verwerpelijk vinden omdat je dus operaties uitvoert op een type dat daar niet geschikt voor is, en als je dicht op de hardware zit dan is dit misschien gebruikelijk.

Ik denk dat we het daar beiden over eens zijn.

[edit]
float a = false*sin(true>4) :+

Verwijderd

Alarmnummer schreef op 01 augustus 2002 @ 14:06:
Ik zou deze aanpak van _BOOL in andere talen verwerpelijk vinden omdat je dus operaties uitvoert op een type dat daar niet geschikt voor is, en als je dicht op de hardware zit dan is dit misschien gebruikelijk.
Hoezo? C doet nooit bewerkingen op types die daar niet geschikt voor zijn, het type wordt altijd (automatisch) gecast naar een geschikt type.

Ik denk dat jij meer problemen hebt met twee designfeatures van C:
• (bijna) elke construct is een expressie (en heeft dus een rvalue).
• het default type is int (en er wordt dus standaard geupcast/downcast naar int).

En dan met name het 2e punt, jij verwacht het gedrag van een bondage-and-discipline taal bij het combineren van types in een expressie (maw. een foutmelding), terwijl C dan aan het casten slaat om er toch nog iets van te maken.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Verwijderd schreef op 01 augustus 2002 @ 15:14:
Hoezo? C doet nooit bewerkingen op types die daar niet geschikt voor zijn, het type wordt altijd (automatisch) gecast naar een geschikt type.
En dat slaat juist nergens op. Wiskundig gezien is een boolean een heel ander type dan een integer. De verzameling van boolean waarden = {true,false} en die van integer = {..-1,0,1,...} Zoals je ziet hebben ze geen enkel gemeenschappelijke waarde. En het casten van een boolean type is onmogelijk tenzij je afweet dat low level een boolean geintepreteerd wordt als een integer. C doet bewerking op een type die wiskundig gezien fout is, maar wordt geaccepteerd omdat de compiler weet dat hij een boolean ziet als een integer.
Ik denk dat jij meer problemen hebt met twee designfeatures van C:
• (bijna) elke construct is een expressie (en heeft dus een rvalue).
:? Volgens mij klopt dit niet. Expressies zijn er genoeg in c, maar lang niet alles is een expressie en daarom heeft ook niet alles een return type. Het enigste waar ik van afweet dat alles een type heeft zijn sommige functionele programmeer talen, maar in c heeft bv een statement verder geen return type. Ik snap verder ook niet wat dit met het boolean verhaal te maken heeft.
• het default type is int (en er wordt dus standaard geupcast/downcast naar int).
Aha, dus ik zou dan ook zo maar een string of record mogen casten naar een integer omdat dit een basis type is? Het is heel leuk voor c dat een integer ergens voor de meeste dingen gebruikt wordt. Maar je bent hierdoor te ruim met de typering van je expressies. Op zich kan dat heel handig zijn, maar fouten zijn heel lastig te detecteren.

Je kan dus kiezen voor een taal die ruim is met typeringen zodat sommige wiskundig foute dingen toch naar correcte types worden gecast. Hierdoor kan onduidelijkheid onstaan, en je kan minder strenge software schrijven omdat het type systeem te ruim is.

Of je kan kiezen voor een programmeer taal die streng is met zijn typering, en waarin iedere expressie wiskundig gezien correct is. Je verliest eventueel wat uitdrukking kracht, maar dat wordt gecompenseerd door een betere type ondersteuning van de taal.

Ik kies persoonlijk voor het laatste omdat ik eigelijk nooit lowlevel bezig ben en de computer een medium is geworden om allerlei ideeen in de praktijk te brengen. Ik verwacht zoveel mogelijk ondersteuning vanuit de taal als ik iets fout doe.
En dan met name het 2e punt, jij verwacht het gedrag van een bondage-and-discipline taal bij het combineren van types in een expressie (maw. een foutmelding), terwijl C dan aan het casten slaat om er toch nog iets van te maken.
Als ik iets doe wat die compiler een beetje onduidelijk vind, dan moet hij eruit knallen met een foutmelding en niet zelf aan het verhelpen gaan in de geest van 'dat zal hij wel bedoelt hebben'. Met c loop je het risico dat je een programmeer fout over het hoofd ziet omdat de compiler ruim is met het accepteren van types. Het probleem aan deze fouten is dat je ze vrij lastig kan opsporen. Je ontwikkeld door de loop van de tijd allerlei idiomen om correct hier mee om te gaan. Ik heb persoonlijk het boek 'de ten commandments for C programmers' niet gelezen, maar het schijnt dat de 1e 5 niets anders zijn om tekortkomingen aan het type systeem van c te compenseren.

Verwijderd

Begin met C dan pas C++, dat werkt volgens mij het beste...

Verwijderd

Topicstarter
CybErik: bedankt voor je reply, maar... als je goed had gelezen had je kunnen lezen dat ik al voor C heb gekozen.. ben vandaag begonnen met leren... ;)

Verwijderd

Hier een tip van iemand die is overgeschakeld ook vanuit o.a. BASIC.
Ik weet WEL een goed boek om te beginnen met C/C++:

Aan de slag met C++
Gertjan Laan
Academic Service
ISBN 90 395 1084 9
NUGI 852

Ik moest het hebben voor school. De eerste helft van het boek gaat over gewoon programmeren wat in structuur hetzelfde is als BASIC. De andere helft is een stuk abstracter en gaat over Object georienteerd (OO) programmeren. Ik verzeker je dat dit een heel fijn boek is, omdat het nederlandstalig is, goeie begrijpbare uitleg en sourcecode voorbeelden bevat. Al is de leercurve soms wel wat stijl, ikzelf heb verschillende hoofdstukken een paar keer vaker moeten lezen voor ik het begreep.
Ik kan nu (jaar of anderhalf later) al redelijk C++ programmeren (vind ik), dwz. ik kan al goeie audioapplicaties maken, ben nu bijvoorbeeld bezig met een audiogame via DirectX :) Dat is wel een heel verschil met wat BASIC kan! :D

En laat je als beginner niet al te druk maken over de verschillen in C/C++, het is nagenoeg hetzelfde, behalve dat je in C++ ook nog object georienteerd kan programmeren, wat in windows te vaak gedaan wordt. De meeste compilers zijn voor zover ik weet alleen maar C EN C++, dus het is niet erg om van beide te weten, zodat je ook andermans C code kunt hergebruiken bijvoorbeeld.

Mocht je niet in het bezit kunnen komen van illegale shit zoals Metroworks Codewarrior of Microsoft Visual Studio of Borland zooi, dan kun je altijd nog gratis complete compiler pakketten downloaden van bijvoorbeeld www.delorie.com/djgpp , www.bloodshed.net (Dev-C++). Daar moet je al een eind mee kunnen komen, al wil je voor de echt professionelere dingen die je in het begin nog helemaal niet nodig hebt toch liever de eerstgenoemde pakketten hebben.

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Verwijderd schreef op 01 augustus 2002 @ 21:54:
Hier een tip van iemand die is overgeschakeld ook vanuit o.a. BASIC.
Ik weet WEL een goed boek om te beginnen met C/C++:

Aan de slag met C++
Gertjan Laan
Academic Service
ISBN 90 395 1084 9
NUGI 852
Man dat boek is niets meer dan een regelrechte rip van z'n Java boek. Het behandeld net een beetje de syntax. Wat heb je daar nou aan? Geen patterns geen structures en vreselijke slechte vertaling van de engelse termen!
En die hoorcolleges van hem waren nog veeeel slechter

Verwijderd

Topicstarter
mmz.. ben niet zo te spreken over zijn boeken om eerlijk te zijn.. ik ben nu bezig met de volgende 2 boeken:

• De programmeertaal C (al kelley / ira pohl ) - uitgeverij Addison Wesley
• C leerboek (kenneth a. barclay) - uitgeverij Academic Service (oorspronkelijke titel is overigens 'ANSI C: problem solving and programming') - een iets moeilijker boek dan de bovenstaande, maar (voor zover ik daarover kan oordelen) wel een goeie...

:)

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Glimi schreef op 01 augustus 2002 @ 22:11:
[...]
Man dat boek is niets meer dan een regelrechte rip van z'n Java boek. Het behandeld net een beetje de syntax. Wat heb je daar nou aan?
Ik heb dat java boek eens ingezien en vond het inderdaad niet geweldig om er in de toekomst ook iets aan te hebben. Het dient alleen ter introductie.
Geen patterns
De meeste docenten die kijken je een beetje vreemd aan als je het woord pattern in de mond neemt. En een pattern is pas handig als je de taal begrijpt, en daarom ook onnodig bij een introductie.
en vreselijke slechte vertaling van de engelse termen!
nederlande vertaling van performance: performantie :+ (niet van hem trouwens, maar van een db boek van me).
En die hoorcolleges van hem waren nog veeeel slechter
De volgende keer tomaten meenemen dus B)

  • ritsjoena
  • Registratie: December 2001
  • Laatst online: 16-06-2024
Ik gebruik zelf Kernighan and Ritchie : C Handboek. Een zeer uitstekend boek door ontwikkelaars van de taal dat de basis heeft gevormd voor het opstellen voor het opstellen van ANSI C. Zelfs als je C al kent blijft het een aanrader, omdat het ook een uitstekend naslagwerk is.

Maar om weer even in te haken bij de off-topic discussie over Booleans.
Standaard C werkt in zijn if statements met de volgende boolean:
0 == FALSE
!= 0 == TRUE
Alle boolean types die hier in praktijk uitvloeien zijn hierop gebaseerd.
Het grote voordeel hiervan is dat de expressies in de statements eenvoudig kunnen blijven, je hoeft ze namelijk niet
meer te reduceren tot 1.
bv if (karakters_aanwezig) ipv
if (karakters_aanwezig != 0) of erger if (karakters_aanwezig/aantal_karakters_aanwezig)
waarbij karakters_aanwezig het aantal karakters in bv een string teruggeeft.

Ik ben het een beetje met je eens dat deze boolean definitie iets anders is dan je ergens anders tegenkomt (0 & 1)
doch het is wiskundig correct.
Verder kun je gewoon met booleans rekenen alsof het integers zijn, terwijl het ook voor booleans blijft kloppen.
Je kan je beperken tot de 0,1 definitie als je dat graag wilt en mentaal kun je gerust doen alsof C het ook zo doet. (of 0,42 als je liever wilt). Maar als je de integer definitie gebruikt blijken booleans ineens een stuk krachtiger te worden.

Nu nog iets over strings:
karakters zijn in C integers (ASCII waarden). Een string is dus een array van deze ASCII waarden. Het grote voordeel hiervan is dat computers nu met characters kunnen gaan rekenen (wat ze igv een aparte structuur in principe (zonder vertaalslag) niet zouden kunnen). (bv in functies als toupper, isalphnum etc)
Een ander voordeel van alles op dezelfde grondstructuur baseren is dat de taal ineens een stuk eenvoudiger wordt. In feite heb je alleen maar functies nodig die met deze basisstructuur (of de samengestelde varianten) hoeven te werken. Dit ipv alles 10 keer opnieuw te moeten doen.

Natuurlijk is dit iets waar je van moet houden. Als je liever op een hoger niveau werkt staat het je vrij om en taal te nemen die voor elke structuur zijn regels ingebouwd heeft. (en dus automatisch alles vertaald)
Maar het feit dat C dat niet (direct) doet maakt van C juist een enorm krachtige en toch simpele taal. (De taal legt maar een minimum vast en beperkt de programmeur daarmee minimaal)
Dit is dus zowel een voordeel als een nadeel en het is aan eenieder zelf om daar zijn/haar keus op te baseren.

  • MisterData
  • Registratie: September 2001
  • Laatst online: 26-08 21:52
Ik ben ook pas ent een maandje met C++ bezig, maar omdat ik daarvoor Java heb gedaan was de hele syntax en ook de manier van werken met OO me vrij snel duidelijk. Ik denk dat het niet veel uitmaakt of je nou C of C++ gaat leren. Met C maak je waarschijnlijk net iets sneller je eerste programma, maar als je het mij vraagt, moet je gewoon C++ doen. Voor C++ heb ik (voor de syntax) vooral de tutorial op www.cpptutorial.com ofzo gedaan, en toen heb ik een ebook over de Windows API gedownload op m'n Revo (en dat op vakantie gelezen B-)).

edit:

adres werkt dus niet, ben nog aant zoeken

  • MisterData
  • Registratie: September 2001
  • Laatst online: 26-08 21:52

Verwijderd

Shit, topic vergeten.
Alarmnummer schreef op 01 augustus 2002 @ 20:16:
En dat slaat juist nergens op. Wiskundig gezien is een boolean een heel ander type dan een integer. De verzameling van boolean waarden = {true,false} en die van integer = {..-1,0,1,...} Zoals je ziet hebben ze geen enkel gemeenschappelijke waarde.
Dat slaat juist wel op een heleboel. Wiskundig gezien is een boolean een numeriek type; en wel een type dat exact één binaire digit kan opslaan. Dat men die binaire waardes in programmeertalen representeert als false en true wil niet zeggen dat boolean daarom geen numeriek type is.
:? Volgens mij klopt dit niet. Expressies zijn er genoeg in c, maar lang niet alles is een expressie en daarom heeft ook niet alles een return type. Het enigste waar ik van afweet dat alles een type heeft zijn sommige functionele programmeer talen, maar in c heeft bv een statement verder geen return type. Ik snap verder ook niet wat dit met het boolean verhaal te maken heeft.
Fout. Elk statement, muv. control-statements en declaraties/definities, is een expressie in C. Het heeft met onze booleans te maken in die zin dat een boolean naar een int gecast kan worden terwijl een (onervaren) programmeur dat niet verwacht.
Aha, dus ik zou dan ook zo maar een string of record mogen casten naar een integer omdat dit een basis type is? Het is heel leuk voor c dat een integer ergens voor de meeste dingen gebruikt wordt. Maar je bent hierdoor te ruim met de typering van je expressies. Op zich kan dat heel handig zijn, maar fouten zijn heel lastig te detecteren.
Je bent niet te ruim, je bent gewoon ruim. Dat is nu net het verschil tussen een bondage-and-discipline taal en een language-of-choice. Een B&D taal dwingt je tot het programmeren volgens een bepaalde stijl of methodiek, die door de ontwikkelaar van de taal als zaligmakend getypeerd wordt.
Je kan dus kiezen voor een taal die ruim is met typeringen zodat sommige wiskundig foute dingen toch naar correcte types worden gecast.
Nonsense. Rekenen met booleans, pointers en what-have-you is niet wiskundig incorrect. Er bestaan meer algebra's dan jij of ik kunt opnoemen, en een voorbeeldje van een hele bekende algebra is nu juist de booleaanse algebra...
Of je kan kiezen voor een programmeer taal die streng is met zijn typering, en waarin iedere expressie wiskundig gezien correct is. Je verliest eventueel wat uitdrukking kracht, maar dat wordt gecompenseerd door een betere type ondersteuning van de taal.
Dit is het kritieke punt. De ontwikkelaar van een B&D-taal kiest er dus bewust voor zijn taal te "castreren" zodat mensen in zijn optiek "netjes programmeren". Bijna alle B&D talen beginnen dan ook hun bestaan als talen voor onderwijs-doeleinden, en zijn (in hun oorspronkelijke vorm) van weinig practisch nut (pascal is een goed voorbeeld).

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
mietje: Fout. Elk statement, muv. control-statements en declaraties/definities, is een expressie in C. Het heeft met onze booleans te maken in die zin dat een boolean naar een int gecast kan worden terwijl een (onervaren) programmeur dat niet verwacht.
Fout? Dat vind ik wat sterk uitgedrukt.

Je zegt: "Elk statement, muv. control-statements en declaraties/definities, is een expressie in C.". Eerlijk gezegd ken ik geeneen statement in C die een expressie is. Statements zijn namelijk geen expressies. Expressies (zoals een methode aanroep of een vermenigvuldiging) kan je wel gebruiken als een statement: een statement expression. 1 van de statements is dus een statement expression. Expressies worden zo 'geinjecteerd' in statements en absoluut niet andersom (statements als expressies dus). Hooguit kan je aanvoeren dat de verzameling expressies erg groot is: prima, maar dat komt voornamelijk door het grote aantal operatoren.

Hetzelfde zie je terug in alle talen die stevig lenen van C: C++, C#, Java enz. C heeft geen veel ruimer gebrip van expressie dan bijvoorbeeld Java. Als je vind dat bijna alles in C een expressie is, kan je dit ook vinden over bijna elke veel gebruikte imperatieve taal.

Er zijn talen waar er een mindere scheiding is tussen statements en expressies (die in C dus vrij groot is). Zo is er in C bijvoorbeeld een aparte syntax voor een conditionele expressie en een aparte syntax voor een if-then-else constructie. Als C als visie zou hebben dat alles een expressie is, zou je toch minstens verwachten dat dat verschil niet aanwezig is.

Het meest extreem zie je een volledig opheffing van wat voor scheiding dan ook in functionele talen (Haskell, Clean) of talen die daar veel van we hebben (Stratego bijv). In functionele talen is alles een functie en het gebruik van de term 'alles' is hier een stuk beter op zijn plaats dan in je bewering dat in C alles een expressie is.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Verwijderd schreef op 05 augustus 2002 @ 18:45:
Dat slaat juist wel op een heleboel. Wiskundig gezien is een boolean een numeriek type; en wel een type dat exact één binaire digit kan opslaan.
Wiskundig gezien is een boolean dus geen numerieke waarde. Maar toevallig gaan de meeste cpu`s er zo mee om, omdat zij werken met bits/bytes. Logisch gezien is een boolean dus een true of een false, en niet een 1 of een 0. In de (normale) logica. is deze uitspraak fout: 1 and true, omdat de and operator alleen is gedefinieerd voor bools.
Dat men die binaire waardes in programmeertalen representeert als false en true wil niet zeggen dat boolean daarom geen numeriek type is.
Jij gaat precies de verkeerde kant op. Dat de boolean door de cpu wordt gezien als een bit, wil niet zeggen dat een boolean ook een numeriek type is. In de logica wordt over het algemeen heel duidelijk een onderscheid aangebracht tussen numerieke en boolean waardes.
Fout. Elk statement, muv. control-statements en declaraties/definities, is een expressie in C. Het heeft met onze booleans te maken in die zin dat een boolean naar een int gecast kan worden terwijl een (onervaren) programmeur dat niet verwacht.
Ik denk dat we nu een beetje op een welles nietes verhaal uitkomen. In c wordt een heel duidelijk onderscheid aangebracht tussen expressies en statements (pak maar eens een syntax beschrijving erbij). Alleen uit de naamgeving van de producties zou je kunnen afleiden dat je dus statements en expressies hebt. Verder hebben statements in c ook geen type, dus geven ze geen waarde terug waar iets meegedaan kan worden. Ik ben ze namelijk nog nooit tegen gekomen in een expressie, dus: int x = 10 + if(true){..};
Je bent niet te ruim, je bent gewoon ruim. Dat is nu net het verschil tussen een bondage-and-discipline taal en een language-of-choice. Een B&D taal dwingt je tot het programmeren volgens een bepaalde stijl of methodiek, die door de ontwikkelaar van de taal als zaligmakend getypeerd wordt.
Als je een api ontwikkeld dan zet je een contract op tussen ontwerper en gebruiker van de api. Als de api zegt dat je een boolean moet meesturen, dan mag je geen integer meesturen, omdat je dan het contract verbreekt. Mbv zo`n b&d taal kan jij dat contract beter opdwingen en vroegtijdig dmv compile fouten een error opwerpen dat het contract verbroken is. Ik vind zo`n contract handig om mee te werken omdat dit mij veel tijd bespaard en dingen niet verkeerd geintepreteerd worden en je dus zelf expliciet een coersion moet maken. Ik neem aan dat je verder ook geen gebruikt maakt van dbc? Zijn ook van die zaligmakende technieken die hun nut steeds meer bewijzen, puur om iemand zich nog beter aan zijn contract te laten houden.
Nonsense. Rekenen met booleans, pointers en what-have-you is niet wiskundig incorrect. Er bestaan meer algebra's dan jij of ik kunt opnoemen, en een voorbeeldje van een hele bekende algebra is nu juist de booleaanse algebra...
Dat ligt er maar net aan op welke manier je er tegen aankijkt. Als je bv een electronicaman vraagt dan zal hij het zien als een bit(reeks), maar als je het een logicus vraagt dan zal hij een boolean als een true, false waarde zien. En als je aan een logicus het volgende voorlegt a=10+true dan zal hij zeggen dat er hier een typefout is opgetreden (dus wiskundig foute uitspraak). Ik heb verder in de klassieke logica`s (oa propositie en predicaten) ook nog nooit een bit als boolean geintepreteerd gezien, alleen als je meer richting hardware gaat zul je dit meer tegenkomen.
Dit is het kritieke punt. De ontwikkelaar van een B&D-taal kiest er dus bewust voor zijn taal te "castreren" zodat mensen in zijn optiek "netjes programmeren". Bijna alle B&D talen beginnen dan ook hun bestaan als talen voor onderwijs-doeleinden, en zijn (in hun oorspronkelijke vorm) van weinig practisch nut (pascal is een goed voorbeeld).
Zoals ik boven al hebt vermeld, vind ik dit geen castreren, maar een hulpmiddel om fouten op te lossen omdat er iets gebeurt wat schijnbaar de bedoeling niet was. En verder zijn imperatieve b&d talen zoals java, c#, delphi toch vrij bekend, er bestaan schijnbaar nog meer talen dan c.

Verwijderd

Alarmnummer schreef op 05 augustus 2002 @ 20:57:
Wiskundig gezien is een boolean dus geen numerieke waarde. Maar toevallig gaan de meeste cpu`s er zo mee om, omdat zij werken met bits/bytes. Logisch gezien is een boolean dus een true of een false, en niet een 1 of een 0. In de (normale) logica. is deze uitspraak fout: 1 and true, omdat de and operator alleen is gedefinieerd voor bools.
Nu potverdorie, lees eens wat ik schrijf. In de wiskunde is een boolean een numerieke waarde, en er bestaat een complete algebra om met die waardes te rekenen: boolse algebra. Doe eens een google op boolean algebra en lees enkele van de meer dan 106000 hits...

<edit>
deze link is relevant en duidelijk, je ziet in een oogopslag hoe er met logische waardes gerekend wordt.
</edit>
Verder hebben statements in c ook geen type, dus geven ze geen waarde terug waar iets meegedaan kan worden. Ik ben ze namelijk nog nooit tegen gekomen in een expressie, dus: int x = 10 + if(true){..};
If is dus een control-statement. Statements als x= 3 + 5; gedragen zich als expressies in C. Voor de duidelijkheid, de eigenlijke expressie is "3 + 5", maar het resultaat van die expressie wordt door het statement heen gepropageerd zodat dingen als y= x= 3 + 5; mogelijk zijn. Dat kan alleen als het statement "x= 3 + 5" als een expressie wordt geevalueerd.
Als je een api ontwikkeld dan zet je een contract op tussen ontwerper en gebruiker van de api. Als de api zegt dat je een boolean moet meesturen, dan mag je geen integer meesturen, omdat je dan het contract verbreekt. Mbv zo`n b&d taal kan jij dat contract beter opdwingen en vroegtijdig dmv compile fouten een error opwerpen dat het contract verbroken is.
Maar waarom nu toch? Het is zuiver een (taal)conventie of het contract wel gebroken is. Als de taalconventie is dat een integer naar een boolean gedowncast kan worden, dan is er geen breech-of-contract. Je redeneert dus vanuit jouw favoriete taal, en overal waarin C verschilt van het bondage-gedrag van jouw taal zie jij een fout in het design van C. Dat is natuurlijk niet zo, het zijn gewoon talen die ontworpen zijn met een verschillend doel voor ogen: net als in het werkelijke leven, is de docent voor de klas vaak strenger en conservatiever dan de baas op het werk.

[ Voor 0% gewijzigd door Verwijderd op 05-08-2002 23:59 . Reden: link toegevoegd ]


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 21-08 17:14
Verwijderd schreef op 05 augustus 2002 @ 23:35:
[...]
Statements als x= 3 + 5; gedragen zich als expressies in C. Voor de duidelijkheid, de eigenlijke expressie is "3 + 5", maar het resultaat van die expressie wordt door het statement heen gepropageerd zodat dingen als y= x= 3 + 5; mogelijk zijn. Dat kan alleen als het statement "x= 3 + 5" als een expressie wordt geevalueerd.
Nee, een statement als x= 3 + 5; gedraagt zich niet als expressie. Een expressie gevolgd door een ; is een statement. x=5+3 /*geen ; */ is dus een expressie, net zoals x en 5+3 en 5.

De exacte regels waarom in y=x=5+3 zowel x als y 8 worden verschillen lichtelijk tussen C en C++ (o.a. omdat in C++ x en y objecten kunnen zijn, met user-defined operator=), maar geen van beide werkt precies zoals je beschrijft. In C is int a[x=3+5]; iirc een legaal non-statement die de expressie evengoed evalueert, en de waarde aan x toewijst. Zonder de x is het triviaal. Dus voor expressie-evaluatie is een statement niet verplicht.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Verwijderd schreef op 05 augustus 2002 @ 23:35:
[...]
Nu potverdorie, lees eens wat ik schrijf. In de wiskunde is een boolean een numerieke waarde, en er bestaat een complete algebra om met die waardes te rekenen: boolse algebra. Doe eens een google op boolean algebra en lees enkele van de meer dan 106000 hits...
Ik ben het met je eens dat een boolse algebra een 0 en 1 heeft voor een true en false, en dat + en * operatoren worden gebruikt om een or en and te maken. Maar dat wil niet zeggen dat je die types met elkaar kan combineren omdat ze toevallig dezelfde characters gebruiken. True en false zijn vollig andere concepten dan de waarden 0 en 1!

Wat c doet is er een rommeltje van maken waarin bv een rekenkundige plus operator wordt gebruikt ipv een boolse plus operator.

code:
1
2
3
4
5
6
rekenkundig bools
true        true
1       1       //conversie
-(1)=-1     -(1)=0      // negatie
-1+1=0      0+1=1       // +1 (rekenkundig:1 erbij, bools:or true)
false       true


Zoals je ziet gaat het behoorlijk fout als je je rekenkundige operaties loslaat op boolse waarden omdat ze volledig andere types zijn. Dit probleem had voorkomen kunnen worden door een boolean type hiervan te maken (zodat ook de juiste boolse operaties waren gekozen) zoals vele andere talen dit wel hebben gedaan.

Maar ik zal c niet volledig afvallen. C is een bloedsnelle taal omdat programmeurs allerlei shortcuts kunnen nemen. C is daarom ook nog steeds de taal voor driver development en os`en en alle andere dingen die bloedsnel moeten zijn. Je moet gewoon weten wanneer je het gebrek aan typesafety(en toegenomen kans op fouten) op prijs gaat stellen in ruil voor snelheid.
If is dus een control-statement. Statements als x= 3 + 5; gedragen zich als expressies in C. Voor de duidelijkheid, de eigenlijke expressie is "3 + 5", maar het resultaat van die expressie wordt door het statement heen gepropageerd zodat dingen als y= x= 3 + 5; mogelijk zijn. Dat kan alleen als het statement "x= 3 + 5" als een expressie wordt geevalueerd.
Dat hoeft niet, je zou dit gerust kunnen maken als productie regel:

code:
1
2
3
assignment 
    = (variable '=')+ expression
    ;

Zoals je ziet hoeft zo`n declaratie helemaal geen expressie te zijn.
Maar waarom nu toch? Het is zuiver een (taal)conventie of het contract wel gebroken is. Als de taalconventie is dat een integer naar een boolean gedowncast kan worden, dan is er geen breech-of-contract. Je redeneert dus vanuit jouw favoriete taal, en overal waarin C verschilt van het bondage-gedrag van jouw taal zie jij een fout in het design van C. Dat is natuurlijk niet zo, het zijn gewoon talen die ontworpen zijn met een verschillend doel voor ogen: net als in het werkelijke leven, is de docent voor de klas vaak strenger en conservatiever dan de baas op het werk.
Het gaat niet zozeer om een taal conventie, maar het gaat om het zo veel mogelijk de gebruiker(mezelf ook) helpen en daardoor minder tijd nodig ben om allerlei triviale fouten te moeten oplossen.

Ik ben op dit moment bezig met een taal die nog veel strenger is dan java. Het is jou ook vast wel eens overkomen dat je een nullpointer fout hebt gekregen (in het geval van c eventueel 'gek' gedrag). Dit komt omdat je voor ieder adres een null of een non null waarde mag krijgen. Vaak wordt op een of andere manier die null een super type gemaakt van veel types of hij wordt weggestreept in het typemechanisme.

Het probleem is dat je dus geen onderscheid meer kan maken tussen null en non null waardes wat inhoud dat je dus een null binnen kan krijgen terwijl dit volgens het contract niet mag. Vaak worden er precondities gebruik (in dit geval een null check) om alsnog voor te zorgen dat het contract niet verbroken kan worden.

Maar het zou nog veel handiger zijn om aan te geven in het type of je wel of geen null aankan. Je zou bijvoorbeeld kunnen zeggen dat een object waarde nooit null kan zijn (object heeft dus per definitie een non null waarde). Als je dan de volgende methode hebt: add(Persoon p) dan weet je dat p nooit null kan zijn, omdat Persoon nooit null kan zijn.

Als je bv wel een null accepteerd dan zou je ook een union type kunnen maken (union type is een type de zich kan gedragen als type A of als type B ). Als je nu het volgende union type gaat maken: union(Persoon,NULL), dan weet je nu dat je dus een null waarde aankan of een echte persoon. Dan zou je als volgt een methode kunnen maken die wel een null aankan:
add(union(Persoon,NULL) p)
en dit zou je kunnen vereenvoudigen mbv syntactisch suiker tot:
add(Persoon? p).
Dezelfde '?' zou je ook kunnen toepassen in de rest van de taal.

(voor de duidelijkheid NULL is het type van null)

Stel nu dat je de volgende methode hebt:
void add(Persoon p){
...
}

en het volgende stukje aanroepende code:
Persoon? jan = ...;
add(jan)
dan krijg je een compiletime type foutmelding, omdat het type van jan ruimer is dan het type van p (jan is dus null of non null, en de methode kan alleen non null aan).

Dit is een klein voorbeeldje hoe je door strengere typering compile time voor safety kan zorgen. In dit geval zal het dus nooit meer voorkomen dat je een methode aanroept met een null als hij daar niet voor gebouwd is, want je krijgt nu compile time al een foutmelding.

Over het algemeen kun je met een strenger type systeem veel elegantere code in elkaar zetten omdat je code niet meer 'vervuild' raakt met allerlei preconditie code of gammel worden door gebrek aan. Maar het belangrijkste punt aan mijn verhaal is dat code een middel is om een systeem te modeleren, en ik wil zoveel mogelijk ondersteuning om de correctheid van dat model te garanderen zodat ik kan garanderen dat de software ook doet wat het moet doen.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
mietje: If is dus een control-statement. Statements als x= 3 + 5; gedragen zich als expressies in C. Voor de duidelijkheid, de eigenlijke expressie is "3 + 5", maar het resultaat van die expressie wordt door het statement heen gepropageerd zodat dingen als y= x= 3 + 5; mogelijk zijn. Dat kan alleen als het statement "x= 3 + 5" als een expressie wordt geevalueerd.
MSalters zei het al prima (en ik schreef eerder ook al wat hierover) maar misschien dat een beetje grammatica het nog duidelijk maakt. Ik schets het even globaal, zonder exact alle varianten en toestanden in C te noemen.

Een assignment is een expressie (overigens met de laagste prioriteit van alle expressies):

code:
1
LValue AssignOp AssignExpr -&gt; AssignExpr


Deze productie regel uit een C grammatica is zwaar vekracht om prioriteiten goed te regelen. AssignExpr is een expressie, waarbij deze non-terminal in het leven is geroepen om de prioriteiten van expressies goed te kunnen controleren. Als je prioriteiten los kunt definieren krijg je een duidelijkere regel:

code:
1
LValue AssignOp Expr -&gt; Expr


Expressies mag je gebruiken als statements:

code:
1
   Expr &quot;;&quot; -&gt; Stm


'Echte' statements ontstaan niet uit de toepassing van deze productie regel op expressie. 'Echte' statements zijn dus eigenlijk de statements, die wel statement moeten zijn omdat ze geen expressie zijn. Productie regels voor deze statements produceren direct een non-terminal statement.

Een paar voorbeelden (uit een Java grammatica, heb geen mooi voor C bij de hand):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
    &quot;{&quot; BlockStm* &quot;}&quot; -&gt; Block {cons(&quot;Block&quot;)}

    Block            -&gt; Stm
    LocalVarDec -&gt; BlockStm
    Stm              -&gt; BlockStm

    Type {VarDec &quot;,&quot;}+ &quot;;&quot; -&gt; LocalVarDec {cons(&quot;LocalVarDec&quot;)}

    Expr &quot;;&quot; -&gt; Stm {cons(&quot;Expr&quot;)}

    &quot;;&quot; -&gt; Stm {cons(&quot;Empty&quot;)}
    Id &quot;:&quot; Stm -&gt; Stm {cons(&quot;Labeled&quot;)}

    &quot;assert&quot; Expr          &quot;;&quot; -&gt; Stm  {cons(&quot;Assert&quot;)}
    &quot;assert&quot; Expr &quot;:&quot; Expr &quot;;&quot; -&gt; Stm  {cons(&quot;Assert&quot;)}

    &quot;if&quot; &quot;(&quot; Expr &quot;)&quot; Stm -&gt; Stm {cons(&quot;If&quot;)}
    &quot;if&quot; &quot;(&quot; Expr &quot;)&quot; Stm &quot;else&quot; Stm -&gt; Stm {cons(&quot;If&quot;)}

    &quot;while&quot; &quot;(&quot; Expr &quot;)&quot; Stm -&gt; Stm {cons(&quot;While&quot;)}
    &quot;do&quot; Stm &quot;while&quot; &quot;(&quot; Expr &quot;)&quot; &quot;;&quot; -&gt; Stm {cons(&quot;DoWhile&quot;)}

    &quot;for&quot; &quot;(&quot; ForInit? &quot;;&quot; Expr? &quot;;&quot; ForUpdate? &quot;)&quot; Stm -&gt; Stm {cons(&quot;For&quot;)}

    LocalVarDec    -&gt; ForInit
    {StmExpr &quot;,&quot;}+ -&gt; ForInit   
    {StmExpr &quot;,&quot;}+ -&gt; ForUpdate

    &quot;break&quot;    Id? &quot;;&quot;   -&gt; Stm {cons(&quot;Break&quot;)}
    &quot;continue&quot; Id? &quot;;&quot;   -&gt; Stm {cons(&quot;Continue&quot;)}
    &quot;return&quot;   Expr? &quot;;&quot; -&gt; Stm {cons(&quot;Return&quot;)}

    &quot;throw&quot;    Expr  &quot;;&quot; -&gt; Stm {cons(&quot;Throw&quot;)}
    &quot;try&quot; Block CatchClause+ -&gt; Stm {cons(&quot;Try&quot;)}
    &quot;try&quot; Block CatchClause* &quot;finally&quot; Block -&gt; Stm {cons(&quot;Try&quot;)}
    &quot;catch&quot; &quot;(&quot; FormalParam &quot;)&quot; Block -&gt; CatchClause {cons(&quot;Catch&quot;)}

    &quot;synchronized&quot; &quot;(&quot; Expr &quot;)&quot; Block -&gt; Stm {cons(&quot;Synchronized&quot;)}

    &quot;switch&quot; &quot;(&quot; Expr &quot;)&quot; SwitchBlock -&gt; Statement {cons(&quot;Switch&quot;)}

De hele stelling dat alles in C een expressie is, wordt wat mij betreft voornamelijk verkracht door het feit dat er een aparte syntax is voor conditionele expressies en conditionele uitvoering van statements. De scheiding in 2 (meer eigenlijk, maar goed) productie-regels is nodig omdat er dus andere statements zijn die niet als expressie te gebruiken zijn, maar dit is wat mij betreft geen excuus om ook een andere syntax te kiezen. Overigens zou ik in Java ook veel meer zaken als expressie willen zien. Met name de if-then-else uiteraard, maar ook bijvoorbeeld de try-catch. Alles zou pas echt een expressie zijn als alle statements grammaticaal gezien een expressie zouden kunnen zijn (ook de for en while loops dus). Semantische analyse zou dit gebruik dan kunnen uitsluiten omdat het uiteraard niet bepaald logisch is om een for loop als expressie te gebruiken.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Alarmnummer :Ik ben op dit moment bezig met een taal die nog veel strenger is dan java.
Ik vind 'strenger' niet echt een juiste term voor de taal waar jij op doelt, maar ik begrijp wat je bedoelt ;) . Voor de niet Javahova bezoeker: het gaat hier om features die we tegen kwamen in Nice .
en dit zou je kunnen vereenvoudigen mbv syntactisch suiker tot: add(Persoon? p).
Dezelfde '?' zou je ook kunnen toepassen in de rest van de taal.
Bij Alarmnummer moet hij er uiteraard achter in plaats van ervoor ;) . Mooie uitleg verder. Misschien is het leuk om nog even op te merken dat het wel of niet acceptabel zijn van de waarde null nu vooral wordt gedocumenteerd in API documentatie (Javadoc dus in dit geval). Dit biedt echter geen standaard notatie voor dergelijke zaken en uiteraard kan een compiler of meta-tool hier helemaal niets mee. Door dergelijke zaken in de code zelf terug te brengen verhoog je de 'inhoud' van de code: de code geeft zelf beter weer wat er precies wordt bedoeld en deze weergaven kan dus ook gebruikt worden in compilers en meta-tools.
Over het algemeen kun je met een strenger type systeem veel elegantere code in elkaar zetten
Ik zie 'strenger' liever als correcter of krachtiger. Het type-systeem van functionele talen is zo krachtig dat je je werkelijk volledig uit kunt leven. Dit heeft niet zozeer met strengheid te maken, maar vooral met de logica, uitgebreidheid en geavanceerdheid van het type-systeem.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

mbravenboer schreef op 06 augustus 2002 @ 02:52:
[...]
Ik vind 'strenger' niet echt een juiste term voor de taal waar jij op doelt, maar ik begrijp wat je bedoelt ;) . Voor de niet Javahova bezoeker: het gaat hier om features die we tegen kwamen in Nice .
We hadden het over streng zijn van talen, dus het was nog niet zo erg misplaatst ;)
Bij Alarmnummer moet hij er uiteraard achter in plaats van ervoor
:P Ik hoop dat binnenkort een versie uitkomt waarin ook access modifiers zijn verwerkt want dan ga ik er eens echt mee aan de slag. En zal nog even kijken of hij ook interne methodes wil maken, en anders zal ik daar ff een verzoekje voor plaatsen. (methodes extracten begint superlastig te worden als een methode alleen interessant is binnen een bepaalde context).

Nice is Nice 8-)

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 21-08 17:14
Alarmnummer schreef op 06 augustus 2002 @ 00:53:
[...]
Wat c doet is er een rommeltje van maken waarin bv een rekenkundige plus operator wordt gebruikt ipv een boolse plus operator.

code:
1
2
3
4
5
6
rekenkundig bools
true        true
1       1       //conversie
-(1)=-1     -(1)=0      // negatie
-1+1=0      0+1=1       // +1 (rekenkundig:1 erbij, bools:or true)
false       true
Sorry, maar JIJ maakt er een zooitje van. Booleaanse algebra heeft geen unaire operator-
(tenzij je'm defineert als de identity operator, in welk geval de resultaten identiek zijn aan de rekenkundige operator )
Zo ken ik ook nog wat wiskunde die aantoont dat -1==1. ;)

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

en ik altijd maar denken dat de not operator een unaire operator is..

Verwijderd

Ik krijg verdomme ALWEER foutmeldingen bij het posten van een reaktie op dit forum!
Fatal error: Cannot instantiate non-existent class: timer in /mnt/atlas/web/react/got/react/global/non-www/classes/engine.class.inc.php on line 294
Het is me in de laatste dagen regelmatig dat ik een post van meer dan 50 regels kwijtraak door dit amateuristische gesleutel aan een live forum.

Als het stabiel loopt post ik wel verder.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Verwijderd schreef op 06 augustus 2002 @ 14:20:
Ik krijg verdomme ALWEER foutmeldingen bij het posten van een reaktie op dit forum!

[...]

Het is me in de laatste dagen regelmatig dat ik een post van meer dan 50 regels kwijtraak door dit amateuristische gesleutel aan een live forum.
Het forum loopt inderdaad nog niet zoals het moet. Ik edit al mijn berichten in notepad en dan plaatst ik het hierin. Ik heb het ook al te vaak meegemaakt dat ik mijn post ben kwijt geraakt. En verder vind ik ik slecht editen in dat kleine rotschermpje van GoT.
Als het stabiel loopt post ik wel verder.
Moet ik wachten om verder te bekvechten ;)

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025

kvdveer

Z.O.Z.

George Boole beschreef in An investigation into the Laws of Thought, on Which are founded the Mathematical Theories of Logic and Probabilities een hele nieuwe vorm van wiskunde, waarbij er slechts twee getallen zijn: 0 en 1. Boole noemt in dat boek de termen true en false niet, al impliceert hij in de latere hoofdstukken wel dat ze waar en niet waar inhouden.

Dat true en false in C/C++ gewoon getallen zijn is dus volledig volgens boole's beschrijving. Dat ze gebruikt kunnen worden in dezelfde wiskundige stellingen als 'gewone' wiskundige bewerkingen is fout.

Localhost, sweet localhost


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Het mag dan wel volgens de beschrijving zijn dat het een 1 en een 0 is, maar een int is niet van het boolean type en een andere getal dan 0 of 1 heeft in boolse algabra geen betekenis terwijl het toch mogelijk is als je een int gebruikt. Daarnaast is er een verschil tussen een boolse + (een or dus) en een rekenkundige +. Ik hoop niet dat ik dit keer op keer hoef uit te leggen!!!

[edit]
Ik was ff te voorbarig. Ik ben het met je eens, dat booleans niet gebruikt kunnen worden in normale integer expressies.

Verwijderd

Nog maar eens proberen, dan maar kort.
Alarmnummer schreef op 06 augustus 2002 @ 15:45:
Het mag dan wel volgens de beschrijving zijn dat het een 1 en een 0 is, maar een int is niet van het boolean type en een andere getal dan 1 of 1 heeft in boolse algabra geen betekenis terwijl het toch mogelijk is als je een int gebruikt. Daarnaast is er een verschil tussen een boolse + (een or dus) en een rekenkundige +. Ik hoop niet dat ik dit keer op keer hoef uit te leggen!!!
Nee, laat dat uitleggen maar, want je beweringen kloppen gewoon niet. ;)

Een boolean 1 en 0 werken exact hetzelfde in boolse algebra als een 1 en een 0 in een integer algebra. 1 is in zowat alle algebra's het eenheidselement, waarvoor geldt x * 1 = x, en 0 is het nulelement waar in bijna algebra's voor geldt x * 0 = 0. De boolse + en * zijn ook volledig congruent met de integer + en *; het enige verschil is dat de verzameling van integers veel groter is dan die van booleans, de verzameling van booleans heeft cardinaliteit 2, dus maar 2 elementen. Vandaar dat 1 + 1 = 1 gewoon klopt...

Wat ik in mijn vorige post wilde schrijven: je hakt er op in dat een boolean wordt gecast naar een integer, maar je vindt het geen probleem dat integers naar floating-points worden gecast en vice versa? Een float is ook echt een ander numeriek type dan een int, en de operatoren werken ook niet exact het zelfde, hoewel ze algebraisch de zelfde definitie hebben.

[ Voor 0% gewijzigd door Verwijderd op 06-08-2002 16:13 . Reden: typo ]


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Als je gaat rekenen met normale integers, dan zal dit.

integer.MAX_VALUE+integer.MAX_VALUE

echt een fout opleveren, want je raakt buiten het domein van de integer. Dit geld ook voor die 1+1 met bits, want een 2 valt buiten het domein van de bit. Bij een boolse operator zal dit wel goed gaan. Ik hoop dat ik je nu (eindelijk) ;) kan laten inzien dat de werking van een boolse + niet hetzelfde is als een integer +.

Verder is ieder natuurlijk getal een reeel getal. Daarom is in principe ook iedere int een float en derhalve kan die conversie ook gemaakt worden.

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025

kvdveer

Z.O.Z.

Het is inderdaad ook fout dat integers impliciet naar floats worden gecast... Ik gebruik nog wel eens het volgende: (voor bijvoorbeeld een binary search)
code:
1
array[ size / 2]
Waarbij size niet per se een even getal hoeft te zijn.

Als ik nou zou zeggen:
code:
1
2
3
4
5
int i=0;
int j=5;
float f = 2.0;

i = j / 2 * f;


Wat is dan de waarde van i? (4 of 5?)
Ik ben van mening dat een compiler dit hoort te weigeren, of er in ieder geval voor moet waarschuwen. (ik neem aan dat je compileert met -wall)

[ Voor 0% gewijzigd door kvdveer op 06-08-2002 16:24 . Reden: brak forum ]

Localhost, sweet localhost

Pagina: 1 2 Laatste