> Excerpts from hermitte's message of Wed Nov 27 14:44:42 +0100 2013:
> > The difficulty with C++, is to force ourselves to forget we also
> > know C.
> > (BTW, C/C++ is a beast that shall be hunt down. Either code in C,
> > or in C++. Never try to import C good practices in C++ because
> > they don't apply)
> Historically I was told that C++ was written to "reuse the knowledge
> of programmers because C programmers did know C".
This strength is also a weakness. It's easy to add C++ constructs there and there in a C program. But in the end, good practices about programming robust applications are not the same.
> So how do you rewrite an application such as Vim using C++ without
> rewriting it if you should be using only one of C or C++ ?
That's a good question. I've never delved into Vim code, and as such I can't tell you what's best: a complete rewrite or adding things there and there. In case it's of any help: GCC has been migrated to C++ ( https://lwn.net/Articles/542457/ ).
> If I choose to create a new artificial language, I possibly could
> write something turning C into my new language, then do what I
> said to test huge amounts of C code by adding runtime checks.
If you write a new language, you'll have two kind of bugs to track down : the ones from your language, and the one from the new-vim application written in that language. This represents a tremendous effort. Moreover, there is a huge risk that (almost) nobody will join until the final product has again enough stability, and community.
> Your points are valid. In Haskell I can do:
>
> data Struct =
> name :: String,
> list :: List (of) Int,
> age :: Int
>
> deriving (Show, Read)
> ^ this is built into the compiler
>
> $(derive [serialize-to-binary, memory-alloc, memory-check])
> ^ this is "template haskell", which derives class instances for me.
>
> So how I can I possibly make C++ derive a "new(my struct)" which
> calls s.bar.fill('\x0') (and does this for each field of the struct)
> ?
[I may have not understood your question as I don't know haskell]
By using the constructors ? So that nothing will be left uninitialized. One of the good practices in C++ (which is not as spread in C because of C89 inability to have variables declared anywhere but at the beginning of scopes) is to never have variables exist before you are able to initialize them to a pertinent value. If you can initialize them to a final value, it's even better.
> > Again. Forget free/delete exist and embrace smart-pointers. Not
> > necessarily std::shared_ptr<>, but at least the light and fast
> > std::unique_ptr<>.
> So you think C++ is more than ever a valid replacement for C in the
> Vim case. I twould still be interesting to learn why Yzis failed, and how
> to prevent such failure.
If you ask me, C++ is a more valid candidate than C for any _new_ development -- the reasons lie in the article I've referenced in my previous post: C++ RAII makes it simple to manage resources. I reserve C for the cases I really have absolutely no other choice (mainly because of client wishes, or because of very exotic platforms).
But I don't want to start a flame war, this is not the place.
Here, what do you want to do ? Start a new editor from scratch ? Fork vim and have new dynamics regarding patch integration & so on ?
In the later case, C++ may not be a solution, at all.
Regarding Yzis, I'm not sure the problem was technical. Gathering a community around a forked product that breaks habits (like for instance plugins, didn't it?) is certainly not that trivial.
--
Luc Hermitte
http://lh-vim.googlecode.com/
--
--
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups "vim_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment