zamberzand

Joined 4 years ago

Karma
25
Submissions
11
Member since
Jul 1
I am a programmer and a trans woman. These are the topics I am most passionate about discussing, although the latter may be less common from me on hacker news :)
View on Hacker News

Recent submissions

Comment · 3 years ago
But I'm not pretending that autofree isn't documented as WIP, nor am I suggesting that anybody should use anything unintended.

I am simply pointing out that a single claim from the article is still relevant to how V functions today. To be more specific, the still-relevant claim is: "So forcing the value to be allocated on the heap reveals that autofree leaks the values."

The post I am replying to did not say "almost none of the claims in this article are relevant now," it specifically said "none" without qualification.

Maybe I am just unusual in how I use the English language, but I would unquestionably consider this to be a case where you should really qualify the word none, because otherwise it's just not true.

Whether autofree is completely in alpha and intended not to be used or not, the claim from the article that it doesn't work for everything is relevant. I don't see how it couldn't be.

Surely if autofree is WIP, it's no big deal to simply agree that the fact it doesn't work on heap-allocated structs is relevant to its current state?

Now, to be clear, I am aware that arguing over a single extremely small point is, to some degree, missing the point of the comment I was originally replying to. But this is also just how I talk about things on the internet. If part of your claim is untrue, even to an extremely minor degree, I will point that out. This is why when I personally claim things, I almost always qualify what I am saying. (See? Even here I said "almost always," because I just naturally add qualifications so as not to overstate my case).

Comment · 3 years ago
Sure (although I can't find anything like that on vlang.io myself), but your post was that "[n]one of the claims in this article are relevant now."

It is still relevant that autofree does not work on heap-allocated structs. In particular, this is relevant to the day-to-day usage of the V programming language.

Whether this is well-documented by V itself does not change that it is relevant, in my opinion.

Comment · 3 years ago
Why isn't there a citation for this 90-100% number? I really am extremely curious where it comes from.

As for why I am posting a similar message (not nearly the same post, though) to you here as I did a year ago:

It is because I am very, very curious about where this number comes from and why there is no citation for it! It is fascinating to me.

(And, more generally, I have empirical experience with autofree that many users don't seem to have... so it seems useful to post about that experience to provide extra context for everyone else on this website).

Comment · 3 years ago
Comment · 3 years ago
This is not quite true. The claims about autofree made in the article are still extremely relevant.

For example, the following code from the article still leaks with autofree:

  [heap]
  struct MyHeapValue {
      value i64
  }
  
  fn draw_text(value MyHeapValue) {
  }
  
  fn main() {
      // ...
      arg1 := MyHeapValue { 42 }
      arg2 := MyHeapValue { 100 }
      draw_text(arg1)
      draw_text(arg2)
      // ...
  }
What's more, it leaks even if we completely remove the calls to draw_text and the function definition for draw_text.
Comment · 4 years ago
Trans woman here, here are my thoughts:

So, research into the impact of biological sex on medication, and similar, doesn't really seem alienating to me. Despite the existence of trans people, there are obviously two main categories that people fall into in a medical sense.

That said, I do think it would be a mistake to assume that the conclusions of any research into biological sex can be directly extrapolated to trans people. If we know that the relevant mechanism is hormones or chromosomes we may be able to predict effects on trans people--but we also might not be able to, if the mechanism isn't known, or for whatever other reason.

One well known example is that trans women's risk of breast cancer is more comparable to cis women than cis men. If I recall correctly, this is because the relevant factors are basically whether a person has breasts or not, and of course, trans women grow breasts when on estrogen.

Comment · 4 years ago
It seems we are essentially in agreement on how the documentation is meant to be read, which is that the points it makes about autofree are not meant to be statements of fact.
Comment · 4 years ago
I understand that autofree is WIP. I read that part of the docs, and I have watched the demo.

But I don't really understand what the intended reading of the documentation is.

If I were to completely take these two paragraphs out of context, they are factually untrue:

> Most objects (~90-100%) are freed by V's autofree engine: the compiler inserts necessary free calls automatically during compilation. Remaining small percentage of objects is freed via reference counting.

> The developer doesn't need to change anything in their code. "It just works", like in Python, Go, or Java, except there's no heavy GC tracing everything or expensive RC for each object.

So, what does this mean? Well, nothing, necessarily. If the context clarifies that these points are all untrue, then, the documentation could be considered perfectly accurate as far as I'm concerned.

However, when I asked if the intended reading of the documentation was that these points are untrue, the answer was--no, these points are all actually true.

I don't understand that position. These claims are straightforwardly untrue.

To me, your response is reinforcing my original proposed reading. That is--to me, your response indicates that I should read these claims as being false, and that the documentation is acknowledging them as false.

Now to me, that is a perfectly good response to my original comment. If this part of the documentation is not intended to be read as a statement of fact, that makes perfect sense to me, even though I do think it could be communicated better.

As it stands, though, I'm not really sure what I'm meant to get from this[0] comment.

[0] https://news.ycombinator.com/item?id=31955809

Comment · 4 years ago
Okay, I really don't understand what you're saying here.

The claims are objectively false. The autofree engine objectively does not free 90%-100% of objects, it is objectively not true that "It just works."

If I understand you, you're saying that autofree doesn't work because of bugs in the compiler. But, the fact that the claims are false as a result of bugs in the compiler does not somehow make those claims true.

Comment · 4 years ago
So, to be clear, is the intended reading of the documentation as follows?

> Most objects (~90-100%) are freed by V's autofree engine: the compiler inserts necessary free calls automatically during compilation. Remaining small percentage of objects is freed via reference counting.

> The developer doesn't need to change anything in their code. "It just works", like in Python, Go, or Java, except there's no heavy GC tracing everything or expensive RC for each object.

> These points are both currently untrue, and should not be relied on in code.

I'm hoping I don't come off as flippant here. I just don't see any way to interpret these claims as an accurate description without adding that third bullet point.

Comment · 4 years ago
In my opinion, the current documentation on the autofree engine [0] constitutes a false claim about language capabilities:

> Most objects (~90-100%) are freed by V's autofree engine: the compiler inserts necessary free calls automatically during compilation. Remaining small percentage of objects is freed via reference counting.

> The developer doesn't need to change anything in their code. "It just works", like in Python, Go, or Java, except there's no heavy GC tracing everything or expensive RC for each object.

[0]: https://github.com/vlang/v/blob/master/doc/docs.md#memory-ma...

So, I am not entirely sure the best way to quantify whether this is true. However, I thought a fun test would be recreating "my first memory leak" -- the first memory leak I can remember fixing in code that I wrote. Specifically, I was essentially leaking some bespoke heap-allocated iterators I had created (inside of an infinite game loop).

So here is my little test:

    struct Iter {
    mut:
        pointer int
    }

    fn main() {
        my_array := [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
        
        for true { // simulated game loop
            mut iter := &Iter { 0 }
            
            // heap allocated iterator
            for iter.pointer < my_array.len {
                print(my_array[iter.pointer])
                print(" ")
                iter.pointer += 1
            }
            println("")
        }
    }
I compiled this with -autofree -gc none, with V 0.3. Checking it with valgrind, it continuously leaks memory.

So, from what I can tell, this description of the autofree engine in the documentation does not accurately describe the existing functionality available in V.

I am curious where the 90%-100% figure comes from. It is such a specific number that it implies to me, as a reader, that it comes from an empirical measurement of an existing system. But, there is no link to where this measurement was taken. In my opinion, the documentation should include some details about how these figures were generated.

Live from the official Hacker News API

A modern reader for Hacker News · SvelteKit + Skeleton