mirror of
https://github.com/irmen/prog8.git
synced 2025-01-12 04:30:03 +00:00
improve doc about string (im)mutability
This commit is contained in:
parent
ba96a637be
commit
ca1a8cd617
@ -318,14 +318,22 @@ read the syntax reference on strings.
|
|||||||
For regular assignments you still need to use an explicit ``&`` (address-of) to take
|
For regular assignments you still need to use an explicit ``&`` (address-of) to take
|
||||||
the address of the string or array.
|
the address of the string or array.
|
||||||
|
|
||||||
.. caution::
|
.. note:: Strings and their (im)mutability
|
||||||
It's probably best to avoid changing the contents in strings and treat them as static.
|
|
||||||
This includes changing certain letters by index, or by assigning a new value, or by
|
*String literals outside of a string variable's initialization value*,
|
||||||
modifying the string via other means for example ``substr`` function and its cousins.
|
are considered to be "constant", i.e. the string isn't going to change
|
||||||
This is because the changes persist in memory. If your program exits and is restarted
|
during the execution of the program. The compiler takes advantage of this in certain
|
||||||
(without reloading it from disk), it will then start working with the modified strings
|
ways. For instance, multiple identical occurrences of a string literal are folded into
|
||||||
instead of the original ones!
|
just one string allocation in memory. Examples of such strings are the string literals
|
||||||
The same is true for arrays! So be careful to (re)initialize them if needed.
|
passed to a subroutine as arguments.
|
||||||
|
|
||||||
|
*Strings that aren't such string literals are considered to be unique*, even if they
|
||||||
|
are the same as a string defined elsewhere. This includes the strings assigned to
|
||||||
|
a string variable in its declaration! These kind of strings are not deduplicated and
|
||||||
|
are just copied into the program in their own unique part of memory. This means that
|
||||||
|
it is okay to treat those strings as mutable; you can safely change the contents
|
||||||
|
of such a string without destroying other occurrences (as long as you stay within
|
||||||
|
the size of the allocated string!)
|
||||||
|
|
||||||
|
|
||||||
Special types: const and memory-mapped
|
Special types: const and memory-mapped
|
||||||
|
@ -5,9 +5,6 @@ TODO
|
|||||||
- possible idea: option to mark vardecls 'shared' to indicate they should not be optimized away because they're shared with assembly code?
|
- possible idea: option to mark vardecls 'shared' to indicate they should not be optimized away because they're shared with assembly code?
|
||||||
However: who even needs variables declared in prog8 code that are only used by assembly???
|
However: who even needs variables declared in prog8 code that are only used by assembly???
|
||||||
|
|
||||||
- github issue about strings and their immutability:
|
|
||||||
IMPROVE DOCUMENTATION ABOUT STRINGS AND DEDUP and (NON)IMMUTABILITY.
|
|
||||||
|
|
||||||
- test all examples (including imgviewer, assembler and petaxian) before release of the new version
|
- test all examples (including imgviewer, assembler and petaxian) before release of the new version
|
||||||
|
|
||||||
- simplify cx16.joystick_get2() once this cx16 rom issue is resolved: https://github.com/commanderx16/x16-rom/issues/203
|
- simplify cx16.joystick_get2() once this cx16 rom issue is resolved: https://github.com/commanderx16/x16-rom/issues/203
|
||||||
|
Loading…
x
Reference in New Issue
Block a user