Предлагаю создать тему PowerBasic 9 vs VB6. Дабы пролить свет на достоинства и недостатки обоих языков в плане системного программирования.
Хотя конечно сравнивать уже мертвый VB6 и развивающийся PB некоректно, но все же...
PB кривой, потому что в его стринги не поместить ни юникод, ни 0-содержащую строку.
Откуда такие мысли? PB с 7 версии точно поддерживаются Unicode строки, а 0-содержащие строки с 1-версии. Типы Asciiz и String были всегда.
Теперь о ненормальности VB6 с хранением строк, дело в том, что VB хранит все строки в Unicode (даже если вы его об этом не просили), а перед передачей в DLL строка каждый раз перекодируется в Ansi, а при возвращении строки из DLL все соответсвенно происходит в обратном порядке.
Явный маразм. Куча бесмысленных строковых преобразований, потерянное процессорное время. И кстати именно поэтому, при вычислении длины строк в VB получается полная ахинея
В любом языке размер
- Код: Выделить всё
ArrStr (0 To 99999999) As String * 4
- Код: Выделить всё
ArrByte (0 To 399999996) As Byte
кто не верит - может посчитать результат на калькуляторе.
- Код: Выделить всё
#Compile Exe
#Dim All
Function PBMain () As Long
Dim ArrStr (0 To 99999999) As String * 4
Dim ArrByte (0 To 399999996) As Byte
ArrStr(0)="x"
ArrStr(99999999)="y"
ArrByte(0)=1
ArrByte(399999996)=255
Print "Размер блока памяти в строковом массиве: " ; VarPtr(ArrStr(99999999))- VarPtr(ArrStr (0))
Print "Размер блока в байтовом массиве: " ; VarPtr(ArrByte(399999996))- VarPtr(ArrByte(0))
WaitKey$
End Function
Однако из того, что VB6 хранит строки в Unicode, в нем этот код работать не будет (в отличие от любой другой среды разработки)
2+2=5. Вот такие забавные грабли.