It sounds reasonable to me and makes more sense.
Regards JB Le 8 mai 2018 à 12:53, à 12:53, Romain Manni-Bucau <rmannibu...@gmail.com> a écrit: >Le mar. 8 mai 2018 10:16, Robert Bradshaw <rober...@google.com> a écrit >: > >> On Sun, May 6, 2018 at 1:30 AM Romain Manni-Bucau ><rmannibu...@gmail.com> >> wrote: >> >> > Wow, this mail should be on the website Robert, thanks for it >> >> > I still have a point to try to understand better: my view is that >once >> submitted the only perf related point is when you hit a flow of data. >So a >> split can be slow bit it is not a that big deal. So a runner >integration >> only needs to optimize process and nextElement logics, right? >> >> Yes. In some streaming cases (e.g. microbatch like Spark or Dataflow) >there >> may be many, many bundles, so the "control plane" part can't be /too/ >slow, >> but it's not as performance critical. >> >> > It is almost always doable to batch that - with triggers and other >> constraints. So the portable model is elegant but not done to be >"fast" in >> current state of impl. >> >> Actually batching and streaming RPCs for the data plane has been >there from >> the start, for these reasons. >> >> > So this all leads to 2 needs: >> >> > 1. Have some native runner for dev >> > 2. Have some bulk api for prod >> >> > In all cases this is decoralated of any runner no? Can even be a >beam >> subproject built on top of beam which would be very sane and ensure a >clear >> separation of concerns no? >> >> The thing to do here would be to extend the Environment (message) to >allow >> for alternatives, and then abstract out the creation of an bundle >executor >> such that different once could be instantiated based on this >environment. >> > >Agree so we need a generic runner delegating to "subrunners" (or runner >impl) instead of impl-ing it in all runners. Sounds very sane, scalable >and >extensible/composable this way. > >Can we mark it as a backlog item and goal? > > > >> > Le 6 mai 2018 00:59, "Robert Bradshaw" <rober...@google.com> a >écrit : >> >> >> Portability, at its core, is providing a spec for any runner to >talk to >> any >> >> SDK. I personally think it's done a great job in cleaning up the >model >> by >> >> forcing us to define a clean boundary (as specified at >> >> https://github.com/apache/beam/tree/master/model ) between these >two >> >> components (even if the implementations of one or the other are >> >> (temporarily, I hope for the most part) complicated).The pipeline >(on >> the >> >> runner submission side) and work execution (on what has >traditionally >> been >> >> called the fn api side) have concrete platform-independent >descriptions, >> >> rather than being a set of Java classes. >> >> >> Currently, the portion that lives on the "runner" side of this >boundary >> is >> >> often shared among Java runners (via libraries like runners core), >but >> it >> >> is all still part of each runner, and because of this it removes >the >> >> requirement for the Runner be Java just like it remove the >requirement >> for >> >> the SDK to speak Java. (For example, I think a Python Dask runner >makes >> a >> >> lot of sense, Dataflow may decide to implement larger portions of >its >> >> runner in Go or C++ or even behind a service, and I've used the >Python >> >> ULRunner to run the Java SDK over the Fn API for testing >development >> >> purposes). >> >> >> There is also the question of "why docker?" I actually don't see >docker >> all >> >> that intrinsic to the protocol; one only needs to be able to >define and >> >> bring up workers that communicate on specified ports. Docker >happens to >> be >> >> a fairly well supported way to package up an arbitrary chunk of >code (in >> >> any language), together with its nearly arbitrarily specified >> >> dependencies/environment, in a way that's well specified and easy >to >> start >> >> up. >> >> >> I would welcome changes to >> >> >> >https://github.com/apache/beam/blob/v2.4.0/model/pipeline/src/main/proto/beam_runner_api.proto#L730 >> >> that would provide alternatives to docker (one of which comes to >mind is >> "I >> >> already brought up a worker(s) for you (which could be the same >process >> >> that handled pipeline construction in testing scenarios), here's >how to >> >> connect to it/them.") Another option, which would seem to appeal >to you >> in >> >> particular, would be "the worker code is linked into the runner's >> binary, >> >> use this process as the worker" (though note even for >java-on-java, it >> can >> >> be advantageous to shield the worker and runner code from each >others >> >> environments, dependencies, and version requirements.) This latter >> should >> >> still likely use the FnApi to talk to itself (either over GRPC on >local >> >> ports, or possibly better via direct function calls eliminating >the RPC >> >> overhead altogether--this is how the fast local runner in Python >works). >> >> There may be runner environments well controlled enough that >"start up >> the >> >> workers" could be specified as "run this command line." We should >make >> this >> >> environment message extensible to other alternatives than "docker >> container >> >> url," though of course we don't want the set of options to grow >too >> large >> >> or we loose the promise of portability unless every runner >supports >> every >> >> protocol. >> >> >> Of course, the runner is always free to execute any Fn for which >it >> >> completely understands the URN and the environment any way it >pleases, >> e.g. >> >> directly in process, or even via lighter-weight mechanism like >Jython or >> >> Graal, rather than asking an external process to do it. But we >need a >> >> lowest common denominator for executing arbitrary URNs runners are >not >> >> expected to understand. >> >> >> As an aside, there are also technical limitations in implementing >> >> Portability >> >> by simply requiring all runners to be Java and the portable layer >simply >> >> being wrappers of UserFnInLangaugeX in an equivalent >UserFnObjectInJava, >> >> executing everything as if it were pure Java. In particular the >> overheads >> >> of unnecessarily crossing the language boundaries many times in a >single >> >> fused graph are often prohibitive. >> >> >> Sorry for the long email, but hopefully this helps shed some light >on >> (at >> >> least how I see) the portability effort (at the core of the Beam >vision >> >> statement) as well as concrete actions we can take to decouple it >from >> >> specific technologies. >> >> >> - Robert >> >> >> >> On Sat, May 5, 2018 at 2:06 PM Romain Manni-Bucau < >> rmannibu...@gmail.com> >> >> wrote: >> >> >> > All are good points. >> >> >> > The only "?" I keep is: why beam doesnt uses its visitor api to >make >> the >> >> portability transversal to all runners "mutating" the user model >before >> >> translation? Technically it sounds easy and avoid hacking all >impl. Was >> it >> >> tested and failed? >> >> >> > Le 5 mai 2018 22:50, "Thomas Weise" <t...@apache.org> a écrit : >> >> >> >> Docker isn't a silver bullet and may not be the best choice for >all >> >> environments (I'm also looking at potentially launching SDK >workers in a >> >> different way), but AFAIK there has not been any alternative >proposal >> for >> >> default SDK execution that can handle all of Python, Go and Java. >> >> >> >> Regardless of the default implementation, we should strive to >keep >> the >> >> implementation modular so users can plug in their own replacement >as >> >> needed. Looking at the prototype implementation, Docker comes >downstream >> of >> >> FlinkExecutableStageFunction, and it will be possible to supply a >custom >> >> implementation by making the translator pluggable (which I intend >to >> work >> >> on once backporting to master is complete), and possibly >> >> "SDKHarnessManager" itself can also be swapped out. >> >> >> >> I would also prefer that for Flink and other Java based runners >we >> >> retain the option to inline executable stages that are in Java. I >would >> >> expect a good number of use cases to benefit from direct execution >in >> the >> >> task manager, and it may be good to offer the user that >optimization. >> >> >> >> Thanks, >> >> >> Thomas >> >> >> >> >> >> On Sat, May 5, 2018 at 12:54 PM, Eugene Kirpichov < >> kirpic...@google.com> >> >> wrote: >> >> >> >>> To add on that: Romain, if you are really excited about Graal >as a >> >> project, here are some constructive suggestions as to what you can >do on >> a >> >> reasonably short timeframe: >> >> >>> - Propose/prototype a design for writing UDFs in Beam SQL >using >> Graal >> >> >>> - Go through the portability-related design documents, come up >with >> a >> >> more precise assessment of what parts are actually dependent on >Docker's >> >> container format and/or on Docker itself, and propose a plan for >> untangling >> >> this dependency and opening the door to other mechanisms of >> cross-language >> >> execution >> >> >> >>> On Sat, May 5, 2018 at 12:50 PM Eugene Kirpichov < >> kirpic...@google.com> >> >> wrote: >> >> >> >>>> Graal is a very young project, currently nowhere near the >level of >> >> maturity or completeness as to be sufficient for Beam to fully bet >its >> >> portability vision on it: >> >> >>>> - Graal currently only claims to support Java and Javascript, >with >> >> Ruby and R in the status of "some applications may run", Python >support >> >> "just beginning", and Go lacking altogether. >> >> >>>> - Regarding existing production usage, the Graal FAQ says it >is "a >> >> project with new innovative technology in its early stages." >> >> >> >>>> That said, as Graal matures, I think it would be reasonable >to keep >> an >> >> eye on it as a potential future lightweight alternative to >containers >> for >> >> pipelines where Graal's level of support is sufficient for this >> particular >> >> pipeline. >> >> >> >>>> Please also keep in mind that execution of user code is only >a >> small >> >> part of the overall portability picture, and dependency on Docker >is an >> >> even smaller part of that (there is only 1 mention of the word >"Docker" >> in >> >> all of Beam's portability protos, and the mention is in an >out-of-date >> TODO >> >> comment). I hope this addresses your concerns. >> >> >> >>>> On Sat, May 5, 2018 at 11:49 AM Romain Manni-Bucau < >> >> rmannibu...@gmail.com> wrote: >> >> >> >>>>> Agree >> >> >> >>>>> The jvm is still mainstream for big data and it is trivial >to have >> a >> >> remote facade to support natives but no point to have it in >runners, it >> is >> >> some particular transforms or even dofn and sources only... >> >> >> >> >>>>> Le 5 mai 2018 19:03, "Andrew Pilloud" <apill...@google.com> >a >> écrit : >> >> >> >>>>>> Thanks for the examples earlier, I think Hazelcast is a >great >> >> example of something portability might make more difficult. I'm >not >> working >> >> on portability, but my understanding is that the data sent to the >runner >> is >> >> a blob of code and the name of the container to run it in. A >runner with >> a >> >> native language (java on Hazelcast for example) could run the code >> directly >> >> without the container if it is in a language it supports. So when >> Hazelcast >> >> sees a known java container specified, it just loads the java blob >and >> runs >> >> it. When it sees another container it rejects the pipeline. You >could >> use >> >> Graal in the Hazelcast runner to do this for a number of >languages. I >> would >> >> expect that this could also be done in the direct runner, which >> similarly >> >> provides a native java environment, so portable Java pipelines can >be >> >> tested without docker? >> >> >> >>>>>> For another way to frame this: if Beam was originally >written in >> Go, >> >> we would be having a different discussion. A pipeline written >entirely >> in >> >> java wouldn't be possible, so instead to enable Hazelcast, we >would have >> to >> >> be able to run the java from portability without running the >container. >> >> >> >>>>>> Andrew >> >> >> >>>>>> On Sat, May 5, 2018 at 1:48 AM Romain Manni-Bucau < >> >> rmannibu...@gmail.com> wrote: >> >> >> >> >> >>>>>>> 2018-05-05 9:27 GMT+02:00 Ismaël Mejía ><ieme...@gmail.com>: >> >> >> >>>>>>>> Graal would not be a viable solution for the reasons >Henning >> and >> >> Andrew >> >> >>>>>>>> mentioned, or put in other words, when users choose a >> programming >> >> language >> >> >>>>>>>> they don’t choose only a ‘friendly’ syntax or programming >> model, >> >> they >> >> >>>>>>>> choose also the ecosystem that comes with it, and the >libraries >> >> that make >> >> >>>>>>>> their life easier. However isolating these user >> >> libraries/dependencies is a >> >> >>>>>>>> hard problem and so far the standard solution to this >problem >> is >> >> to use >> >> >>>>>>>> operating systems containers via docker. >> >> >> >> >>>>>>> Graal solves that Ismael. Same kind of experience than >running >> npm >> >> libs on nashorn but with a more unified API to run any language >soft. >> >> >> >> >> >>>>>>>> The Beam vision from day zero is to run pipelines written >in >> >> multiple >> >> >>>>>>>> languages in runners in multiple systems, and so far we >are not >> >> doing this >> >> >>>>>>>> in particular in the Apache runners. The portability work >is >> the >> >> cleanest >> >> >>>>>>>> way to achieve this vision given the constraints. >> >> >> >> >>>>>>> Hmm, did I read it wrong and we don't have specific >integration >> of >> >> the portable API in runners? This is what is messing up the >runners and >> >> limiting beam adoption on existing runners. >> >> >>>>>>> Portable API is a feature buildable on top of runner, not >in >> >> runners. >> >> >>>>>>> Same as a runner implementing the 5-6 primitives can run >> anything, >> >> the portable API should just rely on that and not require more >> integration. >> >> >>>>>>> It doesn't prevent more deep integrations as for some >higher >> level >> >> primitives existing in runners but it is not the case today for >runners >> so >> >> shouldn't exist IMHO. >> >> >> >> >> >>>>>>>> I agree however that for the Java SDK to Java runner case >this >> can >> >> >>>>>>>> represent additional pain, docker ideally should not be a >> >> requirement for >> >> >>>>>>>> Java users with the Direct runner and debugging a >pipeline >> should >> >> be as >> >> >>>>>>>> easy as it is today. I think the Univerrsal Local Runner >exists >> to >> >> cover >> >> >>>>>>>> the Portable case, but after looking at this JIRA I am >not sure >> if >> >> >>>>>>>> unification is coming (and by consequence if docker would >be >> >> mandatory). >> >> >>>>>>>> https://issues.apache.org/jira/browse/BEAM-4239 >> >> >> >>>>>>>> I suppose for the distributed runners that they must >implement >> the >> >> full >> >> >>>>>>>> Portability APIs to be considered Beam multi language >compliant >> >> but they >> >> >>>>>>>> can prefer for performance reasons to translate without >the >> >> portability >> >> >>>>>>>> APIs the Java to Java case. >> >> >> >> >> >>>>>>> This is my issue, language portability must NOT impact >runners >> at >> >> all, it is just a way to forward primitives to a runner. >> >> >>>>>>> See it as a layer rewriting the pipeline and submitting >it. No >> need >> >> to modify any runner. >> >> >> >> >>>>>>>> On Sat, May 5, 2018 at 9:11 AM Reuven Lax ><re...@google.com> >> wrote: >> >> >> >>>>>>>> > A beam cluster with the spark runner would include a >spark >> >> cluster, plus >> >> >>>>>>>> what's needed for portability, plus the beam sdk. >> >> >> >>>>>>>> > On Fri, May 4, 2018, 11:55 PM Romain Manni-Bucau < >> >> rmannibu...@gmail.com> >> >> >>>>>>>> wrote: >> >> >> >> >> >>>>>>>> >> Le 5 mai 2018 08:43, "Reuven Lax" <re...@google.com> a >> écrit >> : >> >> >> >>>>>>>> >> I don't believe we enforce docker anywhere. In fact if >> someone >> >> wanted to >> >> >>>>>>>> run an all-windows beam cluster, they would probably not >use >> >> docker for >> >> >>>>>>>> their runner (docker runs on Windows, but not >efficiently). >> >> >> >> >> >>>>>>>> >> Or doesnt run sometimes - a colleague hit that >yesterday :(. >> >> >> >>>>>>>> >> What is a "beam cluster" - opposed to a spark or foink >> cluster? >> >> How >> >> >>>>>>>> would it work on windows servers? >> >> >> >> >>>>>>>> >> On Fri, May 4, 2018, 11:19 PM Romain Manni-Bucau < >> >> rmannibu...@gmail.com> >> >> >>>>>>>> wrote: >> >> >> >> >> >>>>>>>> >>> 2018-05-05 2:33 GMT+02:00 Andrew Pilloud < >> apill...@google.com>: >> >> >> >>>>>>>> >>>> What docker really buys is a package format and >runtime >> >> environment >> >> >>>>>>>> that is language and operating system agnostic. The >docker >> >> packaging and >> >> >>>>>>>> runtime format is the de facto standard for portable >> applications >> >> such as >> >> >>>>>>>> this, and there is a group trying to turn it into an >actual >> >> standard. >> >> >> >>>>>>>> >>>> I would agree with you that dockerd has become >bloated but >> >> there are >> >> >>>>>>>> projects that solve that. There is no longer lock-in to >> dockerd, >> >> there are >> >> >>>>>>>> package format compatible docker replacements that >eliminate >> the >> >> >>>>>>>> performance issues and overhead associated with docker. >CRI-O ( >> >> >>>>>>>> https://github.com/kubernetes-incubator/cri-o) is a >really >> cool >> >> RedHat >> >> >>>>>>>> project which is a minimalist replacement for docker. I >was >> >> recently >> >> >>>>>>>> working at a startup where I migrated our "data mover" >> appliance >> >> from >> >> >>>>>>>> Docker to CRI-O. Our application was able to get direct >access >> to >> >> the >> >> >>>>>>>> ethernet driver and block devices which enabled a huge >> performance >> >> boost >> >> >>>>>>>> but we were also able to run containers produced by >docker >> without >> >> >>>>>>>> modification. >> >> >> >>>>>>>> >>>> You mention that docker is "detail of one >runner+vendor >> >> corrupting all >> >> >>>>>>>> the project and adding complexity and work to everyone". >It >> sounds >> >> like you >> >> >>>>>>>> have a specific example you'd like to share? Is there a >runner >> >> that is >> >> >>>>>>>> unable to move to portability because of docker? >> >> >> >> >>>>>>>> >>> IBM one for instance, some custom ones like an >hazelcast >> based >> >> one, >> >> >>>>>>>> etc... More generally any runner developped outside beam >itself >> - >> >> even if >> >> >>>>>>>> we take a snapshot today, most of beam's ones have the >same >> pitall. >> >> >> >>>>>>>> >>> Note: i never said docker was a bad techno or so. Let >me >> try >> >> to clarify. >> >> >> >>>>>>>> >>> Main issue is that you enforce docker usage which is >still >> >> trendy. It >> >> >>>>>>>> is like scla which was promishing to kill java, check >what it >> does >> >> today... >> >> >>>>>>>> >>> It starts to be tooled but it is also very impacting >on the >> >> deployment >> >> >>>>>>>> side and for a good number of beam users who deploy it >outside >> the >> >> cloud it >> >> >>>>>>>> is an issue. >> >> >>>>>>>> >>> Keep in mind beam is embeddable by design, it is not >a >> runner >> >> >>>>>>>> environment and with the docker choice it imposes some >> environment >> >> which is >> >> >>>>>>>> inconsistent with beam design itself and this is where >this >> choice >> >> blocks. >> >> >> >> >> >>>>>>>> >>>> Andrew >> >> >> >>>>>>>> >>>> On Fri, May 4, 2018 at 4:32 PM Henning Rohde < >> >> hero...@google.com> >> >> >>>>>>>> wrote: >> >> >> >>>>>>>> >>>>> Romain, >> >> >> >>>>>>>> >>>>> Docker, unlike selinux, solves a great number of >tangible >> >> problems >> >> >>>>>>>> for us with IMO a relatively small tax. It does not have >to be >> the >> >> only >> >> >>>>>>>> way. Some of the concerns you bring up along with >possibilities >> >> were also >> >> >>>>>>>> discussed here: >> >> >>>>>>>> https://s.apache.org/beam-fn-api-container-contract. >> >> I >> >> >>>>>>>> encourage you to take a look. >> >> >> >>>>>>>> >>>>> Thanks, >> >> >>>>>>>> >>>>> Henning >> >> >> >> >>>>>>>> >>>>> On Fri, May 4, 2018 at 3:18 PM Romain Manni-Bucau < >> >> >>>>>>>> rmannibu...@gmail.com> wrote: >> >> >> >> >> >>>>>>>> >>>>>> Le 4 mai 2018 21:31, "Henning Rohde" < >> hero...@google.com> >> a >> >> écrit : >> >> >> >>>>>>>> >>>>>> I disagree with the characterization of docker and >the >> >> implications >> >> >>>>>>>> made towards portability. Graal looks like a neat project >(and >> I >> >> never >> >> >>>>>>>> thought I would live to see the phrase "Practical Partial >> >> Evaluation" ..), >> >> >>>>>>>> but it doesn't address the needs of portability. In >addition to >> >> Luke's >> >> >>>>>>>> examples, Go and most other languages don't work on it >either. >> >> Docker >> >> >>>>>>>> containers also address packaging, OS dependencies, >conflicting >> >> versions >> >> >>>>>>>> and distribution aspects in addition to truly universal >> language >> >> support. >> >> >> >> >>>>>>>> >>>>>> This is wrong, docker also has its conflicts, is >not >> >> universal >> >> >>>>>>>> (fails on windows and mac easily - as host or not, cloud >> vendors >> >> put layers >> >> >>>>>>>> limiting or corrupting it, and it is an infra constraint >> imposed >> >> and a >> >> >>>>>>>> vendor locking not welcomed in beam IMHO). >> >> >> >>>>>>>> >>>>>> This is my main concern. All the work done looks >like an >> >> >>>>>>>> implemzntation detail of one runner+vendor corrupting all >the >> >> project and >> >> >>>>>>>> adding complexity and work to everyone instead of keeping >it >> >> localised >> >> >>>>>>>> (technically it is possible). >> >> >> >>>>>>>> >>>>>> Would you accept i enforce you to use selinux? >Using >> docker >> >> is the >> >> >>>>>>>> same kind of constraint. >> >> >> >> >>>>>>>> >>>>>> That said, it's entirely fine for some runners to >use >> >> Jython, Graal, >> >> >>>>>>>> etc to provide a specialized offering similar to the >direct >> >> runners, but it >> >> >>>>>>>> would be disjoint from portability IMO. >> >> >> >>>>>>>> >>>>>> On Fri, May 4, 2018 at 10:14 AM Romain Manni-Bucau >< >> >> >>>>>>>> rmannibu...@gmail.com> wrote: >> >> >> >> >> >>>>>>>> >>>>>>> Le 4 mai 2018 17:55, "Lukasz Cwik" ><lc...@google.com> >> a >> >> écrit : >> >> >> >>>>>>>> >>>>>>> I did take a look at Graal a while back when >thinking >> >> about how >> >> >>>>>>>> execution environments could be defined, my concerns were >> related >> >> to it not >> >> >>>>>>>> supporting all of the features of a language. >> >> >>>>>>>> >>>>>>> For example, its typical for Python to load and >call >> native >> >> >>>>>>>> libraries and Graal can only execute C/C++ code that has >been >> >> compiled to >> >> >>>>>>>> LLVM. >> >> >>>>>>>> >>>>>>> Also, a good amount of people interested in using >ML >> >> libraries will >> >> >>>>>>>> want access to GPUs to improve performance which I >believe that >> >> Graal can't >> >> >>>>>>>> support. >> >> >> >>>>>>>> >>>>>>> It can be a very useful way to run simple lamda >> functions >> >> written >> >> >>>>>>>> in some language directly without needing to use a docker >> >> environment but >> >> >>>>>>>> you could probably use something even lighter weight then >Graal >> >> that is >> >> >>>>>>>> language specific like Jython. >> >> >> >> >> >>>>>>>> >>>>>>> Right, the jsr223 impl works very well but you >can also >> >> have a perf >> >> >>>>>>>> boost using native (like v8 java binding for js for >instance). >> It >> >> is way >> >> >>>>>>>> more efficient than docker most of the time and not code >> intrusive >> >> at all >> >> >>>>>>>> in runners so likely more adoption-able and maintainable. >That >> >> said all is >> >> >>>>>>>> doable behind the jsr223 so maybe not a big deal in terms >of >> api. >> >> We just >> >> >>>>>>>> need to ensure portability work stay clean and actually >> portable >> >> and doesnt >> >> >>>>>>>> impact runners as poc done until today did. >> >> >> >>>>>>>> >>>>>>> Works for me. >> >> >> >> >>>>>>>> >>>>>>> On Thu, May 3, 2018 at 10:05 PM Romain >Manni-Bucau < >> >> >>>>>>>> rmannibu...@gmail.com> wrote: >> >> >> >>>>>>>> >>>>>>>> Hi guys >> >> >> >>>>>>>> >>>>>>>> Since some time there are efforts to have a >language >> >> portable >> >> >>>>>>>> support in beam but I cant really find a case it "works" >being >> >> based on >> >> >>>>>>>> docker except for some vendor specific infra. >> >> >> >>>>>>>> >>>>>>>> Current solution: >> >> >> >>>>>>>> >>>>>>>> 1. Is runner intrusive (which is bad for beam >and >> prevents >> >> >>>>>>>> adoption of big data vendors) >> >> >>>>>>>> >>>>>>>> 2. Based on docker (which assumed a runtime >> environment >> >> and is >> >> >>>>>>>> very ops/infra intrusive and likely too $$ quite often >for what >> it >> >> brings) >> >> >> >>>>>>>> >>>>>>>> Did anyone had a look to graal which seems a way >to >> make >> >> the >> >> >>>>>>>> feature doable in a lighter manner and optimized compared >to >> >> default jsr223 >> >> >>>>>>>> impls? >>