10 Matching Annotations
  1. Jan 2023
    1. While Clang has historically been faster than GCC at compiling, the output quality has lagged behind. As of 2014, performance of Clang-compiled programs lagged behind performance of the GCC-compiled program, sometimes by large factors (up to 5.5x),[28] replicating earlier reports of slower performance.[26] Both compilers have evolved to increase their performance since then, with the gap narrowing: Comparisons in November 2016 between GCC 4.8.2 versus clang 3.4, on a large harness of test files shows that GCC outperforms clang by approximately 17% on well-optimized source code. Test results are code-specific, and unoptimized C source code can reverse such differences. The two compilers thus seem broadly comparable.[30][unreliable source] Comparisons in 2019 on Intel Ice Lake has shown that programs generated by Clang 10 has achieved 96% of the performance of GCC 10 over 41 different benchmarks (while winning 22 and losing 19 out of them).[29]

      Clang is faster than GCC because it uses LLVM as its underlying compiler infrastructure. LLVM has a highly optimised code generation approach that makes it very efficient in terms of both space and time. In addition, Clang also contains several optimisation passes (such as global optimisations and link-time optimisation) that improve the generated code further.

  2. Dec 2022
    1. Clang works in tandem with LLVM.[20] The combination of Clang and LLVM provides most of the toolchain for replacing the GCC stack. One of Clang's main goals is to provide a library-based architecture,[21] so that the compiler could interoperate with other tools that interact with source code, such as integrated development environments (IDE). In contrast, GCC works in a compile-link-debug workflow

      What is the difference between LLVM and GCC in their workflow?

  3. Nov 2022
    1. Vector spaces generalize Euclidean vectors, which allow modeling of physical quantities, such as forces and velocity, that have not only a magnitude, but also a direction. The concept of vector spaces is fundamental for linear algebra, together with the concept of matrix, which allows computing in vector spaces. This provides a concise and synthetic way for manipulating and studying systems of linear equations.

      A vector space is a mathematical structure that allows us to work with things that have both a magnitude and a direction. This is useful for studying physical quantities like forces and velocity. The concept of vector spaces is important for linear algebra, which is a way of solving systems of linear equations.

    2. n mathematics and physics, a vector space (also called a linear space) is a set whose elements, often called vectors, may be added together and multiplied ("scaled") by numbers called scalars. Scalars are often real numbers, but can be complex numbers or, more generally, elements of any field. The operations of vector addition and scalar multiplication must satisfy certain requirements, called vector axioms. The terms real vector space and complex vector space are often used to specify the nature of the scalars: real coordinate space or complex coordinate space.

      A vector space is a mathematical structure that allows us to work with things that have both a magnitude and a direction. This is useful for studying physical quantities like forces and velocity. The concept of vector spaces is important for linear algebra, which is a way of solving systems of linear equations.

    1. gcc -IC main.c where -I option adds your C directory to the list of directories to be searched for header files, so you'll be able to use #include "structures.h"anywhere in your project.

      list of directories to be searched for header files

    2. Including a header file from another directory

      Including a header file from another directory

    1. For most file systems, a program initializes access to a file in a filesystem using the open system call. This allocates resources associated to the file (the file descriptor), and returns a handle that the process will use to refer to that file. In some cases the open is performed by the first access.

      in order to access the contents of a file, a program needs to request access to the file from the operating system. The open system call allows a program to request access to a file, and the operating system returns a handle that the program can use to refer to that file.

    1. Variables can only be strings. You'll typically want to use :=, but = also works. See Variables Pt 2.

      There is no difference what to use.

    2. To make this happen, it uses the filesystem timestamps as a proxy to determine if something has changed. This is a reasonable heuristic, because file timestamps typically will only change if the files are modified.
    3. Make selects the target blah, because the first target is the default target

      so for that reason it could be any name as the first target is default target.