Git Product home page Git Product logo

Comments (5)

ghostop14 avatar ghostop14 commented on June 9, 2024

I work on Ubuntu 16.04 as well so it should compile for you. There are a couple of items to watch out for. If you look in the project's setup_help directory there's a write-up on getting it all running on Ubuntu. Sounds like there may be a quick symlink you may be missing for the opencl header files that's documented in there too.

Give that a shot and let me know how it goes.

from gr-clenabled.

stef avatar stef commented on June 9, 2024

hey, i have the same issue (although on devuan, and on maint-3.8 branch since there is no gr3.9 on debian derivates). i did link cl2.hpp to cl.hpp, but that only got me over the cmake step.

cmake output is like this:

% cmake -Wno-dev -DCMAKE_INSTALL_PREFIX=/usr ..
-- The CXX compiler identification is GNU 10.2.1
-- The C compiler identification is GNU 10.2.1
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Build type not specified: defaulting to release.
-- Found LOG4CPP: /usr/lib/x86_64-linux-gnu/liblog4cpp.so
-- Found PkgConfig: /usr/bin/pkg-config (found version "1.7.3")
-- Checking for module 'gmp'
--   Found gmp, version 6.2.1
-- Found GMP: /usr/lib/x86_64-linux-gnu/libgmpxx.so
-- Checking for module 'mpir >= 3.0'
--   Package 'mpir', required by 'virtual:world', not found
-- Could NOT find MPIR (missing: MPIRXX_LIBRARY MPIR_LIBRARY MPIR_INCLUDE_DIR)
-- Found MPLIB: /usr/lib/x86_64-linux-gnu/libgmpxx.so
-- Found Boost: /usr/lib/x86_64-linux-gnu/cmake/Boost-1.74.0/BoostConfig.cmake (found suitable version "1.74.0", minimum required is "1.74.0") found components: date_time program_options filesystem system
regex thread unit_test_framework
-- Found Volk: Volk::volk
-- User set python executable /usr/bin/python3
-- Found PythonInterp: /usr/bin/python3 (found version "3.9.2")
-- Found PythonLibs: /usr/lib/x86_64-linux-gnu/libpython3.9.so (found suitable exact version "3.9.2")
-- Checking for module 'thrift'
--   Found thrift, version 0.13.0
-- Python checking for Thrift - found
-- Found THRIFT: /usr/lib/x86_64-linux-gnu/libthrift.so
-- Found Git: /usr/bin/git
-- Extracting version information from git describe...
-- Looking for CL_VERSION_2_0
-- Looking for CL_VERSION_2_0 - found
-- Found OpenCL: /usr/lib/x86_64-linux-gnu/libOpenCL.so (found version "2.0")
-- Found CLFFT: /usr/lib/x86_64-linux-gnu/libclFFT.so
-- Found OpenMP_C: -fopenmp (found version "4.5")
-- Found OpenMP_CXX: -fopenmp (found version "4.5")
-- Found OpenMP: TRUE (found version "4.5")
-- Found Doxygen: /usr/bin/doxygen (found version "1.9.1") found components: doxygen dot
-- Using install prefix: /usr
-- Building for version: 5db55644 / 1.0.0git
--
-- Checking for module SWIG
-- Found SWIG version 4.0.2.
-- Found SWIG: /usr/bin/swig4.0
-- Found PythonLibs: /usr/lib/x86_64-linux-gnu/libpython3.9.so (found version "3.9.2")
-- Configuring done
-- Generating done
-- Build files have been written to: /home/s/srcs/gr-clenabled/build

when running make, i get this output:

[  1%] Building CXX object lib/CMakeFiles/clview.dir/clview.cc.o
In file included from /usr/include/CL/cl.hpp:17,
                 from /home/s/srcs/gr-clenabled/lib/clview.cc:14:
/usr/include/CL/opencl.hpp:404:109: note: ‘#pragma message: opencl.hpp: __CL_ENABLE_EXCEPTIONS is deprecated. Define CL_HPP_ENABLE_EXCEPTIONS instead’
  404 | # pragma message("opencl.hpp: __CL_ENABLE_EXCEPTIONS is deprecated. Define CL_HPP_ENABLE_EXCEPTIONS instead")
      |                                                                                                             ^
/usr/include/CL/opencl.hpp:437:112: note: ‘#pragma message: opencl.hpp: CL_HPP_TARGET_OPENCL_VERSION is not defined. It will default to 300 (OpenCL 3.0)’
  437 | # pragma message("opencl.hpp: CL_HPP_TARGET_OPENCL_VERSION is not defined. It will default to 300 (OpenCL 3.0)")
      |                                                                                                                ^
In file included from /home/s/srcs/gr-clenabled/lib/clview.cc:14:
/usr/include/CL/cl.hpp:18:151: note: ‘#pragma message: cl2.hpp has been renamed to opencl.hpp to make it clear that it supports all versions of OpenCL. Please include opencl.hpp directly.’
   18 | #pragma message("cl2.hpp has been renamed to opencl.hpp to make it clear that it supports all versions of OpenCL. Please include opencl.hpp directly.")
      |                                                                                                                                                       ^
[  2%] Linking CXX executable clview
[  2%] Built target clview
Scanning dependencies of target gnuradio-clenabled
[  3%] Building CXX object lib/CMakeFiles/gnuradio-clenabled.dir/clMathConst_impl.cc.o
In file included from /usr/include/CL/cl.hpp:17,
                 from /home/s/srcs/gr-clenabled/lib/../include/clenabled/GRCLBase.h:25,
                 from /home/s/srcs/gr-clenabled/lib/clMathConst_impl.h:25,
                 from /home/s/srcs/gr-clenabled/lib/clMathConst_impl.cc:26:
/usr/include/CL/opencl.hpp:404:109: note: ‘#pragma message: opencl.hpp: __CL_ENABLE_EXCEPTIONS is deprecated. Define CL_HPP_ENABLE_EXCEPTIONS instead’
  404 | # pragma message("opencl.hpp: __CL_ENABLE_EXCEPTIONS is deprecated. Define CL_HPP_ENABLE_EXCEPTIONS instead")
      |                                                                                                             ^
/usr/include/CL/opencl.hpp:437:112: note: ‘#pragma message: opencl.hpp: CL_HPP_TARGET_OPENCL_VERSION is not defined. It will default to 300 (OpenCL 3.0)’
  437 | # pragma message("opencl.hpp: CL_HPP_TARGET_OPENCL_VERSION is not defined. It will default to 300 (OpenCL 3.0)")
      |                                                                                                                ^
/usr/include/CL/opencl.hpp:457:109: note: ‘#pragma message: CL_TARGET_OPENCL_VERSION is already defined as is lower than CL_HPP_TARGET_OPENCL_VERSION’
  457 | # pragma message("CL_TARGET_OPENCL_VERSION is already defined as is lower than CL_HPP_TARGET_OPENCL_VERSION")
      |                                                                                                             ^
In file included from /usr/include/CL/cl.hpp:17,
                 from /home/s/srcs/gr-clenabled/lib/../include/clenabled/GRCLBase.h:25,
                 from /home/s/srcs/gr-clenabled/lib/clMathConst_impl.h:25,
                 from /home/s/srcs/gr-clenabled/lib/clMathConst_impl.cc:26:
/usr/include/CL/opencl.hpp:1454:1: error: ‘CL_PLATFORM_NUMERIC_VERSION’ was not declared in this scope; did you mean ‘CL_PLATFORM_NUMERIC_VERSION_KHR’?
 1454 | CL_HPP_PARAM_NAME_INFO_3_0_(CL_HPP_DECLARE_PARAM_TRAITS_)
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/CL/opencl.hpp:1454:1: error: template argument 2 is invalid
 1454 | CL_HPP_PARAM_NAME_INFO_3_0_(CL_HPP_DECLARE_PARAM_TRAITS_)
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/CL/opencl.hpp:1454:1: error: ‘CL_PLATFORM_EXTENSIONS_WITH_VERSION’ was not declared in this scope; did you mean ‘CL_PLATFORM_EXTENSIONS_WITH_VERSION_KHR’?

and many more of these (which i omit for brevity)

xxx was not declared in this scope; did you mean xxx_KHR?

the build then fails with:

In file included from /home/s/srcs/gr-clenabled/lib/../include/clenabled/GRCLBase.h:25,
                 from /home/s/srcs/gr-clenabled/lib/clMathConst_impl.h:25,
                 from /home/s/srcs/gr-clenabled/lib/clMathConst_impl.cc:26:
/usr/include/CL/cl.hpp:18:151: note: ‘#pragma message: cl2.hpp has been renamed to opencl.hpp to make it clear that it supports all versions of OpenCL. Please include opencl.hpp directly.’
   18 | #pragma message("cl2.hpp has been renamed to opencl.hpp to make it clear that it supports all versions of OpenCL. Please include opencl.hpp directly.")
      |                                                                                                                                                       ^
