Colfer는 속도와 크기에 최적화된 이진 직렬화 형식입니다.
프로젝트의 컴파일러 colf(1)
스키마 정의에서 데이터 구조를 마샬링 및 언마샬링하기 위한 소스 코드를 생성합니다.
이는 공개 도메인으로 출시된 무료이며 제한이 없는 소프트웨어입니다. 형식은 Proto col Buf fer s에서 영감을 받았습니다.
사전 구축된 컴파일러를 다운로드하거나 go get -u github.com/pascaldekloe/colfer/cmd/colf
실행하여 직접 만드세요. Homebrew 사용자는 brew install colfer
사용할 수도 있습니다.
이 명령은 인수 없이 호출되면 자체 매뉴얼을 인쇄합니다.
NAME
colf — compile Colfer schemas
SYNOPSIS
colf [-h]
colf [-vf] [-b directory] [-p package]
[-s expression] [-l expression] C [file ...]
colf [-vf] [-b directory] [-p package] [-t files]
[-s expression] [-l expression] Go [file ...]
colf [-vf] [-b directory] [-p package] [-t files]
[-x class] [-i interfaces] [-c file]
[-s expression] [-l expression] Java [file ...]
colf [-vf] [-b directory] [-p package]
[-s expression] [-l expression] JavaScript [file ...]
DESCRIPTION
The output is source code for either C, Go, Java or JavaScript.
For each operand that names a file of a type other than
directory, colf reads the content as schema input. For each
named directory, colf reads all files with a .colf extension
within that directory. If no operands are given, the contents of
the current directory are used.
A package definition may be spread over several schema files.
The directory hierarchy of the input is not relevant to the
generated code.
OPTIONS
-b directory
Use a base directory for the generated code. (default ".")
-c file
Insert a code snippet from a file.
-f Normalize the format of all schema input on the fly.
-h Prints the manual to standard error.
-i interfaces
Make all generated classes implement one or more interfaces.
Use commas as a list separator.
-l expression
Set the default upper limit for the number of elements in a
list. The expression is applied to the target language under
the name ColferListMax. (default "64 * 1024")
-p package
Compile to a package prefix.
-s expression
Set the default upper limit for serial byte sizes. The
expression is applied to the target language under the name
ColferSizeMax. (default "16 * 1024 * 1024")
-t files
Supply custom tags with one or more files. Use commas as a list
separator. See the TAGS section for details.
-v Enable verbose reporting to standard error.
-x class
Make all generated classes extend a super class.
TAGS
Tags, a.k.a. annotations, are source code additions for structs
and/or fields. Input for the compiler can be specified with the
-t option. The data format is line-oriented.
<line> :≡ <qual> <space> <code> ;
<qual> :≡ <package> '.' <dest> ;
<dest> :≡ <struct> | <struct> '.' <field> ;
Lines starting with a '#' are ignored (as comments). Java output
can take multiple tag lines for the same struct or field. Each
code line is applied in order of appearance.
EXIT STATUS
The command exits 0 on success, 1 on error and 2 when invoked
without arguments.
EXAMPLES
Compile ./io.colf with compact limits as C:
colf -b src -s 2048 -l 96 C io.colf
Compile ./*.colf with a common parent as Java:
colf -p com.example.model -x com.example.io.IOBean Java
BUGS
Report bugs at <https://github.com/pascaldekloe/colfer/issues>.
Text validation is not part of the marshalling and unmarshalling
process. C and Go just pass any malformed UTF-8 characters. Java
and JavaScript replace unmappable content with the '?' character
(ASCII 63).
SEE ALSO
protoc(1), flatc(1)
빌드 일관성을 유지하고 컴파일러 설치 필요성을 최소화하려면 생성된 소스 코드를 해당 버전 제어에 커밋하는 것이 좋습니다. 또는 Maven 플러그인을 사용할 수도 있습니다.
< plugin >
< groupId >net.quies.colfer</ groupId >
< artifactId >colfer-maven-plugin</ artifactId >
< version >1.11.2</ version >
< configuration >
< packagePrefix >com/example</ packagePrefix >
</ configuration >
</ plugin >
데이터 구조는 .colf
파일에 정의됩니다. 형식은 매우 자명합니다.
// Package demo offers a demonstration.
// These comment lines will end up in the generated code.
package demo
// Course is the grounds where the game of golf is played.
type course struct {
ID uint64
name text
holes []hole
image binary
tags []text
}
type hole struct {
// Lat is the latitude of the cup.
lat float64
// Lon is the longitude of the cup.
lon float64
// Par is the difficulty index.
par uint8
// Water marks the presence of water.
water bool
// Sand marks the presence of sand.
sand bool
}
C, Go, Java 또는 JavaScript에서 생성된 코드가 어떻게 보이는지 확인하세요.
다음 표는 Colfer 데이터 유형이 언어별로 어떻게 적용되는지 보여줍니다.
콜퍼 | 기음 | 가다 | 자바 | 자바스크립트 |
---|---|---|---|---|
부울 | 숯 | 부울 | 부울 | 부울 |
uint8 | uint8_t | uint8 | 바이트 † | 숫자 |
단위16 | uint16_t | 단위16 | 짧은 † | 숫자 |
uint32 | uint32_t | uint32 | 정수 † | 숫자 |
단위64 | uint64_t | 단위64 | 긴 † | 숫자 ‡ |
정수32 | int32_t | 정수32 | 정수 | 숫자 |
정수64 | int64_t | 정수64 | 긴 | 숫자 ‡ |
float32 | 뜨다 | float32 | 뜨다 | 숫자 |
float64 | 더블 | float64 | 더블 | 숫자 |
타임스탬프 | 시간 사양 | 시간.시간 †† | 시간.인스턴트 | 날짜 + 숫자 |
텍스트 | const char* + size_t | 끈 | 끈 | 끈 |
바이너리 | uint8_t* + size_t | []바이트 | 바이트[] | Uint8Array |
목록 | * + size_t | 일부분 | 정렬 | 정렬 |
목록에는 부동 소수점, 텍스트, 바이너리 또는 데이터 구조가 포함될 수 있습니다.
Colfer는 네트워크 I/O 또는 대량 스트림과 같은 신뢰할 수 없는 데이터 소스에 적합합니다. 마샬링 및 역마샬링에는 크기 보호 기능이 내장되어 있어 예측 가능한 메모리 소비를 보장합니다. 이 형식은 설계상 메모리 폭탄을 방지합니다.
마샬러는 데이터 입력에 관계없이 잘못된 형식의 출력을 생성하지 않을 수 있습니다. 어떤 경우에도 언마샬러는 연재물의 경계 외부를 읽을 수 없습니다. 퍼지 테스트에서는 아직 취약성이 밝혀지지 않았습니다. 컴퓨팅 파워는 환영합니다.
이름 변경은 직렬화 형식에 영향을 주지 않습니다. 더 이상 사용되지 않는 필드의 이름을 변경하여 사용을 확실히 금지해야 합니다. 이전 버전과의 호환성을 위해 콜퍼 구조체 끝에 새 필드를 추가해야 합니다. 따라서 필드 수는 스키마 버전으로 볼 수 있습니다.
Colfer는 신뢰성을 저하시키지 않으면서 가장 빠르고 가장 작은 형식을 목표로 합니다. 비교를 위해 벤치마크 위키를 참조하세요. 최적이 아닌 성능은 버그처럼 취급됩니다.