Remix.run Logo
klibertp 3 hours ago

I might be wrong - I investigated Pike just once, a long time ago - but I think Pike dropped a lot of the "liveness" that LPC provided (ie. reloading objects from a (changed) source at runtime while keeping their identity and updating clones). It's still probably a good fit for a lot of more advanced MUDs, but it's even more niche than CL and Smalltalk, so again, not much of an advantage over a home-grown solution. Plus, I've been recently looking more closely at MOOs, and for that, even LPC would not be enough (too much of a separation between code and data) - LPC/LPMUDs weren't really built for persistence as much as MOOs were.

Still, I can't disagree that, out of the box, LPC and Pike are probably a (much) better fit for a mudlib language compared to Lua, Python, or JavaScript :)

em-bee an hour ago | parent [-]

reloading objects from a (changed) source at runtime while keeping their identity and updating clones)

the functionality is still there, but hidden. roxen can reload modules but the reload creates a new object instance which new http requests will get, whereas old requests keep the old instance until the request completes.

however open-sTeam, a collaboration platform developed by a university in germany built a system of proxy objects such that your code always only interacts with the proxy allowing the actual object in the background to be replaced by new instances. in your own code you don't realize you are dealing with a proxy. it's completely transparent. it also stores the object state in a database creating full object persistence. the architecture is very similar to a MUD. they even wrote an object protocol allowing you to access the object from remote, so you can write remote clients that interact with objects with implementations in pike, php and java.

the university is no longer working on that platform, but since they released it as GPL i am able to continue using it as a base for all my websites and web-apps.

persistence and runtime reloading of objects are my favorite features in any language. i just love to be able to change code at runtime without having to restart the server. it works just like i am used to from my LPmud time.