is a fun programming language created for cricket enthusiasts. If you look at the initial commit on the repository, it will show it as June 9, 2023, but the idea of building my programming language has been lingering at the back of my head since my college days. Finally, after procrastinating on building CricLang, I started working on it on Feb 17, 2024, and it is now ready for public beta release. CricLang Why the name CricLang? CricLang is an amalgamation of ‘Cricket’ and ‘GoLang’ as it is built on top of Go. It represents my love for cricket, software engineering, and the idea that code should be as simple and readable as the game. It is an evolving programming language and isn’t perfect by any means. Documentation CricLang is a dynamically typed language written in Go Data Types CricLang currently supports four types of data types , , , and as of now. Boolean values are denoted by and . int string boolean array notout out >>> 1 # int >>> -10 # int >>> "Hello World!" # string >>> notout # boolean true >>> out # boolean false >>> [1, "Hello World!"] # array Declaring Variables Variables are declared using the reserved keyword . player >>> player x = 5; # integer variable >>> player y = "Hello World!"; # string variable >>> player z = notout; # boolean variable >>> player a = [-5, "Hello World!", z]; # array of variables Conditionals CricLang supports statements. If the condition is declared using the reserved keyword, and else is declared using the reserved keyword. if-else appeal appealrejected >>> appeal(5 < 10) { "if condition" } appealrejected { "else condition" }; >>> appeal(notout) { "true" }; >>> appeal(!notout) { "if condition" } appealrejected { "else condition" }; Return Statements Return statements are declared using the keyword . signaldecision >>> signaldecision 10; >>> appeal(5 < 10) { signaldecision "if condition"; } appealrejected { signaldecision "else condition"; }; Functions Functions can be declared using the reserved keyword . Functions are also bound to variables in CricLang. field >>> player x = -5; >>> player y = 25; >>> player z = field(x, y){ appeal(x * x == y){ signaldecision "yes"; } appealrejected {signaldecision "no";}; }; >>> z(x, y); # output: yes Operators CricLang supports arithmetic operators ( , , , ), logical operator ( ), and comparison operators ( , , , ) out of the box. + - * / ! == < > != >>> 1 + 1 # output: 2 >>> "Hello" + " " + "World!" # output: "Hello World!" >>> 1 - 1 # output: 0 >>> 5 * -5 # output: 25 >>> 5 / 5 # output : 1 >>> notout == out # output: false >>> !out # output: true Built-in Functions CricLang is incomplete without its built-in functions, which are meme references. Only the OG cricket fans can spot the references to the error messages. Here is a list of all the built-in functions Thala Thala is inspired by the meme “Thala for a reason.” It takes a string or an array as input and returns the length of the string or array but with a twist. >>> thala() # 0 params MISFIELD: girlfriend se raat mei baat kar lena, pehle 0 ki jagah 1 argument daal de >>> thala(1) # wrong type of param MISFIELD: girlfriend se raat mei baat kar lena, pehle sahi type ka argument toh daal de >>> thala("Hello World") # string as a parameter Captain Cool: 11 >> thala("Is this sixteen?") # string a parameter Thala for a reason: 16 Gambhir Gambhir is inspired by the famous meme where he says some 3rd option when given two options. It takes two parameters and returns something random. >>> gambhir() # no arguments passed MISFIELD: *Gautam Gambhir Stares Angrily* got=0 arguments, want=2 arguments >> gambhir("virat", "sachin") # 2 arguments passed Interviewer: virat or sachin Gautam Gambhir: baingan Kohli Kohli is inspired by one of his famous stump mic recordings. It takes [0, n] arguments and returns a fatal error with an error message. >>> kohli() # no arguments passed shaam tak khelenge, inki G phatt jaayegi lekin abhi tera code phatt gaya exit status 1 >> kohli("wrong data type") # with an error message shaam tak khelenge, inki G phatt jaayegi lekin abhi tera code phatt gaya wrong data type exit status 1 Rohit Rohit is inspired by one of his after-match interviews in 2019. It takes one string argument and returns the output. >>> rohit() # no arguments passed MISFIELD: mera gale ka vaat lag gaya chilla chilla ke ki 1 argument chahiye! tunne 0 de diye >>> rohit(42) # argument with wrong data type MISFIELD: mera gale ka vaat lag gaya chilla chilla ke ki sahi type ka argument daal de >>> rohit("Manthan") # 1 string argument Reporter: Manthan ke birthday ke baare mei kuch boliye. Rohit: Abhi birthday mei kya bola jata hai? Happy Birthday? Yahi bola jata hai. I will keep adding more fun built-in functions to CricLang and improve it overall. If you think you have some great ideas for adding a built-in function or improving CricLang, don’t shy away from sending a PR. Parting Words CricLang is my attempt at building a programming language, and it’s by no means a complete language. It has its share of flaws, and they will be improved upon over time. If you love CricLang, then don’t forget to share it on , , and . Drop a star to CricLang on . Twitter LinkedIn Peerlist GitHub Also published . here