Giter Club home page Giter Club logo

Comments (14)

robertbastian avatar robertbastian commented on July 4, 2024

Context: I'm trying to replace https://github.com/robertbastian/icu4x/blob/ec32ad4a79707b1ddb7852ed1653ac2d86c27f3f/provider/datagen/src/baked_exporter.rs#L25 by a version that doesn't use the network (the current test does). However I cannot figure out an invocation for baked that doesn't use fallback.

from icu4x.

sffc avatar sffc commented on July 4, 2024

_no_fallback only means no runtime fallback. It still does datagen-time fallback.

You can avoid the datagen-time fallback by using LocaleFamily::FULL. But, hmm, it's not possible to pass a LocaleFamily into .with_locales_no_fallback.

from icu4x.

sffc avatar sffc commented on July 4, 2024

The invocation I've used in a number of other places to avoid this problem is

.with_locales_and_fallback([LocaleFamily::FULL], Default::default())

from icu4x.

sffc avatar sffc commented on July 4, 2024

It's not a bug, so unassigning myself.

from icu4x.

sffc avatar sffc commented on July 4, 2024

The function docs say: "Sets this driver to generate the given locales assuming no runtime fallback."

It's totally reasonable that the driver needs datagen-time fallback in order to generate data that requires no runtime fallback. That's the only way to ensure that the input list of langids can all be fully resolved at datagen time.

We may have previously avoided loading the fallbacker if the explicit langid had an exact match with the supported locales, but now we always load the fallbacker in order to pick up any aux keys and locale extensions from the parent locales, which was a bug before.

from icu4x.

robertbastian avatar robertbastian commented on July 4, 2024

This invocation works with HelloWorldProvider:

//! DatagenDriver::new()
//! .with_keys([icu_provider::hello_world::HelloWorldV1Marker::KEY])
//! .with_all_locales()
//! .export(&icu_provider::hello_world::HelloWorldProvider, exporter)
//! .unwrap();

It uses implicit exporter-derived defaults - what's the equivalent invocation for a baked provider?

from icu4x.

robertbastian avatar robertbastian commented on July 4, 2024

I guess it's .with_all_locales().with_fallback_mode(FallbackMode::Hybrid), which doesn't exist on the new API?

from icu4x.

sffc avatar sffc commented on July 4, 2024
.with_all_locales().with_fallback_mode(FallbackMode::Hybrid)

is the same as

.with_locales_and_fallback([LocaleFamily::FULL], FallbackOptions {
    deduplication_strategy: Some(DeduplicationStrategy::None),
    runtime_fallback_location: Some(RuntimeFallbackLocation::External),
})

from icu4x.

sffc avatar sffc commented on July 4, 2024

This transformation is implemented in code

            (_, Some(legacy_locales), FallbackMode::Hybrid) => {
                LocalesWithOrWithoutFallback::WithFallback {
                    families: map_legacy_locales_to_locales_with_expansion(legacy_locales),
                    options: FallbackOptions {
                        runtime_fallback_location: Some(RuntimeFallbackLocation::External),
                        deduplication_strategy: Some(DeduplicationStrategy::None),
                    },
                }
            }

from icu4x.

sffc avatar sffc commented on July 4, 2024
  • [LocaleFamily::FULL] disables locale selection fallback (it forwards all supported locales to the output)
  • DeduplicationStrategy::None disables the deduplicator, which requires fallback
  • RuntimeFallbackLocation::External disables runtime fallback and asserts that LocaleFallbackProvider will be supplied at runtime, so the exporter can proceed with that assumption

I think you should be good if you set all three of those.

from icu4x.

robertbastian avatar robertbastian commented on July 4, 2024

So what's the difference between with_locales_and_fallback with ::None and ::External, and with_locales_no_fallback?

from icu4x.

sffc avatar sffc commented on July 4, 2024

So what's the difference between with_locales_and_fallback with ::None and ::External, and with_locales_no_fallback?

with_locales_no_fallback is preresolved...

It might be mechanically the same as with_locales_and_fallback with ::None and ::External if all of the locale families are ::single. However, with_locales_and_fallback carries with it the assertion that a LocaleFallbackAdapter will be provided at runtime.

from icu4x.

sffc avatar sffc commented on July 4, 2024

Does this issue change your position on flattening these options to DatagenDriver?

impl DatagenDriver {
  pub fn with_locale_families(...)
  pub fn with_deduplication(...)
  pub fn with_runtime_fallback_location(...)
}

And perhaps change RuntimeFallbackLocation::External to RuntimeFallbackLocation::ExternalOrDisabled. Hmm.

from icu4x.

robertbastian avatar robertbastian commented on July 4, 2024

I think I'm fine flattening it.

from icu4x.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.