On Thursday, 19 July 2018 at 12:44:30 UTC, Radu wrote:
---
int foo()
{
    import std.algorithm, std.range;
    auto r = 100.iota.stride(2).take(5);
    return r.sum();
}
---
ldc2 -mtriple=wasm32-unknown-unknown-wasm -betterC -link-internally -L-allow-undefined -release -Os wasm.d ldc\bin\..\import\core\stdc\stdio.d(31): Error: module `core.stdc.stdint` import intptr_t not found ldc\bin\..\import\core\stdc\stdio.d(1149): Error: undefined identifier FILE
....

This is a prime example of stuff that should just workTM on targets like that. I would like to submit some fixes but I think there needs to be a more systematic approach on making more core APIs modular.

Removing some superfluous explicit druntime dependencies from Phobos would be a start. Your (nice) example compiles fine with this 4-lines Phobos hack:

---
diff --git a/std/ascii.d b/std/ascii.d
index 8622785b1..b3815cafd 100644
--- a/std/ascii.d
+++ b/std/ascii.d
@@ -105,10 +105,10 @@ enum LetterCase : bool
 /// Newline sequence for this system.
 version(Windows)
     immutable newline = "\r\n";
-else version(Posix)
+else// version(Posix)
     immutable newline = "\n";
-else
-    static assert(0, "Unsupported OS");
+//else
+//    static assert(0, "Unsupported OS");


 /++
diff --git a/std/typecons.d b/std/typecons.d
index 203ab05f4..49edebfaf 100644
--- a/std/typecons.d
+++ b/std/typecons.d
@@ -68,7 +68,8 @@ Authors: $(HTTP erdani.org, Andrei Alexandrescu),
  */
 module std.typecons;

-import core.stdc.stdint : uintptr_t;
+//import core.stdc.stdint : uintptr_t;
+alias uintptr_t = size_t;
 import std.format : singleSpec, FormatSpec, formatValue;
 import std.meta; // : AliasSeq, allSatisfy;
 import std.range.primitives : isOutputRange;
---

Importing core.stdc.stdint for `uintptr_t` in std.typecons is particularly troublesome and totally unnecessary. It leads to importing (see -v output):

core.stdc.stdint
core.stdc.config
core.stdc.stddef
core.stdc.signal
core.stdc.wchar_
core.stdc.stdarg
core.stdc.stdio
core.stdc.time

whereas after the hack, it's only `core.stdc.stdarg`, and no core.stdc.* hacks for `version(WebAssembly)` are required to import std.algorithm and std.range.

[I'll open a PR for std.typecons.]

Reply via email to