Thursday, 31 July 2014

Operators

Before handling virtual functions, I fixed up operators. You can now export operators, you can access operator members and use them as expressions, you can access operators statically, etc. You can also have dynamic operators when before they were banned.

I need to switch to Ubuntu to try and figure out why 209 tests suddenly failed on TeamCity, though.

So up next I promise: virtual functions. I already added support for final classes.

I also removed "auto" as a feature. Previously when doing type-inferred arguments, you could use "auto" as the decayed argument, so you could do e.g. "f(arg := auto.lvalue)" that would only accept lvalues. I removed this feature because it's redundant in the face of concepts and complicated the implementation for little benefit.

I'm also hunting to reduce ABI dependence. The MinGW x64 ABI is quite similar to Itanium but the EH is different. This obviously isn't a big deal for me, pretty much all the work is done on the LLVM side and not the Wide side. But in general, I have a bunch of stuff which is full of Itanium-specific details, like layout, vtables, RTTI and such.

Also turns out that I totally mis-implemented Itanium ABI for function calling, so parameters you pass by value to C++ functions will be incorrectly not destroyed, and there are other destructor bugs w.r.t. this misinterpretation that I wish to fix. It also makes my life easier w.r.t. elision in many ways. I'm a big fan of this and this fix because it only removed complexity from the compiler.

Wednesday, 30 July 2014

Virtual Functions

Virtual functions are up next. I'm talking about final, override, abstract. Also clean up the internals to be less Itanium-ABI specific, and some general clean-uppery going on. After that, I will probably look at constants. I have an idea for how to handle them infinitely better than C++ but we will see what LLVM can support in this regard. And maybe include dynamic inheritance (virtual inheritance).

I've also been thinking about including & and | as type composers. | is more of a Concepts feature, but & I've been thinking can be useful for regular inheritance. This would effectively compose base classes to produce a new type, where any class that derives from both base classes is considered as deriving from this new type. The implementation I would think as being not too unlike dynamic inheritance, except that dynamic inheritance is intrusive and this feature would not be.

Monday, 28 July 2014

Personal details

So far, I've been pretty allergic to having my personal details be Googleable. I get too much random crap already. Hey, puppy, come work for us in Amsterdam, £45,000 a year doing ASP.NET. Send CV if interested and don't forget to ask your friends. Yeah, right. So you don't know anything about me, who my friends are, you want me to do your job for you, and could I please come work for you? Kindly go shove it.

But I guess that I'm just going to have to learn to ignore them instead of shouting at my monitor in rage. For now I really want a job. Not that kind of, I'd like a job but I'm not sure how sick I am or am not and I didn't commit enough to any particular project to have anything to show for it. I really want a job, I'm healthy enough to do it, and I've got something to hit people with- a project I'm doing that's complete enough to clearly show it's potential.

So I guess that it's time to stop hiding in my corner and start really selling myself and learning to either ignore or slap those super annoying spammers.

Friday, 25 July 2014

Windows Phone

My old iPhone died. I bought a new Nokia Lumia 630 with Windows Phone 8.1.

Boy, this shit is incredibly fucking annoying.

You can't even add a local contact without it having to be synced with some bullshit cloud account that totally doesn't need any of this crap. And Microsoft neglects to mention that you can't erase your bullshit cloud account from the phone later on. And every contact has to be a Person. It's not a Person. It's a fucking phone. A landline. Shared between FOUR people. So kindly do me a favour and fuck off with your endless cloud bullshit Microsoft. Just put the name and number on a text file on the local storage. How fucking hard can that be?

Thursday, 24 July 2014

More work on defaulted members, more bugfixes

Reworked the Clang object support layer to be more reliable (caused some bugs which are now fixed and simplified the compiler). I'm looking into simplifying a bunch of the compiler-generated functions stuff. For example, I know that their EH is already totally bugged. I need to simplify some other stuff too, like there's many places where I repeatedly get the function argument type analyzed. And I need to implement AnalyzeExpression in terms of AnalyzeCachedExpression if I can. And fix up statements to be Function-independent.

And the operator handling still feels like a hack. I need to introduce t.operator+ and operator+ as valid expressions and, I feel, generally unify the handling for identifiers and operators in a more useful fashion than my current hackitude.

I've also been thinking about introducing explicit operator overload set unioning, and explicit ADL requests.

Most importantly, I feel like I've defined my first milestone, Phase One. The objective of Phase One, most simply, is to reach something like feature parity in the compiler. This will probably involve some variant of concepts later, but for now I'm mostly looking at smaller features like default, delete, override, etc. Emitting some DWARF debug data would be great too.

Finally, I've been thinking about creating some functionality as pure extensions. I want to show that my compiler design really is modular and extensible. I might start with a basic feature like properties.

Sunday, 20 July 2014

More docs, a minor feature, a bugfix

I mostly tweaked my website and added more content today. I also fixed a couple bugs and hopefully introduced defaulted constructors.

I've been kinda plotting modules. I've been thinking about what form I need generic functions to take. LLVM IR is too low to preserve Wide's semantics. But I'd rather skip having to have an AST or something. Maybe for the immediate future I'll just ship the source.

I feel totally grump. I feel like I don't make much of a dent in my giant list of things to do and my source code is a terrible mess. I've been thinking and my list of things that I need sums up as "Everything".

At least a diagnosis isn't on the list anymore, I guess.

Thursday, 17 July 2014

Examples and tests

Producing more examples is really helping with the testing. I found two more bugs today, one of which is fixed. I added a couple new far-from-final tutorials. But as expected I spent most of the day running around. Hopefully tomorrow will involve more code, less running.