mboost-dp1

Microsoft Corporation

Milliarder af kodelinjer fra VB6 kræver konvertering

- Via Version2 - , redigeret af Pernicious

Microsoft har officielt trukket stikket på Visual Basic 6 (VB6) og understøtter ikke længere det aldrende programmeringssprog. Udviklere anbefales at skifte til .NET (C# eller VB.NET), men hvad med alt det kode, der er skrevet i VB6, som man stadig ønsker at vedligeholde?

Det spørgsmål mener Artinsoft, et firma fra Costa Rica, at de har svaret på. De har udviklet en konverter, som kan konvertere VB6 til C# eller VB.NET.

Hos Artinsoft regner de med, at der i de næste 3-5 år skal konverteres op til 24 milliarder linjer VB6-kode. De forventer at de fleste kunder vælger at konvertere til C#. Blandt kunderne finder man blandt andet CitiGroup og sågar Microsoft selv.

Produktet skulle, ved brug af kunstig intelligens, kunne konvertere 90-95 % af koden. Tilrettes konverteren så den passer til en specifik kodebase, så kan resultatet blive endnu bedre, dog aldrig 100 %, resten kræver manuel tilretning.





Gå til bund
Gravatar #1 - Nahilas
12. feb. 2009 07:57
Det hedder C# og ikke bare # ;).

Tror det bliver epic fail. Startede selv med at programmere i VB6, og det opfordrer virkeligt mere end noget andet sprog jeg kender til at skrive masser af slamkode.

Ligemeget hvor god en konverteringsalgoritme de får skrevet vil det ikke kunne rette op på alle de ineffektive og rodede programmer der er skrevet, så resultatet vil være en masse C#/VB.Net programmer der trænger til at blive skrevet om...

Tror jeg ;).
Gravatar #2 - spectual
12. feb. 2009 08:34
Glæden var kort :(
Gravatar #3 - jakobdam
12. feb. 2009 08:47
Måske er det også en god lejlighed for de der netop har programmer med vb-kode, at få kigget den gamle visual basic-kode igennem, og ved den MANUELLE konvertering til C#, indføre noget mere smart og smidigt objektorienteret.

Alle de sprogkonverteringsprogrammer jeg har set i tidens løb, har trashet så meget at man bruger mere tid på at optimere og korrigere, end hvis man manuelt omskrev hele dynen. Så snart det bliver mere avanceret end deklarering, "if" og "for" og lignende, sviner de koden mere end selv de ældre versioner af Frontpage gjorde med html.
Gravatar #4 - nielsbrinch
12. feb. 2009 09:00
#1 og #3, kom lige tilbage til virkeligheden. Hvis virksomheder øjner en chance for at kunne anvende deres gamle kode som virker perfekt, fordi den er blevet tweaket gennem mange år, så vil de helt klart vælge det frem for at skulle investere mange timer og penge i at udvikle de ting som de allerede har.
Gravatar #5 - migogdig
12. feb. 2009 09:13
Jeg tænker lidt om der ikke kunne være økonomi i at åbne et kontor i indien også få nogle dernede til at skrive det om manuelt, men til nada timeløn???

Har også kun dårligere erfaringer med convertere.
Gravatar #6 - Emmek
12. feb. 2009 09:13
Har ikke bedre erfaringer med indere..
Gravatar #7 - Mort
12. feb. 2009 09:39
Baseret på mine erfaringer med indiske konsulenter, så vil jeg også klart hellere køre en manuel konvertering.
Gravatar #8 - HNO3
12. feb. 2009 09:51

Måske var det en bedre ide at konvertere til Cobol, så man slipper for at konvertere fra C#/VB.NET om 10 år....
Gravatar #9 - crashoverride
12. feb. 2009 09:56
R.I.P VB6.

Har nu aldrig brud mig meget om VB, har dog været nødsaget til at lave små macroer og andre ting i dette sprog.

Men jeg giver ikke folk helt ret i at det er sproget der giver slam kode det er den person AKA programmøren som laver slam kode.

Kan i dag 7 programmerings sprog og jeg har set når der er lavet slamkode, det meste slamkode skyldes som regle mangle på forståelse om at man skal lave dokumentationen om det program man vil lave, før man laver koden.
Mange sætter sig ned og laver koden havner i et problem som kunne være undgået hvis man har lavet dokumentationen først og der efter laver en eller anden work around som for det meste både er grim og en værer gang slamkode med masser af leaks.

en af dem jeg ser meget kan være...
EKS statestik beregning.
float fo(int Array[])
{
float Statestik = 0.0;
int Count = Array.Length;
for (int i = 0; i < Count; i++)
{
int sum;
sum += Array[i]
Statestik += Sum / Count;
}
return Statestik.
}

denne funktion kalder man så xx 1000 gange med et array størrelse på xxx hvilket resultere i at int sum bliver oprettet mange mange mange gange incl alle andre variabler i funktionen

Og nu sidder der sikkert nogle kloge hoved og siger jamen det tager Garabage collectoren sig af.

Svar:
"Ja det gør den, dog skal man lige huske den køre ikke lige så snart du er hoppet ud af funktionen nej der går et godt stykke tid, men imellem tiden står funktionen og arkumulere hukommelse som en 10 knægt med et BMI på 90 i en slikbutik."

Selv hvis du kalder GC.Collect(); vil der gå et godt stykke tid.

Gravatar #10 - spectual
12. feb. 2009 10:09
#9 Det er ikke et særligt godt eksempel. Udover der er temmelig mange syntax fejl i, så er garbage collectoren slet ikke involveret i den funktion. "sum" er en value type og resultatet af den lagres som en lokal variabel. Det kan man se hvis man kigger på IL koden der genereres.


private float fo(int[] Array)
{
float Statestik = 0.0f;
int Count = Array.Length;
for (int i = 0; i < Count; i++)
{
int sum = 0;
sum += Array[i];
Statestik += sum / Count;
}
return Statestik;
}


Et bedre eksempel ville være:


private string Concat(string[] strings)
{
string result = String.Empty;

for (int i = 0; i < strings.Length; i++)
result += strings[i];

return result;
}


Her bliver der rent faktisk oprettet et nyt string objekt for hver iteration og det objekt ryger til skrald.

I øvrigt giver det ikke nogen fordel at gemme længden af array'et som en lokal variabel, da det ikke er nogen property.
Gravatar #11 - Holger_dk
12. feb. 2009 10:30
for the love of god just upgrade to C#

ej, jeg kan bare personligt ikke lide VB og dens (mangel af) struktur.

men man må håbe den kan konvertere det meste og så på pege hvor den måske ikke har gjort det så godt.

#8:
ja for Cobol er jo sådan et moderne og fremtidsikret sprog... :p
Gravatar #12 - flywheel
12. feb. 2009 10:55
Vil nu ikke ligefrem sige at VB er forsvundet fra jordens overflade - der er jo delmængden VBA der udbredt benyttes til makroer i Redmonds applikationer.
Gravatar #13 - Dondata
12. feb. 2009 11:36
VB6 - Bringer sgu gode minder frem :o)
VB.NET 2008, er dog en fuldt tilfredsstillende afløser.
Gravatar #14 - illishar
12. feb. 2009 12:07
Jeg har svært ved at se hvorfor firmaer lige pludselig skulle konvertere alle deres VB6-projekter nu. Visual Studio fungerer stadigvæk om 5 år. Microsoft har næppe tænkt sig at udsende en "KILL VB6 AND VS6"-virus.

Derudover så har der også altid eksistereret en VB6->VB.NET-konverter, som er indbygget VB.NET-IDE'en. Og ligesom der nævnes i artiklen, så kan denne også konvertere ca. 90-95%. Hvorfor skulle man købe en dyr konverter hos Artinsoft, der kan det samme (eller måske er lidt bedre)?

Derudover, så har jeg efterhånden konverteret mange VB6 og ASP-projekter og ved store projekter er det oftest hurtigere med en fuld manuel genopbygning. (Man kan godt konvertere store VB-programmer, men det færdige resultat bliver et produkt der er dårligere end det oprindelige og derudover er det stoppet med slam-kode.) Hvis man ikke har mod på en manuel genopbygning, så behold VB-programmet. (VB fungerer ligeså "godt" nu, som for 10 år siden.)
Det ser forøvrigt heller ikke ud til, at der skulle være problemer med VB6 og Vista o.s.v. (Men vi har nu heller ikke så mange VB6-programmer tilbage.)


PS. Og som afslutningsbemærkning, så overvejer jeg faktisk selv at udvikle en "KILL VB6"-virus. Hehe! DIE FILTHY VB! ... Tror faktisk at jeg vil skrive den i VB6. Oh, the irony!
Gravatar #15 - mel
12. feb. 2009 12:46
#9+#10
I er nogle dejlige nørder - luv's U

