Language Bug regarding Const specifiers

BlitzMax Forums/BlitzMax Programming/Language Bug regarding Const specifiers

SculptureOfSoul(Posted 2007) [#1]
Is there any legitimate reason why the language doesn't allow the following declaration for TestLength?

Strict

Const TestString:String = "a constant string"
Const TestLength:Int = TestString.length


The error is that constant initializers must be constant. However, since TestString is const, TestString.length is also going to be constant of course.

I didn't file this as a bug report because there's probably some legitimate reason that I just don't know about.


LAB[au](Posted 2007) [#2]
Well I "think" TestString.length will be evaluated at runtime and not at compilation time, the way to do this would be to have pre-compiler directives.


Brucey(Posted 2007) [#3]
Things get complicated when your String looks like :

"~qA nice quoted string...~nwith line breaks...~q"


Of course, I suppose you just need a very clever pre-compiler...


Grey Alien(Posted 2007) [#4]
yeah you couldn't use Len(TestString) either because it required code to be run. Consts are defined at compile time and stored in the exe. You'll have to make it a global and set it in code in some initialisation function.


Koriolis(Posted 2007) [#5]
Well, it's not like it couldn't be done. The compiler already handles strings at compile-time, so it could very well compute the length at compile time too.
It's one of the cases where "it's just done like that", but it's not inherently impossible.


GfK(Posted 2007) [#6]
Apart from the reasons above - why would you want to have a string stored in one constant, and its length in another? The whole point of OOP is that you don't have to do things like this.


SculptureOfSoul(Posted 2007) [#7]
Well, it seems silly I suppose, but the primary reason was just for readability. The constant string I'm using is the opening tag for a custom text specifier, and the code then searches for a specific character in the string at the textspecifier.length index of the string. While I realized I could just use TextSpecifer.length in it's place, I thought using a constant that was set to the length of the text specifier would be more readable, and would automatically update if I changed the text specifier string.

Not really needed (and the workaround is simple) but I just stumbled across it and thought I'd ask.


tonyg(Posted 2007) [#8]
I think I sort of agree with you.
In OOP should I need to know what methods the string types have? (encapsulation or something) .
If that is the case you should probably use the len(stringvar) function.
If you had a const string variable and were going to refer to it's length without it changing then it seems alright to put that length in a const.
It would help readability and save some function calls.
.
On the other hand... not that fussed about it either.