标签归档:golang

Antlr4-ANTLR 是一个功能强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件

ANTLR(另一个用于语言识别的工具)是一个功能强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件。它被广泛用于构建语言、工具和框架。根据语法,ANTLR生成一个解析器,该解析器可以构建解析树,还可以生成一个侦听器接口(或访问器),从而可以轻松地响应感兴趣的短语的识别

考虑到日间工作的限制,我在这个项目上的工作时间有限,因此我必须首先专注于修复bug,而不是更改/改进功能集。很可能我每隔几个月就会突然做一次。如果您的bug或Pull请求没有产生响应,请不要生气!–parrt

作者和主要贡献者

有用的信息

您可能还会发现以下页面很有用,特别是当您想要使用各种目标语言时

权威的ANTLR 4参考

程序员总是遇到解析问题。无论是JSON这样的数据格式,SMTP这样的网络协议,Apache的服务器配置文件,PostScript/PDF文件,还是简单的电子表格宏语言-ANTLR v4,本书都将揭开这个过程的神秘面纱。ANTLRv4已经从头开始重写,使得构建解析器和构建在其上的语言应用程序比以往任何时候都更加容易。这本完全改写的新版畅销ANTLR权威参考向您展示了如何利用这些新功能

你可以买这本书The Definitive ANTLR 4 Reference在亚马逊或electronic version at the publisher’s site

您会发现Book source code有用的

附加语法

This repository是不带动作的语法集合,其中根目录名是语法分析的语言的全小写名称。例如,java、cpp、cSharp、c等

Pyroscope-🔥连续性能分析平台🔥调试性能问题可归结为一行代码

Pyroscope是一个开源的连续性能剖析平台。它将帮助您:

  • 查找代码中的性能问题
  • 解决CPU利用率高的问题
  • 了解应用程序的调用树
  • 跟踪随时间变化的情况

🔥Pyroscope Live Demo🔥

功能

  • 可以存储来自多个应用程序的多年性能分析数据
  • 您可以一次查看多年数据,也可以放大特定事件
  • 低CPU开销
  • 高效压缩、低磁盘空间需求
  • 时髦的用户界面
  • 支持Go、Ruby和Python

分3步在本地试用Pyroscope:

# install pyroscope
brew install pyroscope-io/brew/pyroscope

# start pyroscope server:
pyroscope server

# in a separate tab, start profiling your app:
pyroscope exec python manage.py runserver # If using Python
pyroscope exec rails server               # If using Ruby

# If using Pyroscope cloud add flags for server address and auth token
# pyroscope exec -server-address "https://your_company.pyroscope.cloud" -auth-token "ps-key-1234567890" python manage.py runserver

文档

有关如何将Pyroscope与其他编程语言配合使用、在Linux上安装或在生产环境中使用的更多信息,请查看我们的文档:

下载次数

您可以从我们的网站下载适用于MacOS、Linux和Docker的最新版本的PyroscopeDownloads page

支持的集成

  • 红宝石(通过rbspy)
  • Python(通过py-spy)
  • 前往(途经pprof)
  • Linux eBPF(VIAprofile.py从…bcc-tools)
  • PHP(通过phpspy)
  • .NET(通过dotnet trace)
  • Java(即将推出)

请让我们知道您希望在our issues或在our slack

学分

高温镜之所以成为可能,要归功于许多人的出色工作,包括但不限于:

  • 布兰登·格雷格(Brendan Gregg)-火焰图的发明者
  • Julia Evans-Ruby的rbspy采样剖析器的创建者
  • 弗拉基米尔·阿加方金(Vladimir Agafonkin)-火焰手的创建者-快速火焰图形渲染器
  • Ben Frederickson-Python的py-spy采样分析器的创建者
  • Adam Saponara-PHP采样剖析器的创建者
  • Alexei Starovoitov、Brendan Gregg和其他许多使Linux内核中基于BPF的分析成为可能的人

贡献

要开始投稿,请查看我们的Contributing Guide

感谢Pyroscope的贡献者!

MMKV-微信开发的高效、小型的移动键值存储框架。适用于Android、iOS、MacOS、Windows和POSIX

MMKV是一种高效小的易于使用微信应用中使用的移动键值存储框架。它目前在以下位置可用安卓系统iOS/MacOSWin32POSIX

适用于Android的MMKV

功能

  • 高效MMKV使用mmap与文件保持内存同步,使用协议buf对值进行编码/解码,充分利用Android实现最佳性能
    • 多进程并发:MMKV支持进程间并发读写访问
  • 易于使用你可以边走边用MMKV。所有更改都会立即保存,否sync,否apply需要的呼叫数
  • 小的
    • 几个文件:MMKV包含进程锁、编码/解码助手和mmap逻辑等。真的很整洁
    • 二进制大小约为50K:MMKV在应用程序大小上为每个架构增加约50K,压缩后增加的更少(Apk)

快速入门

通过Maven安装

将以下行添加到build.gradle在您的应用程序模块上:

dependencies {
    implementation 'com.tencent:mmkv-static:1.2.10'
    // replace "1.2.10" with any available version
}

从1.2.8版本开始,MMKV已经已迁移到Maven Central旧版本(<=v1.2.7)仍可在JCenter上使用
有关其他安装选项,请参见Android Setup

快速教程

你可以边走边用MMKV。所有更改都会立即保存,否sync,否apply需要的呼叫数
在应用程序启动时设置MMKV,表示您的Application类中,添加以下行:

public void onCreate() {
    super.onCreate();

    String rootDir = MMKV.initialize(this);
    System.out.println("mmkv root: " + rootDir);
    //……
}

MMKV有一个全局实例,可以直接使用:

import com.tencent.mmkv.MMKV;
    
MMKV kv = MMKV.defaultMMKV();

kv.encode("bool", true);
boolean bValue = kv.decodeBool("bool");

kv.encode("int", Integer.MIN_VALUE);
int iValue = kv.decodeInt("int");

kv.encode("string", "Hello from mmkv");
String str = kv.decodeString("string");

MMKV还支持多进程访问完整的教程可在此处找到Android Tutorial

性能

随机写入int1000次之后,我们得到了这个图表:

有关更多基准数据,请参阅our benchmark

适用于iOS/MacOS的MMKV

功能

  • 高效MMKV使用mmap与文件保持内存同步,使用协议buf对值进行编码/解码,充分利用IOS/MacOS实现最佳性能
  • 易于使用你可以随时随地使用MMKV,不需要配置。所有更改都会立即保存,否synchronize需要的呼叫数
  • 小的
    • 几个文件:mmkv包含编码/解码助手和mmap逻辑,仅此而已。真的很整洁
    • 二进制大小小于30K:MMKV对每个架构的应用程序大小增加不到30K,压缩后(IPA)增加的更少

快速入门

通过CocoaPods安装:

  1. 安装CocoaPods
  2. 开放式终端,cd到您的项目目录,运行pod repo update使CocoaPods了解最新的MMKV版本;
  3. 编辑您的Podfile,添加pod 'MMKV'发送到您的应用程序目标;
  4. pod install
  5. 打开.xcworkspaceCocoaPods生成的文件;
  6. 添加#import <MMKV/MMKV.h>添加到您的源文件中,我们就完成了

有关其他安装选项,请参见iOS/macOS Setup

快速教程

你可以随时随地使用MMKV,不需要配置。所有更改都会立即保存,否synchronize需要打电话。在应用程序启动时设置MMKV,在您的-[MyApp application: didFinishLaunchingWithOptions:],添加以下行:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // init MMKV in the main thread
    [MMKV initializeMMKV:nil];

    //...
    return YES;
}

MMKV有一个全局实例,可以直接使用:

MMKV *mmkv = [MMKV defaultMMKV];
    
[mmkv setBool:YES forKey:@"bool"];
BOOL bValue = [mmkv getBoolForKey:@"bool"];
    
[mmkv setInt32:-1024 forKey:@"int32"];
int32_t iValue = [mmkv getInt32ForKey:@"int32"];
    
[mmkv setString:@"hello, mmkv" forKey:@"string"];
NSString *str = [mmkv getStringForKey:@"string"];

MMKV还支持多进程访问可以找到完整的教程here

性能

随机写入int对于10000次,我们得到了这个图表:

有关更多基准数据,请参阅our benchmark

适用于Win32的MMKV

功能

  • 高效MMKV使用mmap与文件保持内存同步,使用协议buf对值进行编码/解码,充分利用Windows实现最佳性能
    • 多进程并发:MMKV支持进程间并发读写访问
  • 易于使用你可以边走边用MMKV。所有更改都会立即保存,否save,否sync需要的呼叫数
  • 小的
    • 几个文件:MMKV包含进程锁、编码/解码助手和mmap逻辑等。真的很整洁
    • 二进制大小约为10K:MMKV增加了大约10K的应用程序大小,而压缩后的应用程序大小要少得多

快速入门

通过源安装

  1. 从GIT存储库获取源代码:
    git clone https://github.com/Tencent/MMKV.git
    
  2. 添加Win32/MMKV/MMKV.vcxproj您的解决方案;
  3. 添加MMKV项目到项目的依赖项;
  4. 添加$(OutDir)include到您的项目的C/C++->General->Additional Include Directories
  5. 添加$(OutDir)到您的项目的Linker->General->Additional Library Directories
  6. 添加MMKV.lib到您的项目的Linker->Input->Additional Dependencies
  7. 添加#include <MMKV/MMKV.h>添加到您的源文件中,我们就完成了

注:

  1. MMKV是用MT/MTd默认情况下运行时。如果您的项目使用MD/MDd,您应该更改MMKV的设置以匹配您的项目(C/C++->Code Generation->Runtime Library),或反之亦然
  2. MMKV是用Visual Studio 2017开发的,更改Platform Toolset如果使用不同版本的Visual Studio

有关其他安装选项,请参见Win32 Setup

快速教程

你可以边走边用MMKV。所有更改都会立即保存,否sync,否save需要的呼叫数
在应用程序启动时设置MMKV,例如在您的main(),添加以下行:

#include <MMKV/MMKV.h>

int main() {
    std::wstring rootDir = getYourAppDocumentDir();
    MMKV::initializeMMKV(rootDir);
    //...
}

MMKV有一个全局实例,可以直接使用:

auto mmkv = MMKV::defaultMMKV();

mmkv->set(true, "bool");
std::cout << "bool = " << mmkv->getBool("bool") << std::endl;

mmkv->set(1024, "int32");
std::cout << "int32 = " << mmkv->getInt32("int32") << std::endl;

mmkv->set("Hello, MMKV for Win32", "string");
std::string result;
mmkv->getString("string", result);
std::cout << "string = " << result << std::endl;

MMKV还支持多进程访问完整的教程可在此处找到Win32 Tutorial

用于POSIX的MMKV

功能

  • 高效MMKV使用mmap来保持内存与文件的同步,使用protocol buf来编解码值,充分利用POSIX来实现最佳性能
    • 多进程并发:MMKV支持进程间并发读写访问
  • 易于使用你可以边走边用MMKV。所有更改都会立即保存,否save,否sync需要的呼叫数
  • 小的
    • 几个文件:MMKV包含进程锁、编码/解码助手和mmap逻辑等。真的很整洁
    • 二进制大小约为7K:MMKV增加了大约7K的应用程序大小,而压缩后的大小要少得多

快速入门

通过CMake安装

  1. 从GIT存储库获取源代码:
    git clone https://github.com/Tencent/MMKV.git
    
  2. 编辑您的CMakeLists.txt,添加以下行:
    add_subdirectory(mmkv/POSIX/src mmkv)
    target_link_libraries(MyApp
        mmkv)
  3. 添加#include "MMKV.h"添加到您的源文件中,我们就完成了

有关其他安装选项,请参见POSIX Setup

快速教程

你可以边走边用MMKV。所有更改都会立即保存,否sync,否save需要的呼叫数
在应用程序启动时设置MMKV,例如在您的main(),添加以下行:

#include "MMKV.h"

int main() {
    std::string rootDir = getYourAppDocumentDir();
    MMKV::initializeMMKV(rootDir);
    //...
}

MMKV有一个全局实例,可以直接使用:

auto mmkv = MMKV::defaultMMKV();

mmkv->set(true, "bool");
std::cout << "bool = " << mmkv->getBool("bool") << std::endl;

mmkv->set(1024, "int32");
std::cout << "int32 = " << mmkv->getInt32("int32") << std::endl;

mmkv->set("Hello, MMKV for Win32", "string");
std::string result;
mmkv->getString("string", result);
std::cout << "string = " << result << std::endl;

MMKV还支持多进程访问完整的教程可在此处找到POSIX Tutorial

许可证

MMKV是在BSD 3条款许可下发布的。有关详细信息,请查看LICENSE.TXT

更改日志

请查看CHANGELOG.md有关更改历史的详细信息,请参阅

贡献

如果您对贡献感兴趣,请查看CONTRIBUTING.md,也加入我们的Tencent OpenSource Plan

为了明确对我们的成员的期望,MMKV通过了被广泛使用的贡献者公约定义的行为准则。我们认为它很好地表达了我们的价值观。有关更多信息,请查看Code of Conduct

常见问题和反馈

请查看FAQ第一。如果有任何问题,请不要犹豫issues

Project-based-learning-基于项目的教程的精选列表

Project Based Learning

编程教程列表,学员可以在这些教程中从头开始构建应用程序。这些教程分为不同的主要编程语言。有些拥有混合的技术和语言

要开始,只需fork此仓库即可。有关投稿指南,请参阅CONTRIBUTING.md

目录:

C/C++:

网络编程

OpenGL:

C#:

闭合:

灵丹妙药

二郎

F编号:

Java:

JavaScript:

HTML和CSS:

移动应用:

Web应用程序:

节点:

VUE

其他(Hapi,Express.):

D3.js

Others (Hapi, Express…):

D3.js

游戏开发:

桌面应用程序:

其他:

科特林:

Lua:

L?VE:

巨蟒:

网络抓取:

机器人:

数据科学:

机器学习:

OpenCV:

深度学习:

Ruby on Rails:

反应:

开始:

PHP:

OCaml:

红宝石:

角度:

哈斯克尔:

R:

Rust:

Scala:

Swift:

其他资源