Skip to content
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

Special-case empty { ... } sequences for prettier name mangling. #104

Closed

Conversation

sunfishcode
Copy link
Member

With the current mangling for eg. records:

  return 'record { ' + ', '.join(mangled_fields) + ' }'

the mangling for a record with 0 fields is record { }, with two spaces between the braces. That looks subjectively surprising.

This PR adds special cases to the mangling for record and similar types so that the mangling is record {}, with no spaces between the braces, which is subjectively prettier.

The argument against this is that empty records should be very rare, so prettiness isn't important, and every special case makes the system more complex. The argument for it is that a mangling with two spaces looks weird.

With the current mangling for eg. records:

```python
  return 'record { ' + ', '.join(mangled_fields) + ' }'
```

the mangling for a record with 0 fields is `record {  }`, with two
spaces between the braces. That looks subjectively surprising.

This PR adds special cases to the mangling for `record` and similar
types so that the mangling is `record {}`, with no spaces between the
braces, which is subjectively prettier.

The argument against this is that empty records should be very rare,
so prettiness isn't important, and every special case makes the system
more complex. The argument for it is that a mangling with two spaces
looks weird.
sunfishcode added a commit to sunfishcode/wit-bindgen that referenced this pull request Sep 12, 2022
This implements the name-mangling scheme in the current canonical ABI,
with the modification proposed in WebAssembly/component-model#104,
though that can be easily removed if the proposal is declined.
sunfishcode added a commit to bytecodealliance/wit-bindgen that referenced this pull request Sep 12, 2022
* Rename `canonical_abi_realloc` to `cabi_realloc`.

This follows the current Canonical ABI. This doesn't rename
`canonical_abi_free`, as that's expected to be removed when post-return
functions are implemented.

* Rename the "expected" type to "result".

This follows the current Canonical ABI.

* Implement function and value type name mangling.

This implements the name-mangling scheme in the current canonical ABI,
with the modification proposed in WebAssembly/component-model#104,
though that can be easily removed if the proposal is declined.

* Use name mangling in the bindings generators.

* Use the export base name rather than the mangled name for python identifiers.
@lukewagner
Copy link
Member

This is ultimately a subjective matter, but to me this seems to add more special cases than warranted by the frequency and degree of benefit to humans. ¯_(ツ)_/¯

@sunfishcode
Copy link
Member Author

¯_(ツ)_/¯

@sunfishcode sunfishcode deleted the sunfishcode/empty-lists branch September 13, 2022 15:55
sunfishcode added a commit to sunfishcode/wit-bindgen that referenced this pull request Sep 13, 2022
WebAssembly/component-model#104 is closed, so remove the corresponding
special case from wit-bindgen too.
sunfishcode added a commit to bytecodealliance/wit-bindgen that referenced this pull request Sep 13, 2022
* Remove the special case for empty records.

WebAssembly/component-model#104 is closed, so remove the corresponding
special case from wit-bindgen too.

* Update unit tests.
alexcrichton pushed a commit to alexcrichton/wasm-tools that referenced this pull request Nov 16, 2022
* Rename `canonical_abi_realloc` to `cabi_realloc`.

This follows the current Canonical ABI. This doesn't rename
`canonical_abi_free`, as that's expected to be removed when post-return
functions are implemented.

* Rename the "expected" type to "result".

This follows the current Canonical ABI.

* Implement function and value type name mangling.

This implements the name-mangling scheme in the current canonical ABI,
with the modification proposed in WebAssembly/component-model#104,
though that can be easily removed if the proposal is declined.

* Use name mangling in the bindings generators.

* Use the export base name rather than the mangled name for python identifiers.
alexcrichton pushed a commit to alexcrichton/wasm-tools that referenced this pull request Nov 16, 2022
* Remove the special case for empty records.

WebAssembly/component-model#104 is closed, so remove the corresponding
special case from wit-bindgen too.

* Update unit tests.
alexcrichton pushed a commit to alexcrichton/wasmtime-py that referenced this pull request Nov 16, 2022
* Rename `canonical_abi_realloc` to `cabi_realloc`.

This follows the current Canonical ABI. This doesn't rename
`canonical_abi_free`, as that's expected to be removed when post-return
functions are implemented.

* Rename the "expected" type to "result".

This follows the current Canonical ABI.

* Implement function and value type name mangling.

This implements the name-mangling scheme in the current canonical ABI,
with the modification proposed in WebAssembly/component-model#104,
though that can be easily removed if the proposal is declined.

* Use name mangling in the bindings generators.

* Use the export base name rather than the mangled name for python identifiers.
guybedford pushed a commit to bytecodealliance/jco that referenced this pull request Dec 17, 2022
* Rename `canonical_abi_realloc` to `cabi_realloc`.

This follows the current Canonical ABI. This doesn't rename
`canonical_abi_free`, as that's expected to be removed when post-return
functions are implemented.

* Rename the "expected" type to "result".

This follows the current Canonical ABI.

* Implement function and value type name mangling.

This implements the name-mangling scheme in the current canonical ABI,
with the modification proposed in WebAssembly/component-model#104,
though that can be easily removed if the proposal is declined.

* Use name mangling in the bindings generators.

* Use the export base name rather than the mangled name for python identifiers.
guybedford pushed a commit to bytecodealliance/jco that referenced this pull request Dec 17, 2022
* Rename `canonical_abi_realloc` to `cabi_realloc`.

This follows the current Canonical ABI. This doesn't rename
`canonical_abi_free`, as that's expected to be removed when post-return
functions are implemented.

* Rename the "expected" type to "result".

This follows the current Canonical ABI.

* Implement function and value type name mangling.

This implements the name-mangling scheme in the current canonical ABI,
with the modification proposed in WebAssembly/component-model#104,
though that can be easily removed if the proposal is declined.

* Use name mangling in the bindings generators.

* Use the export base name rather than the mangled name for python identifiers.
guybedford pushed a commit to bytecodealliance/jco that referenced this pull request Dec 21, 2022
* Rename `canonical_abi_realloc` to `cabi_realloc`.

This follows the current Canonical ABI. This doesn't rename
`canonical_abi_free`, as that's expected to be removed when post-return
functions are implemented.

* Rename the "expected" type to "result".

This follows the current Canonical ABI.

* Implement function and value type name mangling.

This implements the name-mangling scheme in the current canonical ABI,
with the modification proposed in WebAssembly/component-model#104,
though that can be easily removed if the proposal is declined.

* Use name mangling in the bindings generators.

* Use the export base name rather than the mangled name for python identifiers.
rvolosatovs pushed a commit to bytecodealliance/wrpc that referenced this pull request May 23, 2024
* Rename `canonical_abi_realloc` to `cabi_realloc`.

This follows the current Canonical ABI. This doesn't rename
`canonical_abi_free`, as that's expected to be removed when post-return
functions are implemented.

* Rename the "expected" type to "result".

This follows the current Canonical ABI.

* Implement function and value type name mangling.

This implements the name-mangling scheme in the current canonical ABI,
with the modification proposed in WebAssembly/component-model#104,
though that can be easily removed if the proposal is declined.

* Use name mangling in the bindings generators.

* Use the export base name rather than the mangled name for python identifiers.
rvolosatovs pushed a commit to bytecodealliance/wrpc that referenced this pull request May 23, 2024
* Remove the special case for empty records.

WebAssembly/component-model#104 is closed, so remove the corresponding
special case from wit-bindgen too.

* Update unit tests.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants