Comments (7)
@andrewsav-datacom The two methods in question aren't even expressible in unsafe
C#, and in fact there's some almost identical code shipped as an official .NET package. So I'd argue it's more an expressiveness issue than a safety one: you can't write it in C# because you can't, not because it's dangerous. It is dangerous, but that's not why you can't write it. There are plenty of non-dangerous programs you can't write in C#, and there are plenty of dangerous programs you can write even in safe C#.
In this specific case the two methods convert a ref Span<T>
to a void*
and back. I need to do this so I can store a reference to a Span
(living on the stack) on the heap. This is safe as long as the heap object containing the reference doesn't outlive the stack frame containing the span. I know this is true because I wrote my code carefully: the Parse
method is synchronous, and the TokenStream
is not stored anywhere, so it'll become garbage before the Span
's stack frame is popped.
Sometimes you need to be allowed to point a gun at your foot in order to shoot a bug between your toes.
from pidgin.
from pidgin.
Confirmed, now able to debug Pidgin project.
Thanks
from pidgin.
@benjamin-hodgson can you explain why is it safe to use the rewriting?
from pidgin.
@benjamin-hodgson Is there a better way to contact you to clarify this?
from pidgin.
@andrewsav-datacom This issue was just a bug in the build scripts. What would you like to know exactly?
from pidgin.
@benjamin-hodgson apologies, my question was not related to the issue, now when you mentioned it, it was not very appropriate place to ask, I probably should have opened a new one.
The reason the compiler does not let you write this code and you have to do the rewriting, is because the compiler consider this unsafe. Of course the compiler does not know what you know, and is concerned with not letting you shoot yourself in the foot.
My question is: what about your use case that makes this rewriting safe?
Thank you in advance.
from pidgin.
Related Issues (20)
- Question: can this URN parser be improved? HOT 2
- Question: ways around lack of left recursion? HOT 12
- Expression handling examples/documentation HOT 1
- Parsing context HOT 4
- Is there a good way to turn Digit.Repeat(n) into a string? HOT 2
- How do I keep both sides of a match? HOT 4
- Question: How to parse a list of strings? HOT 1
- Tried to rewind past the start of the input. Please report this as a bug in Pidgin! HOT 1
- Parsing pseudo freeform text HOT 4
- Matching an exact string HOT 1
- Add support for .net framework in the new versions HOT 1
- Docs website is down HOT 9
- Support trimming and AOT HOT 5
- AOT generic expansion warning HOT 15
- Can you write an example for a Luau parser? HOT 2
- Consider writing tutorials instead of examples HOT 1
- Confusing API: unexpected EOF error HOT 1
- Can't locate documentation: parsing non-char streams. HOT 4
- Maybe Bug: Many/UnsignedInt Operator ignores Whitespace HOT 6
- Need help with `Try` or `Int(10)` HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from pidgin.