$ greetings, friends.
Let’s jump right into Perl 6.
@theangryepicbanana: Hi! My name is Alan, and that’s the only part of my name I’ll be saying. I’ve been programming for a little under six years and I love using obscure or unpopular languages just for the fun of it. I also like making games, playing games, and teaching other people how to code.
@katyadee: So let’s just jump right into it—what’s the appeal there, with unpopular languages? And do you mean languages that aren’t used very often, or esoteric languages?
@theangryepicbanana: Languages that aren’t mainstream. Like, of course Perl 6. Or Crystal. All these languages that people are like, “I’ve never heard of that.” Or “I’d never use that.”
@katyadee: What draws you to them? Like, do Crystal and Perl 6 have something in common, or is it just that they’re obscure and that in and of itself is enough?
@theangryepicbanana: In my experience in programming, learning more languages helps you give a better understanding of how the other ones you already know work. Like, learning Perl 6 helped me understand how Ruby’s meta programming worked and you know, using TCL helped me understand the whole concept of the Lisp language because you use lists everywhere.
@katyadee: But that still doesn’t answer the question—why not learn a bunch of mainstream ones? You could do the same by mastering C++, Java, and Python, right? It doesn’t seem like something exclusive to obscure languages.
@katyadee: But don’t you think they’re less popular for a reason?
@theangryepicbanana: You know, sometimes it’s syntax, though. People are constantly judging Perls over its sigils or the dollar signs or at signs or percent signs that you put before variable names. When you first approach it, it does look pretty ugly and bad, but once you understand why it works, then it looks a lot better to you, I think. When I first started Python, I was one of those people who was like, “Why the HECK do I have to indent everything?” I didn’t indent up until that point. But once I got into, I realized it was a lot cleaner. I learned why I had to indent.
On being the J.R.R. Tolkien of Programming
@katyadee: That’s interesting. I don’t know that one would have to learn Perl 6 to detract those lessons… But it’s a good point, I think. So I was looking at your repls, and it looks like you’ve created at least two languages of your own. Let’s talk about that.
@theangryepicbanana: Yes! One of them I haven’t updated yet, but I keep meaning to. I got into making programming languages when I learned Perl 6, because you can add anything to the language and it just works. And I was like, wow, I want to make a language like that—I thought it was a really good idea. It did not end well. BUT! The first language I made was called Talk. But I just replaced some of the symbols in Perl 6 with English words. Which is why it’s called Talk.
I guess it was good for a first attempt, but I was only using Regex to convert things. It worked. I even impressed my parents.
@theangryepicbanana: Then, the second language I made was successful—it’s called Objective N. A while back I found this very tiny language called Neko (it’s kind of like Lua). So I created something similar to Neko, that ran on Neko, but more similar to other languages. I chose Objective C. You know what that is, right? The one Apple used to use.
So my goals were: No need for manual garbage collection and stuff like that. I made the parser, I made the compiler, took a very long time, BUT! Since I was making a language the correct way, I didn’t run into the problems I did with Talk. Which was: It was extremely slow, it broke a lot… Long story short, it worked. I haven’t put this online yet, but I’m making a third language, too.
@katyadee: Where does creation take place?
@theangryepicbanana: For StarLang, which is my latest language, I’m making the specification on Replit, and I may make a prototype compiler on Replit as well. I’m hoping to have the specification done by… sometime next month.
@katyadee: How much time a day are you spending on these things?
@theangryepicbanana: I definitely don’t code everyday. My brain is all over the place.
@katyadee: But wait, what about LineLang…?
@theangryepicbanana: OH! So I am making my fourth language. Line Lang… I’d made an interpreter on my TI-84 calculator—do you know what that is?—
@katyadee: Texas Instruments, it’s right down the street from me, friend.
@theangryepicbanana: Well—I made an interpreter on there—and I realized I could do that somewhere else. So I made something similar to it, called Line Lang. How would I describe it… It’s like Brain F, except a little bit more advanced.
@katyadee: How’d you keep that straight in your head? It looks confusing.
@theangryepicbanana: It got EXTREMELY confusing. I made it so the interpreter ignored any character that wasn’t from its specific set of characters, that way I could comment the code.
@katyadee: What are you hoping to gain when you create a language? Maybe aside from a project like Line Lang, which seems like it’s more just for fun. How has this process changed your perspective?
@theangryepicbanana: Those are two questions, definitely. The reason you create languages is to test my own skill or to compete with another language or to make a language for a purpose that doesn’t have a language yet.
@katyadee: But is that why you do it? Have you created a language for something that doesn’t have a purpose yet?
@theangryepicbanana: No, not yet. But I’m planning on it. I want to make something that’ll make creating very small applications a very easy thing to do. Like… You can always make a Python script and make it executable, but it’s not very fast, and if you want to change stuff in it, it takes a while. I’ve been working on making a modular language that can be compared to Java, but it’s much faster and smaller than Java. But I did that partially to test my skills, but partially, to make it easier to make small apps and games.
@katyadee: Is this as ambitious as I’m understanding it to be?
@theangryepicbanana: Yes! It combines a lot of ideas from other languages, including SmallTalk, Java, and Lisp.
Back to the drawing board
@katyadee: What’s the process like? How would you even embark on a project like this?
@theangryepicbanana: First thing you need is specifications. Whether it be making code examples or going into detail how the object system works. You plan out EVERYTHING about the language before you even start on the compiler or the run time. Otherwise, it gets very messy.
@katyadee: What does that planning process look like? An outline?
@katyadee: So walk me through this—I’m a n00b. What are the first three things you need to decide?
@theangryepicbanana: First three…
What’s the syntax for comments? Because that takes a long time (joke).
You need to figure out how you’re going to handle white space. And bascially that means deciding if you’re going to do what Ruby does and put operators on their own line, but it’s still part of an expression, or if you’re going to do what Python does, and use parentheses… Et cetera.
Lastly, you need to figure out how functions are going to work internally, not just in the syntax. Do you want dynamic or static dispatch? You need to know that as soon as you start.
@katyadee: How do you personally make those kinds of big decisions?
@theangryepicbanana: I look at other languages that have succeeded in one or all of these areas and use ideas from them.
@katyadee: How long does it take? How long is “pre-production,” if you will?
@theangryepicbanana: Well… I’d say coming up with functions could probably take a few days.
@katyadee: A few days. Cumulatively? Like, it’s 72 hours worth of work, for instance?
@theangryepicbanana: Unless you’re thinking about it constantly, yeah.
Opening the doors of perception…
@theangryepicbanana: Can we talk about how this makes me look at other languages?
@katyadee: Yeah, shoot!
@theangryepicbanana: When I was making Talk, it made me realize how many other languages use symbols instead of trying to make a word for everything because before I thought that it was just a small thing, I could probably switch it out at some point, but in reality, no, many languages use symbols for common things. And and or, many languages use the double pipe/bar sign. For calling functions, I’ve always hated using parantheses but then when I was making Talk, I was like wow, these are used a lot more than I thought they’d be.
@katyadee: Do you feel like you were trying to fix things that had bothered you?
@theangryepicbanana: At the time, I only knew 6 to 7 languages and I only knew 3 of them very well—
@katyadee: In my world, we’d call that a hyperpolyglot, 6 or 7 isn’t bad!
@theangryepicbanana: [laughing] …so, I thought the ideal language would be one that only used English for its syntax.
@katyadee: Because it’s more organic to write?
@theangryepicbanana: It’s more natural to read or use… or so I thought.
@katyadee: Let me guess: the transformative power of symbols emerged…
@theangryepicbanana: I mean, yeah, it just became so verbose… I realized I wouldn’t be able to understand the code I was writing an hour from now, let alone any other amount of time into the future.
@katyadee: I guess that’s also a really good exercise—to see why things are the way they are… A rules aren’t always meant to be broken kind of thing.
@theangryepicbanana: For example, there’s a reason Python doesn’t have any sort of macros. That’s just now how the language is built. How are you going to make macros for a language that uses indentation as its syntax. Just think about that for a second. How would you actually go about doing that. I’m serious!
Getting a little meta
@katyadee: Let’s talk about something that might be a little confusing for folks who are fresh on the scene. You have to create a language in another language.
@theangryepicbanana: Unless you’re targeting Assembly. Which I’d never recommend, by the way. Usually, you should make an interpreter, which does not require compiling. The way an interpreter works is that the language your language is built on, basically executes your language as it’s reading it. You don’t need to compile it to anything, it just runs. That’s a lot easier than making something that compiles to Assembly. The reason I recommend against that is because you have to figure out memory management… and it can get confusing.
@katyadee: Are the languages you’ve created all interpreted?
@theangryepicbanana: Talk was transpiled. Transpiling means converting from one high level language to another. So Ruby to Python, for example. Objective N is actually compiled, because I’m converting from a high level language to a mid to low level language. And then Neko itself is compiled.
@katyadee: And now that you’ve had the experience of creating languages—what do you prefer? Interpreted? Compiled? Transpiled?
@theangryepicbanana: All three ways work for different reasons and purposes.
Transpiling is a lot easier because you’re converting from one language to another language you already know. It handles things like garbage collecting, a coherent object system, and variable contexts, but you can’t do much outside of what the base language can do.
Interpreting is usually very slow, but a lot easier to make an interpreter because you don’t have to compile, obviously. And usually, an interpreter is good for one liners. One line of code that does something.
Compiled languages are good for being fast or for games, which ties into being fast.
They all have their ups and downs. I guess if I had to choose… I like interpreters.
What even is a good programming language?
@katyadee: What makes a programming language good?
@theangryepicbanana: [long sigh]
@katyadee: [laughing] Come on.
@theangryepicbanana: It’s a big question! Okay, so it depends on what the language is, or what its purpose is. Like golang, or Rust, which were languages that were made to be small or fast and low level… with those kinds of languages, what makes it good, in my opinion, is how easy it is to get stuff done in it. So, in Go, it takes a while to get stuff done, but it happens eventually. But then compare it to Rust—it’s hard to do if you’re new to the language, but then once you’re familiar, it’s a lot easier and efficient than Go.
@katyadee: So I’ve noticed people hate Ruby. What’s the deal with that?
@theangryepicbanana: A while back Twitter announced it was moving to something else, because Ruby on Rails was too slow. And then the popularity of Ruby nosedived after that. The other thing is Ruby is usually associated with Ruby on Rails, and because people always associate it with Rails, they don’t really see Ruby as its own language…which probably contributes to part of it. They’re going to be like, “Oh, it’s just Rails, there’s nothing it can really do…other than make websites.” But there is a lot more that Ruby can do outside of that.
@katyadee: Sounds like it’s this kind of tragic case of mistaken identity.
@theangryepicbanana: Ruby is an amazing language! I like everything about it, except maybe how unpopular it is.
@katyadee: But you like unpopular languages!
@theangryepicbanana: Oh, true.
The Repl.it Community, becoming a translator, and we say our goodbyes
@katyadee: How long have you been with us?
@theangryepicbanana: I started using it in 7th grade…so about four years.
@katyadee: That’s a long time. So you must have been coding for a very long time, too.
@theangryepicbanana: I started learning about a year beforehand, then I searched for online Ruby IDE and I found Repl.it.
@katyadee: You meet a lot of people who start coding sort of young, but you seem to think about code in a more nuanced way than I lot of the people I’ve met.
@theangryepicbanana: Programming is just part of my entire life. Once I found it, it just clicked with me. I realized what I wanted to do in life. Before that… I had no idea.
@katyadee: Oh come on, you were like 10!
@theangryepicbanana: Still, finding programming gave me purpose.
@katyadee: That’s INCREDIBLE. And you’re so fluent in it now.
@theangryepicbanana: I always try to think about the bigger picture, how everything works together in a language.
@katyadee: You’re like the programming equivalent of a linguist. I wonder what the name is for someone who has your skillset—you don’t only know how to code, but you understand it on this meta level.
@theangryepicbanana: I’ve been asking around… I want a job like that. No answers yet.
@katyadee: Maybe academia?
@theangryepicbanana: Maybe there’s a translator job…like, converting one language to another. I have so much fun doing that. It’s very difficult. Like, if a company need to convert their codebase…I’d want to do that.
@katyadee: You’re kind of like the JRR Tolkien of programming. Or at least on that road. You know, you’re a real staple of our community. What keeps you around?
@theangryepicbanana: Constantly having arguments about Perl 6.
@katyadee: Okay, edgelord opinion on my end here, I think IN A WAY that could make you more intelligent because it forces you to have a concrete reason to like something. I mean, in theory. But I’ve gotta ask—and I can’t believe I asked this about Ruby but not Perl 6—why? Why do you think people hate it?
@theangryepicbanana: Well, mat1’s (a user) reasons are is: it’s ugly, it’s ugly, and it’s ugly.
@katyadee: What does that mean?
@theangryepicbanana: It’s an emotional reaction people have to sigils…But why I like Perl 6 so much…It was the first language that helped me understand how classes and data types in general actually work. It makes data types simple yet complex deep down inside—their internals—and that kind of stuff helps me understand how all that works. AND… Perl 6 has so many features that come with the language automatically, versus having to import it… I’d rather have it there than not.
@katyadee: Preaching the good word of taking Perl 6 seriously, I think that’s a good place to close.
@theangryepicbanana: DOLLAR SIGNS WILL NOT KILL YOU.
Btw if anyone is interested in that "Star" language I talked about, I'm working on the specs for it here: https://repl.it/@theangryepicbanana/star-lang-full-specs