Cookies op Tweakers

Tweakers maakt gebruik van cookies, onder andere om de website te analyseren, het gebruiksgemak te vergroten en advertenties te tonen. Door gebruik te maken van deze website, of door op 'Ga verder' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt, bekijk dan ons cookiebeleid.

Meer informatie

Guido van Rossum geeft positie als BDFL bij Python op

De Nederlander Guido van Rossum is teruggetreden als belangrijkste verantwoordelijke voor Python, een positie die vaak wordt aangehaald als Benevolent Dictator For Life. Hij neemt een permanente vakantie.

Van Rossum geeft op de mailinglijst van Python-ontwikkelaars aan dat hij moe is en dat hij toe is aan een lange pauze. De reden is de release van Python Enhancement Proposal 572. "Ik wil nooit meer zo hard vechten voor een PEP en er vervolgens achterkomen dat zoveel mensen mijn besluiten verachten", verzucht hij.

Hij stapt daarom terug als verantwoordelijke en gaat alleen nog een tijdje door als core-ontwikkelaar en als mentor. "Maar het komt er op neer dat ik mezelf een permanente vakantie geef als BDFL en jullie voortaan op jullie zelf zijn aangewezen."

Hij wijst geen vervanger aan en verwacht dat alles wel zijn loop neemt. Van Rossum is de bedenker van de populaire programmeertaal Python en legde de basis eind jaren tachtig bij het Centrum Wiskunde & Informatica. Python was zijn hobbyproject, waarmee hij voortborduurde op de programmeertaal ABC.

In 2015 publiceerde Tweakers een video over Guido van Rossum in de serie Polderpioniers.

Door Olaf van Miltenburg

Nieuwscoördinator

12-07-2018 • 19:53

120 Linkedin Google+

Reacties (120)

Wijzig sortering
Dus wat moeten we hiervan meenemen. Hij voelt zich weggepest worden?

Als je een besluit neemt zijn er altijd mensen die het niet met je eens zijn. Een besluit nemen over iets populairste dat veel mensen gebruiken, is meer vocale tegenstanders. Jammer als hij het zich zo aantrekt. Begrijpelijk en jammer.

Maar veel plezier gewenst bij zijn volgende project natuurlijk! Dat het weer een succes mag zijn ;)

[Reactie gewijzigd door Bastian1 op 12 juli 2018 20:01]

Niets zegt dat zijn manier van werken de juiste is dus wellicht zat hij zelf vast geroest en zijn er anderen die met vereende krachten, nu hij geen verantwoordelijke meer is, wel verandering brengen ?

We zullen zien.
Wellicht zullen we zien wie er gelijk had.
Dus wat moeten we hiervan meenemen. Hij voelt zich weggepest worden?
Dat denk ik ja. Een meute jongeren zijn het niet eens met zijn visie. En weten het beter.

Dus dan is het aan de meute om zich te bewijzen.

Het is een beetje zoals een leeuw die moet plaats maken voor de nieuwe generatie. Of dat allemaal beter is? Dat zullen we wel zien.

Dat die joeng maar goed hun best doen. Want het is allemaal veel moeilijker dan ze denken.

Langs de andere kant is het goed dat we vernieuwen. Plaats maken voor de jeugd. Zodat ze zich kunnen bewijzen.
Hij geeft ook aan als reden, dat ie niet jonger wordt. Het toch vroeg of laat gaat gebeuren.
(In haakjes praat ie ook over mogelijke medische issues)

Het lijkt in mijn ogen een laatste druppel die de emmer liet overlopen.
In andere woorden, hard genomen moeite die niet gewaardeerd wordt, terwijl ie denkt aan minder verantwoordelijkheden.
Het is meer dan dat.
After all that's eventually going to happen regardless -- there's still
that bus lurking around the corner, and I'm not getting younger... (I'll
spare you the list of medical issues.)
De beste man is ook al 62 dus wat dat betreft een mooie leeftijd om eens een stapje terug te doen zonder meteen in 1 keer de brui eraan te geven.
Jezelf "benevolent dictator" noemen en dan blijven als mensen het niet met je eens zijn.. Dan ben je gewoon "dictator," toch? :D
Hij heeft die titel "benevolent dictator for life" niet aan zichzelf toegekend. Hij heeft 'em juist van de Python-community ontvangen, al jaren geleden.
bron: https://gvanrossum.github.io//bio.html
Oh, ongetwijfeld, dat was ook niet de uiting die ik probeer te doen.

Mijn punt zijnde dat het een benevolent dictator betaamt zijn positie op te geven als zijn visie geen aansluiting vindt bij de "onderdanen".
Nu snap ik je comment.
Ik ken Phyton meer heel beperkt, maar de typering van data types is wel wennen (die is er namelijk niet). Wat dat betreft voel ik me zelf meer thuis bij Perl (maar ook C/C++ etc).
Python heeft juist strikte types! De variabelen zijn dynamisch getypeerd, maar ze zijn er wel degelijk.
Een taal waar je runtime types mee kan creëren en aanpassen (en ja, dat kan met Python) zou ik niet als "strict getypeerd" willen beschouwen. Op de keeper beschouwd kan je stellen dat alle programeertalen wel types kennen, bij sommige zit je vast aan een aantal voorgedefinieerde types, bij andere kan je eigen types samenstellen. Het grote verschil tussen de talen is of variabelen hard gekoppeld zijn aan een type (statically typed) of niet (dynamically typed). Beiden hebben hun voors en tegens, welke het beste is hangt af van wat de aard van het probleem is dat je er mee wilt oplossen.
Je haalt statische typering en stricte typering door elkaar.
Static typing houdt in dat types van tevoren vast staan. Bij dynamic typing kunnen types tijdens runtime wijzigen.
Strict typing houdt in dat types blijven zoals ze zijn en er geen automatische conversies plaatsvinden, itt weak typing waar een string bijvoorbeeld wordt geconverteerd naar een getal alvorens het bij een ander getal wordt opgeteld.

Javascript en PHP zijn weak en dynamic. Python is strict en dynamic. C++ en Java zijn strict en static.

[Reactie gewijzigd door .oisyn op 13 juli 2018 02:01]

Dat kan om het even in welke taal.

Python is vrij strict getypeerd omdat je bijvoorbeeld niet 3 + "3" bij elkaar op kunt tellen. In bijvoorbeeld Javascript of PHP kan dit wel. Al is het met het alom vertegenwoordigde duck typing in Python eigenlijk weer wat omgekeerd.
Er zijn veel verschillen tussen Perl en Python, maar volgens mij is het type systeem daar juist niet een van. Beide zijn dynamically-typed, met andere woorden, alle waardes hebben een type maar los daarvan kun je het uitzoeken. Voor sommige projecten ideaal, voor andere weer niet.

C of C++ vergelijken met Perl of Python is een beetje appels en peren.
Perl is meer weak typed... een string die naar een nummer omgezet kan worden wordt een nummer...
$i = "3"
$i++
$i + 5
of: 3 + "3"...
def sum(x: float, y: float) -> float:
return x + y

Is type hinting voor IDE's en met typecheck kun je zelfs tegen een performance penalty er runtime op controleren.
Perl heeft ook geen data types. Alles is, net zoals bij Python, een hashtable waarin alles terecht kan. Als het kwaakt zoals een eend, dan is het een eend. Als je het tegen de muur (een echte harde API) smijt als een eend, dan zal het uit elkaar spatten zoals een eend dat doet (en het geluid zal zijn als een eend die kwaakt).

Niet bij Perl nam- en niet bij Python neemt men type-safety serieus.

Daarna, daarna zal je de darmen en het bloed van de eend van de muur mogen kuisen.

Je hebt dus werk de eend te maken, de eend van de muur te kuisen en daarna heb je werk een deftige vogel die wel volgens specificaties is, uit te werken. In bijvoorbeeld C++.

Men kiest dat allemaal zelf.
Ik gaf idd een beetje verkeerd voorbeeld. Wat me in Python tegenstaat is het effect van spaties. En daarmee het ontbreken van een duidelijke scope (ik vind lege regels daar niet echt een feestje voor). C++ is wel een leuke taal (maar lijkt veel op Java).
Lege regels is juist een mooi voorbeeld van scoping. Het gebruik daarnaast werkt scoping met python met indentatie. Net als bij Java bijvoorbeeld. Alleen gaat het bij java niet kapot als je een spatie meer neerzet.
Lege regels vergroten ook de leesbaarheid, maar die mogelijkheid vervalt als je lege regels ook de betekenis 'einde scope' aangeeft. In het dagelijkse leven is interpunctie (waaronder ik ook lege regels schaar) essentieel voor leesbaarheid.

Dat spatie/meer of minder (samen met collega's die verschillende meningen hebben over tab size, spaties) is erg onhandig. Dat soort gedrag is in combinatie met C/C++ al vervelend, maar met Python een fout.

Zoals hierboven al gezegd, iedere taal heeft z'n liefhebbers. Het heeft verder geen zin om hartstochtelijk voor of tegenstander te zijn van iets. Dat valt ook buiten de scope van dit artikel.
In dat opzicht werkt python net zoals een bullet opsomming in een word document iedereen kan dat soort dingen lezen en je weet precies waar wat bij hoort.

In python 2 en 3 zijn lege regels ook prima inzetbaar voor de leesbaarheid en veranderen niets aan de scoping. Het maakt alleen de scoping duidelijker voor de developer.
Toch knap wat deze man teweeg heeft gebracht en gedaan. Het is nog knapper dat 3/4 van de reacties over tekortkomingen en azijnzeiken gaan en niet on-topic zijn. Deze man vindt dat de beste stuurlui aan wal staan en zegt feitelijk het is opensource ga je gang. Grappig dat vervolgens op dit forum in de reacties mensen amper zeggen: de kapitein is weg wie en hoe gaan we het schip besturen. Het is meer: de kapitein is weg, het schip wat hij gebouwd heeft is slecht (en ondertussen steeft de boel steeds meer af op een ijsschots)

Ach Aan de andere kant: welkom in Nederland.
Ja joh, ontvang de Guido als één van jullie. Maar of Python zal belangrijk blijven hangt nu echt van de opvolger (en zelfs het bestaan van een waardige opvolger) af.

Ik vrees er voor. Het ontbreken van iemand met inzicht leidt heel vaak tot een race to the bottom.

Maar we gaan dat zien. We gaan dat allemaal zien.

ps. Ondertussen blijf ik mezelf met C++ bezig houden. Heel traag maar zeker is Bjarne bezig met voor zijn vervanging te zorgen. Ik denk bv. aan Herb van Microsoft. Vooral constexpr en contracts (generative c++) heeft hij me afgelopen jaren van overtuigd. Maar er zijn er nog die de boel zouden kunnen overnemen. Dat is erg belangrijk voor een programmeertaal: Darwinistische groei. Rustig en gestaag blijven gaan. Maar altijd met substantie en vooral, verstand van zaken.

Hulde aan de Guido. Hij heeft dat heel erg goed gedaan. Dat hij mag genieten van z'n dagen.
Bjarne trekt de boot al heel lang niet meer, en dat hoeft ook niet. C++ is een open standaard die getrokken wordt door participanten aangesloten bij ISO. Zij stemmen uiteindelijk over aangedragen wijzigingen en toevoegigen, en feitelijk iedereen kan dergelijke wijzigingen/toevoegingen indienen. En wat betreft traag maar zeker, de ontwikkeling is sinds C++11 nog nooit zo hard gegaan. Tussen C++98 en C++03 gebeurde bijna niets, en C++11 liet lang op zich wachten (deels door de tijd die in concepts is gaan zitten), maar nu zijn wel lekker op weg, met elke 3 jaar behoorlijk wat toevoegingen. En laten we wel wezen, dat werd tijd ook ;). De grootste feature waar ik momenteel op wacht is reflection, maar dat wordt waarschijnlijk pas C++23 (TS in C++20). Btw die Talk van Herb was mooi ja :)

[Reactie gewijzigd door .oisyn op 13 juli 2018 02:45]

Yep, het werd tijd.
Niet om het een of ander, maar 3/4e van de reacties gaan over PHP (waar hij niet bij betrokken is), niet over Python. Offtopic, dat zeker, maar het heeft weinig te maken met het schip dat hij heeft gebouwd 8)7
Dat is eigen aan bekend en belangrijk te zijn: onbelangrijke mensen zullen algemeen genomen idiote meningen hebben. M.a.w. 3/4de van de reacties zal in deze over onbelangrijke zaken en dus bv. PHP gaan, niet over Python (waar het duidelijk wel over gaat, vandaag).

De vraag is of jij jezelf met hen wil bezig houden. Ik denk van niet.

