Totally agreed. The ultimate goal is to provide only a few high-level 
interfaces that can do the same as the Java version.
The implementation details are not as concerned since I assume enforcing 
object-oriented thinking in C can be very painful.


Luckily, TsFile does not need very complicated classes like CompletableFuture.
Most important classes (like headers and metadata) can be translated into C 
structs with little effort.


Since TsFile mainly involves in-memory data organization and IO operations, my 
primary concern lies in containers and memory management.
C++ provides convenient (and also efficient) containers like vectors and maps, 
but I am not familiar with alternatives in C.
Also, preventing memory leaking can be tricky and vital.
We may need advice from someone more experienced like you.




Tian Jiang








At 2024-04-16 15:42:36, "Christofer Dutz" <[email protected]> wrote:
>Hi Tian,
>
>I think the library should be close to the Java version semantically but 
>should not focus on mimicking Java functionality.
>
>Conceptually you should be doing the same high-level operations as in Java but 
>do them in a way that a C/C++ developer feels comfortable with.
>
>So, not implementing some CompletableFuture in C, but to use programming 
>paradigms that you use in C.
>
>Also did I build PLC4C aimed at embedded devices too and therefore implement a 
>lot less bells & whistles in drivers, because each bell & whistle needs memory 
>and CPU time.
>I guess TsFile is a bit different with that respect. But yeah … initially I 
>was planning on doing PLC4CPP, but decided to go for PLC4C as the number of 
>devices able to run simple low-level C was a lot higher.
>But they were also totally different requirements.
>
>Sure, I guess I’d be able to help with C … after all that was the first real 
>programming Language I learnt some time around 1995, while I was still at 
>school ;-)
>
>I would however lie, if I said I wouldn’t prefer high-level-languages such as 
>Java, but happy to help ;-)
>
>Chris
>
>
>Von: Tian Jiang <[email protected]>
>Datum: Dienstag, 16. April 2024 um 03:31
>An: [email protected] <[email protected]>
>Betreff: Re: Start of TsFile C
>Hi Chris,
>
>
>Thanks for your concerns and advice.
>I think it is good enough to keep our current method for the C++ client, 
>namely using CMake for the build and using Maven to call CMake and do the 
>packaging.
>However, things are going to be tough this time since we are not building 
>clients that are simply wrappers of the generated Thrift code.
>We are going to provide a fully functional TsFile library, which should have 
>write, read, and schema interfaces logically identical to those of the Java 
>version.
>The library is especially (and maybe only) meant for embedded systems, where 
>advanced features like class, intelligent point, or generic types in C++ may 
>not apply.
>This also limits the use of third-party libraries greatly, as you have 
>suggested.
>
>
>Fortunately, the TsFile has been well-designed and implemented in Java, so the 
>whole thing is possibly merely a code translation (a massive one, though).
>Unfortunately, we have very limited experience in primitive C programming.
>I assume we will probably struggle to make an available version for months.
>I think we might need your help to check whether the code can work well in an 
>embedded system.
>
>
>Best regards,
>Tian Jiang
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>At 2024-04-15 21:50:36, "Jialin Qiao" <[email protected]> wrote:
>>Hi, I support one large maven build, and manage each in their own.
>>
>>Jialin Qiao
>>
>>Christofer Dutz <[email protected]> 于2024年4月15日周一 20:51写道:
>>>
>>> Also, should we probably decide on how to build the project and how to 
>>> structure the sub-modules.
>>>
>>> Here, I would also like to propose using what we have in PLC4X, as getting 
>>> such a build to work is quite challenging and we’ve already managed to 
>>> integrate building the following languages in our build:
>>>
>>>
>>>   *   Java
>>>   *   Go
>>>   *   Python
>>>   *   C
>>>   *   C#
>>>   *   Rust
>>>
>>> The core principles we tried here, is to have one large maven build, that 
>>> is able to build all parts in one big reactor, but that each of the 
>>> sub-projects feel natural for developers in their particular languages.
>>>
>>> So, we use IntelliJ for developing the java parts, GoLand for the go part, 
>>> CLion for c, Raider for c#, PyCharm for Python, … also some people use 
>>> VSCode this way.
>>>
>>> As there are multiple ways of building C stuff, we decided to use CMake as 
>>> this seems very portable for Win, Mac and Linux. We should also try to stay 
>>> clear of requiring boost for the C-related parts as this complicates the 
>>> build a lot and having something that relies on core C is a lot more 
>>> portable, especially with respect to porting it to run on PLCs directly.
>>>
>>> For Rust we use the build in cargo stuff, for Go also the built-in stuff. 
>>> For python I think they use venv in combination with pip3.
>>>
>>> Chris
>>>
>>> Von: Jialin Qiao <[email protected]>
>>> Datum: Montag, 15. April 2024 um 12:03
>>> An: [email protected] <[email protected]>
>>> Betreff: Start of TsFile C
>>> Hi,
>>>
>>> To support more scenarios on the edge, we plan to start the C language
>>> TsFile development, The code will be in the same repo of
>>> apache/tsfile.
>>> Welcome to participate in this project :)
>>>
>>> Jialin Qiao

Reply via email to