Backus over programmeertalen: actueel verleden

Pagina: 1
Acties:
  • 253 views sinds 30-01-2008
  • Reageer

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Via lambda.weblogs.com kreeg ik een linkje naar het stuk "Can Programming be Liberated from the von Neumann Style?" van John Backus. Vreemd genoeg had ik dit stuk nog nooit gelezen, dus dat ben ik maar eens gaan doen.

De opening van dit stuk (uit 1977) vond ik buitengewoon lachwekkend, maar eigenlijk ook zeer triest: het is zo enorm actueel! Ik quote even de stukken die voor het meeste vermaak zorgen, maar uiteraard moet je het even helemaal lezen O-) .
Conventional programming languages are growing ever more enormous, but not stronger. Inherent defects at the most basic level cause them to be both fat and weak: their primitive word-at-a-time style of programming inherited from their common ancestor the von Neumann computer, their close coupling of semantics to state transitions, their division of programming into a world of expressions and a world of statements, their inability to effectively use powerful combining forms for building new programs from existing ones, and their lack of useful mathematical properties for reasoning about programs.

Programming languages appear to be in trouble. Each successive language incorporates, with a little cleaning up, all the features of its predecessors plus a few more. Some languages have manuals exceeding 500 pages; others cram a complex description into shorter manuals by using dense formalisms. The Department of Defense has current plans for a committee-designed language standard that could require a manual as long as 1,000 pages. Each new language claims new and fashionable features, such as strong typing or structured control statements, but the plain fact is that few lan- guages make programming sufficiently cheaper or more reliable to justify the cost of producing and learning to use them.

Since large increases in size bring only small increases in power, smaller, more elegant languages such as Pascal continue to be popular. But there is a desperate need for a powerful methodology to help us think about programs, and no conventional language even begins to meet that need. In fact, conventional languages create unnecessary confusion in the way we think about programs.

For twenty years programming languages have been steadily progressing toward their present condition of obesity; as a result, the study and invention of programming languages has lost much of its excitement. Instead, it is now the province of those who prefer to work with thick compendia of details rather than wrestle with new ideas. Discussions about programming languages often resemble medieval debates about the number of angels that can dance on the head of a pin instead of exciting contests between fundamentally differing concepts.

Many creative computer scientists have retreated from inventing languages to inventing tools for describing them. Unfortunately, they have been largely content to apply their elegant new tools to studying the warts and moles of existing languages. After examining the appalling type structure of conventional languages, using the elegant tools developed by Dana Scott, it is surprising that so many of us remain passively content with that structure instead of energetically searching for new ones. The purpose of this article is twofold; first, to suggest that basic defects in the framework of conventional languages make their expressive weakness and their cancerous growth inevitable, and second, to suggest some alternate avenues of exploration toward the design of new kinds of languages.
Als dit nu gepubliceerd zou zijn, zou ik zo geloven dat het gebaseerd is op de huidige stand van zaken in de wereld van de programmeertalen: de (discussies over) irrelevant details, de enorme language specifications (neem bijvoorbeeld eens die van Java, C# of C++) enz enz. Het is even de vraag wat er ongelofelijk is: het feit dat er niet erg veel verbeterd is sinds 1977, of de zeer scherpe analyse die Backus in 1977 maakte.

Hier kerken je visie aan :9~ : bijna 30 jaar geleden zo exact schrijven over de huidige stand van zaken 8-) . Hierbij vergeleken was George Orwell toch wel een enorme prutser ;) .

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


Verwijderd

Tja, klagen is natuurlijk erg makkelijk. Klagen over diktes van manuals, klagen over 'foute' discussies over details; ik vind het eigenlijk allemaal maar vrij naief klinken. En zonder duidelijk concreet realiseerbaar voorbeeld van hoe het dan allemaal beter zou moeten doe ik dit echt af als gezeur..

(De vergelijking met Orwell vind ik dan ook bijna een flame ;))

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Sneechy: En zonder duidelijk concreet realiseerbaar voorbeeld van hoe het dan allemaal beter zou moeten doe ik dit echt af als gezeur..
Uhme .... Ik ben bang dat je nu toch niet goed begrepen hebt waarover dit gaat ... Dit gaat over functionele programmerentalen. Er is dus wel degelijk een duidelijk en concreet realisbeer voorbeeld van hoe het beter moet. Er bestaan vele functionele talen en ze worden nog gebruikt ook.

Backus houdt in dit paper een pleidooi voor het functionele paradigma door allerlei argumenten tegen van Neumann talen aan te voeren en door te laten zien dat het functionele paradigma superieur is. Of je het er nu mee eens bent of niet: het is leuk om zijn amusante kijk op de van Neumann computer eens door te lezen.
De vergelijking met Orwell vind ik dan ook bijna een flame ;)
Moet je hier tegenwoordig waarschuwen als je gaat flamen? ;) .

Backus is overigens niet bepaald de geringste :+
"Probably there is nobody in the room who has not heard of Fortran and most of you have probably used it at least once, or at least looked over the shoulder of someone who was writing a For. tran program. There are probably almost as many people who have heard the letters BNF but don't necessarily know what they stand for. Well, the B is for Backus, and the other letters are explained in the formal citation. These two contributions, in my opinion, are among the half dozen most important technical contributions to the computer field and both were made by John Backus (which in the Fortran case also involved some colleagues). It is for these contributions that he is receiving this year's Turing award.

[ Voor 0% gewijzigd door mbravenboer op 31-08-2002 17:42 . Reden: Backus bio erbij ;) ]

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


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Over de omvang van language specifications:

De Java Language Specification is op dit moment ongeveer 530 pagina's groot. Dit aantal pagina's zal weer aardig groeien met de introductie van Java Generics. De specificatie bestaat voornamelijk uit natuurlijke taal, met als enige formele specificatie een (zwaar verkrachtte) context-vrije grammatica van de taal Java. De natuurlijke taal in de Java Language Specification is vaak onduidelijk, informeel of onvolledig. Dit zorgt voor onduidelijkheid bij ontwikkelaars van tools die werken op de taal Java, waaronder uiteraard compilers.

IBM heeft een grote lijst met problemen in de Java Language Specification (Java Spec Report. Sun zelf houdt ergens ook een aardig lijstje bij. Het aantal problemen zou een stuk minder groot zijn geweest als de specificatie formeel was geweest. Dit is echter erg lastig, gezien de aard van talen in de categorie Java. Verder is het aantal non-terminals in Java enorm, ook al is dit aantal nog relatief klein vergeleken met concurrende talen (C#, C++ bijvoorbeeld). Er zijn in een taal als Java dus veel verschillende 'zaken'. Dit maakt het werken met de taal een stuk minder aangenaam.

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


Verwijderd

mbravenboer schreef op 31 augustus 2002 @ 17:39:
Uhme .... Ik ben bang dat je nu toch niet goed begrepen hebt waarover dit gaat ... Dit gaat over functionele programmerentalen. Er is dus wel degelijk een duidelijk en concreet realisbeer voorbeeld van hoe het beter moet. Er bestaan vele functionele talen en ze worden nog gebruikt ook.

Backus houdt in dit paper een pleidooi voor het functionele paradigma door allerlei argumenten tegen van Neumann talen aan te voeren en door te laten zien dat het functionele paradigma superieur is. Of je het er nu mee eens bent of niet: het is leuk om zijn amusante kijk op de van Neumann computer eens door te lezen.
Ik heb alleen de door jouw geciteerde paragrafen gelezen. Als hij trouwens doelt op functionele programmeertalen neem ik hem nog minder serieus, aangezien ik functioneel programmeren absoluut geen realistisch alternatief vind, laat staan een betere vorm van programmeren.
Backus is overigens niet bepaald de geringste :+

[...]
Een Turing award verandert mijn mening over hem niet (verder is Orwell ook niet bepaald de geringste :+).
Waarom merkwaardig? Ik was toen niet overtuigd van het nut en de elegantie van functioneel programmeren, nu nog steeds niet.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Sneechy: Ik heb alleen de door jouw geciteerde paragrafen gelezen.
En dat terwijl ik nog speciaal zei dat je alles moest lezen! >:) ;) .
Als hij trouwens doelt op functionele programmeertalen neem ik hem nog minder serieus, aangezien ik functioneel programmeren absoluut geen realistisch alternatief vind, laat staan een betere vorm van programmeren.
Realistisch kan ik op dit moment zeker begrijpen, al was het alleen al vanwege de grote groep 'legacy programmeurs' die alleen imperatief gewend zijn te programmeren ;) . Geen 'betere vorm' vind ik wat al te snel gaan. Ik ben benieuwd of je dat kan onderbouwen.
Waarom merkwaardig? Ik was toen niet overtuigd van het nut en de elegantie van functioneel programmeren, nu nog steeds niet.
Toen ik de eerste post plaatste had ik het idee dat je het stuk wel gezien had, maar niet bekend was met het functionele paradigma. Dat was dus duidelijk wel zo en daarom vond ik je reactie merkwaardig (je merktte immers op dat er geen alternatief wordt geboden). Dat kwam dus echter door mijn beperkte quote....

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


Verwijderd

mbravenboer schreef op 31 augustus 2002 @ 18:05:
Geen 'betere vorm' vind ik wat al te snel gaan. Ik ben benieuwd of je dat kan onderbouwen.
Mijn posts in het topic dat je hierboven aanhaalde gaan uitgebreid in op mijn bezwaren tegen het functionele paradigma.

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

Alarmnummer

-= Tja =-

Het functionele paradigma lijkt me redelijk beperkt toepasbaar (hoeveel systemen zie je die volledig functioneel zijn opgezet). Maar er zitten wel allerlei elementen in die ook zeer goed in bv oo talen verwerkt zouden kunnen worden. Zoals bv een krachtiger typesysteem, patterns, hogere orde functies (niet echt non oo trouwens).

