|
Post by yyin on Jan 20, 2022 11:21:50 GMT 1
The speed test is a very interesting experiment! I hope that the speed test can include those free BASICs. (For example, FreeBASIC.)
When all is said and done, for me, GFA is better than OK in terms of speed.
But, even if GFA is still evolving and improving, you can easily find platforms that are better and improving faster.
Constantly searching for the next best thing is probably something that is expected of professional developers eager to get ahead of the competition.
As a hobbiest, so far, I am 'happy' with GFA's progress, advantages and limitations.
I still feel compelled and often impressed to see what I can create using GFA.
Maybe I am just too easy to impress and easy to please, but, I am definitely having fun. <button disabled="" class="c-attachment-insert--linked o-btn--sm">Attachment Deleted</button>
Okay. I see! On the other hand, D.J. Peters actually looks like an expert of FreeBASIC. If D.J. Peters see this thread next time, he may write speed test programs in FreeBASIC!
|
|
|
Post by yyin on Jan 20, 2022 11:28:04 GMT 1
* Thanks, but, whenever possible, as a precaution, I'll only run executables that I have compiled from source code.
Also good! If you attach EXE file with source code file(speed test programs) each time, more convenient for us to compare MASMbasic and GFA BASIC.
|
|
|
Post by jj2007 on Jan 20, 2022 17:00:49 GMT 1
If you attach EXE file with source code file(speed test programs) each time, more convenient for us to compare MASMbasic and GFA BASIC. The source code is actually in the archive posted here. However, you need a two-pass installation to compile (or rather: assemble) the source. It's described in detail here. Note that MasmBasic is not meant as a competition to GfaBasic32. It is a pure hobby project, and I might be the only user. I started serious coding around 1987, when the Atari ST came on the market. For years, I programmed in GfaBasic for Atari. Among other things, I had a full-fledged word processor, with embedded graphics and plots, serial letters and other stuff. Gfa plus 68000 Assembly - Gfa alone would have been far too slow. Then, around end of 2000, I was forced to switch to Windows. So I discovered GfaBasic for Windows (16-bit), which I used until about 2014, when I was forced to switch to a 64-bit OS (at work, you can't choose...). At that point, I had already started to write a 32-bit alternative. The list of functions is quite disorganised, but you may recognise quite a few GfaBasic commands, like Recall, Store, QSort.
|
|
|
Post by Xavier on Jan 21, 2022 13:21:38 GMT 1
If you post the GfaBasic32 equivalent, I can do the timings on my machine.
This seems like something Sjouke Hamstra might want to take up with you, since he asserts here:
I think he would not back down from a good challenge. (I just code for the fun of it and am curious, but, I don't worry about how fast GFA is compare to anything else.)
|
|
|
Post by jj2007 on Jan 21, 2022 16:56:56 GMT 1
I think he would not back down from a good challenge. If he appreciated communicating with others, he would be present on this forum.
|
|
|
Post by Xavier on Jan 21, 2022 18:16:22 GMT 1
I repeat, this is not Sjouke's website. It was created by D.J. Peters in 2010. You are most likely right about: "If he appreciated communicating with others, he would be present on this forum." But, think of this: He has his own website dedicated to GFA-BASIC 32 for Windows: gfabasic32.blogspot.com/. There are several GFA sites out there because anyone can create one. Why would he feel compelled to go to anyone else's when they are warmly and openly invited join his?
I admit it would be nice to have him chime in once in a while, but, I certainly don't expect it of him.
|
|
|
Post by jj2007 on Jan 21, 2022 20:34:22 GMT 1
That's all true, but have you noticed that his website is a blog, and there is no way to interact or react? No comment function. He doesn't want to receive reactions or criticism, so it's better to leave him alone. His choice.
|
|
|
Post by Xavier on Jan 21, 2022 22:07:59 GMT 1
He doesn't want to receive reactions or criticism.
He probalbly doesn't find it practical to invite anyone to post anything in his blog's comments section, who can blame him?
However, at the bottom of his links webpage:
You literally have a written invitation to contact him by e-mail:
I have e-mailed him there on several occasions, and always received a kind hearted response.
I would be very surprised if he was the type of person to make bold claims, but, not willing to back them up.
Let us know how it goes.
|
|
|
Post by jj2007 on Jan 22, 2022 11:38:25 GMT 1
You literally have a written invitation to contact him by e-mail:
I have e-mailed him there on several occasions, and always received a kind hearted response.
I sent him a mail yesterday, we'll see. In the meantime, where are the proposals for benchmarking programs...?
We have covered strings somehow, but there are other challenges, such as inserting or deleting strings in one Million elements array. What else, sorting string arrays?
Sorting numeric arrays could be interesting, too. The logic of any benchmark should be "what are tasks that take longer than a second and depend on the ability of the programming language".
|
|
|
Post by Xavier on Jan 22, 2022 12:49:20 GMT 1
In the meantime, where are the proposals for benchmarking programs...?
Sjouke should be willing to provided you the best GFA equivalent benchmarks because I imagine he is very interested in knowing of anything faster.
I am happy to watch the race from the sidelines.
|
|
|
Post by jj2007 on Jan 22, 2022 15:13:44 GMT 1
I am happy to watch the race from the sidelines C'mon, don't be shy... ideas please
|
|
|
Post by yyin on Jan 24, 2022 7:48:13 GMT 1
I sent him a mail yesterday, Hi.....you can treat me as an objective observer in the software world. In my opinion, many freewares' user communities shrank to nothing because 1. authors did not improve freewares any more or 2. authors did not actively interact with user communities. GFA BASIC 32 may be belong to the second group.
|
|
|
Post by jj2007 on Jan 29, 2022 12:49:30 GMT 1
I sent him a mail yesterday, Hi.....you can treat me as an objective observer in the software world. In my opinion, many freewares' user communities shrank to nothing because 1. authors did not improve freewares any more or 2. authors did not actively interact with user communities. GFA BASIC 32 may be belong to the second group.
It's now one week that I sent this mail to Mr Hamstra, no reply.
|
|
|
Post by Xavier on Jan 29, 2022 15:02:08 GMT 1
I sincerely hope you at least get an acknowledgment.
If we take this to heart, he may not feel obliged to respond to benchmark comparisons:
|
|
|
Post by jj2007 on Jan 29, 2022 21:00:21 GMT 1
I sincerely hope you at least get an acknowledgment I don't expect anything from Sjouke Hamstra.
|
|
|
Post by yyin on Jan 31, 2022 2:29:15 GMT 1
It's now one week that I sent this mail to Mr Hamstra, no reply. Oh. This situation is not too nice. There are several possibilites: 1. The author is too busy recently but will come to this forum to join this discussion later. 2. The author doesn't prepare to spend any time on this forum and the author only wants to develop GFA BASIC alone. 3. The author is always busy. However, the author still(always) reads the posts of this forum silently. It is because the author wants to make GFA BASIC better. Therefore, the author come here to listen to forum members' suggestions and opinions. Writing posts needs a lot of time. Thus the author only reads and doesn't write in this forum.
|
|
|
Post by jj2007 on Jan 31, 2022 2:32:28 GMT 1
It's now one week that I sent this mail to Mr Hamstra, no reply. Oh. This situation is not too nice. There are several possibilites: 1. The author is too busy recently but will come to this forum to join this discussion later. 2. The author doesn't prepare to spend any time on this forum and the author only wants to develop GFA BASIC alone. 3. The author is always busy. However, the author still(always) reads the posts of this forum silently. It is because the author wants to make GFA BASIC better. Therefore, the author come here to listen to forum members' suggestions and opinions. Writing posts needs a lot of time. Thus the author only reads and doesn't write in this forum. Answer 2 is correct. Search the member list for Sjouke, and find this: last online Jul 4, 2010 at 9:44am
|
|
|
Post by scalion on Feb 1, 2022 14:16:37 GMT 1
I tested same program on 3 basics : GFA-BASIC 32, Pure Basic and FreeBASIC Here the result benchmark :
The program consist in 4 test :
Test 1 "Init" - Initialisation of 10000 item of string array with a letter followed by numbers. Test 2 "Swap" - Swap all items one time with another (not sorting) -> 49 995 000 swaps. Test 3 "Mid" - Concat each 9999 first items with 2 parts of item+1 : mid(a(i+1),2) + mid(a(i+1),1,1)
Test 4 "Sort" - Sort ascending the array.
Results are checked identicals.
Gfa-Basic 32 is the best on swaping string.
Pure Basic is the best on initialisation, sorting string array and operate mid concat on string.
Pure Basic is certainly the best on more functionnality. He's an excellent Basic, with very many librarys included for 3D and sounds. In addition he can create DLL and code is portable to Unix and MacOS !
Gfa-Basic 32 have the best global time elapsed for the 4 test and it is the one that has the greatest flexibility in writing code (it is the only one that does not require you to write the procedures in the code before calling them and a very effective autindentation). FreeBASIC dont have integrated IDE. But i found a very good IDE programmed in FreeBASIC he work very fine (just a little buf about help file, not important). Each basic clearly has its advantages and disadvantages.
Codes tested compiled as exe.
Benchmark Configuration : LAPTOP-4RVDBDUS Processeur Intel(R) Core(TM) i5-6200U CPU @ 2.30GHz 2.40 GHz RAM : 4,00 Go Type du système Système d’exploitation 64 bits, processeur x64
Note FreeBasic dont have a sort function that mean it's a coded function that's why is very slow on sorting. I tested also Microsof Small Basic but it's not a real basic and is too much limited and slow for comparing even it's a very nice ide and he have other avantages (SilverLight compatibilty and teach basic for new coders).
Code GFA-Basic 32 :
$ManifestOff FullW 1 AutoRedraw = True Mode StrSpace 0 PrintScroll = True Option Base 1
Global Long ne = 10000 Global Dim a(ne) As String
Global Large total1 = 0, total2 = 0, total3 = 0, total4 = 0 Global Large r1, r2, r3, r4 Global Long i, Count For i = 1 To 10 r1 = Test1() r2 = Test2() r3 = Test3() r4 = Test4() total1 += r1 total2 += r2 total3 += r3 total4 += r4 Print "Test1 : " & r1 Print "Test2 : " & r2 Print "Test3 : " & r3 Print "Test4 : " & r4 Next i
Print "Total 1 : " & total1 & " - Average : " & (total1 / 10) Print "Total 2 : " & total2 & " - Average : " & (total2 / 10) Print "Total 3 : " & total3 & " - Average : " & (total3 / 10) Print "Total 4 : " & total4 & " - Average : " & (total4 / 10)
Do Sleep Loop Until Me Is Nothing
Function Test1() As Large Local Long i Local Large TempsDepart = Timer * 1000 ' Récupère la valeur actuelle For i = 1 To ne a(i) = Chr(65 + i % 26) & Str(i) Next i Local Large TempsEcoule = (Timer * 1000) - TempsDepart ' La valeur 'TempsEcoule' devrait être d'environ 1000 millisecondes Return TempsEcoule EndFunc
Function Test2() As Large Local Long i, j Local Large TempsDepart = Timer * 1000 ' Récupère la valeur actuelle For i = 1 To ne - 1 For j = i + 1 To ne Swap a(i), a(j) Next j Next i Local Large TempsEcoule = (Timer * 1000) - TempsDepart ' La valeur 'TempsEcoule' devrait être d'environ 1000 millisecondes Return TempsEcoule EndFunc Function Test3() As Large Local Long i, j Local Large TempsDepart = Timer * 1000 ' Récupère la valeur actuelle Count = 0 For i = 1 To ne - 1 a(i) = a(i) & Mid(a(i + 1), 2) & Mid(a(i + 1), 1, 1) Next i Print a(ne - 1) Local Large TempsEcoule = (Timer * 1000) - TempsDepart ' La valeur 'TempsEcoule' devrait être d'environ 1000 millisecondes Return TempsEcoule EndFunc Function Test4() As Large Local Large TempsDepart = Timer * 1000 ' Récupère la valeur actuelle QSort a(+), ne Local Large TempsEcoule = (Timer * 1000) - TempsDepart ' La valeur 'TempsEcoule' devrait être d'environ 1000 millisecondes Print a(1) & "to" & a(ne) Return TempsEcoule EndFunc
Code FreeBASIC :
const ne = 10000
dim shared a(1 to ne) as string Dim total1 as Longint = 0 dim total2 as longint = 0 dim total3 as longint = 0 dim total4 as longint = 0 dim r1 as longint dim r2 as longint dim r3 as longint dim r4 as longint dim as string k dim test as long Function Test1() As LongInt Dim i as long Dim TempsDepart as LongInt Dim TempsEcoule as LongInt TempsDepart = Timer * 1000 ' Récupère la valeur actuelle For i = 1 To ne a(i) = Chr(65 + (i mod 26)) & Str(i) Next i TempsEcoule = (Timer * 1000) - TempsDepart ' La valeur 'TempsEcoule' devrait être d'environ 1000 millisecondes Return TempsEcoule End Function
Function Test2() As LongInt Dim i as long Dim j as long Dim TempsDepart as LongInt Dim TempsEcoule as LongInt TempsDepart = Timer * 1000 ' Récupère la valeur actuelle For i = 1 To ne - 1 For j = i + 1 To ne Swap a(i), a(j) Next j Next i TempsEcoule = (Timer * 1000) - TempsDepart ' La valeur 'TempsEcoule' devrait être d'environ 1000 millisecondes Return TempsEcoule End Function Function Test3() As LongInt Dim i as long Dim j as long Dim TempsDepart as LongInt Dim TempsEcoule as LongInt TempsDepart = Timer * 1000 ' Récupère la valeur actuelle For i = 1 To ne - 1 a(i) = a(i) & Mid(a(i + 1), 2) & Mid(a(i + 1), 1, 1) Next i Print a(ne - 1) TempsEcoule = (Timer * 1000) - TempsDepart ' La valeur 'TempsEcoule' devrait être d'environ 1000 millisecondes Return TempsEcoule End Function
Sub Qsort(start As Integer,Finish As UInteger) Dim As UInteger I=start,J=Finish Dim as String X = a(Int((I+J)/2)) , AA While I <= J While a(I) < X I+=1 Wend While a(J) > X J-=1 Wend If I<=J Then AA = a(I) a(I) = a(J) a(J) = AA I+=1 J-=1 EndIf Wend If J > Start Then Qsort(start,J) If I < Finish Then Qsort(I,Finish) End Sub
Function Test4() As LongInt Dim TempsDepart as LongInt Dim TempsEcoule as LongInt TempsDepart = Timer * 1000 ' Récupère la valeur actuelle QSort 1, ne TempsEcoule = (Timer * 1000) - TempsDepart ' La valeur 'TempsEcoule' devrait être d'environ 1000 millisecondes Print a(1) & "to" & a(ne) Return TempsEcoule End Function
for test=1 to 10
r1 = Test1() r2 = Test2() r3 = Test3() r4 = Test4() total1 += r1 total2 += r2 total3 += r3 total4 += r4 Print "Test1 : " & r1 Print "Test2 : " & r2 Print "Test3 : " & r3 Print "Test4 : " & r4
next test
Print "Total 1 : " & total1 & " - Average : " & (total1 / 10) Print "Total 2 : " & total2 & " - Average : " & (total2 / 10) Print "Total 3 : " & total3 & " - Average : " & (total3 / 10) Print "Total 4 : " & total4 & " - Average : " & (total4 / 10)
do k = inkey( ) sleep 25 loop until len(k) > 0
Code Pure Basic :
Global ne.i = 10000 Global Dim a.s(ne) Global count.i Procedure.q Test1() i.i TempsDepart.q = ElapsedMilliseconds() ; Récupère la valeur actuelle For i=1 To ne a(i)=Chr(65+ i % 26) + Str(i) Next i TempsEcoule.q = ElapsedMilliseconds()-TempsDepart ; La valeur 'TempsEcoule' devrait être d'environ 1000 millisecondes ProcedureReturn TempsEcoule EndProcedure
Procedure.q Test2() i.i j.i TempsDepart.q = ElapsedMilliseconds() ; Récupère la valeur actuelle For i=1 To ne-1 For j=i+1 To ne Swap a(i),a(j) Next j Next i TempsEcoule.q = ElapsedMilliseconds()-TempsDepart ; La valeur 'TempsEcoule' devrait être d'environ 1000 millisecondes ProcedureReturn TempsEcoule EndProcedure
Procedure.q Test3() count=0 i.i j.i TempsDepart.q = ElapsedMilliseconds() ; Récupère la valeur actuelle For i=1 To ne-1 a(i) = a(i) + Mid(a(i+1), 2) + Mid(a(i+1), 1, 1) Next i TempsEcoule.q = ElapsedMilliseconds()-TempsDepart ; La valeur 'TempsEcoule' devrait être d'environ 1000 millisecondes Print(a(ne-1) + Chr(13) + Chr(10)) ProcedureReturn TempsEcoule EndProcedure
Procedure.q Test4() TempsDepart.q = ElapsedMilliseconds() ; Récupère la valeur actuelle SortArray (a(),#PB_Sort_Ascending,1,ne) TempsEcoule.q = ElapsedMilliseconds()-TempsDepart ; La valeur 'TempsEcoule' devrait être d'environ 1000 millisecondes Print(a(1) + " to " + a(ne) + Chr(13) + Chr(10)) ProcedureReturn TempsEcoule EndProcedure
If OpenConsole() Global total1.q=0,total2.q=0,total3.q=0,total4.q=0 Global r1.q,r2.q,r3.q,r4.q For i.i=1 To 10 r1.q=Test1() r2.q=Test2() r3.q=Test3() r4.q=Test4() total1 + r1 total2 + r2 total3 + r3 total4 + r4 Print("Test1 : " + r1 + Chr(13) + Chr(10)) Print("Test2 : " + r2 + Chr(13) + Chr(10)) Print("Test3 : " + r3 + Chr(13) + Chr(10)) Print("Test4 : " + r4 + Chr(13) + Chr(10)) Next i Print("Total 1 : " + total1 +" - Average : " + Str(total1/10) + Chr(13) + Chr(10)) Print("Total 2 : " + total2 +" - Average : " + Str(total2/10) + Chr(13) + Chr(10)) Print("Total 3 : " + total3 +" - Average : " + Str(total3/10) + Chr(13) + Chr(10)) Print("Total 4 : " + total4 +" - Average : " + Str(total4/10) + Chr(13) + Chr(10)) PrintN("Appuyez sur [Entree] pour quitter") Input() EndIf
End ; All the opened windows are closed automatically by PureBasic
|
|
|
Post by jj2007 on Feb 1, 2022 16:22:42 GMT 1
Looks good, Nicolas. Right now I have little time, but I will test it asap. Is there any method to copy the results from G32? Even from a Windows console you can do that... Total 1 : 49 - Average : 4.9 Total 2 : 8239 - Average : 823.9 Total 3 : 72 - Average : 7.2 Total 4 : 52 - Average : 5.2
|
|
|
Post by scalion on Feb 1, 2022 18:53:12 GMT 1
Looks good, Nicolas. Right now I have little time, but I will test it asap. Is there any method to copy the results from G32? Even from a Windows console you can do that... Total 1 : 49 - Average : 4.9 Total 2 : 8239 - Average : 823.9 Total 3 : 72 - Average : 7.2 Total 4 : 52 - Average : 5.2 Yes, thank's, you can redirecting output to the debug or in a TextBox
|
|
|
Post by jj2007 on Feb 1, 2022 22:11:14 GMT 1
Here is my translation to MasmBasic. Source and exe here.include \masm32\MasmBasic\MasmBasic.inc if 0 ; GB32 vs MasmBasic results on my Core i5-2450M CPU @ 2.50GHz Total 1 : 58 40 Total 2 : 9219 8000 Total 3 : 81 40 Total 4 : 57 10 endif Test1 PROTO Test2 PROTO Test3 PROTO Test4 PROTO SetGlobals outerLoop, total1, total2, total3, total4 Init elements = 10001 Dim a$(elements-1) PrintCpu 0 For_ outerLoop=0 To 9 add total1, rv(Test1) add total2, rv(Test2) add total3, rv(Test3) add total4, rv(Test4) Next Print Str$("Test1=%i ms\n", total1) Print Str$("Test2=%i ms\n", total2) Print Str$("Test3=%i ms\n", total3) Inkey Str$("Test4=%i ms\n", total4) Exit Test1 proc uses ebx NanoTimer() m2m ebx, 26 For_ ct=0 To elements-1 mov eax, ct cdq div ebx movzx ecx, dl add ecx, 65 Let a$(ct)=Chr$(ecx)+Str$(ct) Next void NanoTimer(ms) ret Test1 endp Test2 proc uses esi edi NanoTimer() For_ ct=0 To elements-1 For_ ecx=1 To elements-1 Swap #a$(ct), #a$(ecx) Next Next void NanoTimer(ms) ret Test2 endp Test3 proc NanoTimer() For_ ecx=0 To elements-2 Let a$(ecx)=a$(ecx)+Mid$(a$(ecx+1), 2)+Left$(a$(ecx+1)) ; a(i) = a(i) & Mid(a(i + 1), 2) & Mid(a(i + 1), 1, 1) Next void NanoTimer(ms) ret Test3 endp Test4 proc NanoTimer() QSort a$() void NanoTimer(ms) ret Test4 endp EndOfCode
|
|
|
Post by jj2007 on Feb 1, 2022 23:13:05 GMT 1
If you like challenges: sorting a tab-delimited text file by column 3 Dim a$() NanoTimer() Recall "RandSheetMedium.tab", L$() ; get it here PrintLine Str$("Recalling %i lines took ", eax), NanoTimer$() NanoTimer() QSort L$(), 0, 1 ;, 0 ; sort L$(), all rows, by column 1, do not skip the header row PrintLine Str$(" Sorting %i lines took ", eax), NanoTimer$() NanoTimer() Store "RandSheetSortedMB.tab", L$() PrintLine Str$(" Storing %i lines took ", eax), NanoTimer$()
Intel(R) Core(TM) i5-2450M CPU @ 2.50GHz Recalling 250001 lines took 20 ms Sorting 250000 lines took 106 ms Storing 250001 lines took 38 ms Here is the GB32 equivalent (almost - there is no 'sort by column 3' in GfaBasic32): FullW 1 Global Dim L$(250000) Global Long i% Local Large NanoTimer = Timer * 1000 Open "RandSheetMedium.tab" for Input As # 1 Recall # 1, L$(), -1, i% Close # 1 NanoTimer = Timer * 1000 - NanoTimer Print NanoTimer; " ms for Recall" NanoTimer = Timer * 1000 QSort L$() NanoTimer = Timer * 1000 - NanoTimer Print NanoTimer; " ms for sorting" NanoTimer = Timer * 1000 Open "RandSheetSorted.tab" for Output As # 1 Store # 1, L$() Close # 1 NanoTimer = Timer * 1000 - NanoTimer Print NanoTimer; " ms for storing" 137 ms for Recall 258 ms for sorting 51 ms for storing Note that the *.tab file's columns are 0-based; column 2 holds numbers. MasmBasic's QSort can sort this column numerically: QSort L$(), 0, 2002h ; sort L$(), all rows, by column 2 numerically Unfortunately, that is slow: numerically sorting 250,000 lines takes a whopping 740 ms. Expected result in column 2: -999746337 -999457549 -999453393 -999394394 -999229978 -998956259 -998720323 -998679486 -998670890 ... 9999478279 9999764363 9999823350 9999854504 9999876767 9999897288 9999925722 9999929362
|
|
|
Post by yyin on Feb 2, 2022 9:49:03 GMT 1
Answer 2 is correct. Search the member list for Sjouke, and find this: last online Jul 4, 2010 at 9:44am Okay, thus I predict that GFA BASIC's user base will never be large.
|
|
|
Post by yyin on Feb 2, 2022 9:52:59 GMT 1
Gfa-Basic 32 is the best on swaping string.
Pure Basic is the best on initialisation, sorting string array and operate mid concat on string.
Pure Basic is certainly the best on more functionnality. He's an excellent Basic, with very many librarys included for 3D and sounds. In addition he can create DLL and code is portable to Unix and MacOS !
Gfa-Basic 32 have the best global time elapsed for the 4 test and it is the one that has the greatest flexibility in writing code (it is the only one that does not require you to write the procedures in the code before calling them and a very effective autindentation). FreeBASIC dont have integrated IDE. But i found a very good IDE programmed in FreeBASIC he work very fine (just a little buf about help file, not important). Each basic clearly has its advantages and disadvantages.
So.....I don't understand too many things in your post and in JJ2007's post. However, I understand the above important conclusion. Thank you very much!!!!!!!!!!!!!!!!! Oh, one more thing, can you test the EXE file made with MasmBasic by JJ2007 on your computer? Then you will be able to compare four BASIC languages together. Thanks! (In fact, the installation steps of MasmBasic look very complex.)
|
|
|
Post by jj2007 on Feb 2, 2022 12:18:35 GMT 1
Oh, one more thing, can you test the EXE file made with MasmBasic by JJ2007 on your computer? Then you will be able to compare four BASIC languages together. Thanks! (In fact, the installation steps of MasmBasic look very complex.) Unfortunately, MasmBasic depends on the Masm32 SDK. The MasmBasic installer itself is very simple and fast.
|
|
|
Post by yyin on Feb 4, 2022 10:26:59 GMT 1
If this inconvenience problem is really solved, MasmBasic should be more attractive to the public.
|
|