-
Notifications
You must be signed in to change notification settings - Fork 107
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Spec on asset composition / coherency #310
Comments
I personally agree. But if the tools and the rest are split, I would like them to be both usable at runtime as libraries. |
Hey @raffaeler! I hope you are well. Can you elaborate with scenarios? That will help the team a lot. |
Hi @richlander everything ok thanks. I hope you are all ok as well. If I am not missing anything, this project is about two things:
The source code generator is meant to create the .NET side of the WinRT ABI standard aka 'projection'. Other projects like cppwinrt (and hopefully others covering other languages) cover other projections. In the dynamic languages scenario, there is already half of the work done for python and some day I would expect javascript to be part of this ecosystem of projections. Said that, I would expect to be able to generate the projection on the fly and compile in memory in order to get the interop code needed to "talk" with dynamic languages. Example.
In this scenario, I could replace the pinvokes with the code generated by cswinrt but the code generation must happen at runtime. Does this make sense? Does this example help? |
@richlander, thanks for raising the issue. I'll attempt to gather all the concerns together into a spec proposal for review. |
The issue is a bit vague so I don't know if it fits in, but an important scenario we have is the extensible application model (think for example VS extensions). When RCWs for COM interop are no longer provided by the runtime you'll want to make sure that you are very aware of how the generated types compose in an extensibility scenario, otherwise its easy to break applications supporting plugins/extensions. Something that has come up repeatedly in other discussions is where the RCWs are defined. #304 suggests supporting inlined definitions and #314 suggests generating the closure of interop definitions at build time. I already commented on those issues, just wanted to drop that here again since you are looking for concrete scenarios to support. In particular for extensibility you'll want to do some consideration around binary compatibility across tool versions because in the extensibility scenario you may be loading assets generated by different tool versions into the same process. It probably needs to be specced what compatibility you support and it probably needs to emit some sort of versioning into metadata to allow rejecting assets generated by incompatible tool version. (Rejection may or may not need to happen automatically, but definitely I expect some users wanting to build logic around it, so the information needs to be present.) |
For 1.0 we are releasing cswinrt as a single nuget. Will revisit based on feedback. |
@richlander I have a lot of thoughts on the future of this project. |
I've been watching this project move forward over several months. Great work.
If I think broadly about what I've observed, it has been a lot of focus on type system coherency, towards the end of seamless interop between WinRT and CLR type systems. #306 is squarely in this camp.
We're more or less done type type system coherency now, and are turning to asset coherency. This is a very different and much broader domain with its own set of rules, and a lot more UX to consider. #304 is squarely in this camp.
I think we need a scenario-oriented spec on how we want this to work. Some of us have raised a concern that the CsWinRT package contains both tools and the base of the type system. That seems like an unfortunate choices to me. A scenario-oriented spec will hep us make decisions on this and other issues we discover, based of finding flows that are straightforward or challenging.
It appears that we're close to the finish line right now (and running out of schedule runway) so I think there will be a natural tendency to deal with the feedback we get, but not fully look at the bigger picture. Even if we don't resolve everything in the near-term, I think it is super important to see this bigger picture to help us prioritize what to fix now.
Thoughts?
The text was updated successfully, but these errors were encountered: