konstantin8105 / c4go Goto Github PK
View Code? Open in Web Editor NEWTranspiling C code to Go code
License: MIT License
Transpiling C code to Go code
License: MIT License
Create ast for cpp code:
clang++ -E -C cpp2.cpp > y.cpp
clang++ -Xclang -ast-dump -fsyntax-only y.cpp
Add generation of version and add flag in c4go
.
Prototype: https://github.com/upspin/upspin/tree/bcbe577d41646dffd734f21cf604a7cbeeafa634/version
For gofmt -s
For misspell
Go code:
type behavior struct {
...
innodefilename [2048]byte
...
}
// problem here
noarch.Strncpy(b[0].innodefilename, argv[i], int(uint32(2048-1)))
AST:
|-CallExpr 0x2216900 <line:3492:7, col:51> 'char *'
| |-ImplicitCastExpr 0x22168e8 <col:7> 'char *(*)(char *, const char *, unsigned long)' <FunctionToPointerD
ecay>
| | `-DeclRefExpr 0x22166d8 <col:7> 'char *(char *, const char *, unsigned long)' Function 0x2162110 'strncpy' 'char *(char *, const char *, unsigned long)'
| |-ImplicitCastExpr 0x2216940 <col:15, col:18> 'char *' <ArrayToPointerDecay>
| | `-MemberExpr 0x2216740 <col:15, col:18> 'char [2048]' lvalue ->innodefilename 0x21c65d8
| | `-ImplicitCastExpr 0x2216728 <col:15> 'struct behavior *' <LValueToRValue>
| | `-DeclRefExpr 0x2216700 <col:15> 'struct behavior *' lvalue ParmVar 0x220aae0 'b' 'struct behavior *'
| |- ...
Type of b[0].innodefilename
is array [2048]byte
, but in function need a slice []byte
Add test and implementation on Go for function math.cbrt
Description: https://en.cppreference.com/w/c/numeric/math/cbrt
File for test code add : c4go/tests/math.c
test
struct MyNums {
char name[100];
int size;
int numbers[];
};
void test_array_struct()
{
int n = 10, k;
struct MyNums *pnt;
pnt = malloc(sizeof(struct MyNums) + n * sizeof(int));
strcpy(pnt->name, "Натуральные числа");
pnt->size = n;
for (k = 0; k < pnt->size; k++)
pnt->numbers[k] = k + 1;
is_eq(pnt->numbers[2],3);
is_eq(pnt->numbers[5],6);
}
Add test and implementation on Go for function math.h
expf
Description: https://en.cppreference.com/w/c/numeric/math/exp
File for test code add : c4go/tests/math.c
Example see #155
Example of test, see
Lines 218 to 230 in be1760b
look on tool https://goreleaser.com/ for creating releases.
Add test and implementation on Go for function math.log1p
Description: https://en.cppreference.com/w/c/numeric/math/log1p
File for test code add : c4go/tests/math.c
Add version generate example in README.
[X] https://cis.temple.edu/~giorgio/cis71/code/
[X] https://github.com/antirez/kilo.git
[X] https://github.com/kgabis/brainfuck-c.git
[X] https://github.com/glouw/tinn
[X] https://github.com/aligrudi/minmad
[X] https://github.com/shenfeng/tiny-web-server
[X]https://github.com/jwerle/progress.c.git
[X] https://github.com/aligrudi/neatmail
[X] http://mirror.tochlab.net/pub/gnu/ed/
[X ] https://github.com/vurtun/nuklear
http://heirloom.sourceforge.net/
http://ex-vi.sourceforge.net/
https://github.com/freebsd/freebsd/tree/master/contrib/nvi
[ ] http://www.ioccc.org/years.html
[ ] https://github.com/vim/vim.git Vim
[ ] http://blog.robertelder.org/weird-c-syntax/
[ ] https://news.ycombinator.com/item?id=9991528
Change build folder to testdata
Try to finding in source
#include <stdio.h>
int main (int argc, char *argv[]){
FILE *fp;
int nchars, nwords, nlines;
int lastnblank; /* 0 iff the last character was a space */
char c;
if(argc!=2){
printf("Usage: %s filename\n", argv[0]);
exit(0);
}
if((fp=fopen(argv[1],"r"))==NULL){
perror("fopen");
exit(0); // <<--- PROBLEM HERE
}
}
// Warning (*ast.CallExpr): /home/konstantin/go/src/github.com/Konstantin8105/c4go-rating/testdata/SingleCcode/counts.c:18 :Cannot casting {int -> (noreturn)}. err = Cannot resolve type '(noreturn)' : Cannot separate function '(noreturn)' : Cannot parse function '(noreturn)' : Don't found '(' in type : (noreturn)
| | | `-CallExpr 0x33a7680 <line:18:5, col:11> 'void'
| | | |-ImplicitCastExpr 0x33a7668 <col:5> 'void (*)(int) __attribute__((noreturn))' <FunctionToPointerDecay>
| | | | `-DeclRefExpr 0x33a75f0 <col:5> 'void (int) __attribute__((noreturn))' Function 0x33a74e0 'exit' 'void (int) __attribute__((noreturn))'
| | | `-IntegerLiteral 0x33a7618 <col:10> 'int' 0
// AST Error : Cannot parse line: `VarDecl 0x3ec9368 parent 0x3dcaaf0 prev 0x3ec4088 <col:4, col:15>
col:15 used CBLAS_CallFromC 'int' extern`. could not match regexp with string
// AST Error : ^(?P<address>[0-9a-fx]+) (?:prev (?P<prev>0x[0-9a-f]+) )?(?:parent (?P<parent>0x[0-9a-
f]+) )?<(?P<position>.*)>(?P<position2> .+:\d+)?(?P<used> used)?(?P<referenced> referenced)?(?P<name>
\w+)? '(?P<type>.+?)'(?P<type2>:'.*?')?(?P<extern> extern)?(?P<static> static)?(?P<cinit> cinit)?(?P
<register> register)?[\s]*$
R1o = ( (2.0*w1+w2)*x1*x1 - (w1+2.0*w2)*x2*x2 +
3.0*(w1+w2)*Ln*(x2-x1) - (w1-w2)*x1*x2 ) / (6.0*Ln);
R2o = ( (w1+2.0*w2)*x2*x2 + (w1-w2)*x1*x2 -
(2.0*w1+w2)*x1*x1 ) / (6.0*Ln);
f01 = ( 3.0*(w2+4.0*w1)*x1*x1*x1*x1 - 3.0*(w1+4.0*w2)*x2*x2*x2*x2
- 15.0*(w2+3.0*w1)*Ln*x1*x1*x1 + 15.0*(w1+3.0*w2)*Ln*x2*x2*x2
- 3.0*(w1-w2)*x1*x2*(x1*x1 + x2*x2)
+ 20.0*(w2+2.0*w1)*Ln*Ln*x1*x1 - 20.0*(w1+2.0*w2)*Ln*Ln*x2*x2
+ 15.0*(w1-w2)*Ln*x1*x2*(x1+x2)
- 3.0*(w1-w2)*x1*x1*x2*x2 - 20.0*(w1-w2)*Ln*Ln*x1*x2 ) / 360.0;
Example of C code:
printf("Символьный литерал \'A\':\t%d\n", sizeof('A'));
// AST Error : Cannot parse line: `VarDecl 0x28f8490 <col:3, col:43> col:19 used a 'char *' register cinit`. could not match regexp with string
// AST Error : ^(?P<address>[0-9a-fx]+) (?:parent (?P<parent>0x[0-9a-f]+) )?(?:prev (?P<prev>0x[0-9a-f]+) )?<(?P<position>.*)>(?P<position2> .+:\d+)?(?P<used> used)?(?P<referenced> referenced)?(?P<name> \w+)? '(?P<type>.+?)'(?P<type2>:'.*?')?(?P<extern> extern)?(?P<static> static)?(?P<cinit> cinit)?(?P<register> register)?[\s]*$
// AST Error : 0x28f8490 <col:3, col:43> col:19 used a 'char *' register cinit
struct s* p = NULL; // tag naming an unknown struct declares it
struct s { int a; }; // definition for the struct pointed to by p
void g(void)
{
struct s; // forward declaration of a new, local struct s
// this hides global struct s until the end of this block
struct s *p; // pointer to local struct s
// without the forward declaration above,
// this would point at the file-scope s
struct s { char* p; }; // definitions of the local struct s
}
Hello,
I am trying to convert
https://github.com/open62541/open62541/releases/download/0.3-rc2/open62541.c
and get many AST error, see
https://github.com/eugeis/gopen62541/blob/master/open62541.go
Is it easy to resolve or too difficult?
Thank You
typedef int A[]; // A is int[]
A a = {1, 2}, b = {3,4,5}; // type of a is int[2], type of b is int[3]
Add test and implementation on Go for function stdlib.h
system
Description: https://en.cppreference.com/w/c/program/system
File for test code add : c4go/tests/stdlib.c
/* number.c -- Reading and writing integer as character sequences .
* Notice that the base for the digits is the constant
* BASE that I have chosen to be 10. Of course, you
* use a different value. You might even chose to
* have the base as a function parameter.
*/
#include <stdio.h>
#include <assert.h>
#define BASE 10
// a is a string. cursor is a position in a such that a[cursor] is a digit.
// Return the integer value represented by the longest sequence of digits
// in a starting at cursor. On exit cursor will be at the first position
// in a that does not contain a digit. Note that we assume that the base for
// the number is 10.
int getNumberToken(char a[], int *cursor)
{
int value = 0;
assert((*cursor) >= 0 && (*cursor) < strlen(a));
do
{
value = value*BASE + (int)(a[*cursor]) - (int)('0');
(*cursor)++;
}
while (isdigit(a[*cursor]));
return value;
}
// value is a positive integer. a is a character array with n positions.
// Store in a as a '\0' terminated string the representation of value as
// a string in base BASE.
void putNumberToken(int value, char a[], int n)
{
int k;
int h, temp;
assert(value >= 0 && n > 0);
// We collect the desired string in reverse order
for (k = 0; k < n-1; ++k)
{
a[k] = (char)(value%BASE + (int)'0');
value = value/BASE;
if (value == 0) break;
}
if (k == 0) // If value was 0 we still return a '0'
a[k] = '0';
a[++k] = '\0';
// Now we put the string in the right order
for (h = 0; h < k/2; ++h)
{
temp = a[h];
a[h] = a[k-1-h];
a[k-1-h] = temp;
}
}
void main (void)
{
char s[] = "5432";
int k = 0;
int val = getNumberToken(s, &k);
char outs[256];
printf("val = %d, k = %d\n", val, k);
putNumberToken(val, outs, 256);
printf("val = %s\n", outs);
}
panic: Type *ast.CallExpr is not implemented in createIfWithNotConditionAndBreak
goroutine 1 [running]:
github.com/Konstantin8105/c4go/transpiler.createIfWithNotConditionAndBreak(0x7c9ee0, 0xc4203f4af0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
/home/konstantin/go/src/github.com/Konstantin8105/c4go/transpiler/branch.go:609 +0xa26
github.com/Konstantin8105/c4go/transpiler.transpileDoStmt(0xc4201974a0, 0xc4200de3c0, 0xc4204daad0, 0xc4204daae8, 0x7ca2a0, 0xc4201974a0, 0x3, 0xc4200001a0, 0xc4203f9b00, 0xc420021300, ...)
/home/konstantin/go/src/github.com/Konstantin8105/c4go/transpiler/branch.go:556 +0x3fb
github.com/Konstantin8105/c4go/transpiler.transpileToStmt(0x7ca2a0, 0xc4201974a0, 0xc4200de3c0, 0x0, 0x0, 0x7fe0f0, 0x0, 0x0, 0x7fe0f0, 0x0, ...)
/home/konstantin/go/src/github.com/Konstantin8105/c4go/transpiler/transpiler.go:317 +0x102c
github.com/Konstantin8105/c4go/transpiler.transpileToStmts(0x7ca2a0, 0xc4201974a0, 0xc4200de3c0, 0x7fe0f0, 0x0, 0x0, 0x0, 0x0)
/home/konstantin/go/src/github.com/Konstantin8105/c4go/transpiler/transpiler.go:266 +0x13b
github.com/Konstantin8105/c4go/transpiler.transpileCompoundStmt(0xc4200da150, 0xc4200de3c0, 0xc42057ed80, 0xc42057ed98, 0x7ca020, 0xc4200da150, 0x3, 0xc4200001a0, 0xc4203f8dc0, 0xc420021300, ...)
/home/konstantin/go/src/github.com/Konstantin8105/c4go/transpiler/scope.go:53 +0x61e
github.com/Konstantin8105/c4go/transpiler.transpileToStmt(0x7ca020, 0xc4200da150, 0xc4200de3c0, 0x0, 0x0, 0x7fe0f0, 0x0, 0x0, 0x7fe0f0, 0x0, ...)
/home/konstantin/go/src/github.com/Konstantin8105/c4go/transpiler/transpiler.go:334 +0xed5
github.com/Konstantin8105/c4go/transpiler.transpileToStmts(0x7ca020, 0xc4200da150, 0xc4200de3c0, 0x7fe0f0, 0x0, 0x0, 0x0, 0x0)
/home/konstantin/go/src/github.com/Konstantin8105/c4go/transpiler/transpiler.go:266 +0x13b
github.com/Konstantin8105/c4go/transpiler.transpileToBlockStmt(0x7ca020, 0xc4200da150, 0xc4200de3c0, 0xc4203fd100, 0x3, 0xc420161540, 0x2, 0x2, 0x0, 0x0, ...)
/home/konstantin/go/src/github.com/Konstantin8105/c4go/transpiler/scope.go:71 +0x46
github.com/Konstantin8105/c4go/transpiler.transpileFunctionDecl(0xc4200e5ad0, 0xc4200de3c0, 0x0, 0x0, 0x0, 0x0, 0x0)
/home/konstantin/go/src/github.com/Konstantin8105/c4go/transpiler/functions.go:119 +0x26fe
github.com/Konstantin8105/c4go/transpiler.transpileToNode(0x7ca5e0, 0xc4200e5ad0, 0xc4200de3c0, 0x0, 0x0, 0x0, 0x0, 0x0)
/home/konstantin/go/src/github.com/Konstantin8105/c4go/transpiler/transpiler.go:434 +0x548
github.com/Konstantin8105/c4go/transpiler.transpileTranslationUnitDecl(0xc4200de3c0, 0xc420188aa0, 0xc42057f688, 0x7cb0e0, 0xc420188aa0, 0xc4200de3c0, 0x0)
/home/konstantin/go/src/github.com/Konstantin8105/c4go/transpiler/translation_unit.go:40 +0x217
github.com/Konstantin8105/c4go/transpiler.transpileToNode(0x7cb0e0, 0xc420188aa0, 0xc4200de3c0, 0x0, 0x0, 0x0, 0x0, 0x0)
/home/konstantin/go/src/github.com/Konstantin8105/c4go/transpiler/transpiler.go:431 +0xe1b
github.com/Konstantin8105/c4go/transpiler.TranspileAST(0x7ffdbd46bf86, 0x23, 0x6a2966, 0x4, 0xc4200de3c0, 0x7cb0e0, 0xc420188aa0, 0x12000, 0xc420198280)
/home/konstantin/go/src/github.com/Konstantin8105/c4go/transpiler/transpiler.go:33 +0x212
main.generateGoCode(0x0, 0xc42008a040, 0x1, 0x1, 0x0, 0x0, 0x0, 0x7ffdbd46bf86, 0x23, 0x6a2966, ...)
/home/konstantin/go/src/github.com/Konstantin8105/c4go/main.go:347 +0x725
main.Start(0x0, 0xc42008a040, 0x1, 0x1, 0x0, 0x0, 0x0, 0x7ffdbd46bf86, 0x23, 0x6a2966, ...)
/home/konstantin/go/src/github.com/Konstantin8105/c4go/main.go:219 +0x285
main.runCommand(0xc4200001a0)
/home/konstantin/go/src/github.com/Konstantin8105/c4go/main.go:488 +0x4df
main.main()
/home/konstantin/go/src/github.com/Konstantin8105/c4go/main.go:415 +0x22
Add test and implementation on Go for function stdlib.bsearch
Description: https://en.cppreference.com/w/c/algorithm/bsearch
File for test code add : c4go/tests/stdlib.c
Use Konstantin8105/errors for error tree
Add test and implementation on Go for function time.h
localtime
Description: https://en.cppreference.com/w/c/chrono/localtime
File for test code add : c4go/tests/time.c
Example see #155
Showing top 40 nodes out of 120
flat flat% sum% cum cum%
11.63s 33.55% 33.55% 11.63s 33.55% memeqbody
10.43s 30.09% 63.65% 24.55s 70.83% github.com/Konstantin8105/c4go/program.(*Program).GetComments
2.65s 7.65% 71.29% 2.65s 7.65% runtime.memequal
0.67s 1.93% 73.23% 1.22s 3.52% regexp.(*machine).tryBacktrack
See #207
Add test and implementation on Go for function string.h
strstr
Description: https://en.cppreference.com/w/c/string/byte/strstr
File for test code add : c4go/tests/string.c
example see #155
Add test and implementation on Go for function string.h memcmp
Description: https://en.cppreference.com/w/c/string/byte/memcmp
File for test code add : c4go/tests/string.c
Change from 'int(float64(uint(4)))' to int(4)
Compiler message: syntax error: unexpected =, expecting )
in function sputc
/ __sputc - transpiled function from /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include/stdio.h:264
The syntax error is in this line:
}())[0] = uint8(_c)))
The whole function:
func __sputc(_c int, _p *noarch.File) (c4goDefaultReturn int) {
if func() int {
tempVar := &_p[0]._w
*tempVar --
defer func() {
}()
return *tempVar
}() >= 0 || _p[0]._w >= _p[0]._lbfsize && int(byte(_c)) != int('\n') {
return int(((func() []uint8 {
tempVar := &_p[0]._p
defer func() {
*tempVar ++
}()
return *tempVar
}())[0] = uint8(_c)))
// Warning (*ast.MemberExpr): /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include/stdio.h:265 :cannot determine type for LHS 'FILE *', will use 'void *' for all fields. Is lvalue = true. n.Name = _w
// Warning (*ast.MemberExpr): /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include/stdio.h:265 :cannot determine type for LHS 'FILE *', will use 'void *' for all fields. Is lvalue = true. n.Name = _lbfsize
// Warning (*ast.MemberExpr): /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include/stdio.h:265 :cannot determine type for LHS 'FILE *', will use 'void *' for all fields. Is lvalue = true. n.Name = _w
// Warning (*ast.MemberExpr): /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include/stdio.h:265 :cannot determine type for LHS 'FILE *', will use 'void *' for all fields. Is lvalue = true. n.Name = _lbfsize
// Warning (*ast.MemberExpr): /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include/stdio.h:266 :cannot determine type for LHS 'FILE *', will use 'void *' for all fields. Is lvalue = true. n.Name = _p
} else {
return (__swbuf(_c, _p))
}
return
}
Remove paren
For example: 'var I int = ((((6))))'
Add to travis lint test information amount TODO , panic and FIX in code.
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
printf("Размер (в байтах) для типов данных:\n\n");
printf("Тип данных int: \t%lu\n", sizeof(int));
printf("Тип данных char: \t%lu\n", sizeof(char));
printf("Символьный литерал \'A\':\t%lu\n", sizeof('A'));
printf("Тип данных float:\t%lu\n", sizeof(float));
printf("Тип данных double:\t%lu\n", sizeof(double));
printf("Текст \"мой текст\":\t%lu\n", sizeof("мой текст"));
return 0;
}
panic: cannot do unary on: &ast.CharacterLiteral{Addr:0x2c7c9e0, Pos:ast.Position{File:"/home/konstantin/go/src/github.com/Konstantin8105/c4go-rating/testdata/book-c-the-examples-and-tasks/Глава 1/1.2/main.c", Line:9, LineEnd:0, Column:72, ColumnEnd:0, StringValue:""}, Type:"int", Value:65, ChildNodes:[]ast.Node{}}
goroutine 1 [running]:
github.com/Konstantin8105/c4go/transpiler.transpileUnaryExprOrTypeTraitExpr(0xc4202dcfa0, 0xc420314140, 0xc420472590, 0xc4204725a8, 0x7fe0f0, 0x0, 0xc420472540, 0x43c5b0, 0xc42063fb40, 0x7fe0f0, ...)
/home/konstantin/go/src/github.com/Konstantin8105/c4go/transpiler/unary.go:637 +0x320
github.com/Konstantin8105/c4go/transpiler.transpileToExpr(0x7cb220, 0xc4202dcfa0, 0xc420314140, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7fe0f0, 0x0, ...)
/home/konstantin/go/src/github.com/Konstantin8105/c4go/transpiler/transpiler.go:201 +0x35d
github.com/Konstantin8105/c4go/transpiler.transpileCallExpr(0xc42001ad20, 0xc420314140, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
/home/konstantin/go/src/github.com/Konstantin8105/c4go/transpiler/call.go:243 +0x5b3
github.com/Konstantin8105/c4go/transpiler.transpileToExpr(0x7c9ee0, 0xc42001ad20, 0xc420314140, 0xc420472a01, 0x0, 0x0, 0x0, 0x0, 0x7fe0f0, 0x0, ...)
/home/konstantin/go/src/github.com/Konstantin8105/c4go/transpiler/transpiler.go:195 +0x96d
github.com/Konstantin8105/c4go/transpiler.transpileToStmt(0x7c9ee0, 0xc42001ad20, 0xc420314140, 0x0, 0x0, 0x7fe0f0, 0x0, 0x0, 0x7fe0f0, 0x0, ...)
/home/konstantin/go/src/github.com/Konstantin8105/c4go/transpiler/transpiler.go:374 +0x24f
github.com/Konstantin8105/c4go/transpiler.transpileToStmts(0x7c9ee0, 0xc42001ad20, 0xc420314140, 0x7fe0f0, 0x0, 0x0, 0x0, 0x0)
/home/konstantin/go/src/github.com/Konstantin8105/c4go/transpiler/transpiler.go:266 +0x13b
github.com/Konstantin8105/c4go/transpiler.transpileCompoundStmt(0xc4203fc930, 0xc420314140, 0xc420472d80, 0xc420472d98, 0x7ca020, 0xc4203fc930, 0x3, 0xc4200001a0, 0xc4201f3a00, 0xc420020000, ...)
/home/konstantin/go/src/github.com/Konstantin8105/c4go/transpiler/scope.go:53 +0x61e
github.com/Konstantin8105/c4go/transpiler.transpileToStmt(0x7ca020, 0xc4203fc930, 0xc420314140, 0x0, 0x0, 0x7fe0f0, 0x0, 0x0, 0x7fe0f0, 0x0, ...)
Add test and implementation on Go for function time.h clock
Description: https://en.cppreference.com/w/c/chrono/clock
File for test code add : c4go/tests/time.c
Add test and implementation on Go for function math.h
copysign
Description: https://en.cppreference.com/w/c/numeric/math/copysign
File for test code add : c4go/tests/math.c
Add test and implementation on Go for function string.h
strncat
Description: https://en.cppreference.com/w/c/string/byte/strncat
File for test code add : c4go/tests/string.c
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.