Je hebt heus wel wat beters te doen. Toch?
Beetje rare uitspraak, gezien ongeveer de helft van de geschreven tekst van je vorige reactie over C++ gaat. Dat is natuurlijk net zo irrelevant onder dit artikel. Waarom plaats je dat? Omdat je niets beters te doen hebt, of omdat je het gewoon leuk vind om hier te reageren en daar wat over te zeggen? Dat geldt voor de PHP discussie natuurlijk net zo goed ;)

[Reactie gewijzigd door .oisyn op 13 juli 2018 02:28]

Ik vind dat mensen voor hun passie moeten gaan. Of dat nu zoals voor mezelf C++ is, of zoals voor enkelen PHP is, of voor zoals anderen Python is: dat is de passie van de mensen.

Maar natuurlijk heeft iedereen ongelijk en hebben wij met onze type-safety in C++ wel gelijk!

Ja, natuurlijk!

Daarom plaats ik dat. Omdat ik weet dat er bloed en passie vloeit. Tussen ons allemaal.

En dat dat voor de technologie van de toekomst-jaren zal zorgen. Dat dat belangrijk is.

Niet wie gelijk heeft. Maar wel wie de passie draagt.

edit: je zoekt natuurlijk naar een meer diepgaand gesprek over C++ en haar toekomst. Maar daar is dit forum ongeschikt voor (het gaat over Python). Daar is eigenlijk aleen maar een ontmoeting geschikt voor. Neem gerust contact met me op. Ik ben iedere werkdag in Eindhoven. We kunnen heus wel iets vinden.

[Reactie gewijzigd door freaxje op 13 juli 2018 02:55]

Om eerlijk te zijn, het artikel gaat feitelijk over standaardisatie-processen, en dan is C++ een goede referentie (want ISO). PHP heeft geen zinnige standaardisatie.

Random feitje: de ISO standaardisatie van computertalen is begonnen met Algol 60, waar een grote Nederlande inbreng achter zat (CWI/Philips).
Bedankt Guido! [ Verplichte grap over accolades ]. Geniet van de welverdiende rust!
Zoals dit:

from __future__ import braces
(goed lezen)

edit: Nu is PEP 401 ook trouwens relevant, met ook een leuke easter egg in __future__ :
https://stackoverflow.com/q/4007289

[Reactie gewijzigd door afraca op 13 juli 2018 10:17]

Jammer, het BDFLisme heeft de taal veel gebracht, ben benieuwd of zijn visie voortgezet kan worden.
Echt nooit geweten dat Python door een nederlands is ontwikkeld. Ik doen niets metPython, wel met legio andere programmeer- en scripttalen. Misschien toch de moeite waard om eens mee te stoeien.
Ik heb weinig met python te maken maar als een taal al jaren een splitsing heeft tussen versie 2 en 3 maar versie 2 nooit uitfaseert geeft dat wel iets aan van interne strijd. Dat hij opstapt en ook op deze manier bevestigt mijn gevoel wel een beetje.
Ik vraag me af of het nu de juiste timing is om het voor gezien te houden.

Naar mijn weet is de breuk tussen 2.x en 3.x te hard dat je net zo goed je code naar een ander platform kan herschrijven.

Een sterke man kan dan een beslissing maken en de rest moet het maar ermee doen.
Familie van? (Hij lijkt er wel een beetje op namelijk :+ )
Dat is van Rossem. Nee dus :)
Dat de schrijfwijze anders is betekent niet dat het geen familie is... het zal echter wel wat verder terug in de tijd zijn.
De naam "van Rossum" komt redelijk veel voor in Nederland: http://cbgfamilienamen.nl...m,%20van&operator=eq&taal=
Jammer. Onder zijn bewind is Python een volwassen programmeeromgeving als basis van fantastische producten geworden. Vooral in de wetenschappelijke wereld wordt het enorm veel gebruikt, maar ook als alternatief voor web-drek zoals PHP (in Nederland helaas vaak de enige keus in veel ROC cursussen) is het uitermate geschikt :).
PHP is geen webdrek. Het is een taal waar je bagger in kunt programmeren, net als in elke andere taal. Je kunt er ook prachtige code mee schrijven. Ik vind PHP uitermate geschikt voor web development. Python absoluut niet. Dat gebruik ik dan weer liever voor machine learning toepassingen en snelle GUI mockups. De eenvoud waarmee je C-extensies voor Python kunt maken doet PHP verbleken maar voor webdevelopment vind ik het echt bagger.
Ik probeerde af en toe eens naar python te kijken, maar het bleef een grote puin hoop.
Vraag 1 was altijd 2.x of 3.x, ik liep meteen tegen incompatible voorbeelden aan als ik 3.x wilde gebruiken (in een voornamelijk 2.x tijdperk). Nu lijkt 2.x toch wel verleden tijd te zijn (alhoewel het nog altijd de default python is in debian/stable) en ik wilde een simple botje maken voor gebruik met webhooks als telegram/discord. Bleek dat er allerlei incompatible spul was tussen 3.4 en 3.5, handig als de debian/stable destijds op 3.4 zat en iedereen alleen nog maar met 3.5 voorbeelden kwam. Met een mix van nieuwe en oude machines is python dus niet echt een handige omgeving om iets te implementeren.

Maar het grootste probleem wat ik heb is het gebruik van whitespaces als flow control (yuk maar met een zinnige editor wel overheen te komen) maar tevens een ":" afdwingen als einde van een conditie,. Dat is toch helemaal van de zotte, dat kan de parsen toch ook wel achterhalen aan het gebruik van whitespaces!
En daaarmee haal je precies mijn twee grootste bezwaren tegen Python aan.

1) gebrek aan backwards compatiblity, gebrek aan standaarden. Daar waar PHP 7 binnen no-time PHP 5 verdrong bij nieuwe Linux distributies wordt Python 2.7 tot op de dag van vandaag meegeleverd en als default ingesteld. Mede ook omdat Python zelf dat voorschrijft - 'python' moet naar Python 2.x refereren tenzij de gebruiker zelf expliciett heeft ingesteld dat dat Python 3 moet zijn. Dit maakt het ook rampzalig voor webdevelopment, je zit altijd te etteren met versies, daar waar dit bij PHP meestal niet echt een probleem is.

2) Whitespace is inderdaad een hele slechte kandidaat voor enige semantische waarde. Zeker door de 'holy war' over wat nu de ideale indentatie is: tab of spatie, en hoe breed dat dan moet zijn. Combineren van code is daarom vragen om problemen.

Neemt niet weg dat het, als je de ontwikkelingomgeving en deployment omgeving gestandaardiseerd hebt het best prima werkt, zeker omdat er enorm veel bindings met allerlei libraries voorhanden zijn.

[Reactie gewijzigd door MadEgg op 12 juli 2018 21:45]

Python heeft veel libraries die compatibiliteit tussen python 2 en 3 transparant mogelijk maken. Je moet het alleen even weten. Maar volgens mij was dit een paar comments terug hetzelfde argument voor PHP. Kortom pak de taal waar je blij mee bent en respecteer de keuzes van anderen.

Overigens zijn in de meeste distros gewoon zowel 2 als 3 te installeren.
In een virtualenv heet je interpreter 'python' of het nu 2 of 3 is.
Maar daarnaast gebruiken ontwikkelaars met een beetje kennis pyenv (Vergelijkbaar met n van node) en krijg je gewoon de versie, tot aan de minor toe, die je wilt gebruiken, ongeacht op welke distro of platform je zit.

Bij python is geen holy war over white space. PEP-8 schrijft 4 spaties voor en daar houd je je aan. Er zijn geen onduidelijkheden, alles ligt vast in voorschriften.

De meeste tegenargumenten voor zowel python als php zie ik eigenlijk komen van mensen die ogenschijnlijk geen volledige kennis hebben van de omgevingen.
Python heeft veel libraries die compatibiliteit tussen python 2 en 3 transparant mogelijk maken. Je moet het alleen even weten. Maar volgens mij was dit een paar comments terug hetzelfde argument voor PHP. Kortom pak de taal waar je blij mee bent en respecteer de keuzes van anderen.
Eens.
Overigens zijn in de meeste distros gewoon zowel 2 als 3 te installeren.
In een virtualenv heet je interpreter 'python' of het nu 2 of 3 is.
Maar daarnaast gebruiken ontwikkelaars met een beetje kennis pyenv (Vergelijkbaar met n van node) en krijg je gewoon de versie, tot aan de minor toe, die je wilt gebruiken, ongeacht op welke distro of platform je zit.
Dat kan inderdaad. Wel hulpmiddelen die mijns inziens niet nodig zouden zijn. Ik doe het er maar mee, maar ik vind het niet prettig werken. Als het even kan installeer ik echter de libraries system-wide zodat ik niet hoef te klooien met virtualenv.
Bij python is geen holy war over white space. PEP-8 schrijft 4 spaties voor en daar houd je je aan. Er zijn geen onduidelijkheden, alles ligt vast in voorschriften.
Was het maar zo'n feest. PEP-8 schrijft het voor. Maar Python werkt net zo goed met tabs of 2 spaties of 8 spaties. Het wordt pas een zootje als je het gaat mixen. Als Python het echt wilde afdwingen dan had de interpreter dat af moeten dwingen. Nu heb je alsnog collega's die zich er niet aan houden. En natuurlijk copy-pasten van Stackoverflow e.d. wat ook wel eens de indentatie vernaggelt. Ik werk er in de praktijk mee, en het is niet alles goud wat er blinkt.
De meeste tegenargumenten voor zowel python als php zie ik eigenlijk komen van mensen die ogenschijnlijk geen volledige kennis hebben van de omgevingen.
Dat blijft altijd een lastig punt in deze discussies. Die je ook niet zou moeten voeren. Elke taal heeft zijn voors en tegens, en elke developer heeft zijn eigen voorkeuren. Zolang je er fatsoenlijke code in weet te schrijven is het allemaal prima, en als je tegen beperkingen van de taal aanloopt kun je dan altijd nog zien hoe je daar een oplossing voor kunt verzinnen.
alleen het voordeel met php is dat je bijna geen zorgen hoeft te maken als je naar een nieuwe versie gaat, je hebt sowieso eerst deprecated features die je nog kunt blijven gebruiken, dan heb je nog genoeg tijd om daar aanpassingen voor te doen als je uiteindelijk naar weer een nieuwe versie wilt waar die features verwijderd zijn.
Ik probeerde af en toe eens naar python te kijken, maar het bleef een grote puin hoop.
Vraag 1 was altijd 2.x of 3.x, ik liep meteen tegen incompatible voorbeelden aan als ik 3.x wilde gebruiken (in een voornamelijk 2.x tijdperk). Nu lijkt 2.x toch wel verleden tijd te zijn (alhoewel het nog altijd de default python is in debian/stable) en ik wilde een simple botje maken voor gebruik met webhooks als telegram/discord. Bleek dat er allerlei incompatible spul was tussen 3.4 en 3.5, handig als de debian/stable destijds op 3.4 zat en iedereen alleen nog maar met 3.5 voorbeelden kwam. Met een mix van nieuwe en oude machines is python dus niet echt een handige omgeving om iets te implementeren.

Maar het grootste probleem wat ik heb is het gebruik van whitespaces als flow control (yuk maar met een zinnige editor wel overheen te komen) maar tevens een ":" afdwingen als einde van een conditie,. Dat is toch helemaal van de zotte, dat kan de parsen toch ook wel achterhalen aan het gebruik van whitespaces!
Voor al die problemen bestaan gewoon environment management systemen als Anaconda navigator e.d.

Je slaat je code dus altijd samen met de definitie van de environment op en dan werkt het altijd prima. Je environment manager zorgt dat automatisch alle afhankelijkheden/libs van de juist versies zijn e.d. Zo kun je prima op 1 machine met code voor verschillende python versies door elkaar werken. Zo veel verschil bestaat is er niet voor wat betreft syntax tussen verschillende Python versies. Verder bestaan er gewoon converters voor wanneer je langere stukken code automatisch wilt omzetten naar nieuwere python versies...

Overigens vind ik het afdwingen van whitespaces juist geniaal. Dat maakt code van verschillende programmeurs veel eenduidiger en makkelijker/sneller te lezen. Minder discussies in de trand van "ik kan je code totaal niet lezen", "ja maar hoe ik het schrijf is veel mooier". Minder commits waarbij je aan het niveau van onleesbaarheid van de code kunt zien wie wat geschreven heeft.

Met een mix van oude en nieuwe machines is overigens geen enkele taal handig om te implementeren. Het is nooit leuk om een stuk C te moeten (her)compileren uit het jaar 0 waarvan de enige propriatary compiler alleen op Windows 3.11 draait (en niet meer te koop is, waarvoor een license key nodig is en de compiler überhaupt niet meer te vinden is).

Offtopic: verbazend (en verontrustend?) dat veel mensen hier blijkbaar alleen php goed kennen. Geen idee wat php met python te maken heeft overigens? Behalve dat ze beiden een taal zijn?

[Reactie gewijzigd door GeoBeo op 13 juli 2018 09:30]

leuk feitje, PEP 572 introduceert een feature dat sinds PHP7 ook al aanwezig is in PHP.
Heb je daar meer info over? Geen enkele van "what's new" bronnen die ik erover lees zegt er iets over. Het is ook niet zo essentieel omdat assignments altijd al expressies waren, net als in C. In Python zijn assignments geen expressies maar statements.
PEP572 is feitelijk een combinatie van het aloude PHP assignment in expressions (waar ook vaak over getwist wordt als anti-pattern of obfuscatie) in combinatie met de nieuwe PHP7 Null Coalescing Operator.

Gecombineerd kun je dan in PHP bvb
$a = 2;
if (($b = $a) == 2) ?? echo $b;
wat matig leesbaar (maar valide code) is.

In Python wordt dit enigszins voorkomen door de syntax stricter te definieren, maar alsnog kun je gedrochten als onderstaand maken
a = 2
print b if ((b := a) == 2)

Een groot deel van de discussie was dan ook over welke operator gebruikt kan worden (bvb Rust gebruikt let x = eval()) om enerzijds compactere code te schrijven en aan de andere kant ambiguiteit te voorkomen. De uiteindelijke keuze maakt niemand echt gelukkig, en de bak aan warnings die ze aan de interpreter hebben toegekend (zoals ook voor bovenstaande voorbeeld) helpt daar ook niet bij.
PEP572 is feitelijk een combinatie van het aloude PHP assignment in expressions (waar ook vaak over getwist wordt als anti-pattern of obfuscatie) in combinatie met de nieuwe PHP7 Null Coalescing Operator.
Welnee. De null coalescing operator heeft hier niets mee te maken. Je eerste voorbeeld klopt bovendien niet, de ?? moet je daar weglaten, het is een doodgewone if. De ?? operator is niets anders dan wat syntactische suiker om de ?: operator: a ?? b is eigenlijk a != null ? b : null (zo los uit de pols, er zitten misschien nog wat haken en ogen aan)

Mbv PEP572 wordt het mogelijk om complexe expressies aan een variabele te assignen, en die variabele dan in de omliggende expressie meteen te gebruiken. Zoals bijvoorbeeld (in pseudocode)

if (a = GetThisFromThat(b))
a.DoSomething();

of

b = (a = SomeComplicatedCalculation(), a*a)

Dat is iets dat in PHP (en andere C-achtige talen) allang mogelijk was. Goed, PEP572 biedt iets meer functionaliteit en duidelijkere syntax, maar dat verschil is verder niet schrikbarend. Het is verder natuurlijk ook niet echt nodig, maar vooral het eerste voorbeeld is een common pattern in C-achtige taal.

[Reactie gewijzigd door .oisyn op 13 juli 2018 02:47]

Het zijn beperkte voorbeelden, vergelijk het eens met de voorbeelden in PEP572, het is duidelijk bedoelt om compactere code te schrijven waarbij de interpreter beter kan optimaliseren.

In mijn voorbeelden heb ik a = 2 maar dit kan uiteraard ook een volledige functie zijn, vandaar de null check, welke in python ook impliciet is. De assignment van expressies aan variabelen zit inderdaad al sinds PHP 5.3 in PHP
Je vergelijkt t vast met PHP3, ondertussen zitten we bij 7.2 en is er behoorlijk iets veranderd. Toch zonde dat het nodig is om iets aan te vallen zonder argumenten. Zowel Python als PHP hebben een duidelijk bestaansrecht en hebben hun sterke en zwakke kanten.
Ach dat was al met mod_perl vs PHP he. Bring in the memes :+ Mijn taal is beter dan de jouwe, et cetera. Gewoon de beste taal kiezen voor het doel is kennelijk geen goed argument.
Zolang 0=="php" true blijft evalueren (of elke string eigenlijk), zie ik geen reden om de stelling in twijfel te trekken.

Elke taal heeft liefhebbers en haters. Voor de 1 zijn brood, de ander laat het liefst zoveel mogelijk links liggen. Ik heb heel vroeger ook veel PHP geprogrammeerd, en laatst ook nog eens gedaan. Ik kan er mijn dingen in maken als het moet, maar ik word er niet erg happy van. Er is wel veel sinds PHP4 tijden verbeterd moet ik zeggen.
Om dezelfde reden zou je javascript ook kunnen afschrijven, die heeft ook rare quirks. Daarnaast is het gewoon gedocumenteerd en is het simpelweg heel gewoon/best practice om === te gebruiken, dat is gewoon iets dat je weet met PHP.

Ik word weer niet blij van Python tot zover maar vind het niet nodig de taal meteen maar af te zeiken, zo jammer altijd.

[Reactie gewijzigd door Cartman! op 12 juli 2018 20:48]

Dit soort dingen maken een taal lastig toegankelijk: leer de basis regels een een stel specials. Nee dank je. JS heeft hier helemaal een handje van (en een ontbrekende standaard library met zinnige functies).
Tja, en toch draait het hele internet op PHP en Javascript. En CSS en html, die ook vol onzinnige dingen zitten.

Goed genoeg is meestal gewoon goed genoeg, perfect is meestal te laat, te langzaam of allebei.

Pragmatisme is een kunst, zeker in de IT...
JavaScript kun je tegenwoordig prima op de desktop op server als Pythonalternatief gebruiken. Gelukkig zijn de meeste ontwikkelaars wel wijzer. Die keus bestaat er in de browser helaas nog niet, al wordt dat met transpilen en webassembly elke dag beter. Dat een taal slecht is betekent echter niet dat er geen mooie dingen mee gemaakt worden.
edit:
Typo

[Reactie gewijzigd door 84hannes op 13 juli 2018 07:49]

Yup. En wat is 'slecht'?

De keuze voor een taal hangt niet alleen af van de taal zelf en hoe goed het past bij het doel van je project (wat ook flink uit maakt) en natuurlijk waar de taal beschikbaar is (in een browser heb je niet zoveel keus).

