Differences between revisions 6 and 7
Revision 6 as of 2019-02-09 03:18:21
Size: 3842
Editor: SamatJain
Comment: Add ToC
Revision 7 as of 2019-02-09 03:37:12
Size: 5545
Editor: SamatJain
Comment: ccls build instructions
Deletions are marked like this. Additions are marked like this.
Line 64: Line 64:

== Language servers ==

=== ccls ==

[[https://github.com/MaskRay/ccls|ccls]] is a language server for C/C++. The instructions below can also be used for compiling [[https://github.com/cquery-project/cquery|cquery]].

For Ubuntu 18.10, first install dependency packages (adjust clang package versions if needed):

{{{#!highlight sh numbers=off
sudo apt install -y clang libclang-dev libncurses-dev libtinfo5 llvm-dev zlib1g-dev
}}}

Download clang from [[https://releases.llvm.org|releases.llvm.org]:

{{{#!highlight sh numbers=off
wget --continue https://releases.llvm.org/7.0.1/clang+llvm-7.0.1-x86_64-linux-gnu-ubuntu-18.04.tar.xz
# Extract into clang-llvm
mkdir clang-llvm
tar xvf clang*tar.xz -C clang-llvm --strip-components=1
}}}

And configure with:

{{{#!highlight sh numbers=off
export CFLAGS=-O3 -march=native
export CXXFLAGS=$CFLAGS
cmake -H. -Bbuild -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=$PWD/clang-llvm/
}}}

To build using the LLVM native on Ubuntu, use:

{{{#!highlight sh numbers=off
export CFLAGS=-O3 -march=native
export CXXFLAGS=$CFLAGS
cmake -H. -Bbuild-native \
    -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_PREFIX_PATH=/usr/lib/llvm-7 \
    -DLLVM_INCLUDE_DIR=/usr/lib/llvm-7/include \
    -DLLVM_BUILD_INCLUDE_DIR=/usr/include/llvm-7/ \
    -DLLVM_ENABLE_RTTI=on
}}}

Build with either:

{{{#!highlight sh numbers=off
make -C build -j$(nproc)
cmake --build Release --parallel $(nproc)
}}}

adjust as appropriate for the version of LLVM you are using.

If you're using the downloaded version of LLVM, you need to distribute that tarball with your ccls binary, and configure it's location as it's "resource directory".

See also CodingStyle/C++.

STL

Wrap an existing C-style pointer to an array with std::vector: http://stackoverflow.com/a/15203325/14878; modifies std::vector internals to work.

C++11

Move semantics/perfect forwarding

Smart pointers

Data structures

B-tree-based maps & sets

  • In 2013, Google open-sourced a mostly-STL-compatible b-tree implementation: B-tree containers from Google. The old project is on Google code, but JGRennison/cpp-btree is a fork with minor fixes and some C++11 support (e.g. move constructors, etc).

  • bingmann/stx-btree

  • tlx library contains a fast loser tree implementation, a newer version of the bingmann/stx-btree implemtnation, a smart pointer replacement for shared_ptr called counting_ptr, and std::string helper functions missing from STL.

C++ and Python

Interesting libraries

Other stuff

Videos

Curiously recurring C++ bugs at Facebook

Curiously recurring C++ bugs at Facebook

  • Use -fsanitize-address and -fsanitize-address-use-after-scope

  • Use -Wshadow, and deal with noisy warnings

Patterns and Techniques Used in the Houdini 3D Graphics Application (Mark Elendt)

CppCon 2018: Mark Elendt “Patterns and Techniques Used in the Houdini 3D Graphics Application”

  • Vector that uses realloc() instead of new/malloc(). Significantly faster than std::vector, but has problems with objects that are not std::trivially_relocatable.

  • Copy-on-write used in several places; paged arrays to used copy-on-write in arrays
  • Reference-counted strings to avoid copying strings. Bunch of constexpr stuff used to make static initialization (i.e. program startup) faster.

Language servers

=== ccls ==

ccls is a language server for C/C++. The instructions below can also be used for compiling cquery.

For Ubuntu 18.10, first install dependency packages (adjust clang package versions if needed):

sudo apt install -y clang libclang-dev libncurses-dev libtinfo5 llvm-dev zlib1g-dev

Download clang from [[https://releases.llvm.org|releases.llvm.org]:

wget --continue https://releases.llvm.org/7.0.1/clang+llvm-7.0.1-x86_64-linux-gnu-ubuntu-18.04.tar.xz
# Extract into clang-llvm
mkdir clang-llvm
tar xvf clang*tar.xz -C clang-llvm --strip-components=1

And configure with:

export CFLAGS=-O3 -march=native
export CXXFLAGS=$CFLAGS
cmake -H. -Bbuild -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=$PWD/clang-llvm/

To build using the LLVM native on Ubuntu, use:

export CFLAGS=-O3 -march=native
export CXXFLAGS=$CFLAGS
cmake -H. -Bbuild-native \
    -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_PREFIX_PATH=/usr/lib/llvm-7 \
    -DLLVM_INCLUDE_DIR=/usr/lib/llvm-7/include \
    -DLLVM_BUILD_INCLUDE_DIR=/usr/include/llvm-7/ \
    -DLLVM_ENABLE_RTTI=on

Build with either:

make -C build -j$(nproc)
cmake --build Release --parallel $(nproc)

adjust as appropriate for the version of LLVM you are using.

If you're using the downloaded version of LLVM, you need to distribute that tarball with your ccls binary, and configure it's location as it's "resource directory".

SamatsWiki: ProgrammingLanguages/C++ (last edited 2022-03-17 01:17:02 by SamatJain)