logoalt Hacker News

hmrylast Monday at 8:20 AM1 replyview on HN

The article doesn't show any function lifetime annotations, only @safe and @unsafe.

Functions need annotations like "return value lives as long as argument 1" or "return value lives as long as both arguments are alive"


Replies

aw1621107last Monday at 8:52 AM

> The article doesn't show any function lifetime annotations, only @safe and @unsafe.

It does, but it's under the "External Annotations" section:

    // External annotations go in a header file
    // @external: {
    //   strlen: [safe, (const char* str) -> owned]
    //   strcpy: [unsafe, (char* dest, const char* src) -> char*]
    //   strchr: [safe, (const char* str, int c) -> const char* where str: 'a, return: 'a]
    //
    //   // Third-party libraries work the same way
    //   sqlite3_column_text: [safe, (sqlite3_stmt* stmt, int col) -> const char* where stmt: 'a, return: 'a]
    //   nlohmann::json::parse: [safe, (const string& s) -> owned json]
    // }
> The where clause specifies lifetime relationships—like where stmt: 'a, return: 'a means the returned pointer lives as long as the statement handle. This lets the analyzer catch dangling pointers from external APIs.

The GitHub repo also has an annotations guide with some more info [0]. The general syntax appears to be:

    // @lifetime: (parameters) -> return_type where constraints
[0]: https://github.com/shuaimu/rusty-cpp/blob/main/docs/annotati...
show 2 replies