Tuesday, May 11, 2010

Reia: Year 2

Yes, two years, the same as the number of heads on this turtle...

It's been two years since I committed the initial scanner to the Reia repository, which was the first commit of real code.  Last year I posted a large list of features which I had managed to crank out in the previous year.  But then I began to struggle with the codebase and implementation, and started to doubt some of the features I had been adding and suggested forking off the old implementation and starting over anew, as, alas, due to some poor design decisions Reia was unusably slow.

Rather than doing that, I decided to do a largely ground up rewrite, incorporating bits and pieces of the old code.  In the intervening time I had learned a lot about Erlang, like records are a necessary evil.  I had learned a lot more about how the Erlang compiler works and how people ordinarily write parse transforms, namely the extraordinary power of mapfold_subtrees.  After powering through the rewrite, the result was a much leaner, nimbler, and above all else comprehensible codebase with substantially better performance.

Unfortunately because of the rewrite I haven't managed to equal the same list of features the language could boast last year, but has picked up many new ones.  All your normal C-like bitwise operators now work.  C's ternary operator now works, and even supports the same wacky associativity as languages like C and Ruby (but unfortunately not the wacky left-associativity of PHP).  But even better, Reia now supports "magic rebinding" which allows you to use Reia's dicts with the same syntax as Ruby or Python, and even supports rebinding of a method's receiver using Ruby's method! syntax.

Recently I've added the basics of an immutable object system, and begun work on class-based polymorphism.  The goal is to put an OO-like face on a system similar to Erlang's parameterized modules.  Parameterized modules are an alternative way of storing structured data, created as an alternative to Erlang's records, one of the language's most shunned features.  However, it seems most people still steer clear of parameterized modules and find using them odd.  I hope Reia's immutable objects will provide the much sought after solution to this problem, by coupling state and function in the way Joe Armstrong so detests.

I would like for immutable objects to form the basis for almost everything in Reia.  The core types will be immutable objects.  Exceptions will be immutable objects.  External resources... you guessed it, immutable objects.

Does that mean processes, particularly ones like gen_servers, can also be immutable objects?  Maybe, but I'd much rather pursue making gen_server a first class part of the language.  Right now there's a considerable amount of boilerplate involved in creating a gen_server.  In the previous branch of Reia I managed to create a great proof of concept demonstrating a concurrent object system with "mutable" (yet behind the scenes still pure functional) instance variables using a syntax identical to Ruby's class definition syntax.  I still would like to add this back.

But in the meantime, I'm working on Reia again, immutable objects are on the way, and after that, the initial standard library and the first official release.

3 comments:

قمم التميز said...

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




Amir kh said...

دانلود بازی تخته برای اندروید Abalone
دانلود جایگزینی مناسب برای ویندوز XYplorer v15.00.0500
دانلود نرم افزار افزایش کارآیی و سرعت کامپیوترWinUtilities Pro 11.36

shina said...

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