thanks for summing this up, Holger.
one thing to add: also android has to switch to the rust-core soonish
as, starting on August 1st, google requires all apps to ship with 64bit
native code. while the rust-core compiles for 64bit, the c-core does
not - and i do not think it is worth the effort to fix that.
On 26.07.2019 12:42, holger krekel wrote:
> As some of you are aware there were a lot of changes
> the last weeks in rust-core:
>
https://github.com/deltachat/deltachat-core-rust/pulse/monthly
>
> Thanks to everybody who contributed and of course most to @dignifiedquire
> who kick-started and guides the crazy efforts on April 26th, 2019 now
> known as rust core or DCC-RS sometimes.
>
> However, master is currently less stable than it was beginning June -- i guess
> that 4e41dbf5ab0bf23de57ea6c0841b50047b382ff0 was still quite stable FYI.
>
> On Master there are bugs like "E2E-encryption unavailable unexpectedly"
(#233) and
> incoming messages appearing corrupted (#223). At the same time, it's not easy
> to debug those as there still is a lot of hard-to-read code that stems from
> the original C2Rust translation. Here is an example of a merged PR that
> removes some of those "goto" reminescences:
>
https://github.com/deltachat/deltachat-core-rust/pull/229
>
> The idea here and probably with many other commits is to *separate functional changes
> from re-indentation changes* to allow precise review. It's very easy to
introduce
> logical bugs if no one can properly compared "before/after". Cleanup PRs
typically
> should come in a Two-Commit form: one commit changing only logic (minimize
indentation changes)
> and one only doing "cargo fmt". You typically only review the first
commit
> and trust that the committer really did nothing else than "cargo fmt" in
> the second. Cleanup PRs can be easily done by Rust-newcomers and they
> greatly help readability and debuggability of everything. Here is
> the current count of unsafe/free/goto usages in core:
>
> dc_tools.rs unsafe: 91 free: 59 goto-blocks: 4
> dc_msg.rs unsafe: 60 free: 38 goto-blocks: 3
> dc_chat.rs unsafe: 70 free: 30 goto-blocks: 0
> dc_imex.rs unsafe: 14 free: 30 goto-blocks: 48
> dc_configure.rs unsafe: 15 free: 20 goto-blocks: 38
> dc_contact.rs unsafe: 51 free: 19 goto-blocks: 0
> dc_mimeparser.rs unsafe: 29 free: 29 goto-blocks: 12
> dc_job.rs unsafe: 28 free: 11 goto-blocks: 29
> dc_receive_imf.rs unsafe: 16 free: 22 goto-blocks: 19
> dc_securejoin.rs unsafe: 13 free: 14 goto-blocks: 29
> ...
> ...
> total unsafe: 653
> total free: 436
> total gotoblocks: 234
>
> Note that the latter total is down ~20% compared to June
8/4e41dbf5ab0bf23de57ea6c0841b50047b382ff0:
>
> total unsafe: 768
> total free: 565
> total gotoblocks: 294
>
> The list can be obtained by executing "python top_level_evil.py" in the src
dir.
>
> It'd be good to accelerate this cleanup-by-cleanup effort in order to help
overall stability
> and readability. You may look at the "dc_*.c" counterpart file in
>
https://github.com/deltachat/deltachat-core/tree/master/src
> if editing a rust-file -- often there are also comments which are good to transfer.
>
> Floris' note made sense to me here: "it probably will get worse before it
gets better".
> As long as we have tons of unsafe/safe boundaries, changing some of them
> can easily corrupt others.
>
> There also are deeper cleanup-PRs like the past sqlite, strbuilder ones or the
current
>
https://github.com/deltachat/deltachat-core-rust/pull/211 (dc_array as Rust vector)
>
https://github.com/deltachat/deltachat-core-rust/pull/188 (new stock strings API)
>
> Such cleanup-PRs require more Rust-knowledge already but also have a much deeper
> pleasurable effect ;) I btw recommend all rust-beginners to watch the repo
> and follow PRs and comments. Lots of little things to learn there ;)
>
> There are some more ideas on larger scale cleanups (requiring deeper knowledge), eg:
>
> - remove all usage of char* path-handling code contained in dc_tools.rs
> with rust Path usage. This also removes a lot of alloc/free code in
> many places.
>
> - encasuplate (and finally) replace "mmime" (the mime-parser C2Rust
translated
> from libetpan) such that core code (dc_mimeparser as consumer and producer
> of APIs) does not leak C-pointers left and right and forces one to use
> "carray" or "clist" in regular core-rust vectors. I gues that
> Friedel/@dignifiedquire and Bjoern/@r10s might have more refined
> ideas on how this could be done.
>
> - please tell ;)
>
> Lastly, i mentioned the Rust-sprint idea but i am myself not available
> in August and first half september there already is a UX/DC gathering
> which focuses strongly on UX issues, so not good to mix with rust-core.
>
> It seems likely that in the week of Sept 23-30th several folks
> interested in DC and/or Rust will hang out in Freiburg/DE to do hack
> sessions and discussions around rust-core together. Also the-compiler
> and me intend to use 2 days in that week to advance DC chat bots and
> maybe start a PyQT-based DC client for added fun. If anyone wants
> to join but lacks money to make the travel, please mail me.
>
> On a related side note Bjoern and Richy are continuing to focus
> on getting a major reworked "Delta/iOS" version out soon (tm).
> Delta/iOS uses rust-core so fixing the aforementioned bug-showstoppers
> remains a priority as well. Also, OAUTH2 is not working again yet (#119).
>
> I think i am not the only one looking very much forward to having
> rust-core become stable and nice :) It is the single basis for all DC apps and
> will allow many interesting new feature and UX developments ... on which
> several of us also want to engage in 2019 ... For one, there are the longer standing
> issues from our Cuban friends who need better control over data/server-storage
> usage ... but also needs from people who need alternatives when Signal,
> Whatsapp or other centralised services are blocked ... which happens and
> threatens to happen in many places these days.
>
> so much for now, keep up all the good work and thanks for any help!
> holger (who is mostly afk in August)
>
> P.S.: subscription to mailing list:
>
https://lists.codespeak.net/postorius/lists/delta.codespeak.net/
> chatting with folks: #deltachat on freenode
> _______________________________________________
> delta mailing list -- delta(a)codespeak.net
> To unsubscribe send an email to delta-leave(a)codespeak.net
>