Commit Graph

68 Commits

Author SHA1 Message Date
Benedikt Peetz 88aa3c3ad7
docs(trixy-parser): Update the railroad diagrams 2024-02-18 13:36:37 +01:00
Benedikt Peetz 86b946b540
fix(trixy-types): Conform to the api provided by the headers
See the previous commit for an explanation
2024-02-18 13:35:40 +01:00
Benedikt Peetz f699ca24a9
fix(trixy-types): Rework c header files
The old implementation tried to provide rust types in c—like the
result or option types. This implementation now removes this source of
complexity by ensuring, that these types are unwrapped on the rust->c
boundary.

This first commit changes the header files to conform to the new api.
2024-02-18 13:30:03 +01:00
Benedikt Peetz a077ef1466
fix(trixy-parser): Remove the `void` type 2024-02-18 13:27:31 +01:00
Benedikt Peetz dc8a7ecb33
test(trixy-parser): Restore test functionality after nasp -> mod rename 2024-02-18 13:17:34 +01:00
Benedikt Peetz 3e59d53b8b
build(flake): De-duplicate the `flake.lock` file 2024-02-18 13:11:33 +01:00
Benedikt Peetz b6799877bb
feat(trixy-parser): Adapt Trixy to be a complete subset of rust
This changes two important things:
- Firstly it renames the `nasp` keyword to `mod`:
        This change removes the not required deviation from rust.
- Secondly it removes the semicolon after an enumeration or structure
  declaration, which is pointless in these positions.
2024-02-17 19:54:43 +01:00
Benedikt Peetz b3c6a4c1a1
feat(treewide): Add broken Vec<E>, Result<T,E> and Option<T> types to c api
These are implemented right now by simply casting the generic arguments
to void pointers and providing a `type_id` field in every struct
denoting the original type.

This implementation, whilst being extremely unwieldy to work with on
the c side, also fails in a lot of fundamental ways:
   1. The `type_id` enum *can* never really support user defined
      types because we would already need it to provide the c to rust
      value conversion.

   2. Even without custom user types the type conversion is extremely
      hard to correctly implement in a somewhat performant way: A vector
      passed from c code to rust would need to completely reallocated
      *one element at a time*. And this only works if the c side has
      correctly cast the void pointer to the vectors data before accessing
      it, as any other way would have lead to possible unaligned data
      (which the rust side had to account for).

   3. The c api is just simply bad in this state:
      You have to always look at the Trixy file to even be able to deal
      with the data the api returns (that is: There is no mention of
      a results generics in the c header).  Additionally the question
      arises if these types should even be leaked into the c code because
      than c just becomes a worse version of rust, which undermines the
      whole reason of providing a c api in the first place.

One way to fix all these issues would be to change the way generics are
handled by using unions instead of the void pointer and trying to avoid
leaking these rust types in c as far as possible.
This approach would require a lot less binding code (both on the c and
rust side), but also would make the rust based c-header-gen-code harder,
as it would then be required to turn a `Vec<String>` to a `char **` (and
obviously a whole wrapper struct with size and string length), whilst
turning a `Vec<char>` to a `char*` differentiating it from a `string_t`.
2023-12-28 10:28:58 +01:00
Benedikt Peetz b9e26418ad
fix(trixy): Use public reexports 2023-12-26 12:18:58 +01:00
Benedikt Peetz 21e1b75193
chore(treewide): Move the trixy subcrates under one trixy crate 2023-12-26 12:14:08 +01:00
Benedikt Peetz 7d1a41aca9
feat(treewide): Provide a c api 2023-12-25 22:23:52 +01:00
Benedikt Peetz 0744c8468d
chore(treewide): Add license headers 2023-12-24 11:30:03 +01:00
Benedikt Peetz ed96a50bd4
feat(trixy-macros): Add rust host code generation 2023-12-24 11:28:30 +01:00
Benedikt Peetz 1d49bdf2cf
docs(parser/generate_docs): Move shebang to first line 2023-12-23 19:04:34 +01:00
Benedikt Peetz 03f24503b7
chore(treewide): Add license headers 2023-12-23 18:57:10 +01:00
Benedikt Peetz cc50ec2655
build(.licensure.yml): Update to really be usable 2023-12-23 18:56:06 +01:00
Benedikt Peetz 22904c9bae
build(treewide): Add relevant configuration for releases 2023-12-23 18:35:38 +01:00
Benedikt Peetz 233fa3e1b5
chore: Initial commit
This not the "real" first commit, the others are in the trinitrix/core
repository, made before the split-up took place
2023-12-23 16:07:17 +01:00