1. Re: 2.6 feature request: foreach (off topic)
- Posted by Robert Craig <rds at RapidEuphoria.com> Jul 14, 2005
- 434 views
- Last edited Jul 15, 2005
Vincent wrote: > ; PureBasic > > x.b ; declare variable: 'x' as type "byte" > adder.b ; declare variable: 'adder' as type "byte" > > NewList ListItem.b() ; byte > > Repeat > AddElement(ListItem()) : ListItem() = 1 > Until CountList(ListItem()) = 10 ; lets make 10 elements > > adder = ListItem() > x = 5 ; lets select element #5 > > SelectElement(ListItem(), x+2) ; add 2 because an index of 0 is possible > ListItem() = adder + 7 > > ; show that it worked in the debugger window and console window. > OpenConsole() > ConsoleTitle("Example") > Print("{") > > ForEach ListItem() > Print(Str(ListItem()) + ",") > Debug ListItem() > Next > > Print("}") > Input() > CloseConsole() > End ; terminate program > > -------------------------------------------- > console output: {1,1,1,1,1,1,1,8,1,1,} > debugger output: 1 1 1 1 1 1 1 8 1 1 PureBASIC linked lists vs. Euphoria sequences: Did they tell you that each element of a PureBASIC linked list has a 4-byte pointer to "next", a 4-byte pointer to "previous" and probably at least 8 bytes of overhead for malloc? Did they tell you that to "SelectElement" item number one million, they might have to internally follow a chain of one million pointers in memory? i.e. after converting from sequences to PureBASIC lists, you might find your program running a *million* times slower, while each integer uses 20 bytes of space in memory? And there's no error checking, so if you ask for an invalid element, your program will likely crash. They of course have (inflexible) arrays: "Once an array is 'sized' it can be resized but its content will be deleted" (ouch!) "Arrays are always globally accessable in PureBasic." (no way to restrict access by scope!) Regards, Rob Craig Rapid Deployment Software http://www.RapidEuphoria.com