Cling Versions Save

The cling C++ interpreter

v1.0

2 months ago

Introduction

This document contains the release notes for the interactive C++ interpreter Cling, release 1.0. Cling is built on top of Clang and LLVM compiler infrastructure. Here we describe the status of Cling in some detail, including major improvements from the previous release and new feature work.

Note that if you are reading this file from a git checkout or the main Cling web page, this document applies to the next release, not the current one.

What's New in Cling 1.0?

Some of the major new features and improvements to Cling are listed here. Generic improvements to Cling as a whole or to its underlying infrastructure are described first.

External Dependencies

  • Upgrade to LLVM 13 and reduce the accumulated technical debt in our local fork
  • Require C++14

Major New Features

  • Improve C++ modules support for C++20 and Windows
  • Improve performance by allowing most of cling::Value to inline
  • Support profiling/debugging interpreted/JITted via CLING_DEBUG and CLING_PROFILE
  • Partially support Apple M1
  • Improve transaction unloader for templates
  • Always emit weak symbols on Windows
  • Support RPATH in dyld

Misc

  • Improve user experience on terminal:
    • Move between words with Ctrl+{Left,Right}
    • Clear the terminal screen on Ctrl+L
    • Bind Ctrl+Del to kill next word
    • Do not assign ESC a special meaning on history search mode
    • Implement .help edit to show line editor keybindings
    • .x does not crash if no argument is given
  • Support setting cmd history file by ${CLING_HISTFILE} and its size with ${CLING_HISTSIZE}
  • Improve .help and .class commands
  • Improve CUDA support on Visual Studio
  • Improve symbol location diagnostics using the dyld infrastructure
  • Better support of ppc

Fixed Bugs

ROOT-10962 ROOT-10484 ROOT-9687 ROOT-9202 ROOT-7775 ROOT-7016 ROOT-6095 ROOT-5971 ROOT-5219

GH-454 GH-444 GH-440 GH-436

GH-13815 GH-12779 GH-12457 GH-12455 GH-13429 GH-12409 GH-12294 GH-12151 GH-11937 GH-11933 GH-11329 GH-11927 GH-10209 GH-10182 GH-10180 GH-10137 GH-10136 GH-10135 GH-10133 GH-10057 GH-9850 GH-9697 GH-9664 GH-9449 GH-8499 GH-8389 GH-8304 GH-8292 GH-8157 GH-8141 GH-7541 GH-7483 GH-7366

Special Kudos

This release wouldn't have happened without the efforts of our contributors, listed in the form of Firstname Lastname (#contributions):

