Giter Club home page Giter Club logo

ark's Introduction

ArkScript Latest version

Code size Downloads GitHub Workflow Status

ArkScript log by Mazz

Nota bene: the project is referred as "Ark" and as "ArkScript". The official public name is "ArkScript" since "Ark" is already being used by another language

Key features

ArkScript is

  • small: the core fit under 8000 lines of code ; also small in terms of keywords (only 10)
  • a scripting language: very easy to embed it in your projects. Registering your own functions in the language is made easy
  • portable: a unique bytecode which can be run everywhere the virtual machine is
  • a functional language: every parameter is passed by value, everything is immutable unless specified
  • powerful: provides closures and explicit capture
  • promoting functionalities before performances: expressiveness often brings more productivity, though performances aren't left behind
  • a Lisp inspired language, with fewer parentheses: [...] is expanded to (list ...) and {} to (begin ...)
  • extensible: supports C++ module to use it in the language, adding functionalities

Also it has:

  • macros: if/else, values, and functions
  • tail call optimization
  • a REPL with autocompletion and coloration
  • a growing standard library, composed of ArkScript code (under lib/std/) and C++ (under lib/ext/)
  • a lot of unit tests (but never enough), which are ran before every release to ensure everything works as expected
  • docker images:
    • stable, built after each release
    • nightly, built after each commit

Examples

Fibonacci suite

(let fibo (fun (n)
    (if (< n 2)
        n
        (+ (fibo (- n 1)) (fibo (- n 2))))))

(print (fibo 28))  # display 317811

More or less game

(import std.random)
(import std.Math)

(let number (mod (math:abs (random)) 10000))

(let game (fun () {
    (let impl (fun (tries) {
        (let guess (toNumber (input "Input a numeric value: ")))

        (if (< guess number)
            {
                (print "It's more than " guess)
                (impl (+ tries 1))}
            (if (= guess number)
                {
                    (print "You found it!")
                    tries }
                {
                    (print "It's less than " guess)
                    (impl (+ tries 1))}))}))

    (let tries (impl 0))
    (print "You won in " tries " tries.")}))

(game)

More examples are available inside examples/.

Installation

You can either use docker:

docker pull arkscript/stable:latest

# or use the most updated repo
docker pull arkscript/nightly:latest

or build the project with CMake and install it with CMake:

cmake --install build

Contributing

  • First, fork the repository
  • Then, clone your fork: git clone [email protected]:username/Ark.git
  • Install the pre-commit hooks: pre-commit install (you may need to install pre-commit first)
  • Create a branch for your feature: git checkout -b feat-my-awesome-idea
  • When you're done, push it to your fork and submit a pull request

Make sure you follow the contribution guidelines before submitting your pull request!

Don't know what to work on? No worries, we have a list of things to do 😉

Related projects

We have other projects tightly related to ArkScript, which aren't necessarily C++ oriented:

  • the standard library, written in ArkScript itself
  • the standard library modules, extending the capacities of the language, written in C++
  • ArkDoc, a documentation generator à la doxygen for ArkScript, written in Python 3
  • our website written in HTML, CSS and JavaScript

Our beloved contributors

Full list here.

Coding guidelines for contributing

See C++ Coding guidelines if you want to contribute to ArkScript compiler / runtime.

Also, see ArkScript Coding guidelines for other files, written in ArkScript.

For performance reasons, some functions might be written in C++, in include/Ark/Builtins/Builtins.hpp and src/Builtins/.

Code structure

ArkScript code structure

Building

Dependencies

  • C++20
  • CMake >= 3.15
  • Visual Studio >= 11 (on Windows)
  • On macOS versions prior to 10.15, libc++ lacks filesystem in the standard library.
    • Install a newer compiler using Homebrew: brew install gcc && brew link gcc
    • Pass compiler path to cmake in the build step: -DCMAKE_CXX_COMPILER=/usr/local/bin/g++-14 -DCMAKE_C_COMPILER=/usr/local/bin/gcc-14

