Popularity
6.0
Declining
Activity
0.0
Stable
29
5
1

Programming language: Crystal
License: MIT License
Tags: Implementations/Compilers    

cppize alternatives and similar shards

Based on the "Implementations and Compilers" category.
Alternatively, view cppize alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of cppize or a related project?

Add another 'Implementations and Compilers' Shard

README

cppize

Build status

Crystal-to-C++ transpiler [WIP]

Generated code can be compiled with c++14 compiler (tested with g++ 6.2.0)

List of supported AST nodes can be found [here](NODES.md)

You can try it here

CLI Usage

  1. Compile src/cppize/transpiler.cr (it may take some time as it requires Crystal parser)
  2. Launch compiled executable with -h flag to view all command line flags

Implemented -fFEATUREs

Flag Description
-funsafe-cast Tells transpiler to transpile casts to C-style casts instead of static_casts
-fprimitive-types Tells transpiler to use fundamental C++ types when possible
-fauto-module-type Allows transpiler to detect if module is included :warning: This option can slow down transpilation
-fimplicit-static Enables static module methods' calls

Library Usage

# Initialize transpiler
transpiler = Cppize::Transpiler.new

# Set error and warning callbacks
transpiler.on_warning{|e| puts e.to_s}
transpiler.on_error{|e| puts e.to_s; exit 1}

# Transpile file
transpiled_code = transpiler.parse_and_transpile_file("./file.cpp.cr")
# Transpile code from IO
transpiled_code = transpiler.parse_and_transpile_file(File.open("./file.cpp.cr"),"./file.cpp.cr")
# Transpile code from string
transpiled_code = transpiler.parse_and_transpile_file("def foo; bar(true) end","<test>")

Things to improve in already supported AST nodes

  1. Improve automatic return
  2. Improve module type detection (namespace / includable)

Development

Implementing nodes

See [src/cppize/nodes/expressions.cr](src/cppize/nodes/expressions.cr) for example

Adding transpile-time macros

See [src/cppize/macros/__cpp__.cr](src/cppize/macros/cpp.cr) for example

Contributing

  1. Fork it ( https://github.com/unn4m3d/cppize/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

Contributors

  • unn4m3d unn4m3d - creator, maintainer