Ik ben nu met Nice bezig. Dit kan je zien als een taaluitbreiding op java, en daarin zie je oa deze elementen in terug. Misschien kan je er eens rondkijken. Je zult onder de indruk zijn :)

[edit]
en kijk hier eens voor wat voorbeelden van mij.

Verwijderd

Alarmnummer schreef op 31 augustus 2002 @ 18:21:
Ik ben nu met Nice bezig. Dit kan je zien als een taaluitbreiding op java, en daarin zie je oa deze elementen in terug. Misschien kan je er eens rondkijken. Je zult onder de indruk zijn :)
In dit topic vertelde ik je al waarom ik absoluut niet onder de indruk ben van Nice :).

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

Alarmnummer

-= Tja =-

Ik vind het persoonlijk een beetje getuigen van kortzichtheid, en je niet willen inlaten met andere technieken omdat je vast zit aan c++. En helemaal het feit dat je aankomt zetten dat multidispatch en open objecten niet taalwaardig zijn, omdat je bv de 1e ook met een design pattern erin kan krijgen.

Het gaat er juist om dat je meer aan de taal over kan laten zodat jij zelf minder code hoeft te schrijven. Doordat je minder code hoeft te schrijven ben je minder tijd kwijt, en je maakt minder fouten. Daarnaast is je code makkelijker te begrijpen want je hoeft minder dingen eromheen te proggen.

Verwijderd

Alarmnummer schreef op 31 augustus 2002 @ 18:36:
Ik vind het persoonlijk een beetje getuigen van kortzichtheid, en je niet willen inlaten met andere technieken omdat je vast zit aan c++.
Hoe kom je erbij dat ik 'vast' zit aan C++ :?. Ik ben gewoon nog niks tegengekomen waarvan ik zeg: 'ja, dat is toch wel beter, laat ik daar eens op overstappen'. Verder vind ik het kortzichtig om mij kortzichtig te noemen; ik heb Nice wel degelijk bestudeerd, maar zie Java+Nice gewoon niet zitten als vervanger voor wat ik nu in C++ doe.
En helemaal het feit dat je aankomt zetten dat multidispatch en open objecten niet taalwaardig zijn, omdat je bv de 1e ook met een design pattern erin kan krijgen.

Het gaat er juist om dat je meer aan de taal over kan laten zodat jij zelf minder code hoeft te schrijven. Doordat je minder code hoeft te schrijven ben je minder tijd kwijt, en je maakt minder fouten.
Wij zijn het inderdaad oneens over welke features built-in in een taal moeten zitten; simpel meningsverschil.

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

Alarmnummer

-= Tja =-

Verwijderd schreef op 31 augustus 2002 @ 18:44:
[...]

Hoe kom je erbij dat ik 'vast' zit aan C++ :?. Ik ben gewoon nog niks tegengekomen waarvan ik zeg: 'ja, dat is toch wel beter, laat ik daar eens op overstappen'.
Je zou er eens mee kunnen experimenteren. Ik ben op dit moment bezig met een 2e orde typessysteem te schrijven in Nice en kan niets anders zeggen dat ik het een verademing vind. Je objecten blijven door de open objecten veel schoner, en daarnaast is multidispatch zeer handig. En ook de null problematiek is zeer elegant opgelost.
Verder vind ik het kortzichtig om mij kortzichtig te noemen; ik heb Nice wel degelijk bestudeerd, maar zie Java+Nice gewoon niet zitten als vervanger voor wat ik nu in C++ doe.
Het hoeft een taal ook niet te vervangen, maar het gaat erom dat je ziet wat allerlei beperkingen zijn. En bij een visitor krijg je ook niet dezelfde elegante syntax als bij open objects.

Ik zal er verder maar niet op door blijven gaan, want ik heb een beetje de indruk dat ik tegen een houten plank zit te praten.
Wij zijn het inderdaad oneens over welke features built-in in een taal moeten zitten; simpel meningsverschil.
Waarom programmeer je dan niet in ASM? Daar kan je ook alles in maken.

Verwijderd

Alarmnummer schreef op 31 augustus 2002 @ 18:49:
Ik zal er verder maar niet op door blijven gaan, want ik heb een beetje de indruk dat ik tegen een houten plank zit te praten.
Ik ben blij dat je dit eindelijk (zeker na dat andere topic) inziet; de zaken waarover wij van mening verschillen hebben veelal veel te maken met smaak, en zoals we allemaal weten valt daarover simpelweg niet te twisten (vandaar ook het 'houten plank'-gevoel dat overigens wederzijds is).
Waarom programmeer je dan niet in ASM? Daar kan je ook alles in maken.
Goedkoop hoor, mensen die bepaalde language features die jij toevallig leuk vindt liever niet built-in zien naar assembler verwijzen..

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Sneechy :In dit topic vertelde ik je al waarom ik absoluut niet onder de indruk ben van Nice :).
Ach, als je al niet onder de indruk bent van de persoon van Backus zegt dat verder niet zo veel ;) .

Bij nieuwe taal-features tov van een bestaande OO taal (zoals in Nice tov Java, Aspect Oriented Programming), gaat het met name of kleine verbetering van de manier van uitdrukken. Het gaat dan met name om abstraherende functionaliteit die je in staat stelt om beter of compacter iets uit te drukken. Dat je die zaken niet belangrijk vind, kan ik best begrijpen, maar ze kunnen voor andere mensen en andere toepassingen wel belangrijk zijn. Ze willen zo weinig mogelijk lastig gevallen worden met irrelevante details en als het goed is zorgen de nieuwe taal features daarvoor.

Bij basistalen als C (en in mindere mate C++) draait het in feite om hele andere zaken. Zij vormen de onderkant van programmeertalen en zeker C is in mijn ogen langzamerhand het moderne assembly aan het worden: onmisbaar, maar je moet wel weten wat je er in gaat schrijven.

Bij volledige andere paradigma's zoals het functionele, herschrijf-systemen, logisch programmeren enz enz gaat het met name om een totaal andere manier van uitdrukken. Dat kan erg verwarrend zijn als je vanuit een volledige imperatieve achtergrond met deze talen begint. Of je die manier van uitdrukken prettiger vind, zal van persoon tot persoon sterk verschillen. Het zal waarschijnlijk eigenlijk vooral van applicatie tot applicatie verschillen. Ik werk op dit moment vooral in twee talen: Stratego (transformatie-taal met functioneel luchtje) en Java. Ik schrijf in beide talen volledig andere applicaties. Code generatie zou ik nooit in Java (of C++, C# of ...) gaan schrijven. Een programma-transformaties evenmin. Een database applicatie met een GUI schrijf ik echter gewoon in Java.

De kern van de zaak is niet zozeer dat het functionele paradigma volledig superieur is. Ik denk dat de huidige generatie OO talen die modern beweren te zijn (C#, Java) een groot aantal fundamentele gebreken hebben die veel te maken hebben met een grote aanhankelijkheid aan het verleden. Het lijkt erop dat .NET IL op dit moment sterk aan het verbeteren is (zie alle stukken van Don Syme) om zo een wat bredere kijk op de zaak te ontwikkelen. Dat vind ik positief en ik ben benieuwd hoe deze mogelijkheden terug te vinden zullen zijn in C# of Java. Het lijkt er in ieder geval dat er na Java (de moderne Pascal) eindelijk eens een vrij frisse wind gaat waaien. Misschien moet een generatie talen altijd eerst geminimaliseerd worden voordat deze verbeterd wordt?

De compacte manier van uitdrukken in Stratego en functionele talen als Haskell veroorzaakt grote ergernis als ik weer in Java moet programmeren. Dit komt voornamelijk door het grote aantal verschillende zaken (non-terminals) en de gebrekkige formele basis. Helaas wordt dit vrijwel volledig veroorzaakt door de assignment, die uiteraard niet weg te denken is. Het is dus de vraag in hoeverre er iets kan verbeteren zolang er assigments zijn...

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


Verwijderd

mbravenboer schreef op 31 augustus 2002 @ 20:58:
Ach, als je al niet onder de indruk bent van de persoon van Backus zegt dat verder niet zo veel :).
Ik denk dat er sprake is van een misverstand. Dat ik niet onder de indruk ben van Nice komt absoluut niet doordat ik Nice's features allemaal onzin vind, maar doordat C++ me naar mijn mening al genoeg in staat stelt gebruik te maken van veel van de betreffende technieken (tuples, geparameteriseerde types, optionele parameters, anonymous functions, multidispatch). Nice is echter zeker een uitkomst voor die arme Java'ers ;).
(Je Backus-fetisjisme begint trouwens rare trekjes te krijgen :|)
Het zal waarschijnlijk eigenlijk vooral van applicatie tot applicatie verschillen. Ik werk op dit moment vooral in twee talen: Stratego (transformatie-taal met functioneel luchtje) en Java. Ik schrijf in beide talen volledig andere applicaties. Code generatie zou ik nooit in Java (of C++, C# of ...) gaan schrijven. Een programma-transformaties evenmin. Een database applicatie met een GUI schrijf ik echter gewoon in Java.
Jij bent zo te horen (gelukkig) zowieso al een stuk conservatiever dan Backus, die duidelijk af wil van Von Neumann talen.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Sneechy: Nice is echter zeker een uitkomst voor die arme Java'ers ;).
Net zoals jij in C++ heel goed weet hoe je om het ontbreken van features uit Nice heen kan werken, weten Java'ers ook heel goed hoe ze dit in Java kunnen doen :+ . Nice bevat imho maar weinig functionaliteit die de afstand met C++ kleiner maakt dan die met Java (uitgaande van Generic Java).
Je Backus-fetisjisme begint trouwens rare trekjes te krijgen :|
Mwah, jouw reacties hebben al een paar keer denigrerende opmerkingen over Backus bevat. Ik heb respect voor personen die belangrijk zijn geweest voor de informatica en Backus is daar zeker 1 van. Dat heeft niets met fetisjisme te maken. Je hoeft echt niet te gaan kwijlen bij het denken aan Backus, maar jouw opmerkingen zijn nogal het andere uiterste.
Jij bent zo te horen (gelukkig) zowieso al een stuk conservatiever dan Backus, die duidelijk af wil van Von Neumann talen.
Mwah, je moet de amusante opzet van het stuk niet al te serieus nemen. Backus heeft gewerkt aan Fortran en maakt in dit stuk daar nog een opmerking over (in relatie tot Algol 68). Backus is echt niet gek, maar probeert denk ik meer een probleem te signaleren wat veel breder erkend wordt. In de introductie doet hij dat op een wat botte/amusante manier ;) .

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


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Functionele talen zijn in principe superieur aan imperative. Het enige probleem is dat computers veel beter om kunnen gaan met imperatieve talen, en functionele talen daarom iha erg langzaam zijn. Het is ook lastig om I/O uit te drukken, en het updaten van data structuren is langzaam/lastig.
Een heel erg groot voordeel is referentiele transparantie, dwz een functie resultaat hangt alleen af van de argumenten waar hij mee wordt aangeroepen en niet van de tijd van aanroep. Hierdoor kan je automatisch een functioneel programma heel makkelijk parallel draaien (en ook bv correctsheid bewijzen geven, handig voor kern centrales)
Als we nu allemaal op ons bureau een systeem hadden staan met honderd 20Mhz cpus, ipv een 2Ghz dan zouden functionele talen zeker het overwicht hebben gehad.

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

Alarmnummer

-= Tja =-

Jij gaat ervanuit dat we het hier over een pure functionele programmeertaal hebben, die dus geen updates toelaat. Dit kan voor sommige dingen erg vervelend zijn, en traag.

Vanuit theoretisch oogpunt vind ik pure functionele talen erg mooi, maar ik betwijfel of deze in het algemeen beter inzetbaar zijn dan onpure functionele / imperatieve talen.

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 21-08 17:14
Pure talen zijn geschikt om flame wars te voeren in discussie fora.

Om in de echte wereld te werken moet een programmeertaal bruikbaar zijn in de driehoek probleem, programmeurs en hardware. Hier zien we ingenieurs keuzes opduiken.

Vergelijk het met een Civiel technisch ingenieur. Je kunt beton nog zo mooi vinden, maar zonder stalen wapening stort je flat bij een beetje wind in. Een beetje onpuurheid leidt tot veel meer complexiteit, maar ook veel meer real-world usability.

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 vind het wel degelijk een stukje achterhaald gezever.

Reden hiervoor is: als ik kijk naar assembler, dan is dat in vele, vele jaren niet / nauwelijks gewijzigd. Dit komt omdat de vraag naar nieuwe functionaliteit op het gebied van abstractie niet echt gewenst waren.

Op programmeertaalgebied echter is dit wel degelijk het geval. VM talen met GC, zoals Java en de .NET rits aan talen, hebben een complexe structuur en een grote syntaxis maar beslaan ook een veel groter functioneel gebied dan bv C. In VM talen met GC is Von Neumann verleden tijd: de data/programmatuur memory scheiding is virtueel: het alloceren en managen van memory voor data EN programmatuur is geregeld door de omgeving mbv abstractie van de taal en niet door de developer.