⚠️ When passing a specific C++ compiler to CMake, add the corresponding C compiler as ArkScript relies on C code as well ; otherwise you'll cryptic get compilation/linking errors (using CMAKE_CXX_COMPILER and CMAKE_C_COMPILER).

Through CMake

Different CMake switches are available to customize the build:

  • -DARK_BUILD_EXE to generate an executable, defaults to Off, building a shared library only
  • -DARK_ENABLE_SYSTEM to enable sys:exec (execute shell commands without restrictions), defaults to On
  • -DARK_PROFILER_MIPS to enable the MIPS counting, defaults to Off
  • -DARK_NO_STDLIB to avoid the installation of the ArkScript standard library
  • -DARK_BUILD_MODULES to trigger the modules build
  • -DARK_SANITIZERS to enable ASAN and UBSAN
  • -DARK_TESTS to build the unit tests (separate target named unittests)
# first, clone it
git clone --depth=50 --branch=dev https://github.com/ArkScript-lang/Ark.git
cd Ark
git submodule update --init --recursive
# building Ark
cmake . -Bbuild -DCMAKE_BUILD_TYPE=Release -DARK_BUILD_EXE=On
cmake --build build --config Release
# installing Ark (might need administrative privileges)
cmake --install build --config Release

Desired output of arkscript --help:

DESCRIPTION
        ArkScript programming language

SYNOPSIS
        arkscript -h
        arkscript -v
        arkscript --dev-info
        arkscript -e <expression>
        arkscript -c <file> [-d]
        arkscript <file> [-d] [-L <lib_dir>]
        arkscript -f <file> [--dry-run]
        arkscript --ast <file> [-d] [-L <lib_dir>]
        arkscript -bcr <file> -on
        arkscript -bcr <file> -a [-s <start> <end>]
        arkscript -bcr <file> -st [-s <start> <end>]
        arkscript -bcr <file> -vt [-s <start> <end>]
        arkscript -bcr <file> [-cs] [-p <page>] [-s <start> <end>]

OPTIONS
        -h, --help                  Display this message
        -v, --version               Display ArkScript version and exit
        --dev-info                  Display development information and exit
        -e, --eval                  Evaluate ArkScript expression

        -c, --compile               Compile the given program to bytecode, but do not run
        -d, --debug...              Increase debug level (default: 0)

        -L, --lib                   Set the location of the ArkScript standard library. Paths can be
                                    delimited by ';'

        -f, --format                Format the given source file in place
        --dry-run                   Do not modify the file, only print out the changes

        --ast                       Compile the given program and output its AST as JSON to stdout
        -d, --debug...              Increase debug level (default: 0)
        -L, --lib                   Set the location of the ArkScript standard library. Paths can be
                                    delimited by ';'

        -bcr, --bytecode-reader     Launch the bytecode reader
        -on, --only-names           Display only the bytecode segments names and sizes
        -a, --all                   Display all the bytecode segments (default)
        -st, --symbols              Display only the symbols table
        -vt, --values               Display only the values table
        -cs, --code                 Display only the code segments
        -p, --page                  Set the bytecode reader code segment to display
        -s, --slice                 Select a slice of instructions in the bytecode

VERSION
        4.0.0-86587c14

LICENSE
        Mozilla Public License 2.0

In your own project

Please refer to the embedding ArkScript tutorial.

Performances

See https://github.com/ArkScript-lang/benchmarks

Games

You can find a snake created in ArkScript in the folder examples/games/snake (run it from there, otherwise it won't find the font and the sprites ; you won't need to install the SFML).

ArkSnake

Controls are the arrows (left, right, up and down), the game closes itself when you successfully collect the 3 apples.

The donors

Huge thanks to those people for their donations to support the project:

Cool graphs

Star History Chart

Credits

This project was inspired by game programing patterns and ofan lisp.cpp