make[2]: *** [lib/CMakeFiles/gnuradio-clenabled.dir/build.make:82: lib/CMakeFiles/gnuradio-clenabled.dir/clMathConst_impl.cc.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:494: lib/CMakeFiles/gnuradio-clenabled.dir/all] Error 2
make: *** [Makefile:160: all] Error 2

anyway, i figured out, that if i set some symbols then i get much further:

% CXXFLAGS="-DCL_HPP_TARGET_OPENCL_VERSION=220 -DCL_HPP_ENABLE_EXCEPTIONS" cmake -Wno-dev -DCMAKE_INSTALL_PREFIX=/usr ..

then my build fails like this:

% make
Scanning dependencies of target clview
[  1%] Building CXX object lib/CMakeFiles/clview.dir/clview.cc.o
In file included from /home/s/srcs/gr-clenabled/lib/clview.cc:14:
/usr/include/CL/cl.hpp:18:151: note: ‘#pragma message: cl2.hpp has been renamed to opencl.hpp to make it clear that it supports all versions of OpenCL. Please include opencl.hpp directly.’
   18 | #pragma message("cl2.hpp has been renamed to opencl.hpp to make it clear that it supports all versions of OpenCL. Please include opencl.hpp directly.")
      |                                                                                                                                                       ^
[  2%] Linking CXX executable clview
[  2%] Built target clview
Scanning dependencies of target gnuradio-clenabled
[  3%] Building CXX object lib/CMakeFiles/gnuradio-clenabled.dir/clMathConst_impl.cc.o
In file included from /home/s/srcs/gr-clenabled/lib/../include/clenabled/GRCLBase.h:25,
                 from /home/s/srcs/gr-clenabled/lib/clMathConst_impl.h:25,
                 from /home/s/srcs/gr-clenabled/lib/clMathConst_impl.cc:26:
/usr/include/CL/cl.hpp:18:151: note: ‘#pragma message: cl2.hpp has been renamed to opencl.hpp to make it clear that it supports all versions of OpenCL. Please include opencl.hpp directly.’
   18 | #pragma message("cl2.hpp has been renamed to opencl.hpp to make it clear that it supports all versions of OpenCL. Please include opencl.hpp directly.")
      |                                                                                                                                                       ^
[  4%] Building CXX object lib/CMakeFiles/gnuradio-clenabled.dir/GRCLBase.cpp.o
In file included from /home/s/srcs/gr-clenabled/lib/../include/clenabled/GRCLBase.h:25,
                 from /home/s/srcs/gr-clenabled/lib/GRCLBase.cpp:10:
/usr/include/CL/cl.hpp:18:151: note: ‘#pragma message: cl2.hpp has been renamed to opencl.hpp to make it clear that it supports all versions of OpenCL. Please include opencl.hpp directly.’
   18 | #pragma message("cl2.hpp has been renamed to opencl.hpp to make it clear that it supports all versions of OpenCL. Please include opencl.hpp directly.")
      |                                                                                                                                                       ^
/home/s/srcs/gr-clenabled/lib/GRCLBase.cpp: In member function ‘bool gr::clenabled::GRCLBase::CompileKernel(const char*, const char*, bool)’:
/home/s/srcs/gr-clenabled/lib/GRCLBase.cpp:385:68: error: no matching function for call to ‘std::vector<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char> > >::vector(int, st
d::pair<const char*, int>)’
  385 |   sources=new cl::Program::Sources(1, std::make_pair(kernelCode, 0));
      |                                                                    ^
In file included from /usr/include/c++/10/vector:67,
                 from /usr/include/CL/opencl.hpp:594,
                 from /usr/include/CL/cl.hpp:17,
                 from /home/s/srcs/gr-clenabled/lib/../include/clenabled/GRCLBase.h:25,
                 from /home/s/srcs/gr-clenabled/lib/GRCLBase.cpp:10:
/usr/include/c++/10/bits/stl_vector.h:653:2: note: candidate: ‘template<class _InputIterator, class> std::vector<_Tp, _Alloc>::vector(_InputIterator, _InputIterator, const allocator_type&) [with _InputIter
ator = _InputIterator; <template-parameter-2-2> = <template-parameter-1-2>; _Tp = std::__cxx11::basic_string<char>; _Alloc = std::allocator<std::__cxx11::basic_string<char> >]’
  653 |  vector(_InputIterator __first, _InputIterator __last,
      |  ^~~~~~
/usr/include/c++/10/bits/stl_vector.h:653:2: note:   template argument deduction/substitution failed:
/home/s/srcs/gr-clenabled/lib/GRCLBase.cpp:385:68: note:   deduced conflicting types for parameter ‘_InputIterator’ (‘int’ and ‘std::pair<const char*, int>’)
  385 |   sources=new cl::Program::Sources(1, std::make_pair(kernelCode, 0));
      |                                                                    ^
In file included from /usr/include/c++/10/vector:67,
                 from /usr/include/CL/opencl.hpp:594,
                 from /usr/include/CL/cl.hpp:17,
                 from /home/s/srcs/gr-clenabled/lib/../include/clenabled/GRCLBase.h:25,
                 from /home/s/srcs/gr-clenabled/lib/GRCLBase.cpp:10:
/usr/include/c++/10/bits/stl_vector.h:625:7: note: candidate: ‘std::vector<_Tp, _Alloc>::vector(std::initializer_list<_Tp>, const allocator_type&) [with _Tp = std::__cxx11::basic_string<char>; _Alloc = std
::allocator<std::__cxx11::basic_string<char> >; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<std::__cxx11::basic_string<char> >]’
  625 |       vector(initializer_list<value_type> __l,                                                                                                                                              [14/2771]
      |       ^~~~~~
/usr/include/c++/10/bits/stl_vector.h:625:43: note:   no known conversion for argument 1 from ‘int’ to ‘std::initializer_list<std::__cxx11::basic_string<char> >’
  625 |       vector(initializer_list<value_type> __l,
      |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/stl_vector.h:607:7: note: candidate: ‘std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>&&, const allocator_type&) [with _Tp = std::__cxx11::basic_string<char>; _Alloc = std
::allocator<std::__cxx11::basic_string<char> >; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<std::__cxx11::basic_string<char> >]’
  607 |       vector(vector&& __rv, const allocator_type& __m)
      |       ^~~~~~
/usr/include/c++/10/bits/stl_vector.h:607:23: note:   no known conversion for argument 1 from ‘int’ to ‘std::vector<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char> > >&&’
  607 |       vector(vector&& __rv, const allocator_type& __m)
      |              ~~~~~~~~~^~~~
/usr/include/c++/10/bits/stl_vector.h:589:7: note: candidate: ‘std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>&&, const allocator_type&, std::false_type) [with _Tp = std::__cxx11::basic_string<ch
ar>; _Alloc = std::allocator<std::__cxx11::basic_string<char> >; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<std::__cxx11::basic_string<char> >; std::false_type = std::integral_constant<bool,
 false>]’
  589 |       vector(vector&& __rv, const allocator_type& __m, false_type)
      |       ^~~~~~
/usr/include/c++/10/bits/stl_vector.h:589:7: note:   candidate expects 3 arguments, 2 provided
/usr/include/c++/10/bits/stl_vector.h:585:7: note: candidate: ‘std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>&&, const allocator_type&, std::true_type) [with _Tp = std::__cxx11::basic_string<cha
r>; _Alloc = std::allocator<std::__cxx11::basic_string<char> >; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<std::__cxx11::basic_string<char> >; std::true_type = std::integral_constant<bool, t
rue>]’
  585 |       vector(vector&& __rv, const allocator_type& __m, true_type) noexcept
      |       ^~~~~~
/usr/include/c++/10/bits/stl_vector.h:585:7: note:   candidate expects 3 arguments, 2 provided
/usr/include/c++/10/bits/stl_vector.h:575:7: note: candidate: ‘std::vector<_Tp, _Alloc>::vector(const std::vector<_Tp, _Alloc>&, const allocator_type&) [with _Tp = std::__cxx11::basic_string<char>; _Alloc
= std::allocator<std::__cxx11::basic_string<char> >; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<std::__cxx11::basic_string<char> >]’
  575 |       vector(const vector& __x, const allocator_type& __a)
      |       ^~~~~~
/usr/include/c++/10/bits/stl_vector.h:575:28: note:   no known conversion for argument 1 from ‘int’ to ‘const std::vector<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char> >
 >&’
  575 |       vector(const vector& __x, const allocator_type& __a)
      |              ~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/stl_vector.h:572:7: note: candidate: ‘std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>&&) [with _Tp = std::__cxx11::basic_string<char>; _Alloc = std::allocator<std::__cxx1
1::basic_string<char> >]’
  572 |       vector(vector&&) noexcept = default;
      |       ^~~~~~
/usr/include/c++/10/bits/stl_vector.h:572:7: note:   candidate expects 1 argument, 2 provided
/usr/include/c++/10/bits/stl_vector.h:553:7: note: candidate: ‘std::vector<_Tp, _Alloc>::vector(const std::vector<_Tp, _Alloc>&) [with _Tp = std::__cxx11::basic_string<char>; _Alloc = std::allocator<std::_
_cxx11::basic_string<char> >]’
  553 |       vector(const vector& __x)
      |       ^~~~~~
/usr/include/c++/10/bits/stl_vector.h:553:7: note:   candidate expects 1 argument, 2 provided
/usr/include/c++/10/bits/stl_vector.h:522:7: note: candidate: ‘std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>::size_type, const value_type&, const allocator_type&) [with _Tp = std::__cxx11::basi
c_string<char>; _Alloc = std::allocator<std::__cxx11::basic_string<char> >; std::vector<_Tp, _Alloc>::size_type = long unsigned int; std::vector<_Tp, _Alloc>::value_type = std::__cxx11::basic_string<char>;
 std::vector<_Tp, _Alloc>::allocator_type = std::allocator<std::__cxx11::basic_string<char> >]’
  522 |       vector(size_type __n, const value_type& __value,
      |       ^~~~~~
/usr/include/c++/10/bits/stl_vector.h:522:47: note:   no known conversion for argument 2 from ‘std::pair<const char*, int>’ to ‘const value_type&’ {aka ‘const std::__cxx11::basic_string<char>&’}
  522 |       vector(size_type __n, const value_type& __value,
      |                             ~~~~~~~~~~~~~~~~~~^~~~~~~
/usr/include/c++/10/bits/stl_vector.h:510:7: note: candidate: ‘std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>::size_type, const allocator_type&) [with _Tp = std::__cxx11::basic_string<char>; _Al
loc = std::allocator<std::__cxx11::basic_string<char> >; std::vector<_Tp, _Alloc>::size_type = long unsigned int; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<std::__cxx11::basic_string<char>
>]’
  510 |       vector(size_type __n, const allocator_type& __a = allocator_type())
      |       ^~~~~~
/usr/include/c++/10/bits/stl_vector.h:510:51: note:   no known conversion for argument 2 from ‘std::pair<const char*, int>’ to ‘const allocator_type&’ {aka ‘const std::allocator<std::__cxx11::basic_string<
char> >&’}
  510 |       vector(size_type __n, const allocator_type& __a = allocator_type())
      |                             ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/10/bits/stl_vector.h:497:7: note: candidate: ‘std::vector<_Tp, _Alloc>::vector(const allocator_type&) [with _Tp = std::__cxx11::basic_string<char>; _Alloc = std::allocator<std::__cxx11::ba
sic_string<char> >; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<std::__cxx11::basic_string<char> >]’
  497 |       vector(const allocator_type& __a) _GLIBCXX_NOEXCEPT
      |       ^~~~~~
/usr/include/c++/10/bits/stl_vector.h:497:7: note:   candidate expects 1 argument, 2 provided
/usr/include/c++/10/bits/stl_vector.h:487:7: note: candidate: ‘std::vector<_Tp, _Alloc>::vector() [with _Tp = std::__cxx11::basic_string<char>; _Alloc = std::allocator<std::__cxx11::basic_string<char> >]’
  487 |       vector() = default;
      |       ^~~~~~
/usr/include/c++/10/bits/stl_vector.h:487:7: note:   candidate expects 0 arguments, 2 provided
make[2]: *** [lib/CMakeFiles/gnuradio-clenabled.dir/build.make:95: lib/CMakeFiles/gnuradio-clenabled.dir/GRCLBase.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:494: lib/CMakeFiles/gnuradio-clenabled.dir/all] Error 2
make: *** [Makefile:160: all] Error 2

any idea how to fix this?

from gr-clenabled.

ghostop14 avatar ghostop14 commented on June 9, 2024

I'd double-check the branch of clenabled you're cloning. There is a maint-3.8 branch for the repo, and master matches up with 3.9. So that can cause some mismatches. The deprecation warnings are "new" in that I really started getting them with Ubuntu 20, but it should still compile.

from gr-clenabled.

stef avatar stef commented on June 9, 2024

yeah, i am on maint-3.8

from gr-clenabled.

radio-dan avatar radio-dan commented on June 9, 2024

I'm trying to build the master branch on Mint 21 for gnuradio 3.10, and I'm running into this issue with needing to use the newer headers. The opencl headers package for that OS version no longer has cl.hpp, so we need to use cl2.hpp or (preferably, I think) opencl.hpp as stef has done in his pull request. What's the best way to get this resolved at this point?

There are also a couple other problems that I'll open separate issues on.

from gr-clenabled.

Related Issues (13)

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.