Re: Programming in D by Ali Çehreli

2016-10-18 Thread Ali Çehreli via Digitalmars-d-learn

On 10/17/2016 11:48 PM, vino wrote:

On Monday, 17 October 2016 at 18:20:00 UTC, cym13 wrote:

On Monday, 17 October 2016 at 18:10:01 UTC, vino wrote:

Hi All,

 As per the book named in the subject it states as below,so can some
one guide me what is wrong in the below code nor correct if my
understanding is wrong.

Page 154
immutable(int[]) specifies that neither the slice nor its elements
can be modified.

So which means that a element or a slice of any array can be
modified, but the below example code is not working.

import std.stdio;
void main() {
immutable(int[]) immSlice = [ 1, 2 ];
immSlice ~= 3;
immSlice[0] = 3; // Error's out at this point
immSlice.length = 1;
writeln(immSlice);
}
From,
Vino.B


I don't see what you don't understand, you said it yourself: "neither
the slice nor its elements can be modified". So you can't modify the
elements  of an immutable array. immSlice is an immutable array of
which you are trying to modify an element.


Hi,

 Thank you for your reply, can you address why the below code is not
working

import std.stdio;

void main() {
int[] Array = [ 1, 2, 3, 4 ];
immutable(int[]) immSlice = Array[ 0 .. 2 ];
writeln("1st : ", immSlice);
immSlice ~= 3;
writeln("2nd : ", immSlice);
immSlice[0] = 3;
writeln("3rd : ", immSlice);
immSlice.length = 1;
writeln("4th : ",immSlice);
}



What is meant in that section in the book is

1) We cannot modify elements of an immutable slice

2) We cannot modify an immutable slice (e.g. cannot add elements to it)

That's the reason for the following three compilation errors:

  Error: cannot modify immutable expression immSlice
  Error: cannot modify immutable expression immSlice[0]
  Error: cannot modify immutable expression immSlice

Your new code has another compilation error here:

int[] Array = [ 1, 2, 3, 4 ];
immutable(int[]) immSlice = Array[ 0 .. 2 ];   // <-- ERROR

  Error: cannot implicitly convert expression (Array[0..2]) of type 
int[] to immutable(int[])


That's because immSlice wants to guarantee that it has immutable 
elements. For that to be true, it cannot share elements of a mutable 
slice. Otherwise, elements could be modified through Array, which would 
also change immSlice's elements. (Remember that Array and immSlice would 
be sharing elements.)


Ali



Re: Programming in D by Ali Çehreli

2016-10-18 Thread vino via Digitalmars-d-learn

On Monday, 17 October 2016 at 18:17:24 UTC, Ali Çehreli wrote:

On 10/17/2016 11:10 AM, vino wrote:

[...]


What version is your compiler? My version is DMD64 D Compiler 
v2.072.0-b2.


Trying the code with a recent compiler produces three 
compilation errors for the following three lines


immSlice ~= 3;
immSlice[0] = 3;
immSlice.length = 1;

Error: cannot modify immutable expression immSlice
Error: cannot modify immutable expression immSlice[0]
Error: cannot modify immutable expression immSlice

Ali


Hi Ali,

  I am using DMD64 D Compiler v2.071.2-b5


Re: Programming in D by Ali Çehreli

2016-10-18 Thread vino via Digitalmars-d-learn

On Monday, 17 October 2016 at 18:20:00 UTC, cym13 wrote:

On Monday, 17 October 2016 at 18:10:01 UTC, vino wrote:

Hi All,

 As per the book named in the subject it states as below,so 
can some one guide me what is wrong in the below code nor 
correct if my understanding is wrong.


Page 154
immutable(int[]) specifies that neither the slice nor its 
elements can be modified.


So which means that a element or a slice of any array can be 
modified, but the below example code is not working.


import std.stdio;
void main() {
immutable(int[]) immSlice = [ 1, 2 ];
immSlice ~= 3;
immSlice[0] = 3; // Error's out at this point
immSlice.length = 1;
writeln(immSlice);
}
From,
Vino.B


I don't see what you don't understand, you said it yourself: 
"neither the slice nor its elements can be modified". So you 
can't modify the elements  of an immutable array. immSlice is 
an immutable array of which you are trying to modify an element.


Hi,

 Thank you for your reply, can you address why the below code is 
not working


import std.stdio;

void main() {
int[] Array = [ 1, 2, 3, 4 ];
immutable(int[]) immSlice = Array[ 0 .. 2 ];
writeln("1st : ", immSlice);
immSlice ~= 3;
writeln("2nd : ", immSlice);
immSlice[0] = 3;
writeln("3rd : ", immSlice);
immSlice.length = 1;
writeln("4th : ",immSlice);
}



Re: Programming in D by Ali Çehreli

2016-10-17 Thread tcak via Digitalmars-d-learn

On Monday, 17 October 2016 at 18:20:00 UTC, cym13 wrote:

On Monday, 17 October 2016 at 18:10:01 UTC, vino wrote:

[...]


I don't see what you don't understand, you said it yourself: 
"neither the slice nor its elements can be modified". So you 
can't modify the elements  of an immutable array. immSlice is 
an immutable array of which you are trying to modify an element.


I would expect him to see the first error on `immSlice ~= 3;`.


Re: Programming in D by Ali Çehreli

2016-10-17 Thread cym13 via Digitalmars-d-learn

On Monday, 17 October 2016 at 18:10:01 UTC, vino wrote:

Hi All,

 As per the book named in the subject it states as below,so can 
some one guide me what is wrong in the below code nor correct 
if my understanding is wrong.


Page 154
immutable(int[]) specifies that neither the slice nor its 
elements can be modified.


So which means that a element or a slice of any array can be 
modified, but the below example code is not working.


import std.stdio;
void main() {
immutable(int[]) immSlice = [ 1, 2 ];
immSlice ~= 3;
immSlice[0] = 3; // Error's out at this point
immSlice.length = 1;
writeln(immSlice);
}
From,
Vino.B


I don't see what you don't understand, you said it yourself: 
"neither the slice nor its elements can be modified". So you 
can't modify the elements  of an immutable array. immSlice is an 
immutable array of which you are trying to modify an element.


Re: Programming in D by Ali Çehreli

2016-10-17 Thread Ali Çehreli via Digitalmars-d-learn

On 10/17/2016 11:10 AM, vino wrote:

Hi All,

 As per the book named in the subject it states as below,so can some one
guide me what is wrong in the below code nor correct if my understanding
is wrong.

Page 154
immutable(int[]) specifies that neither the slice nor its elements can
be modified.

So which means that a element or a slice of any array can be modified,
but the below example code is not working.

import std.stdio;
void main() {
immutable(int[]) immSlice = [ 1, 2 ];
immSlice ~= 3;
immSlice[0] = 3; // Error's out at this point
immSlice.length = 1;
writeln(immSlice);
}
From,
Vino.B


What version is your compiler? My version is DMD64 D Compiler v2.072.0-b2.

Trying the code with a recent compiler produces three compilation errors 
for the following three lines


immSlice ~= 3;
immSlice[0] = 3;
immSlice.length = 1;

Error: cannot modify immutable expression immSlice
Error: cannot modify immutable expression immSlice[0]
Error: cannot modify immutable expression immSlice

Ali



Programming in D by Ali Çehreli

2016-10-17 Thread vino via Digitalmars-d-learn

Hi All,

 As per the book named in the subject it states as below,so can 
some one guide me what is wrong in the below code nor correct if 
my understanding is wrong.


Page 154
immutable(int[]) specifies that neither the slice nor its 
elements can be modified.


So which means that a element or a slice of any array can be 
modified, but the below example code is not working.


import std.stdio;
void main() {
immutable(int[]) immSlice = [ 1, 2 ];
immSlice ~= 3;
immSlice[0] = 3; // Error's out at this point
immSlice.length = 1;
writeln(immSlice);
}
From,
Vino.B


Free paperback: "Programming in D" by Ali Çehreli. You pick up in San Francisco

2016-04-15 Thread throwaway389012 via Digitalmars-d-learn
Free paperback of "Programming in D" by Ali Çehreli.  You'll pick 
it up in San Francisco.  It's a great book, but I prefer to read 
it in electronic form.


Send a message to the account "throwaway389012" on Reddit if you 
want it.  Leave your phone number or email address.  If you don't 
hear back, it means someone has already claimed it.