De beschikbaarheid van 3rd party bibliotheken maakt ook flink uit, en natuurlijk de beschikbaarheid van ontwikkelaars met ervaring. Eg Erlang mag een mooie taal zijn maar ik ken een bedrijf wat letterlijk bijna failliet is gegaan door de keuze voor Erlang omdat het vrijwel onmogelijk was mensen te vinden die er ervaring in hadden.

Talen als Javascript (Node.js!), Python en PHP hebben enorm veel bibliotheken beschikbaar - ook een reden waarom C, C++ en Java veel worden gebruikt. Rust en Go zijn veel nieuwer en hoewel die talen serieuze voordelen hebbben kan ik me totaal voorstellen dat je als bedrijf dan toch maar weer voor C kiest, simpelweg omdat je meer ervaring in huis hebt...
Elke taal heeft een ander doel voor ogen. Als je C programmeert werk je erg dicht tegen de machine aan, en kan je heel eenvoudig hele smerige en/of gevaarlijke constructies bouwen die "werken". Eigenlijk niets anders dan PHP of JS, verschil is dat webtalen een blogje ofzo draaien en C programmas potentieel complete machines. (Hoewel je beide talen voor beide zaken zou kunnen gebruiken, uiteraard).

Ik denk wat Python doet is best goed, maar het heeft wel zijn eigenaardigheden. Ik denk een kwestie van smaak en gewenning. Zodra je op de hoogte bent van de tools en snapt wat er gebeurd, dan zijn quirks niet zo erg meer.
Zodra je op de hoogte bent van de tools en snapt wat er gebeurd, dan zijn quirks niet zo erg meer.
Dat geldt voor elke taal, ook PHP dus ;)
Daarnaast is het gewoon gedocumenteerd
Nog erger, men is zich er dus van bewust dat het niet handig is en toch doet 'men' er niks aan. ;)
In zekere zin is het dan ook een "feature" van de taal, een rare...dat zeker ;)
Zolang 0=="php" true blijft evalueren (of elke string eigenlijk), zie ik geen reden om de stelling in twijfel te trekken.
Afhankelijk van wat je bedoeling was is het oneigenlijk gebruik, dan wel slecht programmeren.
Je kan er (terecht) commentaar op hebben dat het zo is, maar het is perfect te verklaren waarom het zo is en als je het begrijpt en goed kan programmeren maak je die fout niet.
Perfect te verklaren vanuit een stupid type system. Correct.
Hoezo stupide? Je hebt te keuze tussen strict en lax comparison. Als je niet om kunt gaan met lax comparisons dan gebruik je gewoon === ipv == en is er niets meer aan de hand.
Hoezo stupide
Het is stupide omdat "php" niet gelijk is aan 0, of je nu strict of loose comparisons wil. Bij dat laatste gaat het er vooral om dat 1 == "1". Dat elke non-integer string gelijk is aan 0 is waanzin, hoe je het ook wendt of keert.
Ik vind het stupide om te veronderstellen dat er iets nuttigs komt uit "php" == 0. Een vergelijking a la "1" == 1 kan nuttig zijn. Dan moet je dus wel weten dat "1" een valide integer is, en dat kan vrij simpel met een check vooraf.

if (is_numeric($str) && $str == 0)

doet precies wat je ervan zou verwachten. Je moet toch altijd je input checken, dus dat je stupide constructies kunt verzinnen is geen reden om de taal af te schrijven. Dat is toch echt de verantwoordelijkheid van de developer.
Jij vindt dus dat je niet hoeft na te denken over de corner cases van je programmeertaal, omdat je bij deze voor iedereen bepaalt dat niemand ooit een string met een int hoeft te comparen waarbij die string geen getal is? Was het leven maar zo simpel.
Natuurlijk moet je daar wel over nadenken. Maar áls je strings met ints wil gaan vergelijken moet je wel goed weten hoe dat gebeurt in de taal waar je mee werkt. is_numeric kijkt dus niet of $str een numeriek type heeft! Het kijkt of $str een numeriek type heeft ofwel een string is die een nummer bevat. Daarmee kun je dus prima strings met nummers vergelijken.

Je moet gewoon goed nadenken over wat je wilt bereiken.

Een int met een niet-numerieke string vergelijken heeft gewoon geen zin.

if ("php" == "0") doet wat je ervan verwacht, en dit is dan ook een zinvolle vergelijking.
if ("0" == 0) doet wat je ervan verwacht, en dit is dan ook een zinvolle vergelijking.

if ("php" == 0) doe niet wat je ervan verwacht, maar het is ook een stupide vergelijking aangezien je niet duidelijk maakt wat je nu eigenlijk wilt weten. Ja, PHP zou hier een fout kunnen gooien, maar er is voor gekozen om niet-numerieke strings te casten naar een 0. Het maakt in beide gevallen geen sense.

Vind je het stom gedrag dan staat niets je in de weg om altijd === te gebruiken. Of je ziet er de meerwaarde van in en gaat verantwoordelijk om met de bijkomende eigenschappen van het type-systeem.
@MadEgg Ik denk dat je me verkeerd interpreteert. Toen ik zei "niet nadenken over de corner cases van je programmeertaal" had ik het over de persoon die een programmeertaal ontwerpt, niet de persoon die ermee aan de slag gaat. Er heeft dus iemand bedacht dat 0 gelijk is aan een niet-numerieke string. Dat is, hoe je het wendt of keert, gewoon raar, en dat maakt het typesysteem stupide.

Het verhaal waar je vervolgens mee komt is een manier om om dat stupide typesysteem heen te werken. Ja, in PHP is het idd nodig om eerst te controleren met is_numeric(). Echter, als de vergelijking gewoon false had opgeleverd, dan was die hele call niet nodig geweest omdat die check al in de comparison zelf zit.

Overigens:
if ("php" == 0) doe niet wat je ervan verwacht, maar het is ook een stupide vergelijking aangezien je niet duidelijk maakt wat je nu eigenlijk wilt weten.
Dat is gewoon arbitrair. Waarom zou het bij "php" == "0" en "0" == 0 wel duidelijk zijn, maar bij "php" == 0 ineens niet? Het lijkt me vrij evident dat je twee dingen met elkaar wilt vergelijken. En aangezien je == gebruikt, geef je niets om het type dat de entiteiten representeren, maar dat wil niet ineens zeggen dat "php" == 0 ineens geen duidelijke vergelijking meer zou moeten zijn 8)7
Of je ziet er de meerwaarde van in en gaat verantwoordelijk om met de bijkomende eigenschappen van het type-systeem.
Maar dat is dus het punt. Er is geen enkele meerwaarde. Wat is volgens jou nou de meerwaarde van wat PHP momenteel doet? Kom eens met een valide usecase waarbij het wel nuttig is dat een niet-numerieke string gelijk is aan 0?

