Why elm?

Hi. I am new here and first of all, congrats on the work here so far.

So if you have already answer this anywhere pls point me to the topic.

So, why elm? If Sanderling was done in c#?
It probably has something to do with the output and the dynamic needed to handle the Sanderling output (json if I am not wrong).

I am asking this as I need to decide if I will learn elm or c# to alter the comunication bridge with Sanderling as I only know some C++ and python.
Any suggestion about the path I should take?
Btw, I intend to create bots and take my eve game to another level.

Thanks a lot for sharing your knowledge.

If I would make only a simple bot or even just a macro, I could as well use a programming language like C# or Python. I am using the Elm programming language because it is simpler to learn and works better for larger projects and AI programming. Especially the time-travel debugging is useful when working on bots.

In general, I like simple tools because I get easily distracted when I use a tool that brings unnecessary complexity.

Besides developing programs that can be used as-is, I also show other people how to program bots, so that everyone can customize and adapt these to their own needs. I do this for beginners, people who have no prior experience in software development, and I want a programming language that works well for them.

The reason to use Elm is that I did not find a better alternative so far for these applications.

Since you mention C#, let’s take a closer look at this too. Parts of Sanderling are written using C#. For a complete bot, we need to access some low-level functionality at some point, for tasks like taking screenshots, reading the memory of another process, sending input to windows, etc. The .NET framework comes in handy to help with these tasks, which can offset the drawbacks of using a low-level language like C#.

I used C# extensively for diverse projects, working as a freelancer. For some time, we tried using C# for bot development, too, but did not find a way to make it work good enough. Here is a list of problems with C#, compared to Elm:

  • Confusing data flow: The local mutations of C# makes it difficult to understand the data flow.
  • Confusing control flow: Runtime exceptions make it difficult to understand the control flow or order of execution.
  • Missing essential elements of a type system: C# lacks even custom types (discriminated unions). Microsoft has planned to work on this, and we might get them in C# in a few years. I am not patient enough to wait that long.

Depends on your goals, I do not remember reading about those. Why would you even need to learn any of Elm or C#?

Hi @Viir, thanks for your answer.

Those are more than enough for me :).

So I just posted a very broad goal, but let me be more specific here. One of my goals whould be to create more than one bot. I would like to have one bot to mine and another to fabricate items. I would like to give as inputs a certain item or blueprint and the bots would do everything. I know it can look complex for a bot, but I would start small and then grow litle by litle. The first version would be one bot to do everything but my idea would be to expand it to a pipelined version where one bot would be mining until the list of minerals would be completed and the other bot would buy the remaining items and fabricate. And start it all over again.

That is why I think I would have to learn the elm language to organize my coding and use the right structures to achieve the big miner/industrial team of bots goal. Given this goal, what do you recomend as language to use, also considering I am a linux user?

Thanks.

In case you are constrained to using Linux, it becomes simple: For this scenario I see no difference between C# and Elm because the new platform introduces so many unknowns. What are options to get information from the game client? What are options to send input to the game client?

Since you want to start small, these interface make a large part of the whole project at least in the beginning. The larger the relative importance of the interfaces, the more the choice of programming languages follows those of the interfaces.
I know of existing interface implementations for Windows, but I don’t know any option for Linux.

I am not constrained to Linux. I only prefer and have way more years of programing using the linux than windows and totally prefer the linux programing workflow with make and Makefiles and the way you can interact and use linux powerfull terminal commands with Makefiles to automate and parallelize tasks.

But I think I will try to code simple bots in windows first and see how it goes.

Thanks for the sharing your thoughts.