[erlang-questions] Erlang basic doubts about String, message passing and context switching overhead

Jesper Louis Andersen jesper.louis.andersen@REDACTED
Mon Jan 16 17:00:39 CET 2017


I'd suggest looking a bit at what the Go people are doing here as well.
They have this problem at a large scale at Google, so I expect them to have
handling of some of the nastier corner cases. Some observations:

* They keep part of the unicode handling outside of the standard library.
This allows it to develop independently of the main code base, which in
some cases is nice. The things that seems to be in the separate package are
collation, normalization, and canocalization. I have a hunch this happens
because these things tend to update a bit like time zones and SSL top-level
certificates: haphazardly. By keeping it outside, you avoid the problem of
having to wait for a new major release, or even having to push a new minor
release because some random pacific island decided on their monthly meeting
to switch their collation rules :)

* Keep it rather simple for starters. The Elixir set is probably what "most
people need supported".

* Currently, I'm mostly interested in normalization and canocalization. I
have some data where this would be highly useful to have access to directly
from Erlang.

On Sun, Jan 15, 2017 at 11:17 AM Dan Gudmundsson <dgud@REDACTED> wrote:

> On Sun, Jan 15, 2017 at 10:48 AM Loïc Hoguin <essen@REDACTED> wrote:
>
> Great work!
>
>
> You have not seen it yet :-)
>
>
>
> Does this include (some) support for locales? As far as I recall they
> are necessary to do uppercasing and lowercasing properly.
>
>
> No not currently I have taken the elixir approach of a basic unicode
> support without locale handling, that is another can of worm which I guess
> can be opened later if there is need.
> But we don't have locale support anywhere else and I don't want start with
> adding that first,
> then will we never get any unicode support.
> From my understanding for uppercase and lowercase there very few cases
> which need
> the locale to correctly transform them.
>
> /Dan
>
>
> If this includes support for locales, or would in the future, may I
> suggest 'text' for the module name? Otherwise something else. :-)
>
> On 01/15/2017 10:01 AM, Dan Gudmundsson wrote:
> > We have started to work on a new string module, we will make a PR when
> > we have decided directions of how the api should look like.
> >
> > Basic stuff like uppercase, lowercase, to_nfc, to _nfd and gc
> > (grapheme_clusters) are implemented for unicode:chardata() input, I have
> > used elixir's module as inspiration.
> >
> > That is the easy part, writing a nice api on top of that is the hard
> > part and naming the module
> > something different than string.
> >
> > /Dan
> >
> > On Sun, Jan 15, 2017 at 3:25 AM Michael Truog <mjtruog@REDACTED
> > <mailto:mjtruog@REDACTED>> wrote:
> >
> >     ||This thread started to talk about the need for unicode
> >     functionality in Erlang and how it exists currently in Elixir but
> >     not in Erlang.  I created a repository with the Elixir functions
> >     created as Erlang functions in an Erlang module as an example of
> >     what I want at https://github.com/okeuday/unicode_data/
> >
> >     The generated module (unicode_data) only includes functions from the
> >     first Erlang module contained in unicode.ex (Elixir.String.Unicode)
> >     though it does bring up some important topics:
> >     1) Add the unicode version to the Erlang module version.  The
> >     generated unicode_data module has a timestamp suffix, so we know
> >     both the unicode version and the timestamp when the unicode_data
> >     module was generated.
> >     2) Use only lists, not binaries, to make sure all temporary data
> >     stays on the heap of the Erlang process.  That should be best for
> >     performance, though I haven't proved that with any performance
> testing.
> >
> >     I haven't added tests, though I have compared the unicode_data
> >     Erlang module, to the Elixir.String.Unicode module and the data
> >     looks correct.  Mainly thought this would help the discussion.
> >
> >     Best Regards,
> >     Michael
> >
> >
> >     On 01/10/2017 10:58 AM, Bhag Chandra wrote:
> >>     Hello,
> >>
> >>     I have been coding in Erlang for 2 years.  A wonderful language
> >>     but not very big community, so I cant discuss my questions with
> >>     programmers around me (Java, Python guys). I found out about this
> >>     list today.
> >>
> >>     I have some fundamental doubts about the Erlang. It would be great
> >>     if someone can help me clarify them.
> >>
> >>
> >>     1) "Strings in Erlang are internally treated as a list of integers
> >>     of each character's ASCII values, this representation of string
> >>     makes operations faster. For example, string concatenation is
> >>     constant time operation in Erlang."  Can someone explain why?
> >>
> >>     2) "It makes sense to use Erlang only where system's availability
> >>     is very high".  Is it not a very general requirement of most of
> >>     the systems? Whatsapp to Google to FB to Amazon to Paypal to
> >>     Barclays etc they all are high availability systems, so we can use
> >>     Erlang in all of them?
> >>
> >>     3) "Every message which is sent to a process, goes to the mailbox
> >>     of that process. When process is free, it consumes that message
> >>     from mailbox". So how exactly does process ask from the mailbox
> >>     for that message? Is there a mechanism in a process' memory which
> >>     keeps polling its mailbox. I basically want to understand how
> >>     message is sent from mailbox to my code in process.
> >>
> >>     4) We say that a message is passed from process A to process B by
> >>     simply using a bang (!) character, but what happens behind the
> >>     scenes to pass this message? Do both processes establish a tcp
> >>     connection first and then pass message or what?
> >>
> >>     5) At 30:25 in this video ( https://youtu.be/YaUPdgtUYko?t=1825 )
> >>     Mr. Armstrong is talking about the difference between the context
> >>     switching overhead between OS threads and Erlang processes. He
> >>     says, thread context switching is of order 700 words but Erlang
> >>     process context switching is ... ?
> >>     I cant understand what he said, if someone could tell.
> >>
> >>
> >>     P.S. Please excuse for any grammatical errors, English is not my
> >>     first language.
> >>
> >>
> >>     _______________________________________________
> >>     erlang-questions mailing list
> >>     erlang-questions@REDACTED <mailto:erlang-questions@REDACTED>
> >>     http://erlang.org/mailman/listinfo/erlang-questions
> >
> >     _______________________________________________
> >     erlang-questions mailing list
> >     erlang-questions@REDACTED <mailto:erlang-questions@REDACTED>
> >     http://erlang.org/mailman/listinfo/erlang-questions
> >
> >
> >
> > _______________________________________________
> > erlang-questions mailing list
> > erlang-questions@REDACTED
> > http://erlang.org/mailman/listinfo/erlang-questions
> >
>
> --
> Loïc Hoguin
> https://ninenines.eu
>
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://erlang.org/mailman/listinfo/erlang-questions
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20170116/42b63de2/attachment.htm>


More information about the erlang-questions mailing list