Jolie, the service-oriented programming language(jolie-lang.org) |
Jolie, the service-oriented programming language(jolie-lang.org) |
I want something that looks like a programing language ( the mainstream ones ) that describes and specifies the flow of some functionality, not a YAML or a godforsaken XML file but also not XYZ framework that has all the implementation details.
Maybe Jolie isn't what I want and has more baggage than I'm currently aware, but it somehow looks like something I need.
You could argue that the current approach of intrastructure-as-code has it backwards:
Currently, you define infrastructure, then deploy your code.
Instead, I'd like to be able to write code and then connect the code through infrastructure abstractions.
An example of a preliminary application that you might find interesting: https://arxiv.org/abs/2103.09518
It's a lot easier for full blown languages to offer servicey-like interfaces like Jolie than the other way around.
And as a matter of fact, most modern programming languages offer interfaces/traits/stubs/etc... that do just that.
A great example of a successful approach to this is Retrofit: https://square.github.io/retrofit/
Like the JVM? This runs on JVM.
I don't think there's really any way to make a language with this stuff entirely built-in (rather than providing a general DSL feature) which is both flexible and terse
I think this language is another form of framework and unsurprisingly developed in Java for java users.
But: I'm currently working on a distributed Webassembly runtime. Jolie seems like a great way to describe your whole system.
For each service the executed code would be a function exported by a Wasm module, written in the language of your choice.
Interested to hear production or even PoC stories on both of them.
Thanks for sharing.
I was looking at the Jolie (Java) source code and noticed a GNU license in some source code, but a top level Apache language - if I understand that correctly then that should be fixed.
Anyway, interesting project.
It's possible the author was going for the meaning of pretty, but there still seem to be a strong personification happening with emphasis on it being a beautiful woman, and it's that aspect that unease me.
Again, you can call your language however you choose too, and I'm not going to judge it by its name, but I still personally find this womanization trend in programming language names a bit weird.
I'll probably get used to it, though it does feel like an interesting meta-psycholigical subject as well. Where are the programming languages named John, Richard and David? Why are we calling a language by a person's name? Why are their logo becoming human facial features?
Also, in French it's a regular adjective that means ~"cute".
___
[1] EDIT: Except, according to comments close by, in Quebec.
I just wonder, when looking at enterprise Java, whether there are not mature libraries which allow for distributed and high level application writing without changing the whole software ecosystem.
So to me, if I were invested in JVM (I'm not), a language that looks to bridge JVM with microservices/cloud would be great news. But instead I only see pushback from Java community. And this is not the first time I see it as well. Same exact behavior to functional efforts such as Scala or anything functional really. A kind of "we're fine we don't need anything new" which I cannot understand.
Anyone know of any large scale use of Jolie?
At our place, we have a few websites written in Jolie and a system of services for evaluating software projects (for exams).
Feel free to drop in our chat if you're interested in chatting more about this with others as well: https://discord.gg/yQRTMNX
It's nice to see that I can easily create a SOAP webservice, without Java or .Net, but that there's anything wrong with those two languages.
Our SOAP is quite palatable at least, because of reduced boilerplate. AFAIK Jolie devs don't typically use it (I don't at least), unless it's really necessary (interoperability with legacy web services, business requirements, etc.).
So far i didn't find any indication that Jolie supports grpc; I think that it would be very helpful if the developers decide to support grpc as well.
https://docs.jolie-lang.org/v1.10.x/language-tools-and-stand...
It's definitely something we'll get around doing sooner or later though, since so many people use it, and we do care about interoperability. Contributions towards this would certainly be welcomed warmly.
But i'm kind of stuck in programming sockets in C till i die
See here for Docker and Kubernetes: https://docs.jolie-lang.org/v1.10.x/language-tools-and-stand...
It's also been tested with Azure Functions (serverless): https://mmontesi.blogspot.com/2020/06/jolie-on-azure-functio...
But I don't wanna stop you from making all these languages... (o:
Some more info at:
- https://dzone.com/articles/introduction-to-jolie (a brief introduction to Jolie and some concepts)
- https://hackernoon.com/a-detailed-introduction-to-service-or... (a deeper dive/discussion on some of the concepts)
Our (for now subjective) experience is that people who become familiar with Jolie are much faster at prototyping a service system, which makes it worth pursuing for us. Jolie code requires less boilerplate and state management for interesting scenarios. Two examples: communications can be natively composed in structures, e.g., the code
open()
close()
mandates that only the open operation is available at first and then only close is available (in object-oriented languages, you must encode this state with a private data field and manage it with if-then-else, etc.); likewise, streams in Jolie are consumed by writing provide
[next(element)] { ..manage element here.. }
until
[end()] // stream ended here
which means "provide the operation next to invokers until operation end is called". A syntactically manifest approach to reactive programming and state machines, if you like.Another big reason for exploring languages is discipline. Languages discipline how you write code. An example: in Jolie, you decompose software in terms of services. Many of these run locally as libraries, and are optimised by the interpreter by using hidden shared memory. But the language enforces that if you ever decide that a component should become an external, independent services, you can do it by updating a few references (input/output ports, our access points). See also https://fmontesi.github.io/2015/06/09/non-distributed-micros... Another example: Jolie discipline also gives you the ability of reusing the same business logic under multiple access points with different protocols.
This is the tip of the iceberg. In general, programming in terms of service abstractions is showing to be an interesting experience for us.
Phew, that was quite a bit for a "in a nutshell".. I hope that it's clear, otherwise, just write below.
If you think of a service as being like a class -- as originally conceived by Smalltalk -- then sending it messages and acting on responses is the very definition of OOP, at least according to Alan Kay, the inventor of Smalltalk and of the term "object oriented programming."
There's an interesting discussion of the definition of OOP here. https://wiki.c2.com/?AlanKaysDefinitionOfObjectOriented
- In jolie, it is quite transparent to develop a monolith or a distributed system of services. You always develop services and finally you can decide if deploy them as a monolith, or fragmenting the deployment into a distributed solutions (https://dzone.com/articles/between-monoliths-and-microservic...)
- Any input endpoint of Jolie (named inputPorts) can be exposed with different protocols (http/json, http/soap, sodep, etc) and you can have more inputPorts at the same time, thus you can receive messages for the same business logic from http/json, http/soap, etc. You can also split the available operations in different inputPorts. As an example you could receive admin messages in a https port, whereas you can leave in http teh public ones. But you can build meven more complex scenarios thanks to this feature.
But lots of languages offer similar capabilities, Nim, Racket, Scala, Julia, Lisp, etc.
Where? It's not even on the INSEE tool https://www.insee.fr/fr/statistiques/3532172, according to their "Fichier des prénoms" (https://www.insee.fr/fr/statistiques/2540004), there are currently 39 persons named "Jolie" in France. This is not to dismiss the rest of what you said, I'm just curious as to where "Jolie" is a common woman name.
That means 1 in 7915 female in Quebec has Jolie in her name, compared to around 1 in 1 million for France. That explains (in part) how you know 3 and I don't know any I think.
[1]: https://www.donneesquebec.ca/recherche/dataset/banque-de-pre...
[2]: https://www12.statcan.gc.ca/census-recensement/2016/dp-pd/pr...
Telling that Jenkins is a servant
> Jolie, you write code that maps directly to the concepts that matter. What are the important concepts? APIs, Access Points, and Services (duh..) are examples.
I come out of the Domain Driven Design school of thought, where the true key concepts are the domain-related ones. E.g., if you're doing ecommerce, things like Product and Order are much more important. They're also much more stable. Over time what gets exposed as an API will vary much more than whether or not we have a Product or an Order.
What you're calling important is what I think of as implementation details. Important in the sense that pipe fittings are important to a house: vital, but very much secondary to the purpose.
You're talking about the domain model, which I agree is more abstract and stable. It comes before making the implementation model. In the case of microservices, some concepts overlap and/or are very similar between domain and implementation, but some mapping is required. We started exploring a bit how to relate MDE languages to Jolie in https://arxiv.org/abs/2104.02458 and it looks pretty promising in the sense that they seem easily linkable.
In short: once you get to the implementation model and if this is service-oriented, Jolie gives you a concise and executable syntax to write it. (And there is ongoing work on how some elements of domain models can be mapped automatically to Jolie concepts.)
We are at historically bad levels of Interoperability because we don't really engineer software for management. We just call it an implementation detail.
Domains overlap. An e-commerce system will have a domain perspective to Infrastructure and the Infrastructure provider will have domain perspective on a Tennant like a specific e-commerce system. Bother are valid. There's real value in reducing the impedance between those views