Giter Site home page Giter Site logo

sdc's Introduction

SDC - The Snazzy D Compiler

This is the home of a D compiler. SDC is at the moment, particularly stupid; it is a work in progress. Feel free to poke around, but don't expect it to compile your code.

The project currently provides a collection of tools:

  • sdc, the D compiler.
  • sdunit, an utility to run the unit tests in D modules.
  • sdfmt, a code formatter for D.

This compiler is based on libd for D code analysis. It uses LLVM and libd-llvm for codegen and JIT CTFE. It uses libsdrt to support various runtime facilities required by programs compiled by SDC.

The code is released under the MIT license (see the LICENCE file for more details). Contact me at [email protected].

SDC requires latest DMD release to compile.

Goals

Right now, SDC is a work in progress and unusable for any production work. Its intent is to provide a D compiler as a library (libd) in order to improve the overall D toolchain by enabling the possibility of developing new tools.

SDC now supports many very advanced features (static ifs, string mixins, CTFE) of D, but not many basic ones. This is a development choice to allow the architecturing of the compiler around the hardest features of the language. As a consequence, SDC has a solid base to build upon.

What Can It Compile?

See the tests directory for a sample of what is/should-be working. You can also build SDC's runtime library, that is compiled using SDC.

Compiling SDC on Linux

You'll need make and the latest DMD installed and LLVM 15.

Run make.

Then you can run the test suite using make check. There should be no regressions.

SDC requires a recent version of LLVM. If the default llvm-config on your system is too old, you can specify a newer version via LLVM_CONFIG. For instance, on a debian system, you want to use LLVM_CONFIG=llvm-config-11 make .

Compiling SDC on Mac OS X

You'll need make and the latest DMD installed. You'll also need a recent version of LLVM if you don't already have it. One way to install llvm that's been tested is to use Homebrew, a package manager for OS X. After installing it by following instructions from the web page, run the command brew install llvm11, followed by LLVM_CONFIG=llvm-config-11 make . If you are using MacPorts instead, you can run sudo port install llvm-11, followed by LLVM_CONFIG=llvm-config-mp-11 make . You'll also need a recent version of nasm; if nasm does not recognise the macho64 output format, try upgrading nasm to a newer version.

Building SDC as a Nix package

On Linux, you can also use the Nix package manager to automatically fetch dependencies and build SDC for you. You may need to use the unstable nix channel, to have a new enough dmd to build SDC. Clone or download this repository.

To build the executable, run nix-build -E "(import <nixpkgs> {}).callPackage ./. {}" or nix-build -E "(import <nixpkgs> {}).callPackage ./. {dflags=\"-O -release\";}" from the project root directory.

sdc's People

Contributors

0xeab avatar aatch avatar bakkegaard avatar bhelyer avatar bpr avatar carlor avatar deadalnix avatar dmitryolshansky avatar dnadlinger avatar dsm9000 avatar dukc avatar dymk avatar georgethomas111 avatar groterik avatar johanengelen avatar john-colvin avatar kinke avatar maxhaton avatar mrsmith33 avatar panke avatar qno avatar redstar avatar schancel avatar schuetzm avatar schveiguy avatar sidmutha avatar uplinkcoder avatar wallbraker avatar webdrake avatar zoadian avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

sdc's Issues

core.exception.AssertError@src/sdc/sdc.d(79): filenotfoundmalheur ! /object.d

on mac, after running make I get:
core.exception.AssertError@src/sdc/sdc.d(79): filenotfoundmalheur ! /object.d

it happens in:
obj/rt/%.o: $(LIBSDRT_ROOT)/src/d/rt/%.d $(LIBSDRT_SRC) $(LIBSDRT_EXTRA_DEPS)
@mkdir -p obj/rt
$(SDC) -c -o $@ $&lt; $(LIBSDRT_IMPORTS)

indeed there's no object.d in libsdrt/src/

it goes away after adding -Ilibs

Implicit conversion

extern(C)
int kmain () {
  ubyte *vidmem = cast(ubyte*)0xB8000;
  return 0;
}

Surely that should compile? It complains that it can't implicitly convert to ubyte* from int. That isn't implicit ;)

type aliasing extern(C) functions not compiling

exhibit A:

