Backlog:

From now on, I'm going to use the issue tracker for the status of my work.
This page is now just my backlog of things I shoud do one day as lower priority.
Don't hesitate to move some of these on the issue tracker if you feel that they are important!


Missing features / Bugs:
  • Review buffer construct of co8705constains_obj
  • Must add tracing in Hashtable and Enumerator if not done already.
  • + with pointers with one of them is casted with reinterpret_cast<T *>. We might create this issue during the parsing.
  • Fix issue when a derived class method hides a method from the base class. -> Make LinkedResource unit test work again
    • I guess the solution would be detect the hidden function and use the C++ keyword "using" to make them reachable. That's not pretty nor efficient at parsing time. :(
    • The other solution is to cast to the base type during the call.
  • Improve test16 / test88 / event_tests
  • Handle int * * p correctly.
  • Detect memory leaks after shutdown
  • Investigate why we need 40 MB or so to run and not 15 MB when running the benchmark. (Bug in GC / or simply due to fragmentation?)


Low priority:
  • Add support for typeof(X<>) with X<> representing the generic type and not a specific implementation.
    • Actually I'm wondering what is the interest of supporting this if we don't have reflection nor dynamic type generation.
  • Checked is not supported
    • Probably will never be supported.
  • Interestingly int * [] is partially supported in .NET. We can't convert an item to object. (BTW that's exactly where Crossnet fails to compile - Could we solve it by some traits?).
  • Handle arglist, makeref, reftype, refvalue. See if Reflector handles that correctly now.
    • These should only be used in managed C++, not a common usage.
  • Improve switch on strings, there is currently an extremely small probability that the switch / case doesn't behave correctly. Unit tests added to list the various implementations.
  • Implement GenerateCodeArgumentList() in System::String::Concat()


Reflector:
  • Reflector is missing the conversion to 64 bits, like in System.IO.BinaryReader.ReadInt64.
    • -> Sent to Lutz Roeder - Reflector
  • Issue with some fixed syntax (with C# code like fixed (void * buffer = intArray) ...)
    • -> Sent to Lutz Roeder - Reflector
  • Issue with ++ (TestString / test_42) - This issue doesn't seem to happen when the assembly is compiled in debug and overflow check is off.
    • -> Sent to Lutz Roeder - Reflector
  • Issue with ++ with unsafe pointers. This issue seems to happen even in debug and overflow check is off.
    • -> Didn't send to Lutz yet, waiting for the ++ fix above to see if this is going to fix this issue as well.
  • Issue with properties get / set with ++ and return value (like return (MyProp++); This is actually a get, +1, dup, set and return. In some cases, Reflector returns invalid code and CrossNet doesn't recover.
    • Issue with CrossNet and Reflector. Will have to figure this out later when ++ is solved in general.
  • In optimized assembly, with new U() where U is a generic type is not disassembled correctly.


Optimizations:
  • Readonly should be const for primitive types. Like BitConverter.IsLittleEndian.
  • Improve parsing to get rid of the empty function Trace (if there is no traceable fields in the class).
    • Could detect that during GetDependencies()
  • Add perm allocations (like for global strings or types). Do not trace them...
    • Although generational would pretty much do the same.
  • Const int should be declared in headers instead of cpp.
  • Detect cases where cast result is known and a fast cast is acceptable
  • Remove virtual call (fully qualify the type?) for sealed classes
  • Clarify usage of delegate and multi-cast delegate / optimize.
  • Add dictionary in Provider.cs / GetEmbeddedType().
  • When a struct explictly implements a method of an interface, it will mark the function as virtual. No method should be virtual in a struct.
    • The issue is the same for classes. Is it the intended behavior even for a class?
  • Make sure handler for event is not duplicated.
  • Use traits for generic code when doing an interface call on a struct.
    • As structs can't be overriden, the interface method could be known at compile time and handled correctly by traits.
    • There is some work regarding the macro for interface call, but it would mean interface call on a struct in a generic would be as fast as a normal call.
  • Trace the static members on a generic only one time (and not for every instance).
  • Find ways to get rid of the original anonymous method / class as it's duplicated.


Refactoring / Cleaning:
  • See if we can Deactivate ->() for the structures.
  • typedef void * InterfaceMap;
  • Look for [=]. We should be able to remove this marker.
  • Find a way to simplify crossnet_box / unbox struct boxing / unboxing

Last edited Oct 1, 2007 at 5:13 AM by OlivierNallet, version 31

Comments

No comments yet.