Mono bakt cross-platform Visual Basic-compiler

Eergisteren lieten de ontwikkelaars achter Mono weten dat ze een compiler hebben ontwikkeld waarmee Visual Basic-applicaties kunnen worden gecompileerd voor besturingssystemen die Mono ondersteunen, waaronder Mac OS X en Linux.

Mono logoVolgens Forrester Research gebruikt 37 procent van de bedrijven Visual Basic.Net voor hun interne applicaties en is 59 procent van de .Net-programmeurs enkel geschoold in deze taal. De analisten schatten dat afgelopen jaar 20 procent van alle applicaties in ontwikkeling geschreven wordt in Basic. Tot op heden waren de gebruikers aangewezen op het Windows-besturingssysteem om deze applicaties te draaien, maar met de komst van de compiler voor Mono komen nu ook Linux, Unix, Solaris en Mac OS X in het spel. Als bewijs voor de platformonafhankelijkheid van het programma, hebben de programmeurs de compiler ontworpen als 'self-hosting'. Dit wil zeggen dat het programma in dezelfde taal is geschreven als de code die het kan compileren.

Miguel de Icaza, vice-president van ontwikkelomgevingen bij Mono-sponsor Novell, legt uit dat cross-platform ontwikkelsoftware de heilige graal is voor veel programmeurs. Hij beschouwt de Visual Basic-compiler voor Mono dan ook als een mijlpaal in deze queeste. Met de kennis die ze nu al bezitten, kunnen softwareontwikkelaars applicaties ontwerpen voor een breder publiek, zonder dat daarvoor aanpassingen moeten gebeuren in de broncode. Hoewel de omgeving voor de applicaties vorig jaar al geschreven was, bleek deze bij lange na niet perfect te zijn en vol met bugs te zitten. Daarom werd de software door Mainsoft, een bedrijf dat zich specialiseert in het migreren van Windows-programma's, met wat hulp van Microsoft vanaf de grond opnieuw opgebouwd. De Icaza vond het wel nodig om op te merken dat deze ontwikkeling binnen Mono niets te maken heeft met het partnerschap dat Microsoft en Novell vorig jaar zijn aangegaan. De vice-president legt uit dat de twee bedrijven hun samenwerkingsverband enkel toespitsen op het gebied van virtualisatie en interoperabiliteit. Dit wil overigens niet zeggen dat de topman investeringen van Microsoft in verdere uitbreidingen van Mono zal afslaan.

Door Bart Veldstra

Freelance Nieuwsposter

22-02-2007 • 10:49

37

Submitter: freyk

Bron: LinuxDevices.com

Reacties (37)

37
37
25
7
2
7
Wijzig sortering
Ik heb hier niet echt verstand van, dus misschien kan iemand het mij uitleggen. Ik meende dat BASIC een echte beginnerstaal was: weinig krachtig en weinig efficiënt. Als dat inderdaad zo is, hoe kan het dan dat 20% van de applicaties in BASIC geschreven wordt in plaats van in krachtiger (of meer gespecialiseerde) talen als C++ en Java?
BASIC en Visual Basic (.NET) zijn volledig verschillende talen. Die laatste zijn wel ruw gebaseerd op de oude BASIC qua syntax, maar het is niet zo dat je BASIC kan schrijven voor een Visual Basic compiler (wat wel praktisch het geval is voor C en C++).

In feite is Visual Basic .NET veel dichter bij C# dan BASIC. In functionaliteit overlappen ze bijna volledig, alleen de syntax verschilt. Persoonlijk ben ik echt niet te vinden voor die syntax en prefereer ik de C-familie van talen maar ja zolang er vraag naar is zullen er nieuwe compilers voor verschijnen denk/vrees ik...

Het is zeker niet zo dat Visual Basic .NET programmeren eenvoudiger is dan C#.
Visual Basic.NET kan ongeveer hetzelfde als C# en consorten. Het kan een paar dingen niet zoals generics, operator overloading enzo.

Gebruik zelf ook VB6 nog om userinterfaces te maken (bijv. ocx's), gaat lekker snel en makkelijk. Voor ingewikkeldere zaken als multi-threaded applicaties, of windows services schiet het wel erg tekort. Maar het kan (waarschijnlijk) meer dan je denkt :)

En je kunt er lekker lijpe dingen meedoen, gewoon vanuit een for loop naar een goto label springen of andersom ;)
Sinds .NET 2.0 heeft Visual Basic zowel operator overloading als generics.
Omdat BASIC zo'n simpele taal is om te leren, is het goedkoop om er personeel voor te vinden.

Voor die krachtigere talen heb je meer scholing en intelligenter personeel nodig; van dergelijk personeel is er enige schaarste, terwijl je VB programmeurs gewoon uit de VMBO schoolbanken kan trekken.

In de meeste bedrijven zijn personeelskosten de grootste kostenpost, dus dan accepteer je liever dat je programma's iets trager draaien (is ook niet zo veel verschil meer als vroeger) i.p.v. dat je personeelskosten dubbel zo hoog zijn.
ik zou een basic programmeur wel is in prolog, scheme of haskell willen zien programmeren :)
of iets dichter bij huis, perl ;)
Het gaat hier ook over de veel grotere broer van BASIC, Visual Basic en bovendien onderschat/beledig je VB programmeurs EN VMBO-ers.

En nu is er dan VB.Net wat idd theoretisch hetzelfde kan als C#, in de praktijk is de VB.Net IDE inferieur aan die van C#.
@mvdlee
Wat een lariekoek. VB.NET heeft enkele mogelijkheden die C# niet heeft en omgekeerd wat in .NET 2.0 misschien inmiddels gelijk getrokken is.

Ken 1 taal en je kent ze allemaal. C++, Delphi, Java, C#, VB.NET, dBase PLUS. Wanneer je er van één de in en outs kent en het is een moderne taal met OO concepten dan kun je ze allemaal vrij snel onder de knie krijgen.

Een ander verhaal is de libraries leren kennen wat tijd vergt. Bij .NET heb je het voordeel dat deze voor alle .NET talen hetzelfde is.

VB6 is een andere taal als VB.NET. Net als in andere talen kun je in VB6 nette, maar ook slordige code schrijven.
Ken 1 taal en je kent ze allemaal.
Nou geef je zonder het te weten mvdlee gelijk. Je zegt nu namelijk dat andere talen net zo makkelijk zijn als BASIC, als je al een andere taal kent. Maar BASIC is juist gericht op mensen die weinig tot geen programmeerervaring hebben, die dus nog geen andere taal kennen.
Die mensen zijn goedkoop en makkelijk te vinden, zoals mvdlee al zei.
dan zeg je natuurlijk dat ze dat makkelijk kunnen omdat ze ook c++ kennen, maar waarom zou een vb.net programmeur geen haskell kennen?
Cultuur. Het gros van de VB.NET programmeurs gebruikt het omdat ze ooit begonnen zijn en/of alleen gewerkt hebben met VB, of zelfs gewoon Basic. De kans dat een Haskell programmeur alleen Haskell kent is daarentegen bijzonder klein, want met Haskell kom je doorgaans in aanraking als je je specialiseert (en dus waarschijnlijk al van de hoed en de rand weet).

Er zullen genoeg VB.NET programmeurs zijn die gewoon doorklooien vanaf VB (of "doorontwikkelen", om het wat positiever te stellen). En syntax blijft toch een gevoelig punt bij veel mensen, al is dat eigenlijk onzin. VB.NET en C# code zijn praktisch automatisch naar elkaar te vertalen.

Aldus een VB.NET programmeur (onder andere) die Haskell kent. :)
Wat rinzwind bedoelt is dat de syntax van vb.net gemakkelijk is om te leren, maar het idee achter de taal hetzelfde is als die achter alle andere OO talen. Daarom is het switchen van taal in .net een kwestie van een nieuwe syntax leren, en het switchen naar iedere andere OO een kwestie van een nieuwe syntax, en wat libraries leren.

En progster, ik zou een haskell programmeur wel eens een true oop applicatie zien ontwikkelen. (dan zeg je natuurlijk dat ze dat makkelijk kunnen omdat ze ook c++ kennen, maar waarom zou een vb.net programmeur geen haskell kennen?)
ik zou een haskell programmeur wel eens een true oop applicatie zien ontwikkelen.
Daarvoor is O'Haskell, dus dat moet ze niet te moeilijk afgaan. Volgens mij zijn mensen die Haskell gebruiken doorgaans analytisch ook beter onderlegd, dus objectief programmeren zal voor hun niet zo lastig zijn als functioneel programmeren voor iemand die alleen imperatief/object georienteerd programmeren gewend is.
Het framework is .Net, en voor dat framework zijn verschillende talen beschikbaar, bijvoorbeeld C#, vb.net, C++/CLI enz.

Dus vb.net heeft over het algemeen dezelfde mogelijkheden als c#, maar een andere syntax, die van vb6 afkomt. vb.net is wel veel krachtiger dan vb6 was.
In het .NET geheel worden alle talen gecompileerd naar een zogenaamde Common Intermediate Language.

Dit zorgt ervoor dat C# .NET, Visual Basic .NET, C++/CLI en J# .NET allemaal in theorie dezelfde capaciteiten hebben. Enkel de syntax is anders.

Maar om met Orwell te spreken: Some languages are more equal than others.

Zo zal Visual Basic .NET bijvoorbeeld wanneer het komt tot memory management hier en daar meer geheugen verbruiken en snelheid opofferen om het leven van de programmeur makkelijker te maken.

Iemand van Microsoft heeft wel eens op een blog uitgelegd wat je kunt doen om bijvoorbeeld memory management in VB.NET op het gelijke niveau van C# te krijgen. En dat was dus wel mogelijk, maar je moest er zelf wat meer moeite voor doen.

Ook file handeling is in VB.NET geloof ik een pijnpuntje, de standaard manier is relatief traag vergeleken bij C#.
Je kon allang VB.NET applicaties op mono draaien, je kon ze alleen niet op mono compilen.

Niettemin goed nieuws natuurlijk.
Miguel de Icaza, vice-president van ontwikkelomgevingen bij Mono-sponsor Novell, legt uit dat cross-platform ontwikkelsoftware de heilige graal is voor veel programmeurs.
Het lijkt mij een beetje alsof ze Java opnieuw willen uitvinden.

Op zich is het geen slechte zaak natuurlijk, al wordt het wel moeilijk om Java van zijn troon te stoten...
Basic zelf was een beginnerstaal. Visual Basic is er ooit uit ontstaan, maar was al snel geen echte beginnerstaal meer. De mogelijkheden van de taal zijn tot versie 6.0 flink uitgebreid en eigenlijk alle programma's zijn er wel mee te bouwen. Je kunt er snel programma's mee maken en dat is erg fijn. Voor veel eenvoudige programma's is c++ ofzo overkill. Visual Basic is wellicht niet de mooiste taal, maar dat is een andere discussie.

Vanaf versie 7.0 (visual basic .net 2002) is visual basic een hele andere taal geworden. Het maakt gebruik van het .net framework, is veel beter object georienteerd en kan veel meer. Visual Basic.NET is grofweg hetzelfde als Visual C#, maar dan met andere grammatica. (er zijn zelfs programma's om visual basic.net code om te zetten naar C# en andersom; voor oude versies kon dit echt niet)

De compiler van mono gaat om een visual basic.net compiler.
Over de grammatica:
Het is eigenlijk het omgekeerde, de grammatica van C#.net en VB.net zijn hetzelfde - alleen de woorden zijn anders...
Ze proberen java niet opnieuw uit te vinden.

Java is cross platform omdat de code die jij compileert daarna ook gecompileert moet worden door de java virtual machine, hierdoor is Java (heel iets) langzamer dan een programmeertaal die je rechtstreeks voor een systeem compileert.

Mono doet dit laatste waardoor je dus .Net Applicaties native kan draaien op andere platformen het enige wat een ontwikkelaar hier extra voor moet doen is de code meerdere keren compileren op de verschillende systemen.

edit:
@borchen
Ik heb even snel op google gezocht en je hebt gelijk.

Sun levert alleen zelf geen native compiler en de meeste java programmeurs zijn ook van mening dat Java net zo snel of zelfs sneller is dan native programmeer talen.

edit2:
Mijn stelling dat java code standaard langzamer is, is inderdaad wat heftig, goede geschreven Java code is inderdaad net zo snel als native programmeertalen.
Over verouderde informatie gesproken. Sinds jaar en dag compileert de hotspot compiler van een java virtual machine veel gebruikte instructies direct naar native code van het platform waarop de virtual machine op dat moment draait.

De performance van goed geschreven(!) Java doet tegenwoordig nauwelijks onder voor direct gecompileerde code. De verhalen over de slechte performance komen echt uit de begintijd, toen virtual machines nog simpele java bytecode interpreters waren.
Anoniem: 39505 @klapy22 februari 2007 11:07
"Java is cross platform omdat de code die jij compileert daarna ook gecompileert moet worden door de java virtual machine, hierdoor is Java langzamer dan een programmeertaal die je rechtstreeks voor een systeem compileert."

