Re: [GD-Windows] Array foreach in scripting languages
Brought to you by:
vexxed72
From: Research <res...@ga...> - 2006-08-14 02:36:41
|
Although it can have other side effects, you may be able to live with "Lazy Deletion". You mark a list entry as "deleted" when deleted during an iterator but not do the delete until your done iterating. Even if you bail out of the iteration, the list header can indicate that there are "deleted" members in the list and clean them up before the next iteration begins (and/or add the list to a list of stuff that needs maintenance between frames). Of course this can have side effects, but there are cases where this is acceptable and can allow an iterator to split up a list among processing units by knowing that the part of the list they are working on is safe. Brett Bibby GameBrains ----- Original Message ----- From: "Carsten Orthbandt" <car...@se...> To: <Gam...@li...> Sent: Saturday, August 12, 2006 9:46 PM Subject: [GD-Windows] Array foreach in scripting languages > I'm currently building a small scripting language for interactive stuff. > Now I > know there's plenty out there, I'm just doing this for fun. > > A tricky question came up and I'd like to collect opinions and experiences > on > this. It's about foreach for dynamic arrays. Consider this C++-like pseudo > code: > > DynamicArray<int> list; > int i; > for(i=0;i<20;i++){list.Add(i);}; > foreach(i in list){ > print(i); > if(i==8){list.Delete(12);}; > }; > > The obvious question is how should an active iterator react if the > traversed list > changes? To answer this, I simply tried it out in two languages I know > that do > provide both dynamic arrays and foreach: STL, Tcl and C#. > > In STL C++ code, I get an exception because of iterator incompatibility. > In Tcl this problem isn't one because the iterator takes a snapshot of the > list > object on start and there's no language construct to actually change this > instance. > In C# with the List<int> generic, I get an exception because the iterated > object > changes (interestingly, this happens on ANY change to the list, even > appending). > > Now what I'd like to know: > - how do other languages cope with this? (Tcl doesn't need to, C++/C# > simply fails) > - what do YOU think would be sensible behaviour? > > Currently I'm considering having all iterators be elements of a > double-linked list > and let the array object be the dl-list head. So if the number of array > elements > changes, it can run through all attached iterators and fix their indices > or stop them. > > > Carsten Orthbandt > Founder + Development Director > SEK SpieleEntwicklungsKombinat GmbH > http://www.sek-ost.de > > Wenn ich Visionen habe, gehe ich zum Arzt. - Helmut Schmidt > > > > ------------------------------------------------------------------------- > Using Tomcat but need to do more? Need to support web services, security? > Get stuff done quickly with pre-integrated technology to make your job > easier > Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 > _______________________________________________ > Gamedevlists-windows mailing list > Gam...@li... > https://lists.sourceforge.net/lists/listinfo/gamedevlists-windows > Archives: > http://sourceforge.net/mailarchive/forum.php?forum_id=555 |