You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Dec 8, 2022. It is now read-only.
Thank you for considering contributing to Seq! This document contains some helpful information for getting started. The best place to ask questions or get feedback is [our Gitter chatroom](https://gitter.im/seq-lang/Seq). For a high-level outline of the features we aim to add in the future, check the [roadmap](https://github.com/seq-lang/seq/wiki/Roadmap).
4
+
5
+
## An overview
6
+
7
+
The [compiler internals documentation](https://seq-lang.org/internals.html) is probably a good starting point if you plan on modifying the compiler. If you have any specific questions, please don't hesitate to ask on Gitter.
8
+
9
+
## Development workflow
10
+
11
+
All development is done on the [`develop`](https://github.com/seq-lang/seq/tree/develop) branch. Just before release, we bump the version number, merge into [`master`](https://github.com/seq-lang/seq/tree/master) and tag the build with a tag of the form `vX.Y.Z` where `X`, `Y` and `Z` are the [SemVer](https://semver.org) major, minor and patch numbers, respectively. Our Travis CI build script automatically builds and deploys tagged commits as a new GitHub release via our trusty [@SeqBot](https://github.com/seqbot). It also builds and deploys the documentation to our website.
12
+
13
+
## Coding standards
14
+
15
+
- All C++ code should be formatted with [ClangFormat](https://clang.llvm.org/docs/ClangFormat.html) using the LLVM style guide.
16
+
- All OCaml code should be formatted with [OCamlFormat](https://github.com/ocaml-ppx/ocamlformat) using the Jane Street style guide.
17
+
18
+
## Writing tests
19
+
20
+
Tests are written as Seq programs. The [`test/core/`](https://github.com/seq-lang/seq/tree/master/test/core) directory contains some examples. If you add a new test file, be sure to add it to [`test/main.cpp`](https://github.com/seq-lang/seq/blob/master/test/main.cpp) so that it will be executed as part of the test suite. There are two ways to write tests for Seq:
21
+
22
+
#### New style
23
+
24
+
Example:
25
+
26
+
```python
27
+
@test
28
+
defmy_test():
29
+
assert2+2==4
30
+
my_test()
31
+
```
32
+
33
+
**Semantics:**`assert` statements in functions marked `@test` are not compiled to standard assertions: they don't terminate the program when the condition fails, but instead print source information, fail the test, and move on.
34
+
35
+
#### Old style
36
+
37
+
Example:
38
+
39
+
```python
40
+
print2+2# EXPECT: 4
41
+
```
42
+
43
+
**Semantics:** The source file is scanned for `EXPECT`s, executed, then the output is compared to the "expected" output. Note that if you have, for example, an `EXPECT` in a loop, you will need to duplicate it however many times the loop is executed. Using `EXPECT` is helpful mainly in cases where you need to test control flow, **otherwise prefer the new style**.
44
+
45
+
## Pull requests
46
+
47
+
Pull requests should generally be based on the `develop` branch. Before submitting a pull request, pleace make sure...
48
+
49
+
- ... to provide a clear description of the purpose of the pull request.
50
+
- ... to include tests for any new or changed code.
51
+
- ... that all code is formatted as per the guidelines above.
52
+
53
+
Please be patient with pull request reviews, as our throughput is limited!
54
+
55
+
## Issues
56
+
57
+
We use [GitHub's issue tracker](https://github.com/seq-lang/seq/issues), so that's where you'll find the most recent list of open bugs, feature requests and general issues. If applicable, we try to tag each issue with at least one of the following tags:
58
+
59
+
-`Build`: Issues related to building Seq
60
+
-`Codegen`: Issues related to code generation (i.e. after parsing and type checking)
61
+
-`Parser`: Issues related to lexing/parsing
62
+
-`Library`: Issues related to the Seq standard library
63
+
-`Interop`: Issues related to interoperability with other languages or systems
Copy file name to clipboardExpand all lines: docs/sphinx/index.rst
+23Lines changed: 23 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -16,3 +16,26 @@ Source code is available `on GitHub <https://github.com/seq-lang/seq>`_. You can
16
16
build
17
17
internals
18
18
api/doxygen
19
+
20
+
Frequently Asked Questions
21
+
--------------------------
22
+
23
+
*What is the goal of Seq?*
24
+
25
+
One of the main focuses of Seq is to bridge the gap between usability and performance in the fields of bioinformatics and computational genomics, which have an unfortunate reputation for hard-to-use, buggy or generally poorly-written software. Seq aims to make writing high-performance genomics or bioinformatics software substantially easier, and to provide a common, unified framework for the development of such software.
26
+
27
+
*Why do we need a whole new language? Why not a library?*
28
+
29
+
There are many great bioinformatics libraries on the market today, including `Biopython <https://biopython.org>`_ for Python, `SeqAn <https://www.seqan.de>`_ for C++ and `BioJulia <https://biojulia.net>`_ for Julia. In fact, Seq offers a lot of the same functionality found in these libraries. The advantages of having a domain-specific language and compiler, however, are the higher-level constructs and optimizations like :ref:`pipeline`, :ref:`match`, :ref:`interalign` and :ref:`prefetch`, which are difficult to replicate in a library, as they often involve large-scale program transformations/optimizations. A domain-specific language also allows us to explore different backends like GPU, TPU or FPGA in a systematic way, in conjunction with these various constructs/optimizations, which is ongoing work.
30
+
31
+
*What about interoperability with other languages and frameworks?*
32
+
33
+
Interoperability is and will continue to be a priority for the Seq project. We don't want using Seq to render you unable to use all the other great frameworks and libraries that exist. Seq already supports interoperability with C/C++ and Python (see :ref:`interop`), which we are in the process of expanding (e.g. by allowing Python libraries to be written in Seq).
34
+
35
+
*I want to contribute! How do I get started?*
36
+
37
+
Great! Check out our `contribution guidelines <https://github.com/seq-lang/seq/blob/master/CONTRIBUTING.md>`_ and `open issues <https://github.com/seq-lang/seq/issues>`_ to get started. Also don't hesitate to drop by our `Gitter chatroom <https://gitter.im/seq-lang/Seq?utm_source=share-link&utm_medium=link&utm_campaign=share-link>`_ if you have any questions.
38
+
39
+
*What is planned for the future?*
40
+
41
+
See the `roadmap <https://github.com/seq-lang/seq/wiki/Roadmap>`_ for information about this.
Copy file name to clipboardExpand all lines: docs/sphinx/intro.rst
+4-2Lines changed: 4 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -15,6 +15,8 @@ Pre-built binaries for Linux and macOS on x86_64 are available alongside `each r
15
15
16
16
This will install Seq in a new ``.seq`` directory within your home directory. Be sure to update ``~/.bash_profile`` as the script indicates afterwards!
17
17
18
+
Seq binaries require a `libomp <https://openmp.llvm.org>`_ to be present on your machine. ``brew install libomp`` or ``apt install libomp5`` should do the trick.
19
+
18
20
Building from source
19
21
^^^^^^^^^^^^^^^^^^^^
20
22
@@ -35,8 +37,8 @@ or produce an LLVM bitcode file if a ``-o <out.bc>`` argument is provided. In th
This produces a ``myprogram`` executable. (If multithreading is needed, the ``g++`` invocation should also include ``-fopenmp``.)
42
+
This produces a ``myprogram`` executable.
41
43
42
44
**Interfacing with C:** If a Seq program uses C functions from a particular library, that library can be specified via a ``-L/path/to/lib`` argument to ``seqc``. Otherwise it can be linked during the linking stage if producing an executable.
0 commit comments