[Mono-dev] [PATCH] Implement internal Encodingsusingunified code base
Kornél Pál
kornelpal at gmail.com
Fri Mar 21 16:17:58 EDT 2008
>The calls is my proposal about to the generated code that performs the
>call, say 20 bytes for a method with 3 arguments. The additional virtual
>unsafe method itself would be 50 bytes just in additional metadata
>and virtual table costs. So the amounts are small, but they are
>definitely not a benefit of your design.
My conserns are much about source code duplication than about binary code
duplication because I believe that duplicated source code will go out of
sync.
>Everything your proposal does can be implemented with static methods
>instead of virtual unsafe methods. Static methods may not be the cool
>new thing of the day, but they are more efficient and allow us to
>immediately check where potentialy ostile data is manipulated.
Actually I think that the source code looks more pretty with single line
implementations in encoding classes this is why I don't see using static
methods being cool.
public override byte [] GetBytes (string s)
{
return GetBytesInternal (s);
}
In contrast to:
public override byte [] GetBytes (char[] chars)
{
ValidateArguments (s);
if (chars.Length == 0)
return new byte [0];
fixed (char* charPtr = chars) {
int byteCount = GetByteCountImpl (charPtr, chars.Length);
byte [] bytes = new byte [byteCount];
if (byteCount == 0)
return bytes;
fixed (byte* bytePtr = bytes)
GetBytesImpl (charPtr, chars.Length, bytePtr, byteCount);
return bytes;
}
}
With static methods the above source code has to be duplicated while it can
be moved to Encoding.cs when using virtual methods.
>So the only high-level difference is that my version avoids doing
>unnecessary virtual calls and that potentially the code can be inline
>exactly where it is used without hard to follow flows (important both
>for performance and for security checks).
This is why I tend to be convinced of the benefits of using static methods.
Kornél
More information about the Mono-devel-list
mailing list