Switch to parallel comemo using Git dependency (#2973)

This commit is contained in:
Sébastien d'Herbais de Thun 2023-12-15 12:25:54 +01:00 committed by GitHub
parent ab29c669e6
commit 41c0dae209
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 24 additions and 14 deletions

18
Cargo.lock generated
View File

@ -393,18 +393,18 @@ checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
[[package]] [[package]]
name = "comemo" name = "comemo"
version = "0.3.1" version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "git+https://github.com/typst/comemo?rev=ddb3773#ddb3773d062369e120d09c9a0a7909faf29d8fe1"
checksum = "bf5705468fa80602ee6a5f9318306e6c428bffd53e43209a78bc05e6e667c6f4"
dependencies = [ dependencies = [
"comemo-macros", "comemo-macros",
"once_cell",
"parking_lot",
"siphasher 1.0.0", "siphasher 1.0.0",
] ]
[[package]] [[package]]
name = "comemo-macros" name = "comemo-macros"
version = "0.3.1" version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "git+https://github.com/typst/comemo?rev=ddb3773#ddb3773d062369e120d09c9a0a7909faf29d8fe1"
checksum = "54af6ac68ada2d161fa9cc1ab52676228e340866d094d6542107e74b82acc095"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -1566,6 +1566,16 @@ dependencies = [
"syn 2.0.39", "syn 2.0.39",
] ]
[[package]]
name = "parking_lot"
version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
dependencies = [
"lock_api",
"parking_lot_core",
]
[[package]] [[package]]
name = "parking_lot_core" name = "parking_lot_core"
version = "0.9.9" version = "0.9.9"

View File

@ -36,7 +36,7 @@ clap = { version = "4.4", features = ["derive", "env"] }
clap_complete = "4.2.1" clap_complete = "4.2.1"
clap_mangen = "0.2.10" clap_mangen = "0.2.10"
codespan-reporting = "0.11" codespan-reporting = "0.11"
comemo = "0.3.1" comemo = { git = "https://github.com/typst/comemo", rev = "ddb3773" }
csv = "1" csv = "1"
dirs = "5" dirs = "5"
ecow = { version = "0.2", features = ["serde"] } ecow = { version = "0.2", features = ["serde"] }

View File

@ -167,7 +167,7 @@ impl Plugin {
impl Plugin { impl Plugin {
/// Create a new plugin from raw WebAssembly bytes. /// Create a new plugin from raw WebAssembly bytes.
#[comemo::memoize] #[comemo::memoize]
pub fn new(bytes: Bytes) -> StrResult<Self> { pub fn new(bytes: Bytes) -> StrResult<Plugin> {
let engine = wasmi::Engine::default(); let engine = wasmi::Engine::default();
let module = wasmi::Module::new(&engine, bytes.as_slice()) let module = wasmi::Module::new(&engine, bytes.as_slice())
.map_err(|err| format!("failed to load WebAssembly module ({err})"))?; .map_err(|err| format!("failed to load WebAssembly module ({err})"))?;

View File

@ -489,7 +489,7 @@ impl CslStyle {
/// Load a built-in CSL style. /// Load a built-in CSL style.
#[comemo::memoize] #[comemo::memoize]
pub fn from_name(name: &str) -> StrResult<Self> { pub fn from_name(name: &str) -> StrResult<CslStyle> {
match hayagriva::archive::ArchivedStyle::by_name(name).map(ArchivedStyle::get) { match hayagriva::archive::ArchivedStyle::by_name(name).map(ArchivedStyle::get) {
Some(citationberg::Style::Independent(style)) => Ok(Self { Some(citationberg::Style::Independent(style)) => Ok(Self {
name: Some(name.into()), name: Some(name.into()),
@ -501,7 +501,7 @@ impl CslStyle {
/// Load a CSL style from file contents. /// Load a CSL style from file contents.
#[comemo::memoize] #[comemo::memoize]
pub fn from_data(data: &Bytes) -> StrResult<Self> { pub fn from_data(data: &Bytes) -> StrResult<CslStyle> {
let text = std::str::from_utf8(data.as_slice()).map_err(FileError::from)?; let text = std::str::from_utf8(data.as_slice()).map_err(FileError::from)?;
citationberg::IndependentStyle::from_xml(text) citationberg::IndependentStyle::from_xml(text)
.map(|style| Self { name: None, style: Arc::new(Prehashed::new(style)) }) .map(|style| Self { name: None, style: Arc::new(Prehashed::new(style)) })
@ -589,7 +589,7 @@ impl Works {
pub fn generate( pub fn generate(
world: Tracked<dyn World + '_>, world: Tracked<dyn World + '_>,
introspector: Tracked<Introspector>, introspector: Tracked<Introspector>,
) -> StrResult<Arc<Self>> { ) -> StrResult<Arc<Works>> {
let mut generator = Generator::new(world, introspector)?; let mut generator = Generator::new(world, introspector)?;
let rendered = generator.drive(); let rendered = generator.drive();
let works = generator.display(&rendered)?; let works = generator.display(&rendered)?;

View File

@ -325,7 +325,7 @@ impl Image {
data: Bytes, data: Bytes,
format: ImageFormat, format: ImageFormat,
alt: Option<EcoString>, alt: Option<EcoString>,
) -> StrResult<Self> { ) -> StrResult<Image> {
let kind = match format { let kind = match format {
ImageFormat::Raster(format) => { ImageFormat::Raster(format) => {
ImageKind::Raster(RasterImage::new(data, format)?) ImageKind::Raster(RasterImage::new(data, format)?)
@ -346,7 +346,7 @@ impl Image {
alt: Option<EcoString>, alt: Option<EcoString>,
world: Tracked<dyn World + '_>, world: Tracked<dyn World + '_>,
families: &[String], families: &[String],
) -> StrResult<Self> { ) -> StrResult<Image> {
let kind = match format { let kind = match format {
ImageFormat::Raster(format) => { ImageFormat::Raster(format) => {
ImageKind::Raster(RasterImage::new(data, format)?) ImageKind::Raster(RasterImage::new(data, format)?)

View File

@ -27,7 +27,7 @@ struct Repr {
impl RasterImage { impl RasterImage {
/// Decode a raster image. /// Decode a raster image.
#[comemo::memoize] #[comemo::memoize]
pub fn new(data: Bytes, format: RasterFormat) -> StrResult<Self> { pub fn new(data: Bytes, format: RasterFormat) -> StrResult<RasterImage> {
fn decode_with<'a, T: ImageDecoder<'a>>( fn decode_with<'a, T: ImageDecoder<'a>>(
decoder: ImageResult<T>, decoder: ImageResult<T>,
) -> ImageResult<(image::DynamicImage, Option<Vec<u8>>)> { ) -> ImageResult<(image::DynamicImage, Option<Vec<u8>>)> {

View File

@ -28,7 +28,7 @@ struct Repr {
impl SvgImage { impl SvgImage {
/// Decode an SVG image without fonts. /// Decode an SVG image without fonts.
#[comemo::memoize] #[comemo::memoize]
pub fn new(data: Bytes) -> StrResult<Self> { pub fn new(data: Bytes) -> StrResult<SvgImage> {
let opts = usvg::Options::default(); let opts = usvg::Options::default();
let tree = usvg::Tree::from_data(&data, &opts).map_err(format_usvg_error)?; let tree = usvg::Tree::from_data(&data, &opts).map_err(format_usvg_error)?;
Ok(Self(Arc::new(Repr { Ok(Self(Arc::new(Repr {
@ -46,7 +46,7 @@ impl SvgImage {
data: Bytes, data: Bytes,
world: Tracked<dyn World + '_>, world: Tracked<dyn World + '_>,
families: &[String], families: &[String],
) -> StrResult<Self> { ) -> StrResult<SvgImage> {
// Disable usvg's default to "Times New Roman". Instead, we default to // Disable usvg's default to "Times New Roman". Instead, we default to
// the empty family and later, when we traverse the SVG, we check for // the empty family and later, when we traverse the SVG, we check for
// empty and non-existing family names and replace them with the true // empty and non-existing family names and replace them with the true