یکی از خواص ارلنگ که کلی برای آن تبلیغ میشود قابلیت بروز رسانی کد آنهم بدون نیز به پایین آوردن برنامه است، در حقیقت بدون نیاز به قطعی سرویس این امکان وجود خواهد داشت. این قابلیت برای سرویس هایی که حتی یک لحظه خارج از دسترس بودن هزینهها و خسارات جبران ناپذیری ببار خواهد آورد خیلی حیاتی هستند. اما ارلنگ چطور این کار را میکند؟
ارلنگ در درون سیستم خود چیزی شبیه سرور کد را جای داده است. کد سرور ارلنگ در حقیقت یک پروسه ارلنگ است که در پس زمینه اجرا میگردد و یک دیتابیس در حافظه برای خودش ایجاد کرده است. کد سرور دو نسخه از هر کد را میتواند در خود نگه دارد و هر دو نسخه همزمان میتوانند اجرا شوند. نسخه جدید هر برنامه هر زمان که کامپایل شد و سپس با استفاده از تابع l() بارگذاری گردید، قابل استفاده خواهد بود. باید این نکته را اضافه کنم که ارلنگ دو روش صدا زدن تابع دارد: داخلی و خارجی. روش صدا زدن داخلی تابع همان روش معمولی است:
f(Args).
و روش صدا زدن خارجی، استفاده از نام ماژول مربوطه در ابتدا است:
Mod:f(Args)
نکته اساسی و مفید اینجاست که در روش صدا زدن خارجی همیشه نسخه آخر تابع اجرا میشود. بنابراین بسادگی میتوان برنامهئی نوشت که با دریافت پیامی نسخه جدید را اجرا کنید. کد زیر را نظر بگیرید:
-module(hotload). -export([server/1, upgrade/1]). server(State) -> receive update -> NewState = ?MODULE:upgrade(State), ?MODULE:server(NewState); %% run new version SomeMessage -> do_something(), server(State) %% Old Version end.
در کد بالا کافی است پیام update را با پروسه بفرستیم و در آن صورت نسخه جدید که بصورت فراخوانی خارجی قابل مشاهده است اجرا خواهد شد. کافی است مطابق نیاز خود تابع upgrade را بنویسیم که من جایش را خالی گذاشتم.