If we wanted a quick fix, we could have a locale vocabulary that calls some
locale-format primitives in the VM.

On Thu, Aug 13, 2015 at 3:01 PM, Jon Harper <jon.harpe...@gmail.com> wrote:

> So I looked into this, trying to solve it by calling printf through the
> FFI with a locale setup and cleanup.
>
> The difficulty comes from the fact that printf is a variadic function..
> Factor's ffi doesn't support them, at least no in a cross platform manner,
> right?
>
> So a workaround could be to wrap printf in C many times, compile that to a
> shared library and call the different wrappers with the FFI depending on
> the number of arguments and their types, but it would be nicer to have a
> better support of variadic functions.
>
> Anyway, it (kind of) worked on linux x86_64 with the following code:
> http://paste.factorcode.org/paste?id=3584
> Since printf is a variadic function, you have to use FUNCTION-ALIAS to
> create functions with the correct number of arguments and the correct
> types. So for example,
>  FUNCTION-ALIAS: mysnprintf-int2 int snprintf ( char* result, size_t size,
> c-string format, int d, int d2 )
> would work too.
>
> However, passing floats didn't work on linux x86_64, because the system V
> AMD64 ABI says that the number of float arguments must be in RAX before
> calling the function, and factor always sets this to 0. With the following
> diff, it worked for 1 float:
> in cpu/x86/64/64.factor (and basis/cpu/x86/64/64.factor ??)
> -M: x86.64 %prepare-var-args ( -- ) RAX RAX XOR ;
> +M: x86.64 %prepare-var-args ( -- ) RAX 1 MOV ;
> I don't know how hard it would be to generate the correct value for RAX
> for variable arguments.
> Also, I'm not sure if it works better for other ABI/platforms.
>
> Do you think that's something worth investigating ?
>
>
> Jon
>
> On Wed, Aug 12, 2015 at 7:10 AM, Georg Simon <georg.si...@auge.de> wrote:
>
>> Am Tue, 11 Aug 2015 09:02:33 -0700
>> schrieb John Benediktsson <mrj...@gmail.com>:
>>
>> Thank you. So I didn't overlook existing locales support.
>>
>> > Properly supporting locales, even in a small way, would be a good
>> > thing to add.
>> >
>> > Factor is currently locale-independent, partly because of a desire for
>> > homoiconicity, and partly because it prevents things like tests that
>> > break depending on the system locale[1].
>> >
>> > We have discussed adding a locale vocabulary or a with-locale
>> > combinator that can influence presentation of numbers and strings,
>> > maybe looking at how other languages work[2].  Probably we'd want to
>> > keep the math.parser locale independent, but provide ways for things
>> > like present / printf to be locale-aware.
>> >
>> > If this is an issue for something you are building, you could use
>> > alien.ffi to call sprintf or use C++ stringstream or something and
>> > call the library from Factor, or do something slow like this, calling
>> > out to Python:
>> >
>> > : format-with-locale ( n locale -- s )
>> >     swap [
>> >         "python" , "-c" ,
>> >         "import locale; locale.setlocale(locale.LC_ALL, \"%s\");
>> > print(locale.format(\"%%f\", %s))" sprintf ,
>> >     ] { } make B utf8 [ readln ] with-process-reader ;
>> >
>> > IN: scratchpad 1.5 "fr_FR" format-with-locale .
>> > 1,500000
>> >
>> > ---
>> > [1] https://github.com/slavapestov/factor/issues/905
>> > [2] https://docs.python.org/3/library/locale.html
>>
>>
>> ------------------------------------------------------------------------------
>> _______________________________________________
>> Factor-talk mailing list
>> Factor-talk@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/factor-talk
>>
>
>
>
> ------------------------------------------------------------------------------
>
> _______________________________________________
> Factor-talk mailing list
> Factor-talk@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/factor-talk
>
>
------------------------------------------------------------------------------
_______________________________________________
Factor-talk mailing list
Factor-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/factor-talk

Reply via email to