Perhaps try another language like Rust?

atomly

On Fri, May 4, 2018 at 10:44 AM, Louki Sumirniy <
louki.sumirniy.stal...@gmail.com> wrote:

> Well after bashing my head against a brick wall I finally understand what
> a mess it is for my specific purpose to work with Go. Nobody really
> specifically said it in any discussions up to now but what my design needs
> is generics. If code generation could be done more transparently I could
> use that but it really kicks interactivity and flow in the nuts. I'm going
> to probably abandon Golang on this basis. I am inclined to go with C but I
> am nervous about  issues relating to pointers and runtime breaks but oh
> well. </discussion for me>.
>
> If there was a way to transparently add code generation that would be
> sufficient and remain type safe. *sigh*
>
> The biggest headache I am running up against is that between packages. I
> think that before I throw in the towel I am going to study exactly how the
> sort package is implemented, since in essence my library does the same
> thing, so maybe I just don't understand well enough how to use interfaces,
> embedding and composition.
>
>
> On Friday, 4 May 2018 13:13:56 UTC+3, Louki Sumirniy wrote:
>>
>> Yep, you are correct, more or less. My code is using interfaces and
>> panicking when it's fed the wrong thing.
>>
>> For example, in my test I had a literal number going into a write
>> function to put a value into a node in the tree. The insert implementation
>> panicked saying it couldn't put an int into a uint32 slot. Eventually I
>> worked out it was the assumed int typing of the literal causing the problem
>> (happens all the time, I should be used to it by now).
>>
>> The thing is, it is intended that the user of the type specific library
>> that imports the tree library will not make a type assumption like the
>> compiler did about a literal. The type specific part has to be written for
>> any given type. There is a little verbosity in the part that wraps the
>> injected functions with syntactic sugar so the base library has the
>> functions to work on the concrete data agnostic of its content and only the
>> return values provided by the functions it gets to do various comparisons
>> and whatnot. It's not excessively wordy for my tastes and I know it's doing
>> it the best way possible.
>>
>> It's just learning how to play with interfaces that I was struggling with
>> and I seem to have pretty much got it all figured out now.  I'm happy with
>> how the code is developing and pretty much joyous that I can do this inside
>> a type safe language. Type safety is a big part of how Go is such a fast
>> compiling language. Implicit casts and inheritance have a massive cost in
>> complexity not just a naive translation to binary code, but also in
>> optimising it. When can it cut out the dereferencing to methods and when
>> not? Since one could be using a method to do a relatively simple thing, in
>> very long, tight loops, if the OOP compiler guesses wrong and puts
>> dereferences in where they are not needed, it's a big cost over 1 million
>> iterations compared to being aware of it, like in my code, and avoiding the
>> need for dereferencing.
>>
>> I firmly believe that Go could replace C as a language to write systems
>> kernels in. I saw an amusing post recently relating to Dan Larimer's work
>> on EOS mentioning an automated code correctness checking application for
>> C++... Having intimately dealt with Dan's C++ source code, I can see why he
>> might be waking up to this, especially with the ether leaks going on, that
>> EOS has inherited (literally, I presume).
>>
>> This would not happen if it were written in Go. Note also that Geth lacks
>> this problem and there was almost going to be a split over code changes
>> from the Go side.
>>
>> Linus Torvalds famously said he wrote the Git CVS in C specifically to
>> exclude C++ programmers. But as any avid gopher would know, C has all kinds
>> of gotchas to do with busting out of stacks, heaps, allocated memory, and
>> forgetting to free memory. This does not happen in Go.
>>
>> So to cut a long story short, this is why I choose to program in Go. I
>> have a background in low level programming, I used to do a bit of M68k
>> assembler on my amiga when I was a teenager. I don't mind verbosity that is
>> necessary due to hardware architectural constraints. And as to the
>> potential users of my code, I am not responsible for them having a lack of
>> awareness of the exposed inner workings and them scratching their head at
>> panics when they try to push the wrong type of value into one of the
>> functions I wrote. They probably need to do some more study.
>>
>> I think of programming a bit like carpentry. Sure, you can just whack
>> together an Ikea table in half an hour, but if you want to make a nice one
>> that will last hundreds of years, you probably will need to at least spend
>> a week or two practicing before you even have something simply crude and
>> functional. C++ and other OOP and interpreted language users are like Ikea
>> customers. Gophers are like people who go to the sawmill and the specialist
>> tool store. Disregarding the zero cost of reproduction of course (that's
>> what Ikea does).
>>
>> On Friday, 4 May 2018 11:36:33 UTC+3, M P r a d e s wrote:
>>>
>>> > Eliminating code duplication shrinks the base of code that must be
>>> changed
>>>
>>> Except go was designed a certain way that will make whatever you are
>>> attempting to do here burdensome. We've all been there at first trying to
>>> fit a square into a round hole, it doesn't work. Unless you start ignoring
>>> Go type system with interface {} everywhere, you're not going to go far
>>> trying to emulate method overloading in Go. The price of using Go is
>>> absolutely code duplication and a certain amount of verbosity in order to
>>> remain type safe. The only real way to achieve method polymorphism in go is
>>> to use interfaces, since Go supports neither inheritance nor generic
>>> programming. Go does not allow developers to write "clever" code without
>>> sacrificing readability or compile time type safety.
>>>
>>> Le vendredi 4 mai 2018 06:26:59 UTC+2, Louki Sumirniy a écrit :
>>>>
>>>> The specifics of how it is done is not as important as why to do it:
>>>>
>>>> I am writing this for a later project. It will need at least 5
>>>> different, sometimes nearly not very different, short data types. They all
>>>> have the property of being comparable. The code that keeps them stored and
>>>> sorted does not need to know anything other than this comparability, and to
>>>> be able to pass the data back to the caller.
>>>>
>>>> I am not making claims about something, trying to sell some snake oil,
>>>> I am attempting to solve a problem and make use of low level architecture
>>>> of the hardware to improve performance. It worked for B-heaps so maybe
>>>> MAYBE it will also benefit binary trees. The way some people respond you'd
>>>> think I was running an ICO!
>>>>
>>>> Programming is usually 5% writing and 95% debugging. Eliminating code
>>>> duplication shrinks the base of code that must be changed, otherwise I have
>>>> to delve into code generators or macros. If I have an intended use for a
>>>> library I am writing, that would require 5 different source files for each
>>>> data type, yet 90% of the code was the same, what happens when I realise I
>>>> made a mistake in this common code?
>>>>
>>>> I pretty much concluded that it is better to just pass an 8 element
>>>> function pointer struct as value anyway. Whether the compiler does it
>>>> differently doesn't really matter since I can't control that. What matters
>>>> to me is that it's readable so I don't have to spend more time reading than
>>>> understanding.
>>>>
>>>> On Thursday, 3 May 2018 23:40:07 UTC+3, Jan Mercl wrote:
>>>>>
>>>>> On Thu, May 3, 2018 at 10:14 PM Louki Sumirniy <
>>>>> louki.sumir...@gmail.com> wrote:
>>>>>
>>>>> > As some here may know, I am implementing a novel binary tree based
>>>>> on complete trees and using ideas from B-heaps in order to achieve maximum
>>>>> data cache locality in a search and sort algorithm.
>>>>>
>>>>> ...
>>>>>
>>>>> > Note that this is not really at all an OOP paradigm that I am trying
>>>>> to ape with this.
>>>>>
>>>>> ...
>>>>>
>>>>> > I have the base type that concerns itself with the walk, search,
>>>>> insert and delete functions in an interface.
>>>>>
>>>>> ....
>>>>>
>>>>> > The b.Overloads - I am not sure, whether it should be pass by value
>>>>> or pass by reference. I think pass by reference adds an extra resolution
>>>>> step, but it is probably more expensive as every call of the functions 
>>>>> will
>>>>> have to perform this dereference.
>>>>>
>>>>> ...
>>>>>
>>>>> > Thanks in advance for any feedback on this.
>>>>>
>>>>> - Novelty is only valid when established by peer review. Self-claimed
>>>>> novelty often means just lack of research. Even if eventually correct, 
>>>>> it's
>>>>> a warning sign for me meanwhile.
>>>>>
>>>>> - Attempts to make non-interface types in Go behave in the OOP-style
>>>>> inheritance is usually a telling sign of using the wrong language - or
>>>>> abusing one - to solve the problem.
>>>>>
>>>>> - Pass by reference has not even a well defined meaning in Go.
>>>>>
>>>>> No insult intended, you've explicitly asked for _any_ feedback. My
>>>>> apologies if you feel offended anyway,
>>>>>
>>>>>
>>>>> --
>>>>>
>>>>> -j
>>>>>
>>>> --
> You received this message because you are subscribed to the Google Groups
> "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to golang-nuts+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to