Posts

Showing posts with the label development

Architecting a software application from the ground up

Hi all! It's been a hot minute. Settling into work post-college has been a larger task than expected, and getting into a rhythm where I have time to write up my experiences has taken longer than I would have hoped. As of three weeks ago, I am the singular software engineer at a medical device startup based in Atlanta, GA, USA. In this post, I will document the current state of the software at this company, the immediate tasks ahead of me, and my progress to date in developing the architecture of the new software. The State of Things As of right now, the existing platform, which supports hardware product #1, is written in C# on a .NET Framework platform. There are two repositories, one for our hardware schematics/firmware and the other for our C# application, which encompasses everything from the UI (implemented in WPF) to the software which runs on the Zynq chip on the hardware device itself. The Path Ahead Ahead of me is the task of rebuilding the existing application into a brand...

Trials and Tribulations with Modules: Part Two

Image
Hello! I am a CS student working on a GSoC proof of concept to modify perl6 to create executable binaries. This blog documents my journey and struggles. There are likely more correct and maintainable ways to do what I've done so far. If you know a better way, or if you see an inaccuracy, please let me know in the comments section. This post has been incoming for a while, and as a result, has grown to a massive size. To make it a bit easier to digest, and more useful for those of you reading this hoping to find information about a particular aspect on module loading, I have chopped this post up into multiple smaller posts focusing on each of the smaller aspects. In this particular post, I'm going to focus on how module loading works. What's a module? For a complete explanation of modules, please refer to the Perl 6 documentation . This tutorial is a short and sweet explanation of modules, and this one is a bit more in depth, so pick your poison :). In brief sum...

Trials and Tribulations with Modules: Part One

Image
Hello! I am a CS student working on a GSoC proof of concept to modify perl6 to create executable binaries. This blog documents my journey and struggles. There are likely more correct and maintainable ways to do what I've done so far. If you know a better way, or if you see an inaccuracy, please let me know in the comments section. This post has been incoming for a while, and as a result, has grown to a massive size. To make it a bit easier to digest, and more useful for those of you reading this hoping to find information about a particular aspect on module loading, I have chopped this post up into multiple smaller posts focusing on each of the smaller aspects. In this particular post, I'm going to focus on how the dependencies required by your Perl 6 program are identified and how the dependency tree works. Identifying the dependencies An interesting feature I was accidentally triggering when running perl6 --compile=foo foo.pl6  gave me a bit of a head start in figurin...

Flags and Syscalls and Modules, Oh My!

Image
Hello! I am a CS student working on a GSoC proof of concept to modify perl6 to create executable binaries. This blog documents my journey and struggles. There are likely more correct and maintainable ways to do what I've done so far. If you know a better way, please let me know in the comments section. I have a couple of updates this week! I've gotten --compile working and have made progress on packaging the code for Modules inside the ELF (though I haven't quite coaxed things into using those packaged modules). Fair warning, this post is going to be a bit long. If you want to hear about the changes I made to NQP , jump to Adding the --compile functionality . If you want to hear about the changes I made to p6_linker , jump down to Altering the p6_linker.  If you want to hear about the progress towards module functionality, jump down to Module troubles. If you just want a brief summary of what I did, jump down to In summary. And as always, if you want to hear about...

Modifying Perl 6 Executable to Run Bytecode

Image
Exciting news! I've successfully modified  perl6  to run bytecode! You can look through my changes on Github here . In this post, I'm going to briefly go over what happens when you run perl6 , what I added to get the additional functionality, a few issues I ran into along the way, and what I'm doing next. What does running perl6  do? Let's imagine you are using MoarVM as your backend, Rakudo as your compiler, and have just written the program foo.pl6  and want to run it. You call perl6 foo.pl6.  What happens next? main.nqp begins to execute. This is the very beginning of the initialization process necessary for your program to run. An instance of the compiler  is created and set up . The path to the various Perl6 and NQP libraries that you may need are determined and bound to environment variables. Several command line options are added . Then, the compiler is actually entered with a call to command_line . command_line begins to execute. This me...

The Linker for Perl 6

As mentioned in my last post, I'm working on making a linker for Perl 6 user programs as part of the Google Summer of Code. I'll be making weekly progress updates here explaining what I've done and  In this post, I'm going to cover why a linker is useful/what a linker is, how I'm approaching the project, and what progress I've made so far. I'm learning a lot of this as I go, so if you see something that's confusing or incorrect, please let me know so I can fix it! What does a linker do? The TLDR version is that a linker is what takes all the object files generated by compilation, resolves the calls to functions in libraries and other files, and combines them into a single executable file. Being able to generate this single executable file is extremely useful as it means that once the program has been "translated" from whatever language it was written in into bytecode and grouped into an executable order, you can run that program over and ...

Getting Started: Developing for Perl 6

Three weeks ago, I started a Google Summer of Code project working on a linker for Perl 6 user programs . Getting started on a new project with a new group of people is always hard, primarily because it can be hard to figure out where to start or who to reach out to. This GSoC project has been no exception. That being said, the Perl 6 community is one of the kindest, most helpful online communities I've run into and appears to have no qualms assisting a new contributor in getting up to speed. So far, the biggest challenges I've run into have been figuring out what I didn't know about how to get started, figuring out IRC, and getting my development environment set up. Figuring out what I didn't know Perl 6 is a big language. Prior to this summer, I had very little exposure to Perl, Perl 6, or interpreted languages in general. Thankfully, Perl 6 has pretty substantial documentation, and the source code is pretty well commented too. Information on linkers is har...