From 05198e03216c18ca1df089b7d06717dd00731ed4 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Mon, 24 Apr 2017 17:04:52 -0400 Subject: [PATCH] readme update --- README.md | 55 ++++++++++++++----------------------------------------- 1 file changed, 14 insertions(+), 41 deletions(-) diff --git a/README.md b/README.md index 8a2394bb3a..7fb06b5a9c 100644 --- a/README.md +++ b/README.md @@ -3,19 +3,16 @@ A system programming language which prioritizes optimality, safety, and readability. -Zig is a small language, yet powerful enough to solve any computing problem. +Zig is a small, simple language, yet powerful. Zig fits into the same niche +as C, except does everything better. -Zig intends to replace C. Therefore, porting a C project to Zig should be a -pleasant experience. For every use case C can solve, the same use case must -be handled in Zig in an equally or more satisfying way. - -Zig is not afraid to roll the major version number of the language if it -improves simplicity, fixes poor design decisions, or adds a new feature which -compromises backward compatibility. +Zig ships with a build system that obviates the need for a configure script +or a makefile. In fact, existing C and C++ projects may choose to depend on +Zig instead of e.g. cmake. [ziglang.org](http://ziglang.org) -## Existing Features +## Feature Highlights * Compatible with C libraries with no wrapper necessary. Directly include C .h files and get access to the functions and symbols therein. @@ -45,24 +42,19 @@ compromises backward compatibility. * Release mode produces heavily optimized code. What other projects call "Link Time Optimization" Zig does automatically. * Mark functions as tests and automatically run them with `zig test`. - * Currently supported architectures: `x86_64` - * Currently supported operating systems: linux * Friendly toward package maintainers. Reproducible build, bootstrapping process carefully documented. Issues filed by package maintainers are considered especially important. - * Easy cross-compiling. - -## Planned Features - + * Cross-compiling is a primary use case. + * Zig Build System competes with make, cmake, autotools, SCons, etc. * In addition to creating executables, creating a C library is a primary use case. You can export an auto-generated .h file. - * Eliminate the need for configure, make, cmake, etc. - * Automatically provide test coverage. - * Ability to declare dependencies as Git URLS with commit locking (can - provide a tag or sha256). - * Include documentation generator. - * Compiler exposes itself as a library. - * Support for all popular architectures and operating systems. + * Currently supported architectures: + * `x86_64` + * Currently supported operating systems: + * `linux` + * `freestanding` + * Support for all popular operating systems and architectures is planned. ## Community @@ -135,25 +127,6 @@ the last step will fail, but you can execute `llvm-cov gcov $(find CMakeFiles/ -name "*.gcda")` and then inspect the produced .gcov files. -### Troubleshooting - -If you get one of these: - -``` -undefined reference to `_ZNK4llvm17SubtargetFeatures9getStringB5cxx11Ev' -undefined reference to `llvm::SubtargetFeatures::getString() const' -``` - -This is because of -[C++'s Dual ABI](https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html). -Most likely LLVM was compiled with one compiler while Zig was compiled with a -different one, for example GCC vs clang. - -To fix this, you have 2 options: - - * Compile Zig with the same compiler that LLVM was compiled with. - * Add `-DZIG_LLVM_OLD_CXX_ABI=yes` to the cmake configure line. - ### Related Projects * [zig-mode](https://github.com/AndreaOrru/zig-mode) - Emacs integration