Hacker News new | ask | show | jobs
by Novex 3992 days ago
So our saas web app backend is written predominantly in Cache Objectscript, which is one of the few remaining implementations of MUMPS. We use it on a day to day basis, which I guess makes me a MUMPS developer.

As a programming language, it's a fairly standard procedural language. Cache introduces the ability for scoped java-like classes over the top of the standard procedural code and there's a SQL/ORM layer that at least allows a definition for the giant persistent hash table. That being said, a bunch of our code is in the legacy unscoped routines which is... interesting.

The two real downsides are the complete lack of libraries for it (imagine having to allocate time to port DEFLATE as part of your developement scheduling) and the fact that 20 years of schemaless, unvalidated, tightly coupled data access leads to a boatload of weird bugs.

Feel free to AMA.

1 comments

How well does Cache interoperate with other languages?

Is it wrapped up in a library and consumed from another language that handles web requests/responses? Can you extend the Cache libraries by writing code in another language (even C) and importing it through a FFI?

There are bindings for most of the common languages to access Cache structures/functions (.Net, Java, Python, Perl, C/C++, Node.js) but not much the other way around. The only native to call out from Objectscript is via a low-level C interface.

At the moment we're solving the problem by calling out to a set of Golang microservices from Cache over http.

Cache itself actually has web support baked in, either via early-00's PHP style "echo directly down the pipe" or a newer MVC style framework they've built, but sadly stopped developing. Our product team made the choice to transition to their MVC style framework, another team built on ASP.Net so there are options.

Most clients interact with the database through a standard API like JDBC or REST, but there is an interface for calling functions written in C, and for getting into the database from C. It's kind of similar to Lua's C API. The Node.js binding is based on this interface.