Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ralxyz/extern-c
Mix C with other programming languages
https://github.com/ralxyz/extern-c
Last synced: 21 days ago
JSON representation
Mix C with other programming languages
- Host: GitHub
- URL: https://github.com/ralxyz/extern-c
- Owner: RalXYZ
- Created: 2021-08-14T16:05:07.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2021-08-15T09:58:37.000Z (over 3 years ago)
- Last Synced: 2024-12-15T17:12:01.552Z (25 days ago)
- Language: C
- Homepage:
- Size: 12.7 KB
- Stars: 12
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# `extern "C"`
This project demonstrates how to mix C with other programming languages.
It aims to create a [Rosetta Stone](https://en.wikipedia.org/wiki/Rosetta_Stone) of the procedure shown in the following pseudocode:```go
// use programming language xfunc main() {
caller_language := "x-language";
caller_stack := generate_random_number();
println("[%04d] start of x-language main procedure", caller_stack);y_language_procedure(caller_language, caller_stack);
println("[{%04d}] end of x-language main procedure", caller_stack);
}
``````fortran
! use programming language yFUNCTION y_language_procedure(caller_language, caller_stack)
callee_stack = generate_random_number()
PRINT "[%04d] start of a y-language procedure, called by [%04d], %s", callee_stack, caller_language, caller_stackPRINT "[%04d] start of a y-language procedure", callee_stack
END FUNCTION y_language_procedure
```As shown above, the main function written in x language calls a function written in y language. The output of the whole procedure looks like this:
```
[4199] start of x-language main procedure
[8549] start of a y-language procedure, called by x-language [4199]
[8549] end of a y-language procedure
[4199] end of x-language main procedure
```The cross-language API, as mentioned above, needs to receive a integer and a string, in order to show their basic ability of mix programming.
**All the callee procedures will be archived into static libraries using their own toolchain.** For example, to build a C static library, instead of using `cargo`, we use `gcc`.
Currently implemented:
| Caller | Callee |
| :----: | :----: |
| C | golang |
| C | rust |
| golang | C |
| rust | C |Will implement:
- C++## Usage
Fisrtly, change directory to one of the `x-call-y`. If you want to build all `x-call-y`s, just stay in the root directory.To build the project:
```shell
make
```To clean the build targets:
```shell
make clean
```