Er is maar 1 reden waarom PHP dit (van begin af aan) deed, en dat is luiheid. Het is namelijk een stuk makkelijker om gewoon naar int te converten en dan de vergelijking te doen, dan om een hele matrix te verzinnen van mogelijke inputs en wat daar dan uit zou moeten komen. En dat is, gezien waar PHP vandaan komt, best begrijpelijk, maar het blijft stupide.

Net zoiets als de associativiteit van de ?: operator. PHP is de enige taal waarin die links-associatief is, maar die blunder kunnen ze nu niet meer fixen zonder bestaande code te breken (al kun je afvragen welke code er van de huidige assocativiteit in hemelsnaam afhankelijk is).

[Reactie gewijzigd door .oisyn op 12 juli 2018 23:49]

PHP scant van links naar rechts in de string naar nummers. De uitgangswaarde is 0. Je kunt ervan vinden wat je wilt, het is een eigenschap van de taal.

Je wilt twee dingen met elkaar vergelijken die niet met elkaar te vergelijken zijn. Je moet eerst je input checken voordat je een comparison doet. Dat is mijn punt. Je moet dus voorkomen dat je user input "php" is terwijl je een numerieke string zou verwachten.

En gebruik nou gewoon die ===, dan hoeven we het nergens meer over te hebben ;)

En de links-associatieve ?: is inderdaad afwijkend. Je komt het probleem daarmee echter alleen tegen als je sowieso al onleesbare constructies erin gaat uitschrijven. De situaties waarin dat fout gaat zijn sowieso situaties waarin ik al haakjes toegevoegd zou hebben om de bedoeling te verduidelijken. Code die van wat voor associativiteit van de ternary operator afhankelijk is, is wat mij betreft bugged en moet herschreven worden. Ongeacht of dat nu links of rechts associatief is.

Er zijn zeker wat zaakjes op PHP aan te merken. Persoonlijk stoor ik mij het meest aan de steeds wisselende volgorde van parameters van ingebouwde functies. Het went. Ondanks dat soort onvolkomenheden is het nog steeds een zeer prettige taal, en heel wat sneller en backwards compatible dan bijvoorbeeld Python, en daarmee in mijn ogen bij uitstek geschikt voor web development.
PHP scant van links naar rechts in de string naar nummers. De uitgangswaarde is 0.
Deze beschrijving voegt niets toe. Het is software, alles valt prima te verklaren. Dat wil echter niet zeggen of dat gedrag ook zinnig is.
Je moet eerst je input checken voordat je een comparison doet. Dat is mijn punt.
Nogmaals, dat "moet" alleen maar omdat de vergelijking in PHP broken is. In Javascript hoef je die controle niet eerst te doen - als de string niet als getal te parsen is, zal de equality comparison met een getal ook nooit true teruggeven.
Je komt het probleem daarmee echter alleen tegen als je sowieso al onleesbare constructies erin gaat uitschrijven
Sorry, maar dat is gewoon pertinent onwaar. Ja, je kunt dit anders opschrijven (en in PHP zul je wel moeten), maar ik verwerp je stelling dat dat onleesbaar is.

[Reactie gewijzigd door .oisyn op 13 juli 2018 03:05]

Sorry, maar dat is gewoon pertinent onwaar. Ja, je kunt dit anders opschrijven (en in PHP zul je wel moeten), maar ik verwerp je stelling dat dat onleesbaar is.
En dat vind ik dus een onjuiste toepassing van de ternary operator. In dit geval zou een switch veel meer op zijn plaats geweest zijn. Dergelijke trappetjes moet je überhaupt niet willen. Ik wil verder echt niet beweren dat left associative logisch is, absoluut niet. Remnant from the past. Maar in de praktijk loop ik er nóóit tegenaan. En ik schrijf heel wat ternary operators in PHP.
maar als je "php" parsed, krijg je 0, en dan is 0 == "php" dus wel true
Parsen heeft hier weinig mee te maken, en dat je 0 krijgt is een keuze van de conversiefunctie die eigenlijk niet logisch is, maar puur komt omdat de conversiefunctie louter een getal returnt, ipv ook een manier om aan te geven dat de string geen geldig getal is. Ergo, luiheid.
bij de manier waarop php werkt (begint bij 0, en alle integers in een string worden hierbij opgeteld) heeft parsing er wel wat mee te maken, want dat is toch de reden dat er 0 uitkomt, en waardoor 0 dus wel gelijk is aan "php". en ik geloof dat 0 == "php" maar "php" != 0, maar dat weet ik niet helemaal zeker.

maar wat zou je er dan uit moeten krijgen, je kunt het altijd wel ergens mee vergelijken waar true uit komt terwijl je false verwacht
bij de manier waarop php werkt (begint bij 0, en alle integers in een string worden hierbij opgeteld)
Dit is echt onzin :). PHP gebruikt gewoon iets als atoi() uit libc. Jij beweert dus dat de string "12 34" gelijk is aan 46? Probeer het maar, zou ik zeggen ;)

Daarnaast heet wat jij suggereert nog steeds geen parsen. Bij parsen pak je de deelonderdelen uit een stuk tekst en koppel je ze aan elkaar aan de hand van een grammatica. Het bouwen van een expression tree aan de hand van een string als "(3 + 4) * 5 + 16" is parsen.
maar wat zou je er dan uit moeten krijgen
Wat dacht je van false? Als een string niet goed converteerbaar is naar een getal, dan kan het ook nooit hetzelfde zijn als een getal. Zo'n beetje elke weak typed taal doet dit goed, behalve PHP.
ja ik bedoel niet opgeteld, maar bij elkaar gezet, de string ("12 34") wordt de integer (1234)

oke, dan weet ik niet hoe je het anders noemt, zo diep zit ik er niet in, maar bij php begint gewoon bij 0, en als je string dan geen integers bevat krijg je dus 0. ik weet niet in welke taal het wel en niet zo is, maar in c is dat ook zo (voor mn werk ben ik vooral met python en c bezig en in mn vrije tijd met php/html enzo, dus ik weet niet hoe het met andere talen zit)
ja ik bedoel niet opgeteld, maar bij elkaar gezet, de string ("12 34") wordt de integer (1234)
Nee, het wordt gewoon 12. Hij skipt eerst alle whitespaces, dan accepteert hij getallen (en dingen als een decimale punt of een exponent), en hij stopt bij het eerstvolgende teken dat niet meer bij het getal hoort.
maar bij php begint gewoon bij 0, en als je string dan geen integers bevat krijg je dus 0
Maar de verklaring waarom hij iets doet is compleet irrelevant. Bugs zijn ook altijd prima te verklaren, dat betekent niet dat het prima is dat ze erin zitten. Het fundamentele probleem is dat de functie alleen maar een getal teruggeeft, en er verder niet wordt gekeken naar of dat wel valide is. Een C functie als strtol() of strtod() heeft een extra parameter, namelijk waar hij is gestopt. Als dat niet aan het eind van de string is (of als er verder alleen nog maar whitespaces volgen) weet je dus dat de string niet volledig is omgezet en dus dat de volledige string geen getal representeert. Maar met die kennis wordt niets gedaan.
Dat bedoel ik dus. Een stupide type systeem. Lax typing en complete/grote software en teams gaat al jaren slecht samen. Daarvoor heb je static strong typing. Dus voor leuk en klein is het ok, anders: dikke enforcer erop en iedereen die == doet een trap tegen zijn schenen.
maar het is perfect te verklaren waarom het zo is
Dat zijn bugs doorgaans ook. Zullen we die ook maar niet meer fixen dan? :)
'0=="php"' Evalueert naar TRUE omdat PHP niet type safe is. Dat heeft nadelen, maar zeker ook voordelen. Er is dan ook een zeer acceptabele oplossing en dat is: '0 === "php"'. Hiermee wordt ook het type van het argument meegenomen. Jouw argument valt dus in het niet door gebrek aan kennis van de taal.

Dat neemt niet weg dat er genoeg dingen aan te merken zijn op PHP. Maar dat geldt zeker ook voor andere programmeertalen. Ook voor Python. Wat dat betreft sluit ik me aan bij @WhatsappHack: 'Gewoon de beste taal kiezen voor het doel'. Dat zouden meer mensen moeten doen ;-)
'0=="php"' Evalueert naar TRUE omdat PHP niet type safe is. Dat heeft nadelen, maar zeker ook voordelen.
Nonsens. 0 == "php" evalueert naar true omdat de ontwerper van PHP in eerste instantie niet goed nadacht over wat een zinnige implementatie zou moeten zijn (het is dan ook *letterlijk* een uit de hand gelopen hobbyproject). Type safety heeft er niets mee te maken, er had prima de keuze gemaakt kunnen worden om een string dat niet als getal te parsen is, niet true te laten comparen met een getal. Zoals de meeste weakly typed talen doen.
Je vergelijkt t vast met PHP3,
Want?
Ja, PHP is flink veranderd, maar nee, het statement is niet onterecht. ;)
De argumenten zijn algemeen bekend, toch?
Geen idee, noem er eens een paar? Zou je ook de vraag kunnen beantwoorden wat de bedoeling is om een andere taal af te zeiken? Voel je je daardoor beter :?
Geen idee, noem er eens een paar?
  • inconstentie API, zowel qua naamgeving als qua parameter volgorde
  • "string" == 0 geeft true :?
  • ?: operator is links-associatief |:(
  • dangling reference bij foreach($haystack as &$needle), die je originele array verneukt als je $needle ooit eens voor iets anders gebruikt
Een paar, zoals je vroeg. Ik kan nog wel even doorgaan maar dat lijkt me wat zinloos.
Zou je ook de vraag kunnen beantwoorden wat de bedoeling is om een andere taal af te zeiken? Voel je je daardoor beter
Nou ja, af te zeiken... Er wordt een mening geüit. Mag dat ineens niet meer? Ik zie dergelijke meningen onder vrijwel ieder artikel, maar het is alleen een probleem als het om een programmeertaal gaat? Althans, ik heb jou nooit tegen die andere meningen in zien gaan onder andere artikelen, dus dat is de enige conclusie die ik dan kan trekken.

[Reactie gewijzigd door .oisyn op 13 juli 2018 01:55]

Ik kan moeilijk onder elk artikel reageren maar over t algemeen vind ik het erg zinloos om iets af te zeiken om het afzeiken. Voor elke taal kun je wel dingen verzinnen die onhandig zijn maar dat betekent niet dat het direct als "drek" weggezet hoeft te worden.
Voor elke taal kun je wel dingen verzinnen die onhandig zijn maar dat betekent niet dat het direct als "drek" weggezet hoeft te worden.
Quote
Het is niet dat men het drek vind omdat je wat onhandigheden kunt verzinnen. PHP staat met vlag en wimpel bovenaan als het aankomt op "onhandigheden", en daarna komt heel lang niets. Ik snap best dat men het als drek classificeert. Een uit de hand gelopen hobbyproject waar niet goed over is nagedacht en nu moet dealen met een enorme bagage aan legacy.

[Reactie gewijzigd door .oisyn op 13 juli 2018 13:57]

"web-drek" - moet moeite doen om niet in de lach te schieten :-D
Weinig drek aan PHP hoor. Ik ken een zeer vooraanstaande site in NL welke van PHP naar Python omgezet wordt, 2 jaar later hebben de coredevs er al niet meer zo'n zin in dus...
Lekker makkelijk terwijl ik en anderen hier Python niet veroordelen of naar beneden halen... zegt meer iets over Python en zijn Devs dan andere talen ;)
Je hebt gelijk PHP wordt altijd uit reflex op neergekeken door grote ego's, maar het is een taal met nadelen maar ook grote voordelen, zoals elke taal.


Om te kunnen reageren moet je ingelogd zijn


Call of Duty: Black Ops 4 HTC U12+ dual sim LG W7 Google Pixel 3 XL OnePlus 6 Battlefield V Samsung Galaxy S9 Dual Sim Google Pixel 3

Tweakers vormt samen met Tweakers Elect, Hardware.Info, Autotrack, Nationale Vacaturebank en Intermediair de Persgroep Online Services B.V. © 1998 - 2018 Hosting door True