5 ms·
typescript is introducing it in a polyfill, which is going to be how a lot of people will first get to use the feature
by belk 3y ago
typescript is introducing it in a polyfill, which is going to be how a lot of people will first get to use the feature
- deleted 3y ago[deleted]
- tantalor 3y agoHow does the polyfill work? How does TS know the object can be disposed?
- masklinn 3y agoYou're telling it through the `using` statement?
- tantalor 3y agoI mean the implementation of the polyfill, in JS
- Dylan16807 3y agoThat has the same answer. I'm not sure what you're looking for. The polyfill adds code at the start of the block to make an array, and code at the end of the block to call dispose on everything in the array. Then the transpiler just has to turn "using" into an append. There's some other details to handle exceptions but that's the basics of how it works. Edited: The code, polyfill or native, doesn't really know if things can be disposed. It just tries to do it, because you told it to. If the variable is null it skips it, otherwise it asserts that the dispose function exists at using time, and blindly runs it at the end of block.
- tantalor 3y agoThanks, that's exactly what I was wondering. What happens if you save a reference to (or return, etc.) the variable you declared with "using"? Then it will end up automatically disposed, but from the programmers point of view it should still be usable (not disposed).
- Dylan16807 3y ago> from the programmers point of view it should still be usable (not disposed) Then that programmer had their hopes too high. The basic "using" keyword is not for variables you want to move between scopes. Javascript doesn't do reference counting. For saving/returning, you need to use explicit instances of DisposableStack and .move()