You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The aim of this task is to make it possible to rewrite SMLserver to make it work with native x64 machine code. Such a rewrite allows for removing the KAM backend, which is currently not maintained (it does not work on 64-bit architectures). The strategy is to remove SMLserver entirely from the MLKit source repository and instead make it possible to craft an efficient web-server outside of the MLKit code base.
Design
Here is a possible design that will make it possible to craft an efficient web server in C:
Add the following functionality to an o-file generated by the MLKit compiler:
typedefstruct {
uintptr_t*sp_top, *sp_bot;
Regiontopregion; // top-most regionuintptr_t*exn_ptr; // exn-pointer char*exn_msg; // NULL if no exception
} *Context;
typedefstruct {..} *Snapshot;
Contexteval_libs (void); // Evaluate all libraries in MLB-files (except last or the // multiple scripts in script...end constructs)Contexteval (Contextc, char*punit); // Evaluate a program unit (last entry in MLB// file or entry in script...end construct) char**punits (int**n);
Snapshotsnap (Contextc);
Contextresnap (Snapshots, Contextc);
With the above functionality, we can write a web-server in C that is multi threaded, makes use of pre-evaluated libraries (using the snapshot functionality), and pools database connections.
Features
The functionality can be tested in isolation.
The functionality can perhaps be used to write a REPL (given dynamic linking).
Contexts can be built for different thread stacks and each thread can snapshot the thread-specific context for the benefit of increased performance.
The snapshot functionality can be left out initially.
The web-server code (or the REPL code) can be held outside of the MLKit repository.
Tasks
Remove the KAM (bytecode) backend and the apache2 module code.
Set aside a register to hold the execution context pointer throughout execution. When the top-region is manipulated or accessed, it can be done through the context pointer; the context pointer can also be used for accessing the current exception pointer. Finally, it can be used for the parallelism mechanism (thread context).
The text was updated successfully, but these errors were encountered:
I'm investigating various designs. Let's discuss. It would be great if we could leave such a development outside of the mlkit repository. One problem is, however, that we need to provide guarantees that after a response has been served (for a request), memory is restored to before the request was received. I'm looking at various region-resetting strategies that we can expose as mlkit-functionality and then make use of to write high-performing web-servers. We also want the possibility of writing multi-threaded servers that can serve multiple requests simultaneously (using a thread pool). To begin with, however, we can live with a pre-forking version and we can also live with enabling the garbage collector.
The aim of this task is to make it possible to rewrite SMLserver to make it work with native x64 machine code. Such a rewrite allows for removing the KAM backend, which is currently not maintained (it does not work on 64-bit architectures). The strategy is to remove SMLserver entirely from the MLKit source repository and instead make it possible to craft an efficient web-server outside of the MLKit code base.
Design
Here is a possible design that will make it possible to craft an efficient web server in C:
With the above functionality, we can write a web-server in C that is multi threaded, makes use of pre-evaluated libraries (using the snapshot functionality), and pools database connections.
Features
Tasks
The text was updated successfully, but these errors were encountered: