C/C++开发工具ThreadStack、tin-project、nmscc、zproto介绍

以下为你介绍的C/C++开发工具都可用在Linux系统上:ThreadStack(为 C++ 多线程编程生成类库)、tin-project(完整实现的 C++ 版 Go 语言运行时)、nmscc(面向科学计算的 C++库)、zproto(轻量级的序列化工具)。

1、ThreadStack(为 C++ 多线程编程生成类库)

ThreadStack 可以为 C++ 多线程编程生成一个类库,此外由 ThreadStack 构建的库充当线程同步任务的自治管理系统。

具有以下特性:

死锁保护、多线程计算的创新、简易的多线程计算、自主线程管理、确定性多线程、应用程序特定的线程库。

以下为运行截图:

C/C++开发工具ThreadStack、tin-project、nmscc、zproto介绍

C/C++开发工具ThreadStack、tin-project、nmscc、zproto介绍

C/C++开发工具ThreadStack、tin-project、nmscc、zproto介绍

C/C++开发工具ThreadStack、tin-project、nmscc、zproto介绍

2、tin-project(完整实现的 C++ 版 Go 语言运行时)

tin 项目是完整实现的 C++ 版 go 语言运行时。它参考 go 语言运行时,将 go 语言运行时用 C++ 重写了一遍,让你可以在 C++ 中使用 go 的风格写程序。

平台:

Windows XP or later、OS X 10.8 or later、Linux 2.6.23 or later。

构建:

git clone --recursive https://github.com/cloudpeak/tin.git

mkdir build

cd build

Visual Studio 2015 Win64

cmake -G "Visual Studio 14 2015 Win64" ../tin -DCMAKE_BUILD_TYPE=RELEASE

Visual Studio 2015 Win32

cmake -G "Visual Studio 14 2015" ../tin -DCMAKE_BUILD_TYPE=RELEASE

Visual Studio 2008 Win32

cmake -G "Visual Studio 9 2008" ../tin -DCMAKE_BUILD_TYPE=RELEASE

GCC or Clang

cmake ../tin -DCMAKE_BUILD_TYPE=RELEASE && make

示例:

#include "tin/all.h"

void HandleClient(tin::net::TcpConn conn) {

// Set TCP Read Write buffer.

conn->SetReadBuffer(64 * 1024);

conn->SetWriteBuffer(64 * 1024);

// user space buffer size.

const int kIOBufferSize = 4 * 1024;

scoped_ptr<char[]> buf(new char[kIOBufferSize]);

// set read, write deadline.

const int64 kRWDeadline = 20 * tin::kSecond;

conn->SetDeadline(kRWDeadline);

while (true) {

int n = conn->Read(buf.get(), kIOBufferSize);

int err = tin::GetErrorCode();

if (n > 0) {

conn->SetReadDeadline(kRWDeadline);

}

if (err != 0) {

VLOG(1) << "Read failed due to: " << tin::GetErrorStr();

// FIN received, graceful close, we can still send.

if (err == TIN_EOF) {

if (n > 0) {

conn->Write(buf.get(), n);

}

conn->CloseWrite();

// delay a while to avoid RST.

tin::NanoSleep(500 * tin::kMillisecond);

}

break;

}

DCHECK_GT(n, 0);

conn->Write(buf.get(), n);

if (tin::GetErrorCode() != 0) {

VLOG(1) << "Write failed due to " << tin::GetErrorStr();

break;

}

conn->SetWriteDeadline(kRWDeadline);

}

conn->Close();

}

int TinMain(int argc, char** argv) {

const uint16 kPort = 2222;

bool use_ipv6 = false;

tin::net::TCPListener listener =

tin::net::ListenTcp(use_ipv6 ? "0:0:0:0:0:0:0:0" : "0.0.0.0", kPort);

if (tin::GetErrorCode() != 0) {

LOG(FATAL) << "Listen failed due to " << tin::GetErrorStr();

}

LOG(INFO) << "echo server is listening on port: " << kPort;

while (true) {

tin::net::TcpConn conn = listener->Accept();

if (tin::GetErrorCode() == 0) {

tin::Spawn(&HandleClient, conn);

} else {

LOG(INFO) << "Accept failed due to " << tin::GetErrorStr();

}

}

return 0;

}

int main(int argc, char** argv) {

tin::Initialize();

// set logging level.

logging::SetMinLogLevel(logging::LOG_INFO);

// set max p count.

tin::Config config = tin::DefaultConfig();

config.SetMaxProcs(base::SysInfo::NumberOfProcessors());

// start the world.

tin::PowerOn(TinMain, argc, argv, &config);

// wait for power off

tin::WaitForPowerOff();

// cleanup.

tin::Deinitialize();

return 0;

}

下载地址:https://gitee.com/mycloudpeak/tin

3、nmscc(面向科学计算的 C++库)

C/C++开发工具ThreadStack、tin-project、nmscc、zproto介绍

这是一个面向科学计算的 C++库。

主要包含对多维数组的惰性表达式求值,数学库,CUDA支持(自带CUDA编译器,能支持各种版本的C++编译器),及一些辅助功能,如单元测试,字符串格式化,Json/Xml序列化等。

4、zproto(轻量级的序列化工具)

一款类似 Google protobuf 的序列化工具,但是更轻量级,目前支持 C#,C++,Lua 等多种语言。

描述:

结构由成员组成,成员的类型可以是基本类型或其他结构类型。

基本类型可以是“布尔”或“整数”或“长”或“字符串”。

所有注释行均以“#”开头。

所有结构或字段名称均以“a-zA-Z”开头。

所有字段名称必须在字符“.”之后定义。

结构或字段名称和字段标签在范围内必须唯一。

字段标签必须大于0,并由ASC定义。

当类型的后缀(包括结构和基本类型)为[]时,表示此字段为数组。

结构可以定义如下:

#only the struct which has no parent can specify the protocol

#protocol is aka struct name when it's explicitly specified

#protocol is option and default value is '0'

#protocol value can be queryed by zproto:tag@zproto.lua

name [protocol] {

.name:type 1

...

}

协议定义示例可能像这样:

#comments line

info {

.name:string 1

.age:integer 2

.girl:boolean 3

}

packet 0xfe {

phone {

.home:integer 1

.work:long 2

}

.phone:phone 1

.info:info[] 2

.address:string 3

.luck:integer[] 4

}

## luabind

此代码是luabind文件夹中zproto的简单lua绑定。

它提供了一个简单的测试代码,您可以按以下方式运行它:

下载lua-5.3或更高版本并解压缩到luabind/lua53。

执行“make linux”或“make macosx”以构建zproto.so。

执行“./test”以运行测试代码。

## cppbind和csbind

该代码是[cppbind | csbind]文件夹中zproto的简单[C++|C#]绑定。

它还提供了一个简单的测试代码,您可以按以下方式运行它:

执行“make”以构建名为“zproto”的可执行文件,“zproto”用于从定义为zproto语法的文件中生成[C++|C#]绑定代码。

执行'./zproto test.zproto'生成test.zproto的[C++|C#]绑定代码。

执行“make test”以构建测试程序。

执行“./test”以运行测试代码。

下载地址:https://github.com/findstr/zproto

注明

以上就是C/C++开发工具ThreadStack、tin-project、nmscc、zproto的介绍内容,这些C/C++开发工具都能使用在Linux操作系统中。

栏目相关文章