nå tilbage til topic.
altså vores firma har da stadig en DOS-maskine kørende. Hver gang en IT-mand kommer forbi slår han cola'ens tegn (i mangel af kors/halvmåne) og kræver straks den slukket...indtil han opdager den ikke er på netværket. Så plejer de at bliver helt nostagislke (staveplade)

morale:
gamle ting der fungerer vil STADIG køre videre. Der skal nogle store besparelser til før sådan nogen som CITI-bank vil skifte noget fungerende ud med noget nyt!

.M
Gravatar #16 - zin
12. feb. 2009 15:53
#15:
gamle ting der fungerer vil STADIG køre videre. Der skal nogle store besparelser til før sådan nogen som CITI-bank vil skifte noget fungerende ud med noget nyt!

Og så længe at man holder til den filosofi er det blot et spørgsmål om tid før vi får år 2000-problematikken igen; Eller 2038-problemet, for UNIX-systemer.
Gravatar #17 - Dondata
12. feb. 2009 17:04
illishar (14) skrev:
Hvorfor skulle man købe en dyr konverter hos Artinsoft, der kan det samme (eller måske er lidt bedre)?


Den indbyggede converter i VS IDE'et ER lavet af Artinsoft ;)
Gravatar #18 - arne_v
18. feb. 2009 03:19
#8

Nu er Cobol næppe alternativet for den type apps som er lavet i VB6.
Gravatar #19 - arne_v
18. feb. 2009 03:21
crashoverride (9) skrev:
R.I.P VB6.

Har nu aldrig brud mig meget om VB, har dog været nødsaget til at lave små macroer og andre ting i dette sprog.


De ligner hinanden meget i syntax men VB6 og VBA er ikke det samme.
Gravatar #20 - arne_v
18. feb. 2009 03:22
crashoverride (9) skrev:

Svar:
"Ja det gør den, dog skal man lige huske den køre ikke lige så snart du er hoppet ud af funktionen nej der går et godt stykke tid, men imellem tiden står funktionen og arkumulere hukommelse som en 10 knægt med et BMI på 90 i en slikbutik."

Selv hvis du kalder GC.Collect(); vil der gå et godt stykke tid.


Du får ikke ekstra præmie for at have ubrugt memory på systemet. Hvis der er mangel på memory så kører GC. Hvis der ikke er mange, så er der ingen grund til at spild etid på det.
Gravatar #21 - arne_v
18. feb. 2009 03:25
spectual (10) skrev:

I øvrigt giver det ikke nogen fordel at gemme længden af array'et som en lokal variabel, da det ikke er nogen property.


Length er en property, men jeg er enig i din konklusion (JIT compileren skal nok få det optimeret).
Gravatar #22 - arne_v
18. feb. 2009 03:25
#12

Hviken VB6, VBS eller VBA er væk.
Gravatar #23 - arne_v
18. feb. 2009 03:26
#14

Mange er nok bekymret over supporten eller mangel på samme.
Gravatar #24 - spectual
27. feb. 2009 12:06
#21 Ja det er rigtigt at Length er en property. Men MSIL understøtter at hente længder af arrays natively (altså direkte med en opcode). Så compileren genererer ikke kode til at hente property'en, som den normalvis vil gøre - altså via. et funktions kald til get_<Propertynavn>.

Det er det der får mig til at ikke at betegne den som en property.

Gravatar #25 - arne_v
8. mar. 2009 03:54
#24

Muligt.

Men så vidt jeg kan så genererer C# compileren (.NET 3.5) faktisk:

callvirt instance int32 [mscorlib]System.String::get_Length()
Gravatar #26 - arne_v
8. mar. 2009 14:39
#25

Og det var noget sludder.

Det var jo array Length ikke string Length.

Og array Length bliver ikke til et kald.

#24 er helt korrekt.
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login