Tuesday, August 9, 2011

Erlang's biggest missing feature: globals


There's one problem with Erlang I didn't touch upon in my previous rant, whose symptom can be found in some Erlang code called mochiglobal.erl. To understand what mochiglobal does we can read the description found in the source code's header:

Abuse module constant pools as a "read-only shared heap"

Erlang has a global centralized "code server" which maps module names to the corresponding BEAM bytecode containing all of the functions in a given module (including a limited number of previous versions, so it has some MVCC properties). The code server stores the state which represents the functions of a given module in a separate shared heap. The code server has pretty decent semantics for changing its contents, which all focus on the specific case of managing the actual Erlang code behind a particular application and allowing hot deploys.

What mochiglobal does is flip the old Lisp aphorism of "code is data" on its head. As the Erlang "code server" is exclusively focused on managing Erlang modules, if you want to use it to store a global value, you must convert it into Erlang code, compile it, and put it into the code server.  This is exactly what mochiglobal does.

It's not as if mochiglobal is some arcane hack. It's used by some prominent Erlang applications, including Riak. Global shared state, something the Erlang VM has specifically been designed to exclude, is necessary in some real-world problems that are otherwise highly conducive to the Erlang VM. How many prominent Erlang applications have "mochiglobal" or some other "mochi*" code in them to provide features which really should be included in OTP?

Erlang could've done better here by providing some mechanism for managing global shared state. The Erlang code server is just one specific case where global shared state is needed, and that's the only one the language designers tackled.

A common Erlang reaction to the suggestion that the Erlang VM should support shared state is "how do you tolerate faults?" I don't think tolerating faults is particularly hard. We can look at one model for how to tolerate faults in this case: the Erlang code server itself. If you crash the Erlang code server, it brings down the entire VM. This probably isn't the best solution, but it's one solution. Let's do better.

Another solution would be to treat the global state as a sort of database, or perhaps more specifically a key-value store. This store can contain the code which implements a particular module in addition to shared global values. Programs could modify its contents in atomic sections, which are committed when they complete or aborted and rolled back if an exception is raised. I don't know about you, but it's beginning to sound a lot like STM.

I think shared-nothing systems like actors and STM are two ways of managing state which together build a more complete picture of how you can build general purpose programs. Code should just be another kind of global state, and global state needs some kind of concurrency story, which STM addresses. Like peanut butter and chocolate, a language which combined actor-like ideas with STM ideas has a good way to manage not just code, but global shared data.

13 comments:

Manuel Rubio said...

The global shared state could be a gen_server with global information... and could save its information in Mnesia to avoid the crash problem.

Ingas said...

I'm with Manuel.

Global shared state already exists in Erlang.

Tony said...

That's not shared state at all. Each time you request an actor's state it sends you a copy of its state in the form of a message.

TonyWallace said...

When you start learning Erlang, you are told that there is not shared state, but the reality is there is shared state everywhere, and it can trip up the unwary. Every registered process is an example of shared state as there is only one namespace for all registered processes. For example two processes doing file i/o, they each have their own directories, but doing a file:set_cwd() changes the working directory for both processes.

I have been working on making context sensitive name spaces for groups of processes for my own projects.

Deborah Richards said...

Thanks a lot for sharing this excellent info! I am looking forward to seeing more posts by you as soon as possible! I have judged that you do not compromise on quality. buy a college degree

NinaMeyers said...

I was looking up some good language line reviews to be prepared, you know :) And then I bumped into your blog and I have just one question - why is there any recent updates? Your blog is so cool, why did you stop posting?

shina said...

Surveillancekart | CCTV System
Pestveda | Pest Control
Termite control
Surveillancekart | CCTV System
cctv installation services
best home security camera system

emma said...

cctv camera dealers in delhi
cp plus cctv camera online
hikvision camera online
cctv camera installation services in delhi
cctv camera installation services in gurugram
cctv camera installation services in gurgaon

نور الهدى said...


نستخدم افضل ادوات تنظيف و غسيل الخزانات لاننا افضل شركة غسيل خزانات بالمدينة المنورة و عمال مدروبون وحاصلون على شهادة صحية فقط اتصل بنا لتحصل على افضل خدمة غسيل خزانات بالمدينة المنورة


robin said...

avriq Desktop/Laptop Repair
avriq yellow pages
avriq business services
avriq bbb
avriq India
avriq

Happy Gameboy said...

This Content is Great in terms of research and I must appreciate your effort to highlight these points so every one should be aware of it.
||Happy Wheels Demo Game at happywheels.in||
||Play happy wheels game free at classic happy wheels game||
||Play online Happy Wheels demo game at happy wheels||
||Enjoy Fireboy and watergirl game online at fireboywatergirl.co||

Dida ELhaik said...

