Re: [Vala] Immutable variables
- From: pancake <pancake youterm com>
- To: Jiří Zárevúcky <zarevucky jiri gmail com>
- Cc: vala-list gnome org
- Subject: Re: [Vala] Immutable variables
- Date: Sat, 16 Jan 2010 20:41:17 +0100
On Fri, 15 Jan 2010 21:18:11 +0100
Jiří Zárevúcky <zarevucky jiri gmail com> wrote:
pancake píše v Pá 15. 01. 2010 v 08:42 +0100:
Is there a way to define them? I need it to solve some warnings for
the vapis describing some C functions accepting const char* as argument.
As I see in the compiler source is that it is not supported. Only for
struct or class definitions with [Immutable].
Right, it isn't at the moment as far as I know.
Are there plans to support it for variables?if it is just to handle
function signatures correctly..
I'm all for it. [Immutable] attribute for parameters would do great IMO.
Or perhaps immutable keyword as a type modifier? That would allow
binding some non-trivial array types, but I'm not sure whether that's
necessary.
I have some warnings related to this in the radare2 vapi bindings.
For example, you have a function that returns a const buffer, which is
contained in a read-only section. If you get this buffer from vala, there's
no way to represent that situation, so you are asigning a const buffer to
a non-const buffer which results in a warning and the possibility to try
to modify this buffer which shouldnt be permitted.
I also like the 'immutable' keyword, but I think that Jürg said that he
prefered [Immutable] attribute before the variable name.
int write (int fd, [Immutable] void *buffer, int length);
int write (int fd, immutable void *buffer, int length);
for me, the second form is nicer, but this forces to create a new keyword
which is probably undesired, but if you try to use attributes somewhere
else than before a struct, class or method definition you get an error,
so it will not be backward compatible.
For methods like this:
immutable string get_description ();
the compiler should understand that the returned string shouldnt be modified,
so it doesnt requires to be freed and cannot be modified. Something like
a weak or unowned one, but with the property that no write operations can
be done on it.
--pancake
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]