fck is the first coding language built around collaboration; allowing you to write code in any human language you want with no compromises.
Please read the installation guide.
fck depends upon clang for compiling object files. If you do not have clang installed, we highly recommend you do so; not only for fck but for a vast number of other projects. Without clang, you will not be able to compile code into executable files, and will only be able to make use of the JIT compiler (interpreter) that uses plain LLVM.
As well as fck being the first language to support multiple languages, it is also the first (so far as I can tell) language that implements flavours. Each release will have several flavours, each with its own special additions and each being suited for different types of programmers. For a more in depth explanation and the features of each flavour, see the flavours section of the fck website. The current flavours are as follows:
- Pure
Flavours to be added later:
- Counting
fck has a few interesting quirks as a consequence of a few design choices. These shouldn't impact you in general, but they are worth being aware of.
- Interpreting code does not run section by section
Interpreted coding languages, because they're interpreted, can run code as it reads it, allowing errors to be far down the code and not impact anything before it. Because fck is both an interpreted and compiled language, the ASTs are generated for the entire file all at once. In general this will not impact you, and may even be more useful since it will pick up on errors before the code is run. - Multilingual support is further reaching than you thought
Because fck is multilingual, adding a new feature has to be considered in every language currently implemented, and then documentation is needed for all the different languages. This also means that testing features takes longer that normal because all languages have to be tested. - Debug mode is only in English
Debug mode is only intended to be used by people developing the language. Because Rust is in English, there isn't much point in extending multilingual support to debug. If you really do want it to be extended, that can be done though
fck has separate packages available for syntax highlighting for several major IDEs/text editors. Please be aware that these are not maintained at the same rate as the source code, and often lag behind development. These are often left until just before the next release to be updated.
- Vim
- Atom Not started
- Sublime Not started
- VS Code Not started
- Visual Studio Not started
- Notepad++ Not started
fck has a few external dependencies, but we try to limit this. Currently, we rely upon a total of 6 crates (5 for fck proper and 1 for the type system). These are explained below:
Crate | Version | What we use it for |
---|---|---|
llvm-sys |
130.0.3 | This gives us bindings to LLVM and is the basis of the compilers |
colored |
2.0.0 | Formatting terminal text is different for different platforms, so we let colored take care of it for us |
git2 |
0.13.25 | For project git initialisation |
dirs |
4.0.0 | This gives us system dependent directory locations such as the home directory and application storage location |
reqwest |
0.11.10 | We use this when translating files. If the --comment flag is present, then comments are translated using LibreTranslate. reqwest handles the POST requests for us |
phf |
0.10.1 | Used for having hash map like tables as constants. Required so that the built-in types can be constants, and don't have to be returned from functions (speed basically) |
This project also uses clap
version 3.1.15 through the lang
dependency for command line argument parsing
Contribution is always welcome! Before contributing, please make sure you have a read of our contributing guidelines. If you have any questions after reading that, feel free to ask them on the Q&A section of our discussions page.