Copyright and Licence information

Copyright (c) 2019-2024 Alexandre Plateau. All rights reserved.

This ArkScript distribution contains no GNU GPL code, which means it can be used in proprietary projects.

ark's People

Contributors

biothewolff avatar codacy-badger avatar daemononunix avatar dontbelieveme avatar eliot-akira avatar fowled avatar gryfenfer97 avatar jsanestrzik avatar loki-astari avatar mattn avatar maxnatamo avatar owenl131 avatar pierrepharel avatar piyussshh avatar qix- avatar rakista112 avatar raloverast avatar rinz13r avatar rstefanic avatar sdachess avatar shehab7osny avatar superfola avatar unactived avatar wafelack avatar yardenshoham avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ark's Issues

End-representation of lists

Is your feature request related to a problem? Please describe.
The representation (through print) of lists are their content in parentheses.
For example (print [1 2]) outputs ( 1 2 )

This representation looks like a block (of code) and doesn't really hint that the object considered is a list.

Describe the solution you'd like
I think it would be better if the representation matched the syntactic sugar used in
the programs: [a b c]

Describe alternatives you've considered
[ a b c ], or (list a b c) (according to what the syntactic sugar refers to).

Make a specific lexer instead of relying on regexes

Rules list is quite simple:

string: ^"[^"]*
number: ^((\+|-)?[[:digit:]]+)(\.(([[:digit:]]+)?))?
operator: ^(\+|\-|\*|/|<=|>=|!=|<|>|@=|@|=|\^)
identifier: ^[a-zA-Z_\u0080-\uDB7F][a-zA-Z0-9_\u0080-\uDB7F\-?']*
capture: ^&[a-zA-Z_\u0080-\uDB7F][a-zA-Z0-9_\u0080-\uDB7F\-?']*
getfield: ^\.[a-zA-Z_\u0080-\uDB7F][a-zA-Z0-9_\u0080-\uDB7F\-?']*
skip: ^[\s]+
comment: ^#.*
shorthand: ^[']
mismatch: ^.

Add safe multithreading

If we move description related data to an Ark::State as suggested in #35, we should be able to share a single state between multiple virtual machines, thus allowing multi threading

Clear Console

Is your feature request related to a problem? Please describe.
As i already said, i'm doing a mini Os in Ark (#28) so it also could be useful to have an CLS method !

Describe the solution you'd like
CLS Method

Describe alternatives you've considered
(clearScreen)
(clearScreen 5) A specific number of lines
Additional context
Mmmh, For a Lot of console thing like as a Command line OS ?

Add a msgpack C++ module

To be able to create packed messages to send on the internet when the network module will be available.

REPL segfaulting in a few situations

Describe the bug
The REPL segfaults when:

  1. The input is only spaces
  2. The input is only a comment (starts by optional spaces and then #)

Expected behavior
Same behavior as if the user had directly pressed <ENTER>: "nothing" (new line and new prompt)

Relevant GIF
GIF

Notes (1 & 2):
Here is the code handling the REPL when the user simply presses <ENTER>:

if (line.length() == 0)
{
    std::cout << (new_command ? new_prompt : continuing_prompt);
    continue;
}

It only checks that the line is empty.
Maybe it should instead strip whitespaces ahead (spaces and tabs notably), and then conclude:
If the resulting line starts has a length of 0 or starts with # then: ...

I'm only doing an issue as I have no idea how to do this in C++

EDIT:
The GIF also shows how {} or the equivalent (begin ) block also causes the REPL to segfaults. But this is the current behavior of Arkscript itself and isn't "the fault" of the REPL implementation.

Add REPL

Should be able to type in code, wait for count("(") == count(")") before compiling.
Store code in buffer, compile and execute after each line.

Question: should we put the modules in another repository?

Should we put the modules in another repository?

I'm asking this because the repository will definitely grow a lot with all the modules we are going to add, and when someone wants to start experimenting on a project, often they don't like having to download a bunch of things that they aren't going to use.

Having like a module store would be quite cool, what do you think?

Redo the CLI to be able to compile files only when their bytecode version is outdated

Is your feature request related to a problem? Please describe.
We should be able to use Ark file to automatically compile the file only if needed, and then execute it on the virtual machine.

Describe the solution you'd like
Check if there is a bytecode file in the Ark cache for the given input file, and if it is older than the given file, recompile. Otherwise (if not older), launch the bytecode file located in the Ark cache (maybe provide something like Python, a __arkcache__ folder). If the file isn't in the Ark cache (or if the Ark cache doesn't exist yet), compile it, put it in the Ark cache, and execute it.

toUpperCase and toLowerCase returning "Unknown error"

Describe the bug
toUpperCase and toLowerCase returning "Unknown Error"

To Reproduce
Steps to reproduce the behavior:
1.Import Case.ark
2. try (toLowerCase "Some StringYY sTuffY") or another string NB : you can also do this with toUpperCase
3. Enjoy the bug
Note : sometimes it returns another error like bad allocation
Expected behavior
Returning the string to lowercase (or to upper)

Screenshots
If applicable, add screenshots to help explain your problem.
image

Desktop (please complete the following information):

  • OS: Windows 10 64bits
  • Version 3.0.7

Additional context
Seems to happen with the latest version of Case.ark (i tried with an old version and it works)

Adding macros

I think we should consider adding macros to the language, since it would have been (imo) very useful for some programs, and also to extend the language (eg if we want to define a forEach "keyword", which wouldn't use a function behind but directly copy the code doing the forEach thing)

Build on macOS

Is your feature request related to a problem? Please describe.

I followed the build steps on macOS, until cmake --build build. It ends with:

~/lisp/Ark/include/Ark/Utils.hpp:10:10: fatal error: 'filesystem' file not found
#include <filesystem>
         ^~~~~~~~~~~~

The comment on the next step ("works on Linux and on Windows") implies that the project is not meant to be built on macOS.

Is that the case, or perhaps I'm missing a dependency?

Describe the solution you'd like

I'd love to be able to play with ArkScript on macOS.

Additional context

As context, I'm pretty much a beginner with C++, so I have no clue whether filesystem is a platform-specific thing.

Plugin : custom types

In this moment, I'm working on msgpack module for Ark, and I need an clear and explicit way for define custom types for modules (plugin).

Builtins and std lib modules

This issue will be used to keep track of the needed builtins and std lib functionnalities for the 3.1.0

List

  • (zip list1 list2)
  • (map func list1)
  • sorting algorithms
  • reverse array
  • find object in array
  • delete element at index and return new list
  • (slice array from_index to_index step)
  • implement forEach (already done in examples/for-each.ark, but it can be greatly improved)

Dictionnary

  • dictionnary implementation using closures see the json module

String

  • regexes
  • reverse string
  • find substring in string
  • (slice string from_index to_index step)
  • (removeAtStr string index)

Network

  • create socket
    • TCP/IP
    • UDP
  • close socket
  • send data
  • receive data
  • make ARP request
  • make ICMP packets

Mathematics

  • trigonometrics
    • cos, arccos
    • sin, arcsin
    • tan, arctan
  • exp, log
  • pow (can be implemented in ArkScript with exp and log)
  • sqrt (can be implemented in ArkScript with pow)
  • ceil, floor, round
  • sum (elements from list)
  • is infinite, is nan
  • pi, e, tau, inf, nan

SFML

  • Graphics
  • Audio
  • Window
  • System
  • Network

Not part of the standard library anymore, was moved to https://github.com/SuperFola/arksfml

Can't call a function stored in an array

Describe the bug
This test is failing, and so is switch.ark, since it's using the same method for defered calls.

{
    (let egg (fun (bar) (print bar)))
    (let data ["Iron Man" "is" "Tony Stark"])
    (let callbacks [])

    (let add-callback (fun (d)
        (fun () (egg d))
    ))

    (let acc 0)
    (while (!= acc (len data)) {
        (let d (@ data acc))
        (set callbacks (append callbacks (add-callback d)))
        (set acc (+ 1 acc))
    })

    (set acc 0)
    (while (!= acc (len callbacks)) {
        ((@ callbacks acc))
        (set acc (+ 1 acc))
    })
}

To Reproduce
Steps to reproduce the behavior:

  1. download the latest version, build it
  2. compile tests/callbacks.ark
  3. execute it
  4. See error

Expected behavior
We should see

Iron Man
is
Tony Stark

in the shell, not an error.

Desktop (please complete the following information):

  • OS: Linux Mint 18 x64

Additional context
Must be related to the parser

Enhance builtins

We need to have at least:

  • write file
  • read file
  • file exists?
  • string concatenations
  • type
  • hasfield

Default Program bug

Ark-windows-x64.exe Bug
After moving it to C:\Program Files (x86)\Ark\bin , i can't use it to launch the .ark file
that's kinda weird, because it worked before (when the file was on my Desktop)

Compiler reporting an error when parsing snake.ark

Describe the bug
When launching Ark tests/games/snake/snake.ark -c, it crashes because it can't create a token from (() at line 13, char 38 (this token isn't in the file).

To Reproduce
Steps to reproduce the behavior:

  1. Clone the repository
  2. git checkout rework
  3. cmake -H. -Bbuild -DCMAKE_BUILD_TYPE=Release && cmake --build build
  4. build/Ark tests/games/snake/snake.ark -c

Expected behavior
No errors expected.

Desktop (please complete the following information):

  • OS: Linux Mint 18 64bits

Additional context
Must be related to the new lexer, the parser is just reporting a bug because it uses the lexer

List all files and folders of the current directory or specified path

Is your feature request related to a problem? Please describe.
Well, i'm trying to do a sort of Command line OS (fo no reason), and i think it could be nice if i can list all files of the current Directory/Path

Describe the solution you'd like
Add a method to list all the files in a array

Describe alternatives you've considered
(listAllFiles ".") Files of the current directory (also default argument)
(listAllFiles "C:\Users\Natend\Desktop\Programmation") Mmh maybe not \
Additional context
For creation of system that can see files (a.k.a : OS, IDE, Lots of things)

Parser generating a "wrong" AST (putting begin everywhere)

Describe the bug
The parser is parsing { (let a nil) (let b false) (let c true) } as ( Begin ( Let a nil ) Begin ( Let b false ) Begin ( Let c true ) ). It's not a problem with the syntactic sugar, since we have this:

[  Info ] (Parser) After applying sugar:
   1 | (
     | begin
   2 | (
     | let
     | a
     | nil
     | )
   3 | (
     | let
     | b
     | false
     | )
   4 | (
     | let
     | c
     | true
     | )
   5 | )

To Reproduce
Steps to reproduce the behavior:

  1. compile Ark
  2. Launch it on nearly any test file with at least 2 blocks in a begin node

Expected behavior
The parser shouldn't put that many begins (one before each block, WHY?).

Desktop (please complete the following information):

  • OS: Linux Mint 18 x64

Working on the ArkScript package manager

At this point where modules are starting to be more numerous, we should (imo) consider having an ArkScript package manager.

Won't be for the 3.1.0, more like a 3.2.0 or even a 3.x.0

write language documentation

Since the language is evolving, its documentation should evolve as well. The language itself needs to be documented, but the standard library and the Virtual Machine/Bytecode as well

Color and background color for console

Is your feature request related to a problem? Please describe.
Well nope, but it could be nice for reading

Describe the solution you'd like
add a method that change the color , or the background color

Describe alternatives you've considered
(consoleColor "1") (4Bits console colors)
(consoleBackgroundColor "2") (4 bits console colors)
Additional context
Mmmh, for better interactions beetwen user and program

Invalid syntax segfaults the compiler

The program {(while (= 1 1) "foo" "bar")} segfaults the compiler.

(gdb) run foo.ark 
Starting program: /tmp/Ark/build/Ark foo.ark

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7bce3c0 in __memcmp_avx2_movbe () from /usr/lib/libc.so.6
(gdb) bt
#0  0x00007ffff7bce3c0 in __memcmp_avx2_movbe () from /usr/lib/libc.so.6
#1  0x00007ffff7eda920 in std::char_traits<char>::compare (__n=<optimized out>, __s2=0x555555624a70 ")", 
    __s1=<optimized out>) at /build/gcc/src/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/char_traits.h:325
#2  std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::compare (this=0x7fffffffc6a8, 
    __s=0x555555624a70 ")")
    at /build/gcc/src/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/basic_string.tcc:1425
#3  0x0000555555579e4b in bool std::operator==<char, std::char_traits<char>, std::allocator<char> >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*) ()
#4  0x0000555555579fe5 in bool std::operator!=<char, std::char_traits<char>, std::allocator<char> >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*) ()
#5  0x000055555560171b in Ark::Parser::parse(std::__cxx11::list<Ark::internal::Token, std::allocator<Ark::internal::Token> >&, bool, bool) ()
#6  0x0000555555600156 in Ark::Parser::feed(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ()
#7  0x00005555555ea93c in Ark::Compiler::feed(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ()
#8  0x000055555555e67b in Ark::compile(bool, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ()
#9  0x000055555557c1da in Ark::VM_t<false>::doFile(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ()
#10 0x000055555555f711 in main ()

Additionally, I think that the benchmark files are missing from this repository and I had to modify build.sh because it assumed my system runs GCC 8, but Arch provides GCC 9, and ((f f) x) isn't recognised as valid syntax by the reader, but the segfault is my biggest concern now.

Closure scopes should be raw pointers

Instead of using shared pointer, we should have raw pointers to elements in a std::list owned by the VM. (see comment)

Description related data owned by the VM should also be moved to a lighter structure (Ark::State)

performance improvement

  • remove all the empty destructors
  • do not create nil/false/true as they are available in Ark::internal::FFI

Add ability to define feature flags in a project.arkopt

Instead of having to send all the argument using the command line (which can lead to a pretty long command), we should be able to have a project.arkopt for example, with a list of options which should be triggered.

For example:

cool-project/
|___ cool-project.arkopt
|___ thing.ark
|___ ...

cool-project.arkopt

# file to run
thing.ark
# options
-fno-function-arity-check
-f...

And when we run Ark cool-project it will search for a cool-project ArkScript file, but not find it, thus it should look for a cool-project.arkopt and use its content as the options of the command line.

Add closure.field reading

Is your feature request related to a problem? Please describe.
We must be able to read public (immutable) data from a closure.

Describe the solution you'd like
eg: (print closure.field)

Import bugging

Describe the bug
i Tryed to run unittest.ark, and it says "ParseError: Couldn't find file Switch.ark"
Note: i run it without the --lib argument
To Reproduce
Steps to reproduce the behavior:

  1. Go to tests directory
  2. Launch unittest.ark
  3. See error

Expected behavior
I Expect to import the module, wich is already installed with Ark Releases

Screenshots
image

Desktop (please complete the following information):

  • OS: Windows
  • Version : 3.0.5
    Additional context
    I think it's the import bugging because it happens on the first import

EOF in REPL

Describe the bug
When sending End of File to the REPL, it prints indefinitely the prompt >>

To Reproduce
Steps to reproduce the behavior:

  1. Ark -r
  2. Ctrl + D (^D)
  3. >> is printed indefinitely

Expected behavior
The REPL exits

Desktop (please complete the following information):
OS: Arch Linux
Ark compiled with g++ (GCC) 9.2.0 from branch dev

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.