An introduction to Jorvik, Ada's new tasking profile
AdaCore introduced Jorvik in Ada 2022, a tasking profile enhancing expressive power for real-time and embedded applications. Jorvik relaxes restrictions compared to Ravenscar, allowing more complex Boolean expressions and multiple callers on protected entries. This new profile enables classic protected type idioms and concurrent bounded buffers, complementing Ravenscar's focus on high-integrity systems. Jorvik offers additional flexibility while maintaining compatibility with Ravenscar.
Read original articleAdaCore introduced a new tasking profile named Jorvik in Ada 2022, building upon the Ravenscar profile with relaxed restrictions. Jorvik aims to enhance expressive power for real-time and embedded applications, complementing Ravenscar's focus on high-integrity and safety-critical systems. The differences between the two profiles lie in removed or replaced restrictions, such as allowing multiple callers on protected entries and more complex Boolean expressions in entry barriers. Jorvik's Pure_Barriers enable greater flexibility in barrier expressions compared to Ravenscar's Simple_Barriers. By relaxing certain restrictions, Jorvik facilitates classic protected type idioms and typical implementations like concurrent bounded buffers. While Ravenscar remains suitable for stringent analyses, Jorvik offers additional expressive power for applications in the real-time and embedded domains. The article delves into specific examples and comparisons between the two profiles, emphasizing how Jorvik's design caters to specific application requirements while maintaining compatibility with Ravenscar where needed.
Related
JEP 401: Value Classes and Objects (Preview)
JEP 401 introduces value classes and objects in Java, focusing on optimizing memory efficiency by distinguishing objects solely by their field values, not identity. This feature enhances performance for simple domain values.
First Class Contexts – Rye Language
Rye Language introduces first-class contexts for scoping Rye words, creating parent-child relationships. Context paths access values, restricting direct changes for control. Evaluation and isolation mechanisms enhance structured code organization.
Do not taunt happy fun branch predictor
The author shares insights on optimizing AArch64 assembly code by reducing jumps in loops. Replacing ret with br x30 improved performance, leading to an 8.8x speed increase. Considerations on branch prediction and SIMD instructions are discussed.
Synchronous Core, Asynchronous Shell
A software architecture concept, "Synchronous Core, Asynchronous Shell," combines functional and imperative programming for clarity and testing. Rust faces challenges integrating synchronous and asynchronous parts, prompting suggestions for a similar approach.
Synchronous Core, Asynchronous Shell
Gary Bernhardt proposed a Synchronous Core, Asynchronous Shell model in software architecture, blending functional and imperative programming. Rust faces challenges integrating sync and async functions, leading to a trend of adopting this model for clarity and control.
Related
JEP 401: Value Classes and Objects (Preview)
JEP 401 introduces value classes and objects in Java, focusing on optimizing memory efficiency by distinguishing objects solely by their field values, not identity. This feature enhances performance for simple domain values.
First Class Contexts – Rye Language
Rye Language introduces first-class contexts for scoping Rye words, creating parent-child relationships. Context paths access values, restricting direct changes for control. Evaluation and isolation mechanisms enhance structured code organization.
Do not taunt happy fun branch predictor
The author shares insights on optimizing AArch64 assembly code by reducing jumps in loops. Replacing ret with br x30 improved performance, leading to an 8.8x speed increase. Considerations on branch prediction and SIMD instructions are discussed.
Synchronous Core, Asynchronous Shell
A software architecture concept, "Synchronous Core, Asynchronous Shell," combines functional and imperative programming for clarity and testing. Rust faces challenges integrating synchronous and asynchronous parts, prompting suggestions for a similar approach.
Synchronous Core, Asynchronous Shell
Gary Bernhardt proposed a Synchronous Core, Asynchronous Shell model in software architecture, blending functional and imperative programming. Rust faces challenges integrating sync and async functions, leading to a trend of adopting this model for clarity and control.