* Beginner issue.. @ 2013-06-16 6:54 Marcus F 2013-06-16 7:00 ` Marcus F 2013-06-16 7:30 ` Dirk Heinrichs 0 siblings, 2 replies; 8+ messages in thread From: Marcus F @ 2013-06-16 6:54 UTC (permalink / raw) Hi! I'm Marcus, I'm completely new to ADA but not to programming. I'm looking at a simple tutorial guide to pick up some basics of ADA, but I ran into an issue that I don't understand. Here's the trivial example I followed: with Ada.Text_IO, Ada.Integer_Text_IO; use Ada.Text_IO, Ada.Integer_Text_IO; procedure Compute is procedure Double(Item : in out Integer) is begin -- procedure Double. Item := Item * 2; end Double; X : Integer := 1; -- Local variable X of type Integer. begin -- procedure Compute loop Put(X); New_Line; Double(X); end loop; end Compute; Now, I expect X to double once per loop, but when I build and run, I just get 0's scrolling down my screen. Could someone help out a newbie? ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Beginner issue.. 2013-06-16 6:54 Beginner issue Marcus F @ 2013-06-16 7:00 ` Marcus F 2013-06-16 7:21 ` Dmitry A. Kazakov 2013-06-16 7:30 ` Dirk Heinrichs 1 sibling, 1 reply; 8+ messages in thread From: Marcus F @ 2013-06-16 7:00 UTC (permalink / raw) On Sunday, June 16, 2013 1:54:29 AM UTC-5, Marcus F wrote: > Hi! > > > > I'm Marcus, I'm completely new to ADA but not to programming. > > I'm looking at a simple tutorial guide to pick up some basics of ADA, but I ran into an issue that I don't understand. > > > > Here's the trivial example I followed: > > > > with Ada.Text_IO, Ada.Integer_Text_IO; > > use Ada.Text_IO, Ada.Integer_Text_IO; > > > > procedure Compute is > > > > procedure Double(Item : in out Integer) is > > begin -- procedure Double. > > Item := Item * 2; > > end Double; > > > > X : Integer := 1; -- Local variable X of type Integer. > > > > begin -- procedure Compute > > loop > > Put(X); > > New_Line; > > Double(X); > > end loop; > > end Compute; > > > > > > Now, I expect X to double once per loop, but when I build and run, I just get 0's scrolling down my screen. > > > > Could someone help out a newbie? Let me rephrase that, I just removed the loop part, and the variable and Double seems fine, and displays the values I expect, but why would it just show a single line of 0's when in a loop? ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Beginner issue.. 2013-06-16 7:00 ` Marcus F @ 2013-06-16 7:21 ` Dmitry A. Kazakov 2013-06-16 7:52 ` Marcus F 0 siblings, 1 reply; 8+ messages in thread From: Dmitry A. Kazakov @ 2013-06-16 7:21 UTC (permalink / raw) On Sun, 16 Jun 2013 00:00:33 -0700 (PDT), Marcus F wrote: > On Sunday, June 16, 2013 1:54:29 AM UTC-5, Marcus F wrote: >> >> I'm looking at a simple tutorial guide to pick up some basics of ADA, but >> I ran into an issue that I don't understand. OK, this is a GNAT Ada compiler pitfall almost anybody runs into. When you compile an Ada program with GNAT, NEVER EVER forget to turn the run-time integer overflow checks on. E.g. in your case, you should compile your program as follows: gnatmake -gnato compute.adb The switch -gnato instructs GNAT to check integer overflows, which is what happens. After that the output would look like: 1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536 131072 262144 524288 1048576 2097152 4194304 8388608 16777216 33554432 67108864 134217728 268435456 536870912 1073741824 raised CONSTRAINT_ERROR : compute.adb:8 overflow check failed Without checks on, you get an overflow. For a number of power of two the overflow results in 0. 0*2=0, which is what you observe on the screen. -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Beginner issue.. 2013-06-16 7:21 ` Dmitry A. Kazakov @ 2013-06-16 7:52 ` Marcus F 2013-06-16 7:55 ` Marcus F 0 siblings, 1 reply; 8+ messages in thread From: Marcus F @ 2013-06-16 7:52 UTC (permalink / raw) On Sunday, June 16, 2013 2:21:55 AM UTC-5, Dmitry A. Kazakov wrote: > On Sun, 16 Jun 2013 00:00:33 -0700 (PDT), Marcus F wrote: > > > > > On Sunday, June 16, 2013 1:54:29 AM UTC-5, Marcus F wrote: > > >> > > >> I'm looking at a simple tutorial guide to pick up some basics of ADA, but > > >> I ran into an issue that I don't understand. > > > > OK, this is a GNAT Ada compiler pitfall almost anybody runs into. > > > > When you compile an Ada program with GNAT, NEVER EVER forget to turn the > > run-time integer overflow checks on. E.g. in your case, you should compile > > your program as follows: > > > > gnatmake -gnato compute.adb > > > > The switch -gnato instructs GNAT to check integer overflows, which is what > > happens. After that the output would look like: > > > > 1 > > 2 > > 4 > > 8 > > 16 > > 32 > > 64 > > 128 > > 256 > > 512 > > 1024 > > 2048 > > 4096 > > 8192 > > 16384 > > 32768 > > 65536 > > 131072 > > 262144 > > 524288 > > 1048576 > > 2097152 > > 4194304 > > 8388608 > > 16777216 > > 33554432 > > 67108864 > > 134217728 > > 268435456 > > 536870912 > > 1073741824 > > > > raised CONSTRAINT_ERROR : compute.adb:8 overflow check failed > > > > Without checks on, you get an overflow. For a number of power of two the > > overflow results in 0. 0*2=0, which is what you observe on the screen. > > > > -- > > Regards, > > Dmitry A. Kazakov > > http://www.dmitry-kazakov.de Thank you Dmitry! Now I just need to figure out how to turn on the Integer Overflow checks.. (I'm using AdaGIDE, just hitting save, build, run) ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Beginner issue.. 2013-06-16 7:52 ` Marcus F @ 2013-06-16 7:55 ` Marcus F 2013-06-16 8:49 ` Dmitry A. Kazakov 0 siblings, 1 reply; 8+ messages in thread From: Marcus F @ 2013-06-16 7:55 UTC (permalink / raw) On Sunday, June 16, 2013 2:52:57 AM UTC-5, Marcus F wrote: > On Sunday, June 16, 2013 2:21:55 AM UTC-5, Dmitry A. Kazakov wrote: > > > On Sun, 16 Jun 2013 00:00:33 -0700 (PDT), Marcus F wrote: > > > > > > > > > > > > > On Sunday, June 16, 2013 1:54:29 AM UTC-5, Marcus F wrote: > > > > > > >> > > > > > > >> I'm looking at a simple tutorial guide to pick up some basics of ADA, but > > > > > > >> I ran into an issue that I don't understand. > > > > > > > > > > > > OK, this is a GNAT Ada compiler pitfall almost anybody runs into. > > > > > > > > > > > > When you compile an Ada program with GNAT, NEVER EVER forget to turn the > > > > > > run-time integer overflow checks on. E.g. in your case, you should compile > > > > > > your program as follows: > > > > > > > > > > > > gnatmake -gnato compute.adb > > > > > > > > > > > > The switch -gnato instructs GNAT to check integer overflows, which is what > > > > > > happens. After that the output would look like: > > > > > > > > > > > > 1 > > > > > > 2 > > > > > > 4 > > > > > > 8 > > > > > > 16 > > > > > > 32 > > > > > > 64 > > > > > > 128 > > > > > > 256 > > > > > > 512 > > > > > > 1024 > > > > > > 2048 > > > > > > 4096 > > > > > > 8192 > > > > > > 16384 > > > > > > 32768 > > > > > > 65536 > > > > > > 131072 > > > > > > 262144 > > > > > > 524288 > > > > > > 1048576 > > > > > > 2097152 > > > > > > 4194304 > > > > > > 8388608 > > > > > > 16777216 > > > > > > 33554432 > > > > > > 67108864 > > > > > > 134217728 > > > > > > 268435456 > > > > > > 536870912 > > > > > > 1073741824 > > > > > > > > > > > > raised CONSTRAINT_ERROR : compute.adb:8 overflow check failed > > > > > > > > > > > > Without checks on, you get an overflow. For a number of power of two the > > > > > > overflow results in 0. 0*2=0, which is what you observe on the screen. > > > > > > > > > > > > -- > > > > > > Regards, > > > > > > Dmitry A. Kazakov > > > > > > http://www.dmitry-kazakov.de > > > > Thank you Dmitry! > > > > Now I just need to figure out how to turn on the Integer Overflow checks.. > > (I'm using AdaGIDE, just hitting save, build, run) I just looked around the settings, and the box for Integer Overflow Checks, is checked for the Debug setting, and I'm using Debug mode. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Beginner issue.. 2013-06-16 7:55 ` Marcus F @ 2013-06-16 8:49 ` Dmitry A. Kazakov 2013-06-16 18:32 ` Marcus F 0 siblings, 1 reply; 8+ messages in thread From: Dmitry A. Kazakov @ 2013-06-16 8:49 UTC (permalink / raw) On Sun, 16 Jun 2013 00:55:51 -0700 (PDT), Marcus F wrote: > I just looked around the settings, and the box for Integer Overflow > Checks, is checked for the Debug setting, and I'm using Debug mode. I didn't use AdaGIDE for eons. Have you changed the source file in order to force recompiling? -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Beginner issue.. 2013-06-16 8:49 ` Dmitry A. Kazakov @ 2013-06-16 18:32 ` Marcus F 0 siblings, 0 replies; 8+ messages in thread From: Marcus F @ 2013-06-16 18:32 UTC (permalink / raw) On Sunday, June 16, 2013 3:49:52 AM UTC-5, Dmitry A. Kazakov wrote: > On Sun, 16 Jun 2013 00:55:51 -0700 (PDT), Marcus F wrote: > > > > > I just looked around the settings, and the box for Integer Overflow > > > Checks, is checked for the Debug setting, and I'm using Debug mode. > > > > I didn't use AdaGIDE for eons. Have you changed the source file in order to > > force recompiling? > > > > -- > > Regards, > > Dmitry A. Kazakov > > http://www.dmitry-kazakov.de I did, but the checkboxes were marked from the start, so it should have been used anyway. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Beginner issue.. 2013-06-16 6:54 Beginner issue Marcus F 2013-06-16 7:00 ` Marcus F @ 2013-06-16 7:30 ` Dirk Heinrichs 1 sibling, 0 replies; 8+ messages in thread From: Dirk Heinrichs @ 2013-06-16 7:30 UTC (permalink / raw) Marcus F wrote: > Now, I expect X to double once per loop, but when I build and run, I just > get 0's scrolling down my screen. Adding to what Dmitry already wrote: You don't see just 0's. You actually see the number sequence from Dmitry's reply, followed by 0's, but it's so fast that you don't recognize. You can verify this by running ./compute|less Bye... Dirk -- Dirk Heinrichs <dirk.heinrichs@altum.de> Tel: +49 (0)2471 209385 | Mobil: +49 (0)176 34473913 GPG Public Key C2E467BB | Jabber: dirk.heinrichs@altum.de ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2013-06-16 18:32 UTC | newest] Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2013-06-16 6:54 Beginner issue Marcus F 2013-06-16 7:00 ` Marcus F 2013-06-16 7:21 ` Dmitry A. Kazakov 2013-06-16 7:52 ` Marcus F 2013-06-16 7:55 ` Marcus F 2013-06-16 8:49 ` Dmitry A. Kazakov 2013-06-16 18:32 ` Marcus F 2013-06-16 7:30 ` Dirk Heinrichs
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox