Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • Aug 23 09:24
    @sjrd banned @yensaoxuan_twitter
  • Apr 18 19:06
    @sjrd banned @Amitgup48798297_twitter
  • Mar 29 07:47
    @sjrd banned @quangs
  • Jan 23 06:34
    @sjrd banned @Rebeka58_gitlab
  • Jun 08 2020 20:43
    @sjrd banned @sw7240614
  • Sep 29 2019 08:35
    @sjrd banned @8bitpitRBX_twitter
  • May 23 2019 13:44
    @sjrd banned @BIGCRYPTO001_gitlab
  • May 01 2019 14:31
    @sjrd banned @Certificates1_gitlab
  • Apr 22 2019 15:31
    @sjrd banned @lerbatax
  • Jan 31 2019 23:04
    sjrd commented #3555
  • Jan 31 2019 22:56
    sjrd review_requested #3555
  • Jan 31 2019 22:56
    sjrd opened #3555
  • Jan 31 2019 21:06

    sjrd on 0.6.x

    Remove dead code: specific coll… Adapt the signature of `js.Arra… Merge pull request #3554 from s… (compare)

  • Jan 31 2019 21:06
    sjrd closed #3554
  • Jan 31 2019 20:54
    erikvanoosten commented #2665
  • Jan 31 2019 16:33
    sjrd commented #3538
  • Jan 31 2019 15:54

    sjrd on master

    Fix analyzer cycle detection to… Add toString methods to analyze… Do not provide linked ClassInfo… and 1 more (compare)

  • Jan 31 2019 15:54
    sjrd closed #3552
  • Jan 31 2019 15:54

    sjrd on master

    Remove Logger.success It is un… Make level helpers final Clean-up ScalaConsoleLogger cod… and 1 more (compare)

  • Jan 31 2019 15:54
    sjrd closed #3553
Ulugbek Abdullaev
@ulugbekna
Hi, thanks for the reply. No, I don't.
Let me give more context if that's helpful. I have a library (a package) minicoq.core that is used by jvm REPL implementation and my js webapp. I want minicoq.core to be compatible with both jvm and js. Do you know how this could be achieved?
My sbt file looks like this now
val dottyVersion = "3.0.0-RC3"

lazy val minicoq = project
  .in(file("minicoq"))
  .enablePlugins(ScalaJSPlugin)
  .settings(
    name := "minicoq",
    version := "0.1.0",
    scalaVersion := dottyVersion,
    libraryDependencies += ("org.scala-lang.modules" %% "scala-parser-combinators" % "1.1.2")
      .withDottyCompat(scalaVersion.value),
    libraryDependencies += "org.scalameta" %% "munit" % "0.7.25" % Test,
    testFrameworks += new TestFramework("munit.Framework")
  )

lazy val minicoq_repl = project
  .in(file("."))
  .aggregate(minicoq)
  .dependsOn(minicoq)
  .settings(
    name := "minicoq-repl",
    version := "0.1.0",
    scalaVersion := dottyVersion
  )

lazy val minicoq_js = project
  .in(file("minicoq-js"))
  .enablePlugins(ScalaJSPlugin)
  .aggregate(minicoq)
  .dependsOn(minicoq)
  .settings(
    name := "minicoq-js",
    version := "0.1.0",
    scalaVersion := dottyVersion,
    scalaJSUseMainModuleInitializer := true,
    libraryDependencies += ("org.scala-js" %%% "scalajs-dom_sjs1" % "1.1.0")
      .withCrossVersion(CrossVersion.for3Use2_13)
  )
Anton Sviridov
@velvetbaldmime:matrix.org
[m]
libraryDependencies += ("org.scala-lang.modules" %% "scala-parser-combinators" % "1.1.2")
that's where the issue is - you need to use %%% here for SJS to use this dependency (transitively)
does parser combinators even publish for js?
(just checked, it does)
Ulugbek Abdullaev
@ulugbekna
If I use %%%, would I lose compat with JVM?
Anton Sviridov
@velvetbaldmime:matrix.org
[m]
Nope
it will work for both
https://github.com/portable-scala/sbt-platform-deps#sbt-platform-deps this is where it's coming from (scala.js plugin depends on it)
Ulugbek Abdullaev
@ulugbekna
Thanks, this is so helpful!
Anton Sviridov
@velvetbaldmime:matrix.org
[m]

no worries :)

Anton puts another notch next to the list of people tripped by %%%

I think in the context of cross platform projects you can just use %%% everywhere in the build to avoid this confusion

Ulugbek Abdullaev
@ulugbekna
You may also notice libraryDependencies += ("org.scala-js" %%% "scalajs-dom_sjs1" % "1.1.0") .withCrossVersion(CrossVersion.for3Use2_13) at the end of my sbt file and _sjs1 suffix in the dep name. Somehow, sbt can't find this dependency without this suffix. Is this the expected behavior?
Anton Sviridov
@velvetbaldmime:matrix.org
[m]
hm.. I wonder if it's some weird interplay with for3Use2_13? I have this library as a dependency in another project and it works without the suffix
Sébastien Doeraene
@sjrd
Doesn't ("org.scala-js" %%% "scalajs-dom" % "1.1.0").withCrossVersion(CrossVersion.for3Use2_13) work?
2 replies
Ulugbek Abdullaev
@ulugbekna
I discovered sbt-crossproject and see that it's updated some time ago. I wonder whether it is still used/maintained and what its primary purpose is since it seems just sbt itself can compile to both jvm and js?
Anton Sviridov
@velvetbaldmime:matrix.org
[m]

sbt itself can compile to both jvm and js

crossproject helps generating those project - one can do it manually like you did, or with crossproject/projectmatrix plugins.

If you have a ton of cross-built projects, manual creation can become tedious quickly :)

1 reply
Rich
@Rich2
What does io.Source.fromResource do when running Scala.js in a browser?
Anton Sviridov
@velvetbaldmime:matrix.org
[m]
I think it breaks during linking
[error] Referring to non-existent class java.io.FileNotFoundException 
[error]   called from scala.io.Source$.fromResource(java.lang.String,j
ava.lang.ClassLoader,scala.io.Codec)scala.io.BufferedSource
Rich
@Rich2
Ah OK I tried compiling under Scala.js. Thanks.
I'll make sure any methods that call it are in a Java only source folder.
Dave Smith
@davesmith00000
Slightly odd question maybe. Indigo (game engine) is using inheritance where it occasionally needs to - for reasons lost to the mists of time - but there are a few places where I've been considering for ages switching to typeclasses. With the move to Scala 3 complete, now seems like a good time to make use of the nice new syntax for typeclasses.
The question I've got is: Can anyone offer any intuition for how typeclasses stack up in terms of performance, versus straight up inheritance in relatively simple cases performed many many times a second? (On a JS engine, not the JVM.)
I should and would [attempt to] measure it, but I just wondered if anyone had any gut feelings or words of wisdom on the subject?
Sébastien Doeraene
@sjrd
AFAICT, it should be more or less the same. In both cases, I believe the dominating time loss is in the megamorphic dispatch.
Dave Smith
@davesmith00000
Good to know, thanks. 👍
Dan Di Spaltro
@dispalt
So is it not possible at the moment to use dynamicImports with closure compiler?
Sébastien Doeraene
@sjrd
dynamicImports per se are fine. It's ESModule that Closure does not support.
Ah no you're right. Emitting multiple modules is not supported by Closure either.
1 reply
dang, that kind of hurts the feature right? For our app we're talking 2.4mb of uncompressed vs 7mb fullopt with no closure. I was really hoping to use this...
Sébastien Doeraene
@sjrd
Yeah well, there's not much we can do about it...
Dan Di Spaltro
@dispalt
got it, I guess it kind of operates on the whole app. I guess the other option is to create another "app" , or really lean in and split everything on dynamicImport boundaries and take the hit in total, but have each piece feel like snappier
Tobias Schlatter
@gzm0
Just to give some context: I have interacted quite closely with the GCC team regarding multiple modules: Essentially GCC does not support "keeping" our module splits. It might support creating multiple files on its own, but then we're talking about way deeper integration from a build tool perspective. My hope was that webpack (via scalajs-bundler) allows similar compression.
But yes, the whole splitting feature is not really usable on its own without a post bundler if code size is a concern (which it probably always is :-/)
Carlos Quiroz
@cquiroz
I decided to accept a larger js output with es modules
7 replies
But would be great to find a way to compress it
Brian P. Holt
@bpholt

It is possible to mark an object annotated with @JSImport as “used” or something, so it’s not pruned by the optimizer?

I’m importing cross-fetch/polyfill so I can create WHATWG Fetch API response objects in unit tests for Cloudflare Workers. I can do something like

@js.native
@JSImport("cross-fetch/polyfill", JSImport.Default)
object FetchPolyfill extends js.Any

// inside a test class
val throwaway = FetchPolyfill

but that’s kind of inelegant, so I was hoping there’s a better solution.

(The stubs for the classes themselves are defined by scalajs-dom so AFAICT there’s not an easy way to move the @JSImport somewhere where it would more naturally be used.)

Carlos Quiroz
@cquiroz
Could you use a js.native val?
nafg
@nafg
Does anyone know if sbt-web-scalajs 1.2.0 works with scalajs-bundler?
N.S. Cutler
@godenji

Ah no you're right. Emitting multiple modules is not supported by Closure either.

I don't mean to be overly critical, but what benefit does dynamicImport have wrt to code size, worse than none? Looks like a very promising feature, one that really helps in the JS/TS world where lazy loading is a significant performance improvement.

Maybe I'm misunderstanding the performance/code size tradeoff here. Perhaps lazy loading helps on the performance front but status quo of large initial bundle size remains?

Brian P. Holt
@bpholt
Using a js.native val didn’t seem to help—I still had to reference the val somewhere to see it included
Eric Peters
@er1c
inside of an sbt task, is there a way to get the platform suffix (e.g. _sjs_1)
Eric Peters
@er1c
oh maybe projectID.value.crossVersion
Jacob Bogers
@Jacob_Bogers_twitter
hi
scala.js, I am blown away
can you make it work with react or svelte?
Antoine Doeraene
@sherpal
For react there is at least two different ways : slinky and scala-js-react. For svelte I don't know anything existing
Jacob Bogers
@Jacob_Bogers_twitter
maybe someone made a framework in scala.js itself
Antoine Doeraene
@sherpal
For frameworks in scala js itself there are at least laminar and outwatch0fw
Outwatch*. There is also scala tags although I'm not sure where people consider it to be a framework
Ulugbek Abdullaev
@ulugbekna
Hi! I have two text files that I want to use in scala-jvm and scala-js (separate) code. In scala-jvm code, I can just read the files, what's a good way to get those files in scala-js? Maybe sbt can load them as variables on compilation or I can somehow embed them in the html? (sorry if the question is not very scala-js specific)