* Mono hacking TODO list From time to time people that want to contribute to Mono ask on the mailing list what they can help with. The generic answer is always:
Area | Description | Difficulty | Time estimate | Bugzilla ID |
---|---|---|---|---|
Runtime (mono/metadata) | Optimize method vtable. Currently all the methods in a class are added to the method vtable, including static and non-virtual methods. This makes vtables bigger and the instructions to access them are longer, increasing also code size. Some code in metadata/icall.c and maybe also some remoting code may depend on the current layout: such code should be fixed as well. | Medium | 1-2 weeks | not assigned |
System assembly (mcs/class/System/) | Implement the IL-based regular expression engine. Instead of intepreting the regular expression pattern, a method is created at runtime using Reflection.Emit. This makes for faster pattern matching because there is no intepreter overhead and the matching code is jitted to fast native code. Bonus points if the compiled regular expression is compatible with the ones generated by the MS runtime. | Medium-hard (thesis subject) | 2-4 months | not assigned |
JIT (mono/mini/) | Implement common subexpression elimination. Global and local common subexpression elimination needs to be implemented to achieve better performance. The local case is easier and may take just one month. It should be implemented in the context of the SSA framework (mini/ssa.c). | Hard (thesis subject) | 2-4 months | not assigned |
JIT (mono/mini/) | Optimize AOT compiler output. Currently the code generated by the AOT compiler may be significantly slower than jitted code. This is mostly because the AOT code supports multiple application domains and some values that are constant at JIT-time are not constant at AOT-time. It may be needed to write a simple dynamic linker and/or binary object writer. Bonus poinst if it supports ELF, PE/COFF and mach-O binary formats. A possible idea for improvements is also the use of appdomain ID-indexed tables to get at the appdomain specific data. | Medium-hard (thesis subject) | 3-6 months | not assigned |
JIT (mono/mini/) | Implement generics support. We need to add support for the additional instructions and change existing ones to support the generics requirements. | Medium-hard | 2-3 months | not assigned |
JIT (mono/mini/) | Port the JIT to additional architectures. Currently ports are in the works for ppc, arm, sparc, s390. None of the ports are as feature-complete as the x86 one, yet, so help is needed in getting them up to speed. Ports to more architectures are welcome as well. | Medium-hard | 3-6 months per arch | not assigned |
Runtime and JIT (mono/metadata and mono/mini/) | Add support for COM and/or XPCOM and/or ORBit. We need a way to seamlessy use existing component technologies inside the mono runtime. The COM support needs to match the MS runtime behaviour and is targeted at windows systems. XPCOM and ORBit support are important on Unix platforms. Bonus points for developing the runtime support so that different component systems can be used at the same time. | Medium-hard (thesis subject) | 3-4 months for each | not assigned |
Runtime and JIT (mono/metadata and mono/mini/) | Implement support for Code Access Security. Support needs to be added to the JIT and the runtime to ensure code that executes privileged operations is permitted to do so. The task includes loading the security information from metadata, collecting evidence, inserting calls to the permission objects, stack walking to collect security info. | Medium-hard (thesis subject) | 4-5 months | not assigned |
Runtime and JIT (mono/metadata and mono/mini/) | Implement support for a generational GC. We're currently using a conservative non-moving GC. Support for a generational and moving GC requires changes to the JIT (to record locations in frames as well as registers that may contain pointers to GC-allocated memory) and to the runtime code (when objects are manipulated directly we should make sure they are pinned and reachable by the GC also in the C unmanaged code). Code from an existing precise GC such as the ORP one could be reused or a new GC may be developed (increasing the estimated development time). | Hard (thesis subject) | 6-8 months | not assigned |
Compilers for dynamic languages | Write a IL compiler and runtime support for dynamic languages like Python, Perl, Ruby, PHP. | Medium-hard (thesis subject) | 6-12 months | not assigned |
Tools | Write an implementation of the MSBuild compilation tool available in .NET 1.2 | Medium | 4-6 months | not assigned |
Build tools. | Currently it is easy for people doing daily updates from CVS to break their installation. Design a mechanism by which Mono never fails to compile. | Easy | 1-2 weeks | not assigned |
Documentation. | Editorial review of the Monkeyguide: The monkeyguide is known to contain outdated statements, it needs to be reviewed and it needs an editor to take control over it. Some simple tasks include flattening out the Monkeyguide, since it is too nested today. | Easy | Ongoing work. | not assigned |
Documentation | GNOME.NET Chapter should probably be separated from the Monkeyguide. This is probably the most complete chapter, but it is burried in various nested levels of stuff, and because of this, it is not being updated. Write a chapter on custom control authoring and common patterns of app development. | Easy | Ongoing work. | not assigned |
Documentation Tools | The Monodoc collaborative service needs a better administration tool than it has today; Someone needs to redo the UI and streamline its process. | Easy | 2-3 months. | not assigned |
Comment Service API | Design a full system for comments and ratings so people can annotate the documentation in Monodoc. | Easy | 2-3 months. | not assigned |
POSIX bindings. | The Mono.POSIX assembly is a project to create a binding to
the various low-level calls in Unix which are not available
thought he regular assemblies in .NET.
The work should be done in two steps: one step is doing the
low-level binding for the system call, and another possibly is
to expose .NET-level objects like Streams for common patterns:
for example Streams for socketpairs.
| Medium | 2-3 months + QA. | not assigned |
System.Drawing CODECs | Complete the JPEG and PNG codecs to be fully finished; Implement EXIF data loading; Implement the missing image codecs. | Medium | 2-3 months. | not assigned |
System.Data updates | .NET 1.2 introduced many new updates to the System.Data namespace: MARS and ObjectSpaces are the big ones. | Medium | 6-9 months. | Work with the mono-devel-list to keep track of things. |