Wat ik wel vind, en al jaren een bron van ergernis, is dat het pure conservatisme op het gebied van programmeertalen in de IT zo langzamerhand de spuitgaten uit begint te lopen. Er ZIJN genoeg alternatieven die productiever werken, met het oog op de toekomst en met het oog op onderhoudbaarheid en robuustheid de betere keus zijn. TOCH besluit men veelvuldig vast te houden aan 3e generatie-talen waarbij de programmeur EN een enorme syntactische kennis nodig heeft EN veel van typen (dat is: tikken op je toetsenbord, een volledig a-productieve manier van commando's genereren) moet houden EN geen enkele misstap mag maken in het ontwikkelen van de overhead-code, anders resulteert dit in een onherroepelijke bug.

Ik doel hier op de C++ of erger: C programmatuur die tegenwoordig nog altijd wordt geschreven, terwijl hier allang geen reden meer voor is: compilers van talen die simpeler zijn doch doeltreffender, genereren ook native code. (Zoals bv de C# compiler icm ngen.exe).

Het vasthouden aan aloude 3GL's houdt het gros van de softwareengineers vastgepinned op de plek waar ze zitten en geeft ze geen zicht op progressie. Dit is niet voorbehouden aan C++/C programmeurs overigens. Ook bv voor dit forum dichter bij huis is dit zichtbaar: dataset-bewerkingslogica geimplementeerd in Php of ASP-scripts terwijl dit in T-/PL-/P-SQL veel krachtiger kan worden beschreven. Dit wordt veelvuldig vermeden omdat men kiest voor een database die geen stored procedures noch userdefined functies ondersteunt, geen views, laat staan parametrized views, geen triggers en geen subqueries. Men gaat dus bewust veel extra werk doen in een taal die daarvoor niet leent, terwijl men verzuimd de nieuwere ontwikkelingen te gebruiken voor wat men moet implementeren.

Een deel van de software-engineers houdt zichzelf tegen in de ontwikkeling, en dat is een slecht ding, ookal krijgen zij op een gegeven moment de rekening ervan wel gepresenteerd. Ikzelf ben al jaren fan van visual programming, en zie daar voor een deel van de software-development taken (lees: de meerderheid van de software development taken) de toekomst liggen; als je kijkt naar bv Bizztalk server, hoe je daar je BL kunt 'designen', amazing gewoon. Ga dat maar eens doen in C++ of andere 3GL. Is uiteraard mogelijk, maar in een veelvoud van tijd en ellende. Ooit stilgestaan bij het feit dat ALLE programmatekst van veel programmatuur wordt ingehamerd op een keyboard? En daarna wordt teruggelezen door mensenogen die de programmatext laten interpreteren door een human brain, die op zijn zachtst gezegd fuzzy met de gelezen materie omgaat? Ooit stilgestaan bij het feit dat dat wellicht een aaneenschakeling van zwakheden is die wellicht moet worden opgevangen door nieuwere ontwikkelingen?

Ergo: een groep wil gewoon niet, die houdt vast aan de oude talen en ontleent daar status aan. Zolang die groep hard blijft roepen dat die talen de beste zijn en de rest gebruikt wordt door nep-developers (even gecharcheerd gezegd) blijven andere groepen naar hen opkijken. Ophouden daarmee! Kijk vooruit, het is ook een teken van kwaliteit als je de JUISTE taal kunt kiezen voor de job die je moet doen, en veelal is dat een andere dan de taal gepropageerd door zg. top-programmeurs.

Verwijderd

btw: ik zie de von neumann link met VM talen met een GC dus niet. Uberhaupt is de von Neumann architectuur alleen in HW nog terug te vinden en niet meer in software, daar men daar met process boundaries werkt en niet met data- en programma-memory, de basis van de von Neumann architectuur (en de bottleneck ;)).

Dat hij functionele talen propageert met als basisargument de inmense syntaxis van imperatieve talen, waarom dan geen RISC assembler? De complete syntaxis kan op 1 a4-tje.

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 21-08 17:14
Verwijderd schreef op 02 september 2002 @ 10:04:
Ik vind het wel degelijk een stukje achterhaald gezever.
...
Wat ik wel vind, en al jaren een bron van ergernis, is dat het pure conservatisme op het gebied van programmeertalen in de IT zo langzamerhand de spuitgaten uit begint te lopen. Er ZIJN genoeg alternatieven die productiever werken,... als je kijkt naar bv Bizztalk server, hoe je daar je BL kunt 'designen', amazing gewoon. Ga dat maar eens doen in C++ of andere 3GL. Is uiteraard mogelijk, maar in een veelvoud van tijd en ellende.
Ik heb recent een aanvaring gehad met BizTalk server. Dit product was hier ingezet in precies de situatie waarvoor Microsoft 'm bedoeld had, met expliciete ondersteuning van Microsoft. Na een jaar was de conclusie dat development niet sneller was; dat BizTalk performance om te huilen was (zelfs met dedicated servers a 300K euro) en dat de (C++) adapters die nodig waren om BizTalk performance op een acceptabel nivo te krijgen complexer waren dan de in BizTalk geimplementeerde functionaliteit (!) Kortom, BizTalk is nog niet geschikt voor meer dan toy app, en wij waren veel beter af geweest als we conservatief waren geweest.

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


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 21-08 17:14
Verwijderd schreef op 02 september 2002 @ 10:21:
btw: ik zie de von neumann link met VM talen met een GC dus niet. Uberhaupt is de von Neumann architectuur alleen in HW nog terug te vinden en niet meer in software, daar men daar met process boundaries werkt en niet met data- en programma-memory, de basis van de von Neumann architectuur (en de bottleneck).
de von Neumann architectuur is nog steeds in alle gangbare talen te zien - de essentie van die architectuur is dat er zo'n verschil is. De meeste talen behandelen code en data als twee volledig gescheiden entiteiten - zo is self-modifying code vrijwel onmogelijk, hooguit via non-portable hacks. De gebruiker een regel code laten intikken en deze executeren is voorbehouden aan geinterpreteerde talen, en zelfs dan is de functionaliteit vaak beperkt.

Evengoed heeft GC hier natuurlijk geen bal mee te maken. GC is "maar" een kwestie van datastructuren; de von Neumann-architectuur beschrijft datagebruik niet in dat soort details.

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

MSalters schreef op 02 september 2002 @ 11:21:
[...]
de von Neumann architectuur is nog steeds in alle gangbare talen te zien - de essentie van die architectuur is dat er zo'n verschil is. De meeste talen behandelen code en data als twee volledig gescheiden entiteiten - zo is self-modifying code vrijwel onmogelijk, hooguit via non-portable hacks. De gebruiker een regel code laten intikken en deze executeren is voorbehouden aan geinterpreteerde talen, en zelfs dan is de functionaliteit vaak beperkt.
CMyClass foo = new CMyClass();

Code aanmaken met data-embedded, behandelbaar als data en als code. De verschillen zijn technisch niet zichtbaar, alleen semantisch: een pointer naar een object of naar een struct met louter data is semantisch verschillend, technisch identiek. Waar zie jij scheiding in data en code? Ik zie het niet.
Evengoed heeft GC hier natuurlijk geen bal mee te maken. GC is "maar" een kwestie van datastructuren; de von Neumann-architectuur beschrijft datagebruik niet in dat soort details.
GC geeft je een dermate abstract level van memory gebruik dat je je niet meer bekommert om memory als entiteit. En dat is PRECIES hetgeen bedoeld wordt met de link naar von Neumann's ideeen: dmv een GC + VM (en direct daaraan verbonden, een OO taal) gebruik je taal-elementen door elkaar: zowel data als code-instances, en behandelt ze wel als data cq code-instances, maar dmv de semantische aspecten van de 2. Je bekommert je niet meer om de scheiding tussen data en code, want die is semantisch gezien er niet meer, en dmv de GC technisch ook niet meer, want memory is iets dat wordt beheerd door de omgeving, niet door de taal en de developer. Waardoor de link met von Neumann wegvalt.

Verwijderd

MSalters schreef op 02 september 2002 @ 11:14:
[...]
Ik heb recent een aanvaring gehad met BizTalk server. Dit product was hier ingezet in precies de situatie waarvoor Microsoft 'm bedoeld had, met expliciete ondersteuning van Microsoft. Na een jaar was de conclusie dat development niet sneller was; dat BizTalk performance om te huilen was (zelfs met dedicated servers a 300K euro) en dat de (C++) adapters die nodig waren om BizTalk performance op een acceptabel nivo te krijgen complexer waren dan de in BizTalk geimplementeerde functionaliteit (!) Kortom, BizTalk is nog niet geschikt voor meer dan toy app, en wij waren veel beter af geweest als we conservatief waren geweest.
M.a.w.: Ervaring met 1 implementatie onderschrijft het bewijs dat aloude talen beter zijn?

Weltrusten. Je ervaring is dan wellicht een negatieve, neemt niet weg dat de ideeen achter biztalk server wel ervoor gaan zorgen dat aloude methodieken EINDELIJK naar het archief verhuizen.

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 21-08 17:14
Verwijderd schreef op 02 september 2002 @ 14:33:
[...]

CMyClass foo = new CMyClass();

Code aanmaken met data-embedded, behandelbaar als data en als code. De verschillen zijn technisch niet zichtbaar, alleen semantisch: een pointer naar een object of naar een struct met louter data is semantisch verschillend, technisch identiek. Waar zie jij scheiding in data en code? Ik zie het niet.
Fout. Er wordt geen regel code/CPU instructie door/voor aangemaakt. Het enige wat er gebeurt is dat er een data veld refereert aan een stukje code (vtable pointers ingevuld).
Bekijk het van deze kant: CMyClass code kan in ROM; foo data moet in RAM. Zie je nu de scheiding tussen code en data?
[...]

GC geeft je een dermate abstract level van memory gebruik dat je je niet meer bekommert om memory als entiteit. En dat is PRECIES hetgeen bedoeld wordt met de link naar von Neumann's ideeen: dmv een GC + VM (en direct daaraan verbonden, een OO taal) gebruik je taal-elementen door elkaar: zowel data als code-instances, en behandelt ze wel als data cq code-instances, maar dmv de semantische aspecten van de 2. Je bekommert je niet meer om de scheiding tussen data en code, want die is semantisch gezien er niet meer, en dmv de GC technisch ook niet meer, want memory is iets dat wordt beheerd door de omgeving, niet door de taal en de developer. Waardoor de link met von Neumann wegvalt.
Je herhaalt nu met veel woorden wat je eerder ook al zei. Evengoed creeer je niet dynamisch code instanties. Alle objecten van een enkele klasse delen de code ( dat is wat ze tot een klasse maakt) maar hebben aparte data. Dan kemerkende verschil tussen een klasse en een object (typerend voor OO-talen) is dus een reflectie van de onderliggende von Neumann architectuur.

Een andere manier om naar GC te kijken is door uit gaan van een infinite-memory model. Op een (theoretische) von Neumann computer met oneindig geheugen is er geen verschil tussen GC en non-GC. GC geeft geheugen vrij wat niet verder gebruikt kan worden, maar de totale hoeveelheid vrij geheugen veranderd daardoor niet (blijft oneindig). Zonder GC heb je een memory leak, maar dat is dus niet merkbaar.

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

Mja, daar had ik even niet aan gedacht idd. (de VTable pointers naar hetzelfde stukje code in core.) Echter, bv bij gebruik van COM components is dit niet het geval: een class factory maakt wel degelijk nieuwe instances aan in core die niet allemaal een stuk code hoeven te delen. (In de praktijk is dit wel het geval, omdat een dll meerdere keren gemapped is in verschillende processes, maar de vtable addresses zijn local in de process' addresspace en niet global (fysieke adressen)).

In theorie heb je gelijk mbt je GC-v.Neumann redenatie, echter het is juist de scheiding die de von Neumann architectuur kenmerkt, die dus infinite stellen, maakt de scheiding overbodig en dus deze discussie ;). Door de scheiding juist aan te brengen op finite memory MOET je als developer daar rekening mee houden en in het geval van de wat oudere talen, zelf de overhead code voor produceren/meebrengen. In het geval van een GC is dat dus niet het geval en verdwijnt het besef van memory als zodanig, wat IMHO (maar daar kun je dus van mening over verschillen) inhoudt dat ook daarmee een scheiding tussen data- en codememory, voor de developer althans (en daar gaat het hier om, het zit in de TAAL volgens Backus) verdwijnt. (die IMHO ook al weg is, op taalniveau, op het gebied van OO talen, want je aangehaalde sharing van code en het niet sharen van data tussen objects, is niet in sommige OO talen terug te vinden maar is een puur compiler-related issue.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Otis: Ik vind het wel degelijk een stukje achterhaald gezever.
Ik heb je verhaal gelezen en omdat ik je langer ken dan vandaag weet ik precies wat je bedoelt, maar ik kan eigenlijk niet uit jouw verhaal afleiden waarom je het gezever vindt.

Het gaat hier over een fundamenteel ander paradigma, wat nog steeds onderwezen wordt en nog steeds gebruikt wordt. Het is niet zomaar een ander taaltje of een stukje dom geschop van Backus, maar een essentieel andere kijk op programmeertalen.

Von Neumann heeft zoals MSalters al aangaf vooral te maken met het gehele begrip geheugen en assignment. Elke taal met een assignment ruikt naar Von Neumann en garbage collection verandert daar niet zo veel aan: of je nu op een abstractere manier met geheugen werkt (hoe prettig dat ook is) of op een vrij primitieve manier zoals in C, maakt fundamenteel niet zoveel uit. Het hele verhaal van Backus draait om de assignment, omdat deze juist zorgt voor bepaalde eigenschappen die als je op bepaalde manier tegen software aankijkt absoluut niet wenselijk zijn.

De invloed van functioneel talen en de lambda calculus is enorm geweest, ook op conventionele programmeertalen. Microsoft is bezig met diverse experimenten om constructies uit functionele talen op te nemen in de IL. Deze ideeen zijn al eerder geopperd voor Java, maar nooit doorgedrongen tot de botte hersens van Sun. In .NET liggen de kansen een stuk beter en je zal daarom waarschijnlijk binnenkort, samen met de geparameterizeerde typen, functionele capaciteiten terugvinden in de IL en daarmee hoogst waarschijnlijk ook in C# zelf.

Er zijn duidelijke voordelen van functionele talen, maar uiteraard ook grote nadelen. De voordelen hebben met name te maken met de goede formele basis, uitstekende mogelijkheden om te redeneren over een programma geschreven in een functionele talen en een compacte en krachtige manier van uitdrukken. De nadelen hebben met name te maken met het volledige monopolie van het imperatieve paradigma en daarmee dus het 'vreemde' van functioneel programmeren.

Redeneren over software wordt steeds belangrijker (correctheid, refactoring, meta-tools) en daarom zie ik grote kansen voor talen die goede mogelijkheden bieden op dit punt. Een klein voorbeeld: de taal Nice heeft een uitbreiding om aan te geven of een bepaalde waarde null mag zijn. Dit gebeurt door een vraagteken voor het type te zetten: ?String. In Java/C# is het niet mogelijk om dit aan te geven. Het is echter wel altijd gedocumenteerd in de Javadoc. Meta tools kunnen hier niets mee en daarom wordt het heel lastig voor tools om te redeneren over de mogelijke waarden van een variabele. Constructies die code beter 'documenteren' zijn niet alleen nuttig voor een programmeur, maar met name ook voor tools die werken op deze taal (typisch natuurlijk compilers). Correctheid bewezen van een concreet stuk software is absoluut geen dagelijkste praktijk en de gevolgen daarvan zie je overal om je heen. Functionele talen zijn bij uitstek talen waarover je prachtig kunt redeneren. Toegegeven: het gaat allemaal erg ver, maar het kan wel een goede bron van inspiratie zijn.
dat is: tikken op je toetsenbord, een volledig a-productieve manier van commando's genereren.
Ik neem aan dat je hier weer doelt op volgens jou achterhaalde fenomeen 'taal'. Omdat we het daar al vaker uitgebreid over gehad hebben en een discussie op dit punt niet echt opschiet, laat ik dat maar even zitten ;) .
[verderop in je verhaal, even naar voren gehaald]
Ooit stilgestaan bij het feit dat ALLE programmatekst van veel programmatuur wordt ingehamerd op een keyboard? En daarna wordt teruggelezen door mensenogen die de programmatext laten interpreteren door een human brain, die op zijn zachtst gezegd fuzzy met de gelezen materie omgaat? Ooit stilgestaan bij het feit dat dat wellicht een aaneenschakeling van zwakheden is die wellicht moet worden opgevangen door nieuwere ontwikkelingen?
Ik denk dat het probleem niet zozeer ligt bij het fenomeen taal, maar voornamelijk in te brede inzet van general purpose talen. Domein specifieke talen, die je wel in staat stellen om een probleem in een bepaald domein compact en prettig uit te drukken, zouden meer toegepast moeten worden en ze zullen ook zeker een belangrijke rol gaan spelen. Code generatie is hierbij ook uitermate belangrijk. Ik denk dat het van groot belang is dat er goede tools komen om te helpen om op een efficiente manier een duidelijke specificatie van een probleem in een bepaald domein te vertalen in implementatie in een general purpose language. LLBL is hiervan een aardig voorbeeld, maar eigenlijk zouden dergelijke code-generatoren nog veel eenvoudiger te implementeren moeten zijn. Ik heb de laatste weken gewerkt aan een vergelijkbare code generator (maar dan voor Java) die gebruik maakt van Stratego als transformatie taal en concrete syntax voor Java. Hierdoor ontstaat een hele compacte en krachtige manier om code te genereren. Ik denk dat deze ideeen nog verder doorgevoerd moeten worden en er redelijke laag-drempelige tools moeten komen voor het zelf specificeren van code-generatie.
Men gaat dus bewust veel extra werk doen in een taal die daarvoor niet leent, terwijl men verzuimd de nieuwere ontwikkelingen te gebruiken voor wat men moet implementeren.
Tja, in die analyse kan ik me inderdaad goed vinden. Aan de andere kant is natuurlijk wel zo dat je hier geen state-of-the-art constructies moet gaan verwachten. In het algemeen kost het veel tijd om nieuwe ontwikkelingen te volgen en ook het nut van deze ontwikkelingen in te zien. Op de opzet van elk stukje software valt wel kritiek te leveren door aan te komen zetten met technologie die het implementerne van die software een stuk eenvoudiger of fraaier hadden gemaakt (ook bijvoorbeeld LLBL).

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


Verwijderd

Ik vond het gezever omdat in dat timeframe men helemaal niet klaar was met imperatieve talen, de claims die hij maakt als basis voor zn stelling onderschrijf ik totaal niet, vandaar.

In het kort komt het er op neer dat developers anno 2002/2003 nog altijd op toetsenborden rammen, voor het invoeren van programmateksten, codegeneratoren ten spijt aan de ene kant en het negeren van krachtigere talen/tools anderzijds. De claims die Backus maakt, dat de talen te groot zijn qua specificaties, is IMHO een gevolg van de toenemende complexiteit in de vraag naar functionaliteit, maar daarnaast ook een gevolg van het feit dat men vasthoudt aan 1 of 2 talen en daar alles mee WIL doen, wat tot gevolg heeft dat functionaliteit die niet terug te vinden is in die talen, wordt toegevoegd.

Code-generatie is iets dat in feite hetzelfde is als op een 4.5/5GL level programmeren: immers een 3GL vertaalt ook naar andere talen van een lagere orde, in feite 'genereert' deze code. Je bent als developer alleen in een moeilijke syntaxis een code generator aan het bouwen :) Men gebruikt code-generatie eigenlijk veel te weinig vind ik. En het is zo simpel. Met een paar statements heb je al iets werkends dat je wellicht een week werk bespaart.

Het verdient echter een aparte discussie of je in een simpele taal met minder statements dan het resultaat een programmatext kunt genereren die meer statements bevat dan je brontaal en complexer in elkaar steekt. Dit lukt IMHO alleen wanneer de generator kennis bevat die je aanwendt in de taal, iets wat je met algemene generatoren natuurlijk niet wilt. :)

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Otis: Ik vond het gezever omdat in dat timeframe men helemaal niet klaar was met imperatieve talen
Daar zit inderdaad wel wat in, maar aan de andere kant zag hij dit misschien juist als een goed moment om 'in te grijpen', waar hij duidelijker niet bepaald in geslaagd is ;) .

Het is wel opvallend dat er van imperatieve talen steeds nieuwe generaties uitkomen met nieuwe goodies (Structured Programming, OO, AOP bijv), maar functionele talen niet echt zijn verandert. Dit komt volgens mij met name omdat er geen behoefte is om ze te veranderen. Het is zelfs zo dat vele conventionele talen (bijvoorbeeld Python of Perl) steeds meer features opnemen die al tientallen jaren beschikbaar zijn in functionele talen en zelfs al in Lisp. De Lisp-freaks beweren zelfs dat conventionele talen in principe de laatste tientallen jaren met niet veel meer bezig geweest dan met het convergeren naar Lisp. Dat gaat wat ver, maar waar rook is, is vuur ;) .
De claims die Backus maakt, dat de talen te groot zijn qua specificaties, is IMHO een gevolg van de toenemende complexiteit in de vraag naar functionaliteit
Je kan je ook afvragen of het geen teken is dat imperatieve talen alleen maar de vraag naar functionaliteit kunnen voldoen door steeds complexer en omvangrijker te worden.
Men gebruikt code-generatie eigenlijk veel te weinig vind ik. En het is zo simpel.
:> .
Dit lukt IMHO alleen wanneer de generator kennis bevat die je aanwendt in de taal, iets wat je met algemene generatoren natuurlijk niet wilt. :)
Ik denk het juist wel: een concrete generator genereert met kennis van een bepaald domein vanuit een programma geschreven in een domein specifieke taal (wat je heel ruim mag opvatten: XSLT, XPath, SQL, XML formaten enz) een programma in een general purpose language. Juist de kennis van een bepaald domein zorgt ervoor dat de generator nuttig werk doet. Tools rond code-generatie kunnen uiteraard best generiek zijn voor alle code-generatoren, maar de generator zelf moet toch echt domein specifieke kennis met zich meedragen. Waarom zie jij dit anders?

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


Verwijderd

Verwijderd schreef op 02 september 2002 @ 14:33:
CMyClass foo = new CMyClass();

Code aanmaken met data-embedded, behandelbaar als data en als code. De verschillen zijn technisch niet zichtbaar, alleen semantisch: een pointer naar een object of naar een struct met louter data is semantisch verschillend, technisch identiek. Waar zie jij scheiding in data en code? Ik zie het niet.
Niet dat ik er veel verstand van heb, maar halen jullie Von Neuman-cyclus (instructie-fetch, decoderen, executie: zo'n beetje elke processor) en de Harvard-architectuur (gescheiden data- en code-space: bijv. de 8051, bekend van de Electuur) niet doorelkaar?

  • PipoDeClown
  • Registratie: September 2000
  • Niet online

PipoDeClown

Izze Zimpell

Disclaimer: ik ben geen professionele programmeur en snap van veel termen die hier worden gespuid geen hol. Ik ben maar een simpele clown.

Backus heeft het tevens over wetenschappers die het zonde van hun tijd vinden mooie oplossingen te bedenken voor een "programmeer"-taaltje. Het resultaat is wat telt. Waarom zou je dan het programma onnodig complex maken? Maar helaas maak je met Fortran geen fancy bedienings interface.
Discussions about programming languages often resemble medieval debates about the number of angels that can dance on the head of a pin instead of exciting contests between fundamentally differing concepts.
De discussie blijft voortgaan en neigt soms zelfs op de persoonlijke toer te gaan. Moge dat hier niet gebeuren.

Er zijn tevens teveel vertaalslagen aanwezig voordat een processor het "programma" uitvoert (visueel -> metacode -> standaardtaal (C, Pascal etc.) -> opcodes -> processormicrocode -> fysieke hardware).

Computers zijn nog steeds domme machines en snappen niets van wat mensen bedoelen. Daardoor is een zekere vorm van abstractie vereist om deze apparaten toch te laten doen wat mensen willen.

Er zijn zeker veel interessante technieken, maar het meeste heeft alleen een ander naampje gekregen. Oftewel er is niets nieuws onder de zon.

God weet alles, want hij is lid van de Mosad. To protect your freedom i will take that away from you. Mijn drankgebruik heeft ernstig te lijden onder mijn gezondheid.


Verwijderd

Verwijderd schreef op 02 september 2002 @ 21:11:
[...]

Niet dat ik er veel verstand van heb, maar halen jullie Von Neuman-cyclus (instructie-fetch, decoderen, executie: zo'n beetje elke processor) en de Harvard-architectuur (gescheiden data- en code-space: bijv. de 8051, bekend van de Electuur) niet doorelkaar?
De von Neumann architectuur is IMHO de architectuur waarbij je 2 soorten memory hebt: data-memory en code/program memory, en wel fysiek op het moederbord, met 2 bussen naar de CPU, een code bus en een databus.

Verwijderd

mbravenboer schreef op 02 september 2002 @ 20:53:
[...]
Je kan je ook afvragen of het geen teken is dat imperatieve talen alleen maar de vraag naar functionaliteit kunnen voldoen door steeds complexer en omvangrijker te worden.
Nou, je kunt natuurlijk met een handvol instructies alles maken, maar met 1 instructie die 20 statements achter elkaar in zich vat, is een hogere mate van complexheid van de taal, maar ook een stap krachtiger.
[...]
Ik denk het juist wel: een concrete generator genereert met kennis van een bepaald domein vanuit een programma geschreven in een domein specifieke taal (wat je heel ruim mag opvatten: XSLT, XPath, SQL, XML formaten enz) een programma in een general purpose language. Juist de kennis van een bepaald domein zorgt ervoor dat de generator nuttig werk doet. Tools rond code-generatie kunnen uiteraard best generiek zijn voor alle code-generatoren, maar de generator zelf moet toch echt domein specifieke kennis met zich meedragen. Waarom zie jij dit anders?
Ik redeneerde zo: is er een simpele (belangrijk) taal te verzinnen waarbij je met een generieke generator, in minder statements dan de gegenereerde code, een generatieproces kunt beschrijven waarbij je code in een complexere taal kunt genereren met meer statements dan de beschrijving van de generator. Ik denk dat dat niet kan, helaas. (want dat zou inhouden dat je met een simpele taal, C++ kunt genereren dat dus complexer is dan de simpele generatiebeschrijving. En dan niet kleine programma's, maar alle mogelijke C++ code.

Immers, is dat mogelijk, dan kun je C++ vervangen door die simpelere taal. Ik denk echter dat je altijd aan specifieke generators vast zit, die dus kennis hebben van wat er gegenereerd moet worden, anders wordt de generatieprocesbeschrijving even complex of complexer dan de gegeneerde code (iets wat je ziet bij generators die XSL gebruiken :D)

  • PipoDeClown
  • Registratie: September 2000
  • Niet online

PipoDeClown

Izze Zimpell

Verwijderd schreef op 02 september 2002 @ 23:01:
[...]

De von Neumann architectuur is IMHO de architectuur waarbij je 2 soorten memory hebt: data-memory en code/program memory, en wel fysiek op het moederbord, met 2 bussen naar de CPU, een code bus en een databus.
in de cpu is dat tegenwoordig toch nog zo? zie ook de aparte instructie- en aparte datacache.

God weet alles, want hij is lid van de Mosad. To protect your freedom i will take that away from you. Mijn drankgebruik heeft ernstig te lijden onder mijn gezondheid.


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

PipoDeClown schreef op 02 september 2002 @ 21:52:

De discussie blijft voortgaan en neigt soms zelfs op de persoonlijke toer te gaan. Moge dat hier niet gebeuren.
Hehe, discussies gaan in de informatica (wetenschap) vrijwel altijd op een gegeven moment op de persoonlijke toer ;) Ik denk dat er maar weinig gebieden zijn waar zo fel wordt gediscusieerd, en er zo veel "heilige oorlogen" zijn. Windows vs unix en C++ vs Java zijn slechts bekende voorbeelden, dit gaat zo door tot op algoritme niveau, zoniet processor instructie sets :P
Er zijn tevens teveel vertaalslagen aanwezig voordat een processor het "programma" uitvoert (visueel -> metacode -> standaardtaal (C, Pascal etc.) -> opcodes -> processormicrocode -> fysieke hardware).
Imo hoe meer vertaal slagen hoe beter. De meeste experimentele compilers genereren tegenwoordig Ansi C (the platform independent assembler ;) ).
Er zijn zeker veel interessante technieken, maar het meeste heeft alleen een ander naampje gekregen. Oftewel er is niets nieuws onder de zon.
Hmmm... er is al vrij veel nieuws bedacht en geimplementeerd op universiteiten en labs etc. Die dingen zijn alleen iha niet bekend bij het grote publiek. Er zijn veeeel hogere programmeer talen dan C++ of Java. Maar die zijn vaak erg goed op een specifiek gebied, maar niet in het algemeen. Er zijn dus zeker wel nieuwe dingen onder de zon...

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22-08 01:56
Ik wil me verder niet met de inhoudelijk discussie bemoeien, maar volgens mij zegt von Neumann niet meer dan dat een computer bestaat uit een controle-eenheid (voor branching in de program flow), een rekenkundige/logische-eenheid (de ALU), geheugen (voor het opslaan van tussentijdse gegevens) en een invoer-uitvoer interface (voor de communicatie met de buitenwereld; het invoeren van gegevens en het uitvoeren van resultaten). Een Von Neumann machine is niets meer of niets minder dan een stuk hardware dat op die globale manier geconstrueerd is (wat alle computers eigenlijk nog steeds zijn).

Von Neumann stelde daarbij voor, dat in het geheugen zowel gegevens als programmacode opgeslagen kon worden (en dus min of meer dynamisch ingevoerd), waardoor computers niet meer hardwarematig geprogrammeerd hoeven worden. Of in dat geheugen gegevens en programmacode gescheiden zijn (programmacode kan alleen gegevens wijzigen, bijvoorbeeld) of juist niet (programmacode kan zichzelf wijzigen), daar doet het principe voor zover ik weet geen uitspraken over.

Ik ben dan ook erg benieuwd naar de betekenis van de term "von Neumann programmeertaal", die ik hier ook meerdere keren heb horen vallen. Ik ken immers geen programmeertaal die niet geschikt is voor een von Neumann architectuur. Dat functionele talen geen "von Neumann programmeertalen" zouden zijn, lijkt me heel sterk, maar ik wacht met spanning de verklaring af.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
iets wat je ziet bij generators die XSL gebruiken :D
:D Dat is werkelijk een vreselijke aanpak (dat ik dat vind had je waarschijnlijk al gelezen in het Conference .NET topic ;) ). Er is zelfs een volledig boek gepubliceerd over het genereren van Java source code op deze afschuwelijke manier.
Otis: Ik redeneerde zo: is er een simpele (belangrijk) taal te verzinnen waarbij je met een generieke generator, in minder statements dan de gegenereerde code, een generatieproces kunt beschrijven waarbij je code in een complexere taal kunt genereren met meer statements dan de beschrijving van de generator. Ik denk dat dat niet kan, helaas. (want dat zou inhouden dat je met een simpele taal, C++ kunt genereren dat dus complexer is dan de simpele generatiebeschrijving. En dan niet kleine programma's, maar alle mogelijke C++ code.
Hum .... Ik probeer je gedachte-experiment te volgen en ik denk dat ik begrijp wat je bedoelt. Ik denk dat het zinvol is om uit te leggen hoe ik code genereer. Dit is namelijk heel illustratief voor het probleem waar jij op doelt. Veel zul je al weten, maar je bent niet de enige die dit leest hoop ik ;) . Lees het alsjeblieft echt door, want ik weet zeker dat je het echt leuk vind als je het doorgelezen hebt en begrijpt (dat leidt ik af uit je werk aan LLBL).

Code kan je grofweg op twee manieren beschrijven: in concrete syntax, de syntax waarin wij met z'n allen dagelijks programmeren in C++, PHP, Java, C# of wat dan ook, of in abstracte syntax trees. Deze abstracte syntax is een representatie van de code in boomvorm die overeenkomt met de producties van context-vrije grammatica voor de taal, eventueel nog opgeleukt door het ontsuikeren van de toestand.

XML kan je eigenlijk sterk vergelijken met deze abstracte syntax, net zoals je Lisp sterk kan vergelijken met deze abstracte syntax (daar speelt wat leuks, maar dat is verder niet relevant ;) ). XSLT als transformatie-taal voor XML zou je dus ook in kunnen zetten als een tranformatie taal voor abstract syntax trees.

De code-generatie met behulp van XSLT maakt gebruikt van concrete syntax: de taal die je wilt genereren is min of meer exact opgenomen in XSLT (de syntax van XML zorgt uiteraard voor veel moeilijkheden). XSLT 'kent' deze taal niet en in feite is het dus gewoon bezig om pure tekst te genereren, zonder de structuur van deze tekst te snappen.

Je kan code-generatie met behulp van XSLT dit zien:

code:
1
2
3
<xsl:template match=" ..... ">
   <xsl:apply-templates select="a"/> +  3
</xsl:template>


Hier tel je dus 3 op bij de apply-templates "a", wat dan weer een expressie zou moeten zijn (maar uiteraard gewoon tekst is. De aanpak die hier gekozen is, is eigenlijk vrij merkwaardig omdat ik juist de link heb gelegd (niet erg uitgebreid, maar dat heb ik wel eerder gedaan) tussen abstract syntax trees en XML. Er bestaat een sterke relatie tussen deze twee en XSLT is een transformatie-taal voor XML. Vreemd dus eigenlijk dat er opeens met pure tekst wordt gewerkt. Eigenlijk zou het logischer zijn om zo te werken:

code:
1
2
3
4
5
6
<xsl:template match=" ..... ">
   <plus>
      <xsl:apply-templates select="a"/>
      <int-const>3</int-const>
   </plus>
</xsl:template>


Deze structuur die je hier ziet, is ongeveer de structuur van een AST, zoals je die zou kunnen tegenkomen in een compiler of andere tools die op een taal werken. Uiteraard is dit verschrikkelijk verbose en zo mogelijk nog lelijker dan de oplossing met concrete syntax, maar conceptueel is het een stuk fraaier en logischer. Dat XML en XSLT een verbose syntax hebben is niet mijn probleem en ook niet het probleem van het probleem van code-generatie :+ .

Nu ga ik een grappige stap maken. Stratego is namelijk ook een transformatie-taal. Stratego is niet te vergelijken met XSLT, maar opereert ook op een soort XML-achtige structuur. Het gaat hier om ATermen, maar het idee hiervan ligt zo dicht bij XML dat we de verschillen wel kunnen negeren. Stratego is een stuk krachtiger en flexibeler dan XSLT, maar daardoor misschien ook een stukje complexer. Stratego gebruikt echter absoluut geen XML achtige syntax voor zijn eigen constructies, dus dat maakt het een stuk aantrekkelijker.

Stratego is een transformatie-taal die net als XSLT werkt met boom-achtige structuren: je transformeert dus de ene boom naar de andere. Stratego is speciaal bedoelt voor compilerbouw en (complexe) programma transformaties, dus over het algemeen transformeer je in Stratego een AST naar een AST. De taal waarop je werkt (als je Java code genereert Java), wordt ook wel de object taal genoemd. De taal waarin je een tool implementeert die iets met een object taal doet, wordt ook wel de meta taal genoemd.

Stratego werd in het verleden vooral gebruikt voor experimentele compilerbouw, programma optimalisaties en transformaties van de ene taal naar de andere, maar het kan ook prima ingezet worden voor code-generatie. Het grote nadeel hiervan is dat je al snel flinke lappen code krijgt bij code-generatie. Compilerbouw en programma-optimalisaties hebben meestal maar betrekking op vrij kleine delen van een AST, waardoor de AST structuren die je moet beschrijven vrij klein zijn. Bij code generatie ligt dit echt fundamenteel anders: daar 'explodeert' de code vaak.

Eelco Visser, de man achter Stratego en in het verleden een belangrijk persoon achter SGLR/SDF (komt later) kwam toen op een idee: waarom geen concrete syntax gebruiken :+ . Het idee zal duidelijk zijn: in plaats van boom-structuren nemen we gewoon de concrete syntax van de object taal en gebruiken deze om code te genereren in plaats van die verbose AST structuren.

Dit lijkt op het eerste gezicht misschien erg veel op de code-generatie met XSLT, maar de aanpak is fundamenteel verschillend. De concrete syntax is namelijk suiker voor de echte AST structuren. At compile time wordt de concrete syntax dus omgezet naar de AST structuren, die je anders in had moeten tikken. De code die je genereert in je generator wordt dus 'begrepen' door de compiler voor Stratego. Als er een syntaxtische fout in zit (semantische fouten liggen anders) krijg je dus een melding. De output van het programma is ook gewoon een AST en dus geen concrete syntax. Het aardig is ook, dat je als je dat wilt ook nog steeds gebruik kan maken van de AST structuren als dat makkelijk is. Hierdoor kan je allerlei standaard tools die geschreven zijn voor programma-transformaties op een bepaalde taal nog steeds gebruiken.

De machinerie hierachter is vrij ingenieus. Stratego is namelijk onderdeel van XT, een verzameling tools voor programma tranformaties. SGLR en SDF zijn hier ook onderdeel van en vormen de kern van de gebruikte technieken. SDF is namelijk een syntax defintie formalisme (grammatica taal dus) met een aantal unieke eigenschappen: het support de volledige klasse van context-vrije grammatica's, in tegenstelling vrijwel alle grammatica's die parser-generators accepteren. SGLR is de 'parser' in dit verhaal en maakt gebruik van Generalized LR parsing. Dit betekent dat er ambiguiteiten toegestaan zijn (maar uiteraard moeten deze wel worden opgelost, maar niet door verkrachting van je grammatica).

Heel leuk allemaal, maar het lijkt waarschijnlijk irrelevant. Het gevolg van de ondersteuning van deze volledige klasse van context-vrije grammatica's is echter dat SDF modulair kan zijn. Het probleem met alle (echte) subklassen van de context-vrije grammatica's is namelijk dat ze niet gesloten zijn onder de union operatie: als je twee grammatica's in zo'n subklasse samenvoegt is er geen garantie dat het resultaat in deze zelfde subklasse blijft. Omdat SDF de volledige klasse van context vrije grammatica's ondersteunt speelt dit probleem niet.

Dankzij deze unieke eigenschap kan je heel gemakkelijk talen combineren. Dit is precies de techniek die gebruikt wordt: als je Java code wilt genereren met behulp van Stratego, combineer je de grammatica's van Stratego en Java (wat heel eenvoudig is: je importeert gewoon beide modules). Als SGLR een Stratego programma gaat parsen wat concrete syntax voor Java bevat, ontstaat er een AST die zowel constructies uit Java als contructies uit Stratego bevat. We zijn nu precies (ongeveer ;) ) waar we wilden zijn.

Ik heb de laatste week gewerkt aan een code generator voor Java, die wat database toegangszooi, klassen voor domein objecten, modellen voor in GUIs en dergelijke genereert. Dit alles wordt gedaan vanuit een specificatie van het domein van een applicatie. Dit bespaart mij enorm veel werk omdat het steeds opnieuw implementerne van deze basis echt dagen (stom) werk kost per applicatie. Deze code generator is dus geschreven in Stratego, met concrete syntax voor Java. Hierdoor ontstaan extreem compacte en duidelijke specificaties, absoluut het lekkerste van het lekkerste op code generatie gebied. De resulterende AST wordt door pretty-printer omgezet naar concrete-syntax voor Java zodat de compiler het kan accepteren (deze pretty-printer maakt trouwens weer gebruik van concrete syntax van de BOX taal: een licht met XSL-FO vergelijkbaar iets om makkelijk code te kunnen pretty-printen naar 'boxen').

Je ziet dus wat er gebeurt: de grammatica van de object-taal (C++, Java, C#, BOX enz) wordt gecombineert met de grammatica van de meta-taal (Stratego, XSLT .... of..... Java, C#). Je krijgt dus inderdaad een grotere taal, maar dit gebeurt puur op basis van grammatica's: als je een andere taal wilt generen heb je alleen maar een grammatica voor die taal nodig.

Er is geen enkele reden waarom je deze aanpak niet zo kunnen gebruiken in XSLT of zelfs in een imperatieve taal als Java of C#. Zelfs als de object-taal hetzelfde is als de meta-taal gaat het nog goed: je genereert dan dus C# code in C# met concrete syntax voor C# .... Dit doe jij in principe nu ook in LLBL, maar dan is er in feite er in de generator geen 'kennis' van de inhoud omdat je in feite stringetjes aan het plakken bent. Dit is dus te vergelijken met de aanpak in XSLT zoals die nu vaak wordt gepresenteerd, maar dan iets aantrekkelijker omdat C# nu eenmaal aantrekkelijker is dan XSLT ;) .

Het lijkt mij heel leuk om jouw LLBL om te zetten naar deze aanpak, maar er is 1 probleem: XT draait in principe alleen onder Unix/Linux/Cygwin/Mac OS X. Op zich is dat voor een tool wat je gebruikt niet zo'n probleem, maar het zal toch de echte toepassing van een generator voor .NET wat beperken als het niet onder MS Windows draait ;) .

Voorlopig dus alleen app-gen (kon zo snel niets beter verzinnen ;) ): database laag generatie voor Java. Ik heb app-gen nog niet online staan, maar overweeg omdat het een uitermate krachtige oplossing is geworden wel om dit te gaan doen en het te documenteren. app-gen beschikt over een uitgekiend inclusie mechanisme om extra code op te kunnen nemen in de gegenereerde klassen. Je kan de code die gegenereert wordt dus nog op allerlei manieren uitbreiden, iets wat vaak een probleem is bij code-generatie. Je kan extra class of interface body declarations opnemen, je kan extra imports opnemen, je kan de klasse extra interfaces laten implementeren of een superklasse laten extenden (als de gegenereerde klasse dit al niet deed) enz.

Tot slot kan ik je nog wat leuks vertellen waar ik mee bezig ben: Embedded XML. Het genereren van XML in een applicatie is niet bepaald een lolletje. Zeker niet als je ook nog garanties wilt hebben van de well-formed ness van het resultaat. Hierdoor moet je tegen een XML library gaan praten en dat vraagt veel en onduidelijke code.

Het kan echter een stuk eenvoudiger: mix de object taal XML met de meta taal Java of C#. Je krijgt dan een taal die bestaat uit Java + XML. Je kan nu dus de echte syntax voor XML in Java of C# opnemen. Je kan door middel van een tool de embedded XML (die ook variabelen, methode aanroepen en dergelijke mag bevatten) omzetten naar een methode van jouw voorkeur om XML te genereren. De meest aantrekkelijk optie is dat het afvuren van events naar een SAX ContentHandler, gecombineerd met een pretty-printer voor XML. Je tikt dus concrete syntax voor XML, maar je krijgt via code generatie krachtige en snelle code waarin de XML content wordt opgebouwd door het af te vuren naar een SAX ContentHandler.

Behalve in gewone applicaties die iets doen met XML, kan dit ook nog in bepaalde gevallen interessant zijn als een krachtig en eenvoudig alternatief voor JSP/ASP. Neem bijvoorbeeld Java Servlets: als je daar concrete syntax voor XHTML kan gebruiken, heb je een aardige manier om snel, correct en duidelijk XHTML code genereren, zonder dat er een serieuze nieuwe taal ontstaan is die je moet gaan leren (JSP). Dit Embedded XML heeft trouwens wel weer een grappige overeenkomst met embedded SQL, wat je in principe ook erg fraai op deze manier zou kunnen implementeren.

Pfff... Ik zit nu al zo lang te tikken dat ik maar stop ;) . Ik hoop dat je m'n verhaal over de fraaie tools die je zou kunnen toepassen bij code-generatie kan waarderen, want het heeft me zowat een uur gekost ;) . Als je meer wilt weten over meta-programming met concrete syntax kan je dit artikel lezen:

http://www.stratego-langu...gWithConcreteObjectSyntax

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


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Soultaker: Ik ken immers geen programmeertaal die niet geschikt is voor een von Neumann architectuur. Dat functionele talen geen "von Neumann programmeertalen" zouden zijn, lijkt me heel sterk, maar ik wacht met spanning de verklaring af.
Functionele talen zijn volgens de terminologie die Backus gebruikt, duidelijk geen Von Neumann programmeertalen. Het gaat hierbij niet om de mogelijkheid, want Turing heeft al tijden elke spannende discussie over mogelijkheden onmogelijk gemaakt ;) . Je zegt:
Ik ken immers geen programmeertaal die niet geschikt is voor een von Neumann architectuur
Ik neem aan dat je 'geschikt' hier bedoeld als 'mogelijk', want er zijn wel degelijk veel talen die graag een andere computer architectuur onder zich zouden willen zien. Functionele talen zijn hier een voorbeeld van.

Het gaat Backus voornamelijk om het 'geinspireerd zijn op' de conventionele programmeertalen zijn duidelijk geinspireerd op de Von Neumann computer, simpelweg omdat ze ervoor ontworpen zijn of misschien beter gezegd: eruit ontstaan zijn.

Een quote uit het stuk:
Conventional programming languages are basically high level, complex versions of the von Neumann computer. Our thirty year old belief that there is only one kind of computer is the basis of our belief that there is only one kind of programming language, the conven- tional--von Neumann--language. The differences between Fortran and Algol 68, although considerable, are less significant than the fact that both are based on the programming style of the von Neumann computer. Al- though I refer to conventional languages as "von Neumann languages" to take note of their origin and style, I do not, of course, blame the great mathematician for their complexity. In fact, some might say that I bear some responsibility for that problem.

Von Neumann programming languages use variables to imitate the computer's storage cells; control statements elaborate its jump and test instructions; and assignment statements imitate its fetching, storing, and arithmetic. The assignment statement is the von Neumann bottle-neck of programming languages and keeps us thinking in word-at-a-time terms in much the same way the computer's bottleneck does.
Het draait dus zoals ik al eerder aangaf allemaal om geheugen en het aanpassen van dit gebeugen via assignments. De nieuwe waarden van dit geheugen worden berekent door de processor. Dit hele fenomeen van assignments lijkt nu allemaal supermakkelijk en logisch, maar dat we het gewend zijn, hoeft niet direct te betekenen dat het ook echt supermakkelijk en logisch is.

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


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 21-08 17:14
Verwijderd schreef op 02 september 2002 @ 23:01:
[...]

De von Neumann architectuur is IMHO de architectuur waarbij je 2 soorten memory hebt: data-memory en code/program memory, en wel fysiek op het moederbord, met 2 bussen naar de CPU, een code bus en een databus.
Nee, dat is idd de Harvard architectuur. In een Von Neumann arhitectuur is er wel een semantisch verschil tussen code en data - code kopieer je bv. niet - maar hoeft dat zeker niet op HW nivo terug te komen. De Harvard architectuur is dus een subset. In een (moderne) PC is de Harvard architectuur eigenlijk beperkt tot de CPU L1 cache, maar als je de hele PC bekijkt is het een "alleen maar" een von Neumann arhitectuur.

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


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 21-08 17:14
Om de discussie over von Neumann architecturen in perspectief te plaatsen is het handig om de altenatieven te weten, dus hier effe een linkje Dataflow architectures

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

MBravenboer: darn dat het niet op win32 draait, want het klinkt wel errug goed. Er is op win32 nog wel een andere manier en dat is via bv ASP+vbscript, maar dat voert teveel offtopic. (Ik ben wel op zoek naar een template-achtige taal voor het genereren van zowel stored procs als C#/VB.NET classes, maar je verzandt in: OF code om strings heen (zoals ASP/JSP gebruiken) OF via een totaal andere syntaxis de doelcode omschrijven (waar ik het over had dus en jij ook middels stratego) maar dat wordt dan wel complex, zonder stratego compiler ;))

De generator voor C++ in Stratego zou dan wel de complete C++ syntaxis in zich hebben + de stratego syntaxis, als ik het goed begrijp, dus een complexere syntaxis? -> hetgeen dus resulteert in de conclusie dat je bij het genereren van code beter een stap verder kunt gaan en beter een simpelere taal met krachtigere statements kunt gebruiken om de targetcode van C++ te genereren, zodat je met simpelere, krachtigere talen (functioneel of anders) aloude talen vermijdt. Iets wat vandaag kan, maar veel mensen nog altijd niet doen ...

MSalters: De harvard architectuur is een subset van de von Neumann architectuur? hmm. het beeld vertroebelt nu wel erg ;) Zo maar eens googlen. (want waar zat die von Neumann bottleneck ook alweer)
edit: http://www.csupomona.edu/~hnriley/www/VonN.html
Dat gel*l van mij over gescheiden ram was idd incorrect. De von Neumann architectuur gefocus in software is idd omtrent memory awareness mbt datastructuren en code.

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 09-01 11:25

D2k

voor de liefhebbers van von Neumann: http://www.ee.princeton.e...erheads/ch2-1/tsld001.htm

Doet iets met Cloud (MS/IBM)


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 21-08 17:14
Verwijderd schreef op 03 september 2002 @ 09:04:MSalters: De harvard architectuur is een subset van de von Neumann architectuur? hmm. het beeld vertroebelt nu wel erg ;)
Tsja, er is geen 'officiele" von Neumann architectuur, en Harvard architectuur is ook niet de meest precieze term. Beide kenmerken zich in elk geval door een onderscheid te maken tussen code en data. Uit deze quote van von Neumann :"...the orders and data can reside in the same memory " blijkt dat hij in zijn model Harvard architecturen eerder de norm dan de uitzondering vond.

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


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Otis: darn dat het niet op win32 draait, want het klinkt wel errug goed.
Idd, ik baal er ook flink van (alhoewel ik er zelf niet direct een probleem mee heb). Ik heb er al over zitten denken om een backend te maken voor de Stratego Compiler naar C# of Java, maar ja: je kan niet alles tegelijk doen :( . Bovendien is het nut hiervan beperkt omdat SGLR (de parser) geschreven is in C en vrij heftig materiaal is.
Er is op win32 nog wel een andere manier en dat is via bv ASP+vbscript, maar dat voert teveel offtopic.
Als ik begrijp waar je op doelt, heb ik daar wat over gezien in de presentatie van generative programming. Het kwam daar op mij over als de meest wenselijke aanpak.
OF code om strings heen (zoals ASP/JSP gebruiken) OF via een totaal andere syntaxis de doelcode omschrijven
Inderdaad .... Via de eigenschappen van SDF is het in de Stratego opzet mooi opgelast, maar het is absoluut niet triviaal om dit zomaar even te implementeren in andere omgevingen zonder daarbij gebruik te maken van een modulaire syntax definitie formalisme.
De generator voor C++ in Stratego zou dan wel de complete C++ syntaxis in zich hebben + de stratego syntaxis, als ik het goed begrijp, dus een complexere syntaxis?
Complexer zou ik het niet direct willen noemen: Stratego is een taal op zich en C++ is een taal op zich C++ in Stratego vereist niet echt meer kennis dan kennis van de beide individuele talen. De taal is echter inderdaad wel groter: het is de object-taal + Stratego.

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


Verwijderd

/me gaat zich er toch ook maar eens meee bemoeien :)
Verwijderd schreef op 03 september 2002 @ 09:04:
De generator voor C++ in Stratego zou dan wel de complete C++ syntaxis in zich hebben + de stratego syntaxis, als ik het goed begrijp, dus een complexere syntaxis? -> hetgeen dus resulteert in de conclusie dat je bij het genereren van code beter een stap verder kunt gaan en beter een simpelere taal met krachtigere statements kunt gebruiken om de targetcode van C++ te genereren, zodat je met simpelere, krachtigere talen (functioneel of anders) aloude talen vermijdt. Iets wat vandaag kan, maar veel mensen nog altijd niet doen ...
Je mist het punt van Backus wereldberoemde "rant". Backus vindt de scheiding tussen statements en expressies in imperatieve talen nu juist een groot bezwaar, omdat statements niet makkelijk algebraisch te omschrijven zijn. Backus pleit voor "statement-vrije" (functionele) talen, en argumenteert dat de "kunstmatige" scheiding tussen statements en expressies voort komt uit de von Neuman architectuur.
MSalters: De harvard architectuur is een subset van de von Neumann architectuur? hmm. het beeld vertroebelt nu wel erg ;) Zo maar eens googlen. (want waar zat die von Neumann bottleneck ook alweer)
edit: http://www.csupomona.edu/~hnriley/www/VonN.html
Dat gel*l van mij over gescheiden ram was idd incorrect. De von Neumann architectuur gefocus in software is idd omtrent memory awareness mbt datastructuren en code.
Volgens Backus houdt de von Neuman architectuur in dat er een gescheiden CPU en geheugen is, die verbonden zijn door een of meerdere bussen. In dit stuk noemt hij de bus de "von Neuman bottleneck", omdat alle bewerkingen door die bus moeten, en wel woord voor woord ("word-at-a-time processing"). Deze architectuur vindt zijn weerslag in imperatieve talen door het gebruik van statements, en wel primair het assignment. Door assignments worden talen ook "word-at-a-time" (en krijgen een complexe, mathematisch moeilijk te beschrijven state); de rest van de statements in de taal dient in wezen alleen om de assignments te "besturen".
Pagina: 1