FirstName LastName (#commits)

Vassil Vassilev (131) Jonas Hahnfeld (71) Axel Naumann (66) Javier Lopez-Gomez (48) saisoma123 (29) ferdymercury (12) Jiang Yi (11) Bertrand Bellenot (10) Sergey Linev (9) Stephan Lachnit (4) Guilherme Amadio (4) Surya Somayyajula (3) Simeon Ehrig (3) Stefan Gränitz (2) Maksymilian Graczyk (2) Garima Singh (2) Duncan Ogilvie (2) Baidyanath Kundu (2) Sara Bellei (1) Oksana Shadura (1) Mikolaj Krzewicki (1) Mattias Ellert (1) Karel Balej (1) Jonas Rembser (1) Enrico Guiraud (1) Danilo Piparo (1)

v0.9

2 years ago

Introduction

This document contains the release notes for the interactive C++ interpreter Cling, release 0.9. Cling is built on top of Clang and LLVM compiler infrastructure. Here we describe the status of Cling in some detail, including major improvements from the previous release and new feature work.

Note that if you are reading this file from a git checkout or the main Cling web page, this document applies to the next release, not the current one.

What's New in Cling 0.9?

Some of the major new features and improvements to Cling are listed here. Generic improvements to Cling as a whole or to its underlying infrastructure are described first.

External Dependencies

  • Upgrade to LLVM 9. LLVM 9 brings to cling better stability, full C++17 support and CUDA 10 support.

Misc

  • Improve CUDA device compiler such as enabling sm level configuration and and add --cuda-path option.
  • Improve the DefinitionShadower with respect to C++ Modules
  • Embed Vc modulemap file
  • Build the available cling plugins by default.
  • Reduce dependence on custom clang patches.

Fixed Bugs

ROOT-10962 ROOT-7775 ROOT-10703 ROOT-10962 ROOT-GH-7021 ROOT-GH-7090 ROOT-GH-7657 CLING-GH-399

Special Kudos

This release wouldn't have happened without the efforts of our contributors, listed in the form of Firstname Lastname (#contributions):

FirstName LastName (#commits)

Vassil Vassilev (80) Axel Naumann (29) Simeon Ehrig (9) Pratyush Das (7) Jonas Hahnfeld (7) Javier Lopez-Gomez (1) Enrico Guiraud (1) David (1) Bertrand Bellenot (1)

v0.8

3 years ago

Introduction

This document contains the release notes for the interactive C++ interpreter Cling, release 0.8. Cling is built on top of Clang and LLVM compiler infrastructure. Here we describe the status of Cling in some detail, including major improvements from the previous release and new feature work.

Note that if you are reading this file from a git checkout or the main Cling web page, this document applies to the next release, not the current one.

What's New in Cling 0.8?

Some of the major new features and improvements to Cling are listed here. Generic improvements to Cling as a whole or to its underlying infrastructure are described first.

External Dependencies

  • Upgrade to LLVM-5.

Major New Features

Misc

  • Improve in the C++ modules support
  • Fix issues in the definition shadowing
  • Improve the integration with clad

Fixed Bugs

ROOT-10886 ROOT-7199

Special Kudos

This release wouldn't have happened without the efforts of our contributors, listed in the form of Firstname Lastname (#contributions):

FirstName LastName (#commits)

Vassil Vassilev (7) Pratyush Das (4) Javier Lopez-Gomez (4) Axel Naumann (4) Philippe Canal (2) Vaibhav Garg (1) Sylvain Corlay (1) Henry Schreiner (1)

v0.7

3 years ago

Introduction

This document contains the release notes for the interactive C++ interpreter Cling, release 0.7. Cling is built on top of Clang and LLVM compiler infrastructure. Here we describe the status of Cling in some detail, including major improvements from the previous release and new feature work.

Note that if you are reading this file from a git checkout or the main Cling web page, this document applies to the next release, not the current one.

What's New in Cling 0.7?

Some of the major new features and improvements to Cling are listed here. Generic improvements to Cling as a whole or to its underlying infrastructure are described first.

Major New Features

  • Implement a mechanism allowing to redefine entities with the same name -- the DefinitionShadower is not default and can be turned on by:
    [cling] #include "cling/Interpreter/Interpreter.h"
    [cling] gCling->allowRedefinition()
    
  • Improve CUDA support:
    • Replace the PTX compiler with the internal one.
    • Add in-memory fatbin generation.
  • Initial Apple Silicon Support
  • Tighter Clang C++ Modules integration:
    • Implement global module indexing to improve module loading.
    • Automatic virtual overlay files for libc, std, tinyxml, boost and cuda.
  • Implement dynamic library symbol resolver based on the binary object formats.

Misc

  • Improvements in the cpt packaging system and travis continuous integration.
  • Windows improvements of jitted variables

Fixed Bugs

Cling-197 Cling-284 Cling-297

ROOT-10193 ROOT-10224 ROOT-10285 ROOT-10333 ROOT-10354 ROOT-10426 ROOT-10499 ROOT-10511 ROOT-10677 ROOT-10689 ROOT-10751 ROOT-10777 ROOT-10791 ROOT-10798 ROOT-10803 ROOT-10812 ROOT-10917

Special Kudos

This release wouldn't have happened without the efforts of our contributors, listed in the form of Firstname Lastname (#contributions):

FirstName LastName (#commits)

Vassil Vassilev (57) Pratyush Das (35) Axel Naumann (28) Simeon Ehrig (13) Javier Lopez-Gomez (13) Vaibhav Garg (8) Philippe Canal (7) Bertrand Bellenot (7) Frederich Munch (3) Chris Burr (2) pankaj kumar (1) Stephan Hageboeck (1) Sergey Linev (1) Oksana Shadura (1) Martin Ritter (1) Jonas Hahnfeld (1) Enrico Guiraud (1) Alexander Penev (1)

v0.6

4 years ago

Introduction

This document contains the release notes for the interactive C++ interpreter Cling, release 0.6. Cling is built on top of Clang and LLVM compiler infrastructure. Here we describe the status of Cling in some detail, including major improvements from the previous release and new feature work.

Note that if you are reading this file from a git checkout or the main Cling web page, this document applies to the next release, not the current one.

What's New in Cling 0.6?

Some of the major new features and improvements to Cling are listed here. Generic improvements to Cling as a whole or to its underlying infrastructure are described first.

External Dependencies

  • Upgrade to LLVM r302975.

Major New Features

  • Integrate the automatic differentiation library clad as a cling plugin.
  • Implement basic plugin support -- cling can load shared libraries which can specialize its behavior. It relies on the clang plugin infrastructure.
  • Emulate thread local storage (TLS) on the platforms where the JIT does not support natively.
  • Clang and LLVM optimizations of interpreted code, defaults again to -O0

Misc

  • Optimize cling pointer validity checks.
  • Speed up the LookupHelper facilities by introducing a parsing cache.
  • Implement Control+C and Control+D support.
  • Support printing lambda-dependent types.
  • Various minor improvements for C++ modules support:
    • Adjust module cache path;
    • Build the cling runtime into a separate module;
    • Support virtual filesystem overlay files;
  • Use COFF object file format on Windows -- fixes symbol lookups.

Experimental Features

  • Start working on CUDA support

Jupyter

  • Provide better diagnostics if cling was not found;
  • Find back the kernel if brew install was used;

Fixed Bugs

ROOT-6967 ROOT-7749 ROOT-8863 ROOT-8897 ROOT-8991 ROOT-9114 ROOT-9377 ROOT-9672 ROOT-9738 ROOT-9789 ROOT-9924 ROOT-10097 ROOT-10221

Special Kudos

This release wouldn't have happened without the efforts of our contributors, listed in the form of Firstname Lastname (#contributions):

FirstName LastName (#commits)

Vassil Vassilev (94) Axel Naumann (87) Simeon Ehrig (25) Bertrand Bellenot (23) Yuka Takahashi (17) Danilo Piparo (13) Raphael Isemann (5) Guilherme Amadio (5) Philippe Canal (4) Oksana Shadura (4) Vaibhav Garg (2) Sylvain Corlay (2) Saagar Jha (2) Nikita Ermakov (2) Dheepak Krishnamurthy (2) xloem (1) vagrant (1) straydragon (1) simeon (1) lizhangwen (1) Wolf Behrenhoff (1) Nathan Daly (1) Jason Detwiler (1) Houkime (1) Damien L-G (1) Aleksander Gajewski (1)

v0.5

6 years ago

Introduction

This document contains the release notes for the interactive C++ interpreter Cling, release 0.5. Cling is built on top of Clang and LLVM compiler infrastructure. Here we describe the status of Cling in some detail, including major improvements from the previous release and new feature work.

Note that if you are reading this file from a git checkout or the main Cling web page, this document applies to the next release, not the current one.

What's New in Cling 0.5?

Some of the major new features and improvements to Cling are listed here. Generic improvements to Cling as a whole or to its underlying infrastructure are described first.

External Dependencies

  • Upgrade to LLVM r302975.

Misc

  • Improve the diagnostics for lambdas copy captures on global scope.
  • Various optimizations in cling runtime such as outlining of Evaluate functions.

Experimental Features

  • Advance the C++ modules support in cling

Fixed Bugs

Special Kudos

This release wouldn't have happened without the efforts of our contributors, listed in the form of Firstname Lastname (#contributions):

FirstName LastName (#commits)

Axel Naumann (68) Frederich Munch (62) Vassil Vassilev (28) Raphael Isemann (21) Bertrand Bellenot (10) Roman Zulak (9) Philippe Canal (4) Danilo Piparo (3) gouarin (1) Yuki Yamaura (1)

v0.4

6 years ago

Introduction

This document contains the release notes for the interactive C++ interpreter Cling, release 0.4. Cling is built on top of Clang and LLVM compiler infrastructure. Here we describe the status of Cling in some detail, including major improvements from the previous release and new feature work.

Note that if you are reading this file from a git checkout or the main Cling web page, this document applies to the next release, not the current one.

What's New in Cling 0.4?

Some of the major new features and improvements to Cling are listed here. Generic improvements to Cling as a whole or to its underlying infrastructure are described first.

Major New Features

  • Clang and LLVM optimizations of interpreted code, defaults to -O2 (tweak with .O <N>)
  • Support unicode
  • Enable C++ modules builds for cling when built with clang
  • Functions can be declared at cling's prompt without .rawInput

Cling as a Library

  • Add a simple demo introducing cling as an interpreter library

Misc

  • Enable colors at the prompt
  • Increase support in printing out objects such as printing of structs and collections
  • Improve performance in code transformations for interactive use
  • Improve matching of runtime and build time environments
  • Improve stability of the cpt.py build tool

Experimental Features

  • Progress with support on Windows
  • Progress with PowerPC 64
  • Preprocessed Output: cling now has the ability to generate preprocessed output cling -E -dM will show all preprocessor definitions at startup

Jupyter

  • Support of current Jupyter versions fixing ZMQ communication issues
  • Support for c++11, c++14 and c++1z kernels

Fixed Bugs

ROOT-7016 ROOT-8739 ROOT-8696 ROOT-8523 ROOT-8399 ROOT-7354 ROOT-8529 ROOT-8467 ROOT-6539 ROOT-8443 ROOT-7037 ROOT-8443 ROOT-8379 ROOT-8375 ROOT-8392 ROOT-7610 ROOT-5248 ROOT-7857 ROOT-8300 ROOT-8325

Special Kudos

This release wouldn't have happened without the efforts of our contributors, listed in the form of Firstname Lastname (#contributions):

FirstName LastName (#commits)

Frederich Munch (235) Axel Naumann (191) Roman Zulak (66) Vassil Vassilev (63) Bertrand Bellenot (45) Philippe Canal (29) erlanger (7) Danilo Piparo (4) Raphael Isemann (3) Pere Mato (3) David Abdurachmanov (2) Sylvain Corlay (1) Spencer Lyon (1) Sebastian Uhl (1) Santiago Castro (1) PrometheusPi (1) Pedro Henriques dos Santos Teixeira (1) Maarten Scholl (1) Diego Torres Quintanilla (1) CristinaCristescu (1) Brian Bockelman (1) Boris Perovic (1) Ajith Pandel (1)

v0.3

7 years ago

Introduction

This document contains the release notes for the interactive C++ interpreter Cling, release 0.3. Cling is built on top of Clang and LLVM compiler infrastructure. Here we describe the status of Cling in some detail, including major improvements from the previous release and new feature work.

Note that if you are reading this file from a git checkout or the main Cling web page, this document applies to the next release, not the current one.

What's New in Cling 0.3?

Some of the major new features and improvements to Cling are listed here. Generic improvements to Cling as a whole or to its underlying infrastructure are described first.

Major New Features

  • Support for GCC5 ABI, enabling e.g. native support for newer Fedora and Ubuntu.
  • Code completion from the prompt.
  • Rudimentary Windows support, requiring CMake nightly builds later than 01.08.2016 and MSVC 2015.
  • Enable C++ module builds.

Cling as a Library

  • Support for building cling as a shared library.
  • Improved CMake dependencies.

External Dependencies

  • Upgrade to LLVM r274612.

Misc

  • Extend Cling's static web site.

Experimental Features

  • Code unloading:
  • Dynamic Scopes:

Fixed Bugs

ROOT-8281 ROOT-8270 ROOT-8267 ROOT-8253 ROOT-8233 ROOT-8225 ROOT-8077 ROOT-7947 ROOT-7943 ROOT-7858 ROOT-7834 ROOT-7741 ROOT-4455

Special Kudos

This release wouldn't have happened without the efforts of our contributors, listed in the form of Firstname Lastname (#contributions):

Vassil Vassilev (77), Axel Naumann (69), CristinaCristescu (16), Anirudha Bose (15), Frederich Munch (11), Bertrand Bellenot (8), Pere Mato (2), Philippe Canal (1).

v0.2

7 years ago

Introduction

This document contains the release notes for the interactive C++ interpreter Cling, release 0.2. Cling is built on top of Clang and LLVM compiler infrastructure Here we describe the status of Cling in some detail, including major improvements from the previous release and new feature work.

Note that if you are reading this file from a git checkout or the main Cling web page, this document applies to the next release, not the current one.

What's New in Cling 0.2?

Some of the major new features and improvements to Cling are listed here. Generic improvements to Cling as a whole or to its underlying infrastructure are described first.

Major New Features

  • Switch Cling's execution engine to use LLVM's Orc JIT. The new JIT allows Cling to support:

    • ARM and PowerPC architectures.

    • Exceptions. Cling can throw and catch exceptions from interpreted and compiled code.

      [cling]$ throw new std::exception();
      Exception occurred. Recovering...
      
    • Inline assembly. Cling can execute asm statements.

      [cling]$ extern "C" int printf(const char*, ...);
      [cling]$ int arg1=1, arg2=2, add;
      [cling]$ asm ("addl %%ebx, %%eax;" : "=a" (add) : "a" (arg1) , "b" (arg2));
      [cling]$ printf( "%d + %d = %d\n", arg1, arg2, add );
      1 + 2 = 3
      
  • Reduce memory usage caused by excessive memory allocations in Cling lookup routines.

  • Stabilize error recovery caused by handling of templated declarations.

  • Implement a user-extendable value streaming engine.

  • Implement shebang support.

  • Protect against invalid pointer dereferences.

     [cling]$ struct S{ int a; };
     [cling]$ ((S*)0x123)->a;
     input_line_4:2:2: warning: invalid memory pointer passed to a callee:
     ((S*)0x123)->a;
     ^~~~~~~~~~~
     [cling]$ ((S*)0)->a;
     input_line_5:2:2: warning: null passed to a callee that requires a non-null argument [-Wnonnull]
     ((S*)0)->a;
     ^~~~~~~
    
  • Redirect stderr and stdout. Cling's users can redirect the output streams.

     [cling]$ // Redirects stdout to /tmp/outfile.txt
     [cling]$ .> /tmp/outfile.txt
     [cling]$ // Toggles back to the prompt
     [cling]$ .>
     [cling]$ // Redirects stderr to /tmp/errfile.txt
     [cling]$ .2> /tmp/errfile.txt
     [cling]$ // Redirects stdout and stderr to /tmp/bothfile.txt
     [cling]$ .&> /tmp/bothfile.txt
    
  • Add #pragma cling directives:

    • #pragma cling add_include_path("/include/path/")
    • #pragma cling add_library_path("/library/path/")
    • #pragma cling load("libUserLib")
  • Add .@ metacommand to cancel multiline user input.

  • Add .debug [Constant] metacommand to tune the generated debug information.

Cling as a Library

  • Implement a generator of forward declarations from a given AST declaration.
  • Improve string-to-decl lookup helper.
  • Support of parent-children (multiple) interpreters.

External Dependencies

  • Upgrade to LLVM r272382.
  • Upgrade to CMake 3.4.3 (following LLVM requirements)

Misc

Experimental Features

  • Code unloading:
    • Generate one module per transaction, which simplifies unloading of llvm::Modules and machine code.
    • Add support for unloading few STL header files.
  • Dynamic Scopes:
    • Handle of errors occurred when synthesizing AST nodes.

Fixed Bugs:

ROOT-4760 ROOT-5467 ROOT-5607 ROOT-5698 ROOT-5844 ROOT-6153 ROOT-6185 ROOT-6345 ROOT-6365 ROOT-6385 ROOT-6611 ROOT-6625 ROOT-6650 ROOT-6692 ROOT-6695 ROOT-6705 ROOT-6712 ROOT-6719 ROOT-6755 ROOT-6791 ROOT-6824 ROOT-6832 ROOT-6909 ROOT-6942 ROOT-6976 ROOT-7031 ROOT-7037 ROOT-7041 ROOT-7090 ROOT-7092 ROOT-7095 ROOT-7114 ROOT-7159 ROOT-7163 ROOT-7184 ROOT-7269 ROOT-7276 ROOT-7295 ROOT-7310 ROOT-7364 ROOT-7426 ROOT-7462 ROOT-7614 ROOT-7619 ROOT-7673 ROOT-7737 ROOT-7744 ROOT-7837 ROOT-7840 ROOT-7918 ROOT-8034 ROOT-8056 ROOT-8096 ROOT-8111