WebAssembly / wasi-clocks

Clocks API for WASI
37 stars 14 forks source link

Add timezone back in. #61

Closed cdmurph32 closed 3 months ago

cdmurph32 commented 7 months ago

Update README with markdown generation step.

pchickey commented 7 months ago

Awesome! Can you also bump the clocks package version to 0.2.1-draft as part of this PR?

cdmurph32 commented 7 months ago

Sounds good.

sunfishcode commented 7 months ago

Updating to wit-abi-up-to-date@v19 in .github/workflows/main.yml should update CI to the latest wit-bindgen.

cdmurph32 commented 6 months ago

If there aren't any other proposals for 0.2.1, I think the -draft should be removed before this is merged. It needs to be removed before my wasmtime PR. Which in turn needs to be merged (among other things) before the iana-time-zone PR.

yoshuawuyts commented 4 months ago

I've filed https://github.com/cdmurph32/wasi-clocks/pull/1 to add @unstable feature gate support to this PR. That should give us the ability to merge this into wasi:clocks as a feature which is independently tracked through the phases process. I've also filed https://github.com/WebAssembly/WASI/pull/605 to begin the process of tracking this extension, as well as reserve a canonical feature name (clocks-timezone).

cdmurph32 commented 4 months ago

Thanks @yoshuawuyts . I've merged that.

yoshuawuyts commented 4 months ago

@cdmurph32 oh heh, one more thing: there is still a merge conflict on this PR. Could you please rebase it on the main branch? I'm hoping that's the last bit left to get this to a state where it can be merged.

cdmurph32 commented 4 months ago

Do we need to update wit-bindgen?

wit-bindgen markdown wit --html-in-md
Error: failed to resolve directory while parsing WIT for path [wit]

Caused by:
    0: this type is not gated by a feature but its interface is gated by a feature
    1: found a reference to a interface which is excluded due to its feature not being activated
            --> wit/timezone.wit:5:21
             |
           5 |     use wall-clock.{datetime};
             |                     ^-------
yoshuawuyts commented 4 months ago

Oh right, yeah — wit-bindgen has not been updated yet with support for the new gates notation. We probably need to cut a release of wasm-tools for that first too.

sunfishcode commented 4 months ago

wasm-tools and wit-bindgen are released, and I've now bumped their versions in wit-abi-up-to-date v20. So now, it should be sufficient to just bump the wit-abi-up-to-date version to v20 in .github/workflows/main.yml.

cdmurph32 commented 4 months ago

Looks like the version of wit-bindgen-cli in the test needs to be updated.

yoshuawuyts commented 4 months ago

I've filed https://github.com/WebAssembly/wasi-clocks/pull/67 to update CI, which brings in https://github.com/WebAssembly/wit-abi-up-to-date/pull/26 which was published as part of WebAssembly/wit-abi-up-to-date@v20. I think if we merge that, and then re-run CI here, we should be good.

sunfishcode commented 4 months ago

67 is now merged, so now this should just need a rebase.

cdmurph32 commented 4 months ago

CI won't pass until we can pass features to wit-abi-up-to-date.

 wit-bindgen markdown wit --check --html-in-md --features clocks-timezone

I'm thinking the github action would need something like this:

    - uses: WebAssembly/wit-abi-up-to-date@v13
      with:
        wit-abi-tag: wit-abi-0.12.0
      inputs:
        features: 
          - clocks-timezone

And wit-abi-up-to-date would need to add --features={{join .inputs.Features ","}} I'm not that familiar with Github actions. How would I test this locally? Is WebAssembly/wit-abi-up-to-date a Docker container?

sunfishcode commented 3 months ago

With wit-abi-up-to-date v21, it should be possible to pass features to the script.

sunfishcode commented 3 months ago

Ok, we've now got everything sorted out here. Thanks for all your patience here!

cdmurph32 commented 3 months ago

Thank you @sunfishcode and @yoshuawuyts !

justingrant commented 3 months ago

Hi - I'm one of the champions of the ECMAScript Temporal proposal that will add a richer and timezone-aware set of date/time types to JS engines. @littledan suggested that I take a look at the WASI timezone proposal.

I had a few questions:

cc @ptomato @sffc

cdmurph32 commented 3 months ago

@justingrant I was intending to use the iana-time-zone crate for the wasmtime implementation. Do you have any concerns with that crate?

https://github.com/bytecodealliance/wasmtime/pull/6899

justingrant commented 3 months ago

@cdmurph32 - I think you'll want @sffc to weigh in here. He's both a Rust expert and a localization guru, and both may be involved in your question above.

Also, is the reason you're not using ICU4X (the Rust implementation of ICU4C/ICU4J) that WASI is intentionally minimal in size and you don't need the full capabilities of ICU? I assume that ICU4X does everything that iana-time-zone does, and much more. @sffc is one of the folks driving ICU4X.

Also, is the system time zone the only time zone that WASI is worried about? There's no need to be able to calculate the offset for a different time zone?

Finally, where are you getting your IANA Time Zone Database data from in order to calculate the offset for the zone at that instant?

yoshuawuyts commented 3 months ago

Thanks for the feedback @justingrant! - I think it's clear we have room to improve, and we should figure out what the right steps forward are. To that effect I've filed https://github.com/WebAssembly/wasi-clocks/issues/69 to continue our conversation about how we can fix the issues in the current design. Let me know if anything is missing there!