I meen ergens gelezen te hebben dat er ook compilers zijn die Java direct vertalen naar het onderliggende systeem.
mono werkt precies hetzelfde als java wat dat betreft, alleen noemen ze bij .NET "common intermediate language" wat ze bij java "JVM bytecode" noemen. Compile once, run anywhere gaat dus nog steeds op.

Verder heeft .NET ook gewoon een just-in-time compiler enzo.
<i>Visual Basic.NET is grofweg hetzelfde als Visual C#, maar dan met andere grammatica.</i> Dat is net zoiets als "Spaans is grofweg hetzelfde Engels, alleen de grammatica is anders... u |:(
Nope, is toch echt zo. Maar dat is bij iedere taal zo. Ken één "moderne" OO taal en je kunt andere talen vrij snel door hebben of in ieder geval redelijk lezen. De afkortingen zijn altijd engels dus dat is het probleem niet. Is tenminste mijn ervaring.
De beste taal om je eens goed in te verdiepen is C++, krijg je gelijk wat low-level kennis mee.
Anoniem: 175233 @meadow22 februari 2007 14:23
Bij heel veel programmeer talen zijn inderdaad alleen de woorden anders...

Of je nu

{
a = b+2;
}


gebruikt, of

begin
a := b+2;
end


Dat maakt echt niets uit. De compiler produceert exact dezelfde code. Sterker, of je nu i = i+1 schrijft, of i++, ook hier produceert de compiler exact dezelfde code.
Compilers zijn erg intelligent geworden, waardoor veel van de oude wijsheden simpelweg niet meer kloppen.

De verschillen zitten op een ander niveau. Bijvoorbeeld, de manier waarop variabelen door functies of procedures meegenomen worden. Bij C ben je vrij snel genoodzaakt om je toevlucht tot pointers te nemen, bij Pascal kun je dat langer vermijden. De mogelijke overervings mogelijkheden in OOP talen kunnen soms ook wat verschillen.
Of (omdat het hier over Basic gaat) :

a = b + 2
@Meadow

Nee ik denk dat jij het niet helemaal snapt.
Je kan beter deze vergelijking pakken

Spaans is hetzelfde Als Catalaans , alleen sommige woorden zijn anders.

En die programma's kunnen die woorden van beide progrmeeer talen omtoveren.

Dus in zoverre heb je geen gelijk op jouw reactue
Goede zaak, C# en VB.NET zijn de twee talen die je minimaal moet ondersteunen gezien de gebruikers groep.

Geen gezeur welke taal te gebruiken, je kiest gewoon waar je het beste in bent.

Kom je er niet uit: http://www.dotnettaxi.com daar vertaal je je VB zo naar C# en andersom.....
Begrijp ik het nu goed? Stel ik heb een source code van iemand die zijn pakketje alleen voor Windows heeft gemaakt. Die compileer ik in mono naar linux en dan kan ik het programma in linux gebruiken? Natuurlijk moet ik dan nog het een en ander aanpassen, maar in principe zou het moeten werken.

Ik zit nl een beetje te twijfelen welke crossplatform taal ik wil gaan leren. Python hoor ik veel over, java lijkt me te moeilijk maar visualbasic is voor mij als niet-icter mss wel het meest interessant. Als ik dan ook nog eens met mono naar linux kan porten wordt het helemaal leuk natuurlijk ...
Het 'slimste' is misschien om maar een .NET taal te leren, want dat hele .NET wordt nu geport naar verschillende OSsen (o.a. Linux en MacOS), dus uiteindelijk zal het mogelijk zijn om een programma te schrijven in .NET die op alle systemen draait..
Dus als ik het lees is er alleen voor Visual Basic.NET een compiler geschreven, maar niet voor C#?

Volgens mij was C# toch echt de hoofdtaal die Microsoft aanwijst als programmeertaal voor .NET. Ben je nu verplicht een programmeertaal met Dim dit en Dim dat en ByValue en andere veel te lange zinnen te moeten gebruiken in Mono? ;(
C# support was altijd al aanwezig in mono.
(Was ook de enige compiler)
Weet iemand hoe het zit met de support van Windows.Forms en andere Windows controls?
De support is redelijk. Er zijn nog wel wat problemen maar dat zijn voornamenlijk problemen met windows forms 2.0.
Maar ook daar schieten ze al aardig mee op. Het voordeel is ook dat er vrij snel op bug-reports gereageerd wordt. Ik had laatst een bug-report ingediend en 1,5 uur later was de bug al gefixed in de SVN
en x64?
Ik voel met net een tiepmiep met VB. :+

Op dit item kan niet meer gereageerd worden.