[Mono-dev] Replacing/Removing I18N

Atsushi Eno atsushi at ximian.com
Tue Oct 10 20:00:12 EDT 2006


To not let our thoughts go wrong way: the reason why existing
I18N.*.dll consist of a bunch of IL code and very few static data
is just because those conversion tables are just made into a bunch
of switch-cases.

The encoding conversion tables definitely do not have to reside in
mscorlib.dll. It is a lot of waste of resources.

They could just be other set of resources like per-encoding dlls
(which means that the refactoring is totally meaningless, only
hobbiests' satisfaction) or some kind of tables which have different
loading rules than managed dlls (for example, something like *.nlp
on .NET).

I'm not a fan of this specific restructuring anyways: so niche.

Atsushi Eno

Andreas Nahr wrote:
> Hi,
> 
>> Hello,
>>
>>> * Creating the binary data should be simple when generating from a 
>>> .Net VM.
>>> Would it be allowed to gernerate directly from MS.Net? From 
>>> Portable.Net?
>>> (obviously from Mono is no problem, but would not allow to ADD data)
>>
>> I did not understand this question at all.
> 
> Well the question is: Is it allowed to "extract" Data from .Net if it 
> can be extracted using a normal application (I attached an application 
> that might be suited for the task)
> 
>>> * Size of a memmaped page?
>>
>> 4k or 8k, depending on the platform.
> 
> This would be a perfect size.
> 
>>> * Growth in *file*size for corelib acceptable? Altogether probably 
>>> 5-10MB
>>
>> Do we really need to grow corlib?   What do you have in mind?
>>
>> Couldnt we just use static data, and access that as a resource?  (Mono
>> uses mmap for resources in the file)
> 
> Do you mean something like: private static readonly byte[]...?
> This seems to come with some overhead for me. Also it doesn't seem to 
> produce shareable memory between processes.
> So the idea was (see original mail) to embed the datatables as resources 
> into the corelib assembly.
> 
>> Am not sure how much code vs tables lives in the I18N libraries, do you
>> have details?
> 
> Currently the I18N assemblies are about 1MB IL-compiled in size. About 
> 98% is IL-Code, 1-2% is static data.
> With the suggested implementation we would have (for single byte 
> encodings) basically 0% IL and 100% resource-data.
> My MS.Net has 145 encodings, mono currently has 95 total.
> Each (single-byte (approx. 95 in MS.Net)) encoding would have about 65kb 
> of tables (the idea is to create one resource per encoding)
> 
>>> * Other sideeffects possible?
>>>
>>>
>>> Greetings
>>> Andreas
>>> _______________________________________________
>>> Mono-devel-list mailing list
>>> Mono-devel-list at lists.ximian.com
>>> http://lists.ximian.com/mailman/listinfo/mono-devel-list
>> -- 
>> Miguel de Icaza <miguel at ximian.com>
>>
> using System;
> using System.Text;
> using System.IO;
> 
> class CreateEncodingData
> {
>     private static string path = @"c:\st\out\";
>     
>     public static void Main ()
>     {
>         byte[] bytes = new byte[256];
>         for (int i = 0; i < 256; i++)
>             bytes[i] = (byte)i;
>        
>         char[] chars = new char[65536];
>         for (int i = 0; i < 65536; i++)
>             chars[i] = (char)i;
>        
>         EncodingInfo[] encodings = Encoding.GetEncodings();
>         Console.WriteLine ("Encoding count: " +  encodings.Length);
>        
>         foreach (EncodingInfo info in encodings)
>         {
>             Encoding e = Encoding.GetEncoding(info.CodePage);
>             Console.Write ("Encoding: " + e.CodePage + " (" + e.WebName 
> + ";" + info.DisplayName + ")");
>            
>             if (e.IsSingleByte)
>             {
>                 Console.WriteLine (" - single byte");
>                 //byte unusedbyte = (e.GetBytes(new char[] { (char)30000 
> }))[0];
>                
>                 Stream s = new FileStream (Path.Combine(path, e.CodePage 
> + ".bin"), FileMode.Create);
>                
>                
>                 char[] dataChars = e.GetChars(bytes);
>                 byte[] temp = Encoding.Unicode.GetBytes(dataChars);
>                 s.Write(temp, 0, temp.Length);
>                
>                 byte[] dataBytes = e.GetBytes(chars);
>                
> //                for (int i = 0; i < dataBytes.Length; i++)
> //                    if (dataBytes[i] == unusedbyte)
> //                        dataBytes[i] = 0;
>                
>                 s.Write(dataBytes, 0, dataBytes.Length);
>             }
>             else
>             {
>                 Console.WriteLine ();
>             }
>         }
>     }
> }
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> Mono-devel-list mailing list
> Mono-devel-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-devel-list




More information about the Mono-devel-list mailing list