private alias MainFunc = extern(C) int function(char[][] args);
                         ^~~~~~
                         test.d:3: error: expected 'Begin', got 'Extern'.  

exhibit B:

private alias extern(C) int function(char[][] args) MainFunc;
              ^~~~~~
              test.d:13: error: expected 'Identifier', got 'Extern'. 

Returning a template value

Hey,

This code compiles:

int main() {
    Foo!int.bar = 5;
    return 0;
}

template Foo(T) {
    T bar;
}

while this code doesn't:

int main() {
    Foo!int.bar = 5;
    return (Foo!(int).bar);
}

template Foo(T) {
    T bar;
}

It crashes with a long access violation.

Inferred is a top level type type.

This leads to oddities like the correct internal representation of

const foo() { return 3; }

being

const(auto) foo() { return 3; }

in addition, the first example isn't parsed correctly yet. So we should fix both at the same time.

OSX with LLVM 3.4 compatibility

Currently, SDC does not work on OSX with LLVM 3.4. SDC will complain:

LLVM ERROR: Program used external function '_d_array_bounds' which could not be resolved!

This is because clang/llvm 3.4 is dropping the symbol '_d_array_bounds' at link time, causing the JIT to not be able to find it when its needed. I came to this conclusion by forcing the symbol to be referenced in the compiler's main, by printing its address:

// ... etc ...
import std.stdio;
extern(C) void _d_array_bounds();