شركة المستقبل لخدمات شراء الاثاث المستعمل بالمملكة العربية السعودية
هل تزدحم شقتك بالعديد من قطع الأثاث القديمة والتي أصبحت لا حاجة لك بها؟ هل ترغب في التخلص من جميع المنقولات القديمة لكنك لا تريد خسارة المبالغ التي تم دفعها وقت الشراء؟ إذا كنت ستجيب على السؤالين السابقين بنعم فسنقدم لك في هذا المقال الحل الفوري والسريع لكل المشكلات التي تواجهك بسبب أثاثك القديم والذي يكمن في التعامل مع شركة شراء اثاث مستعمل والتي تعد من أقوى الشركات التي تعمل في ذلك المجال على الإطلاق فبمجرد عمل مكالمة هاتفية واحدة لها ستجد فريق عمل متكامل لديك في المنزل لعمل كل الخطوات اللازمة التي ستخلصك من تلك المعاناة إلى الأبد وبدون تكبد أي خسائر مادية.
شراء الاثاث المستعمل بالدمام
شراء الاثاث المستعمل بالخبر
شراء الاثاث المستعمل بالجبيل
إذا كنت تود شراء أثاث جديد وترغب في التخلص من ذلك القديم الذي لديك في المنزل فلا تدع الفرصة تفوتك فكلما كانت قطع الأثاث القديمة التي تقتنيها في المنزل في حالة جيدة كان السعر الذي ستحصل عليه أفضل بكثير مقابل البيع وهذا ما سيمنحك الفرصة لشراء جميع أنواع الأثاث الجديد لذلك ننصحك بضرورة التواصل مع شركة شراء اثاث مستعمل خاصة إذا كنت ترغب في الحصول على السعر الذي يرضيك ويناسب الأثاث الذي ترغب في التخلص منه وبيعه حيث أن شركتنا المتميزة لديها الكثير من الامكانيات مثل:
• أقوى فريق عمل متخصص في حمل العفش ونقله حيث تم تدريبهم على أعلى مستوى للحفاظ على سلامة كل قطعة أثاث.
• ستحصل على أسعار مناسبة جدا ولن تخسر معنا أبداً وهذا من أكثر ما يميز شركتنا عن أي شركة أخرى.
• سيارات مجهزة على أعلى مستوى لنقل العفش بدون إحداث أي أضرار أو تلفيات به.
• سيتم تغليف جميع الأثاث الذي يرغب العميل في بيعه بأغطية شفافة قبل حمله ونقله إلى الشاحنات للحفاظ على سلامته.
• مع شركتنا المتميزة لن تكون بحاجة إلى الانتظار لفترة طويلة حتى يتم الرد على اتصالك الهاتفي وذلك لأن الشركة لديها أفضل طاقم لخدمة جميع عملائنا الكرام في أي وقت.
• أسعارنا لا مثيل لها حيث أننا لدينا خبراء على قدر كبير من المعرفة بكيفية تقدير كل قطعة أثاث تقتنيها.

Dida ELhaik said...

ارقام الاثاث المستعمل بالدمام
محلات الاثاث المستعمل بالخبر
حقين الاثاث المستعمل بالجبيل
لا شك أن بيع أي قطعة أثاث مستعملة تسبب الكثير من الخسائر المادية لأي شخص حتى لو كانت في حالة جيدة ويمكن استخدامها مرة أخرى من قبل أشخاص أخرين لكن مع شركة شراء اثاث مستعمل فسيختلف الأمر كثيرا حيث دائما تكون على قدر كبير من الوعي بأنرعاية مصالح العميل لا بد أن تكون من أولويات الشركة.
لذلك فدائما ما نسعى دائما إلى تقدير أي جهاز كهربائي أو أي قطع خشبية وغيرها بالشكل المطلوب حتى لا يتم الإضرار بمصالح العميل المادية لذلك لا تتردد بالتواصل مع شركة اثاث مستعمل وستجد ما يسرك.
قد يرغب البعض في التعامل مع جهة معينة وذلك لأنه يثق بها لما لها من سمعة طيبة لكن بعد المسافات قد يجعلهم يضطرون إلى التعامل مع أقرب جهة من مسكنهم حتى وإن كانت على قدر كبير من الرداءة وعدم المسئولية.
وقد انتبهت شركة شراء اثاث مستعمل لذلك الأمر وقامت بعمل فروع في كافة أنحاء المملكة العربية السعودية لتقديم كل الخدمات المتميزة لعملائنا الكرام هذا بالإضافة إلى أن كل فرع يحتوي على مكان لتصليح العفش بكل أنواعه وأشكاله حتى وإن كان في حالة سيئة للغاية فمعنا لا تحمل أي هم.
إذا كنت لا تمتلك مبالغ كبيرة لشراء أثاث جديد تحتاجه في المنزل فيمكنك الأن من خلال شركتنا المتميزة شراء أي قطعة أثاث تخطر ببالك وهذا لأننا نحرص على توفير كل المستلزمات المنزلية من الألف إلى الياء فلا عليك سوى زيارة أقرب فرع إليك واختيار ما يحلو لك من أثاث وكل هذا بأسعار مناسبة جدا.

شراء الاثاث المستعمل بالمدينة المنورة
محلات الاثاث المستعمل بالمدينة المنورة
ارقام الاثاث المستعمل بالمدينة المنورة
• إزالة الأتربة من عليه أولاً بأول.
• الاهتمام بشفط الأتربة المتراكمة على الستائر والسجاد والموكيت.
• إذا كنت لا تستخدمين أي قطعة أثاث عليك بتنظيفها ومن ثم تغطيتها جيدا لحمايتها من الأتربة والشوائب