int main(string[] args) {
    writeln("_d_array_bounds: ", &_d_array_bounds);
// ... etc ...

Building the compiler (and then the runtime with the built sdc) will then succeed.

I'm not particularly familiar with the structure of SDC or LLVM, so I'm not sure what a good solution to this would be. I'd expect JITing the module containing these functions (d.rt.druntimestub) in the SDC runtime would be the "correct" way to solve this?

Incorrectly parses comments

Inserting

/*/**/

causes the error:
test.d(4:4): error: expected type, not '*'.

The program I tested this with is:

int main() {
    return 0;
}
/*/**/

Build fails on Arch Linux 64-bit

I don't know if I need to use dmd head or not, I'm using the default dmd 2.066. Output from make:

dmd -c -ofobj/sdc.o src/sdc/*.d src/util/*.d -m64 -w -debug -gc -unittest -Ilibd-llvm/import -Ilibd-llvm/libd/src -Ilibd-llvm/src
dmd -c -ofobj/libd.o libd-llvm/libd/src/d/lexer.d libd-llvm/libd/src/d/exception.d libd-llvm/libd/src/d/context.d libd-llvm/libd/src/d/object.d libd-llvm/libd/src/d/location.d libd-llvm/libd/src/d/base/qualifier.d libd-llvm/libd/src/d/base/type.d libd-llvm/libd/src/d/base/node.d libd-llvm/libd/src/d/base/builtintype.d libd-llvm/libd/src/util/fastcast.d libd-llvm/libd/src/util/visitor.d libd-llvm/libd/src/util/condition.d libd-llvm/libd/src/util/utf8.d libd-llvm/libd/src/d/ast/expression.d libd-llvm/libd/src/d/ast/statement.d libd-llvm/libd/src/d/ast/type.d libd-llvm/libd/src/d/ast/declaration.d libd-llvm/libd/src/d/ast/dmodule.d libd-llvm/libd/src/d/ast/identifier.d libd-llvm/libd/src/d/ast/conditional.d libd-llvm/libd/src/d/ir/expression.d libd-llvm/libd/src/d/ir/symbol.d libd-llvm/libd/src/d/ir/statement.d libd-llvm/libd/src/d/ir/dscope.d libd-llvm/libd/src/d/ir/type.d libd-llvm/libd/src/d/parser/expression.d libd-llvm/libd/src/d/parser/base.d libd-llvm/libd/src/d/parser/statement.d libd-llvm/libd/src/d/parser/ambiguous.d libd-llvm/libd/src/d/parser/dtemplate.d libd-llvm/libd/src/d/parser/type.d libd-llvm/libd/src/d/parser/declaration.d libd-llvm/libd/src/d/parser/dmodule.d libd-llvm/libd/src/d/parser/adt.d libd-llvm/libd/src/d/parser/identifier.d libd-llvm/libd/src/d/parser/util.d libd-llvm/libd/src/d/parser/conditional.d libd-llvm/libd/src/d/semantic/expression.d libd-llvm/libd/src/d/semantic/symbol.d libd-llvm/libd/src/d/semantic/statement.d libd-llvm/libd/src/d/semantic/defaultinitializer.d libd-llvm/libd/src/d/semantic/evaluator.d libd-llvm/libd/src/d/semantic/dtemplate.d libd-llvm/libd/src/d/semantic/caster.d libd-llvm/libd/src/d/semantic/typepromotion.d libd-llvm/libd/src/d/semantic/sizeof.d libd-llvm/libd/src/d/semantic/scheduler.d libd-llvm/libd/src/d/semantic/type.d libd-llvm/libd/src/d/semantic/declaration.d libd-llvm/libd/src/d/semantic/dmodule.d libd-llvm/libd/src/d/semantic/mangler.d libd-llvm/libd/src/d/semantic/closure.d libd-llvm/libd/src/d/semantic/identifier.d libd-llvm/libd/src/d/semantic/semantic.d libd-llvm/libd/src/d/semantic/aliasthis.d libd-llvm/libd/src/d/semantic/vrp.d -m64 -w -debug -gc -unittest -Ilibd-llvm/libd/src
ar rcs lib/libd.a obj/libd.o
dmd -c -ofobj/libd-llvm.o libd-llvm/src/d/llvm/*.d libd-llvm/import/llvm/c/target.d -m64 -w -debug -gc -unittest -Ilibd-llvm/import -Ilibd-llvm/libd/src
ar rcs lib/libd-llvm.a obj/libd-llvm.o
gcc -o bin/sdc obj/sdc.o -m64  -lphobos2 -Llib -ld-llvm -ld `llvm-config --ldflags` `llvm-config --libs` -lstdc++ -export-dynamic -ldl -lffi -lpthread -lm -lncurses
bin/sdc -c -o obj/rt/eh.o libsdrt/src/d/rt/eh.d  -Ilibsdrt/src
util.json.JSONParseException@src/util/json.d(187): Expected " at line 1 column 3!
----------------
bin/sdc(util.json.JSON[immutable(char)[]] util.json.JSONReader!(immutable(char)[]).JSONReader.parseObject()+0x8a) [0xc59c3a]
bin/sdc(util.json.JSON util.json.JSONReader!(immutable(char)[]).JSONReader.parseValue()+0x220) [0xc59f80]
bin/sdc(util.json.JSON util.json.JSONReader!(immutable(char)[]).JSONReader.parseJSON()+0x62) [0xc5a0d2]
bin/sdc(util.json.JSON util.json.parseJSON!(immutable(char)[]).parseJSON(immutable(char)[])+0x58) [0xc59130]
bin/sdc(util.json.JSON sdc.conf.getConf(immutable(char)[])+0x85) [0xc3849d]
bin/sdc(util.json.JSON sdc.conf.buildConf()+0x1ca) [0xc383a2]
bin/sdc(_Dmain+0x28) [0xc38ca8]
/usr/lib/libphobos2.so.0.66(_D2rt6dmain211_d_run_mainUiPPaPUAAaZiZ6runAllMFZ9__lambda1MFZv+0x28) [0x7fdcbf4145e0]
/usr/lib/libphobos2.so.0.66(void rt.dmain2._d_run_main(int, char**, extern (C) int function(char[][])*).tryExec(scope void delegate())+0x2d) [0x7fdcbf414525]
/usr/lib/libphobos2.so.0.66(void rt.dmain2._d_run_main(int, char**, extern (C) int function(char[][])*).runAll()+0x2d) [0x7fdcbf414585]
/usr/lib/libphobos2.so.0.66(void rt.dmain2._d_run_main(int, char**, extern (C) int function(char[][])*).tryExec(scope void delegate())+0x2d) [0x7fdcbf414525]
/usr/lib/libphobos2.so.0.66(_d_run_main+0x192) [0x7fdcbf41449a]
bin/sdc(main+0x25) [0xc3ed8d]
/usr/lib/libc.so.6(__libc_start_main+0xf0) [0x7fdcbdc51040]
libsdrt/makefile.common:16: recipe for target 'obj/rt/eh.o' failed
make: *** [obj/rt/eh.o] Error 1

test0065.d compiles, but should not.

DMD:

test0065.d(21): Error: cannot implicitly convert expression (cast(immutable(char)*)str) of type immutable(char)* to char*
test0065.d(21): Error: cannot implicitly convert expression (cast(immutable(char)*)str + cast(long)str.length * 1L) of type immutable(char)* to char*

DMD's error seems valid.

    foreach(char* it; str.ptr .. str.ptr + str.length) {

Inconsistencies in AST.

Among other things, sometimes identifiers are called 'identifiers' and sometimes 'name'. They should be named by purpose, so 'name' is the new way of doing things.

make fails: Error: template d.ir.type.Type.accept cannot deduce function from...

make fails at this step:
dmd -c -ofobj/libd-llvm.o libd-llvm/src/d/llvm/*.d libd-llvm/import/llvm/c/target.d -m64 -w -debug -gc -unittest -Ilibd-llvm/import -Ilibd-llvm/libd/src

libd-llvm/src/d/llvm/type.d(42): Error: template d.ir.type.Type.accept cannot deduce function from argument types !()(TypeGen), candidates are:
libd-llvm/libd/src/d/ir/type.d(85): d.ir.type.Type.accept(T)(ref T t)

make used to work before (that was a while back not sure when)

Add support for main(string[] args)

void main() { } is fine, but void main(string[] args) results in:

core.exception.RangeError@libd-llvm/src/d/llvm/expression.d(723): Range violation

ld: library not found for -lphobos2

on mac running make I get: ld: library not found for -lphobos2
problem goes away after I edit LDFLAGS to add -L/path/to/std
would be good to guess this from dmd.conf (itself deduced from dmd binary)

Invalid expressions not rejected

This invalid code is not rejected by the compiler, please notice the missing operator between func2 and func3.

return func1() + funct2() func3();

Please see test60.

test0061.d compiles, but should not?

DMD fails on it with:

test0061.d(13): Error: cannot modify const expression cmsg2
test0061.d(16): Error: cannot modify const expression cmsg2
test0061.d(19): Error: cannot modify const expression cmsg2
test0061.d(22): Error: cannot modify const expression cmsg2

SDC happily compiles it. I believe the test should not compile as-is. And also, it should be changed to have const(char)* cmsg2 = cmsg + 7; vs const char* cmsg2 = cmsg + 7;

//T has-passed:yes
//T compiles:yes

int main() {
    string msg = "hello, world!";
    immutable char* cmsg = msg.ptr;
    assert(*cmsg == 'h');

    const char* cmsg2 = cmsg + 7;
    assert(*cmsg2 == 'w');
    assert(cmsg2 != cmsg);

    cmsg2++;
    assert(*cmsg2 == 'o');

    cmsg2 += 2;
    assert(*cmsg2 == 'l');

    cmsg2 -= 3;
    assert(*cmsg2 == 'w');

    cmsg2--;
    assert(*cmsg2 == ' ');

    assert(cmsg2 > cmsg);

    const(char)* cmsg3 = cmsg - 3;
    assert(cmsg3 < cmsg);

    cmsg3 = cmsg;
    assert(cmsg3 == cmsg);
    return 0;
}

Buffered IO for lexer

Currently the lexer reads the entire file into a string, however this could end up being unreasonable for large files and probably should be changed to using some sort of buffered IO.

Old readme!

I often look to see how this project is doing, and I can pick up fragments of it from the list of recent commits... but I'd love the readme to be updated once in a while :P

Add c imports to SDC.

We should at least be able to handle the std.c.* modules at this point. Some of our tests use malloc which is exposed due to the way we handle our runtime, but these tests fail against DMD because they do not import std.c.stdlib;

E.g. test0066.d:

    char* mem = cast(char*) malloc(str.length);

SDC breaks when invoked by concurrently

When running the test runner multi-threaded it will launch more then once instance of SDC at the same time.

This causes temporary files to be overwritten inbetween instances, especially the object.bc, object.s files. Change these files to be loaded in /tmp or something.

15 tests fail

test21.d: FAILED
test36.d: FAILED
test37.d: FAILED
test38.d: FAILED
test65.d: FAILED
test66.d: FAILED
test76.d: FAILED
test77.d: FAILED
test81.d: FAILED
test85.d: FAILED
test145.d: FAILED, REGRESSION
test148.d: FAILED, REGRESSION
test149.d: FAILED, REGRESSION
test150.d: FAILED, REGRESSION
test151.d: FAILED, REGRESSION

Spelling error in error message:

    void foo(int a) {}
    ^~~~~~~~~~~~~~~~~~
    test0120.d:14: error: foo overrides a base class methode but is not marked override

methode -> method

Will submit PR. Adding issue for reminder.

make ./runner interruptible with control C or control \

currently ./runner can't be stopped until it finishes.
would be good to either provide signal handler to kill all threads on control C or control \
(or at least show pid of running program so we can kill it with kill -9 pid; that's less fragile than running ps x|grep runner as this could have more than 1 entry)

MAC OS X compilation

When compiling on MAC OS X, these are the errors when trying to run "make run". I only made one change and that was in makefile.common which was:

LLVMDIR ?= "`llvm-config --libdir`"
SDC 0.0
Reading config file from ''.
Effective command line: '["./bin/sdc", "-Ilibs", "compiler_tests/test0.d", "-V"]'.
Parsing module 'test0'.
 Parsing function 'main'.
Done parsing module 'test0'.
Creating LLVM module '4564462416' for module 'test0'.
Generating module 'test0'.
 Adding function 'main' (4565536000) to LLVM module '4564462416'.
 Generating import 'object'.
 Parsing module 'object'.
  Parsing attribute 'ExternC'.
   Parsing function 'malloc'.
   Parsing function 'realloc'.
   Parsing function 'exit'.
   Parsing function 'printf'.
  Done parsing attribute 'ExternC'.
  Parsing attribute 'ExternC'.
   Parsing function '__d_assert'.
  Done parsing attribute 'ExternC'.
 Done parsing module 'object'.
 Creating LLVM module '4564463296' for module 'object'.
 Generating module 'object'.
  Adding alias 'string' for char[].
  Adding function 'exit' (4565604608) to LLVM module '4564463296'.
  Adding function 'printf' (4565604096) to LLVM module '4564463296'.
  Adding function '__d_assert' (4565603328) to LLVM module '4564463296'.
  Adding alias 'size_t' for uint.
  Adding alias 'ptrdiff_t' for int.
  Adding function 'malloc' (4565602304) to LLVM module '4564463296'.
  Adding function 'realloc' (4565642752) to LLVM module '4564463296'.
 Done generating 'object'.
Done generating 'test0'.
Building function 'main'.
Done building function 'main'.
Module '110102B50' passes verification.
llc  -march=x86 -o "/tmp/qP1mmwf88m6lc2VOjmu71i3q8k4uN5X7.s" "/tmp/cEULrBlW8MB6Z2vCKN1N9ccQSVZ58Dk4.bc"
gcc -m32  -c -o /tmp/g89Vczi7q1MFWZ61i557x16W1OxXY4Ox.o /tmp/qP1mmwf88m6lc2VOjmu71i3q8k4uN5X7.s
/tmp/qP1mmwf88m6lc2VOjmu71i3q8k4uN5X7.s:6:Unknown pseudo-op: .cfi_startproc
/tmp/qP1mmwf88m6lc2VOjmu71i3q8k4uN5X7.s:10:Unknown pseudo-op: .cfi_def_cfa_offset
/tmp/qP1mmwf88m6lc2VOjmu71i3q8k4uN5X7.s:10:Rest of line ignored. 1st junk character valued 56 (8).
/tmp/qP1mmwf88m6lc2VOjmu71i3q8k4uN5X7.s:16:Unknown pseudo-op: .cfi_endproc
gcc -m32  -o a.out "/tmp/g89Vczi7q1MFWZ61i557x16W1OxXY4Ox.o" 
i686-apple-darwin11-llvm-gcc-4.2: /tmp/g89Vczi7q1MFWZ61i557x16W1OxXY4Ox.o: No such file or directory
i686-apple-darwin11-llvm-gcc-4.2: no input files

support -m32 and -m64 codegen

Hello,
I just compiled sdc on my 32bit machine and it runs just fine.
but it always build 64bit code
I already changed the hardcoded triple to i386-pc-linux-gnu but nothing changed

scope statements allow return, but should not

DMD errors as follows:

> rdmd test0141.d
test0141.d(10): Error: return statements cannot be in scope(exit) bodies
test0141.d(8): Error: function test0141.foo no return exp; or assert(0); at end of function

Not building on Mac

Typing make on OSX results in a linker error for dmd 2.059:

$ make
dmd -ofbin/sdc src/sdc/*.d src/sdc/ast/*.d src/sdc/parser/*.d src/sdc/gen/*.d src/sdc/java/*.d src/sdc/interpreter/*.d -m64 -w -debug -gc -unittest -Iimport -version=SDCCOMPILER -L-L`llvm-config --libdir` `llvm-config --libs | sed 's/-L/-L-L/g' | sed 's/-l/-L-l/g'` -L-lstdc++ 
Undefined symbols for architecture x86_64:
  "_D3std3utf6toUTF8FNaNbNfJG4awZAa", referenced from:
      _D3std5stdio4File17LockingTextWriter10__T3putTwZ3putMFwZv in sdc.o
      _D3std4json18__T9parseJSONTAyaZ9parseJSONFAyaiZS3std4json9JSONValue11parseStringMFZAya in sdc.o
  "_D6object6Object6toHashMFNbNeZm", referenced from:
      _D3sdc7aglobal15TranslationUnit6__vtblZ in sdc.o
      _D3sdc13compilererror13CompilerError6__vtblZ in sdc.o
      _D3sdc13compilererror13CompilerPanic6__vtblZ in sdc.o
      _D3sdc13compilererror17CompilerErrorNote6__vtblZ in sdc.o
      _D3sdc13compilererror21MissingSemicolonError6__vtblZ in sdc.o
      _D3sdc13compilererror17MissingColonError6__vtblZ in sdc.o
      _D3sdc13compilererror17PairMismatchError6__vtblZ in sdc.o
      ...
  "_D3std3utf10strideImplFNaNeamZk", referenced from:
      _D3std3utf15__T6strideTAyaZ6strideFNaNfxAyamZk in sdc.o
      _D3std3utf14__T6strideTAaZ6strideFNaNfxAamZk in sdc.o
      _D3std3utf15__T6strideTAxaZ6strideFNaNfxAamZk in sdc.o
  "_D3std8internal3uni12CodepointSet6toHashMxFNaNbNfZm", referenced from:
      _D41TypeInfo_S3std8internal3uni12CodepointSet6__initZ in sdc.o
  "_D3std8internal3uni12CodepointSet5emptyMxFNaNbNdNfZb", referenced from:
      _D3std5regex15__T6ParserTAyaZ6Parser12parseCharsetMFNfZv in sdc.o
      _D3std5regex15__T6ParserTAyaZ6Parser24parseUnicodePropertySpecMFNfbZxS3std8internal3uni12CodepointSet in sdc.o
      _D3std5regex18__T6ParserTAyaVb1Z6Parser12parseCharsetMFNfZv in sdc.o
      _D3std5regex18__T6ParserTAyaVb1Z6Parser24parseUnicodePropertySpecMFNfbZxS3std8internal3uni12CodepointSet in sdc.o
  "_D3std6format15FormatException6__ctorMFAyaAyamC6object9ThrowableZC3std6format15FormatException", referenced from:
      _D3std9exception44__T9enforceExTC3std6format15FormatExceptionZ16__T9enforceExTbZ9enforceExFNaNfbLAyaAyamZb in sdc.o
      _D3std9exception44__T9enforceExTC3std6format15FormatExceptionZ16__T9enforceExTmZ9enforceExFNaNfmLAyaAyamZm in sdc.o
      _D3std6format14__T9getNthIntZ9getNthIntFkZi in sdc.o
      _D3std6format24__T9getNthIntTAyaTkTAyaZ9getNthIntFkAyakAyaZi in sdc.o
      _D3std6format18__T9getNthIntTAyaZ9getNthIntFkAyaZi in sdc.o
      _D3std6format20__T9getNthIntTAxhTaZ9getNthIntFkAxhaZi in sdc.o
      _D3std6format26__T9getNthIntTAyaTAyaTAyaZ9getNthIntFkAyaAyaAyaZi in sdc.o
      ...
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
--- errorlevel 1
make: *** [bin/sdc] Error 1

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.