[HN Gopher] Show HN: Yaksha Programming Language
       ___________________________________________________________________
        
       Show HN: Yaksha Programming Language
        
       I have been working on this for a while. Main goal was to build a
       usable programming language. I even end up building few tools for
       this such as IntelliJ plugin, etc.  I also plan on building some
       games with it in future.  Main use case would be: small games
       (raylib), tools (static linux binaries with musl-libc) and
       recreational programming (wasm4). Works in Windows also. If you
       have emscripten in path you can even build these games/tools
       (raylib) to WASM.  Please have a look. Thank you.
       -------------------------------------  Main Repo:
       https://github.com/YakshaLang/Yaksha  Doc:
       https://yakshalang.github.io/documentation.html  Library:
       https://yakshalang.github.io/library-docs.html  Tutorials:
       https://github.com/orgs/YakshaLang/discussions/categories/tu...
       ----------------------------------------  Started after a comment
       from WalterBright here
       https://news.ycombinator.com/item?id=28929840
        
       Author : JaDogg
       Score  : 135 points
       Date   : 2023-03-19 11:13 UTC (11 hours ago)
        
 (HTM) web link (yakshalang.github.io)
 (TXT) w3m dump (yakshalang.github.io)
        
       | rlupi wrote:
       | This is totally unrelated to the language itself, but...
       | 
       | You have my greatest appreciation for building proper responsive
       | websites in all those links, with proper CSS styles and sizing
       | (rem units)!
       | 
       | I use a 40" 4K screen (no HiDPI) and almost any other website,
       | including the most popular ones (I just checked github, google,
       | bing) do not really follow responsible principles, use px units,
       | and end up using just a tiny column of the screen... and they are
       | not even consistent: bing and google use the left 1/3rd of the
       | screen, github the central 1/3rd.
        
         | drusepth wrote:
         | I had to scale down the design to 50% scale to get it to fit on
         | my screen without everything looking huge and wrapping, but
         | after that everything looked usable.
         | 
         | [1] Full size: https://i.imgur.com/R0I6Vxs.png
         | 
         | [2] Half size: https://i.imgur.com/tQ6KpR4.png
         | 
         | Not sure if huge text is just the style these days, though.
         | Probably looks great on a huge screen.
        
           | JaDogg wrote:
           | Sorry, not so good with CSS. Home page should look better I
           | think. :) Will fix it at some point
        
           | topaz0 wrote:
           | My experience is that tiny text is the style. I'm much more
           | likely to have to scale something up than down. I can't
           | remember the last time I scaled something down, but I scale
           | things up every day. (I also liked the size choices of the
           | OP... honestly wouldn't have minded slightly bigger).
        
         | JaDogg wrote:
         | Home page was actually built by my wife.
         | https://github.com/tashvit.
         | 
         | Other CSS are probably just luck ;)
        
           | aka878 wrote:
           | A+ family
        
         | rtepopbe wrote:
         | You don't even need a setup like that to feel that pain. That
         | pretty accurately describes my experience with those websites -
         | and many others - with just a 24" 1920x1200 monitor.
         | 
         | The weird silver lining is that most sites are also using fonts
         | a bit too far on the small side for me, and don't respond too
         | well if you jack them up much. But that unused 2/3s of the
         | screen ends up allowing most websites to take a fair bit of
         | zoom without any changes in layout.
         | 
         | I really don't get modern website design.
        
       | [deleted]
        
       | chaosprint wrote:
       | That's really lots of work from a one-man band. I can empathise
       | as I am also developing https://github.com/chaosprint/glicol
       | 
       | Since you mentioned wasm, I think it would be great to have a
       | REPL on the website in the future.
        
         | JaDogg wrote:
         | I had help with the landing page. However, rest is mostly me.
         | But I'm using lot of third-party stuff also.
         | 
         | REPL I have been thinking for a while, I'm not sure how I would
         | do it unless there is a way to run zig cc in browser.
         | 
         | Would be harder without having a backend at the moment as it
         | needs to run a C compiler to generate the final executable.
         | (Not an interpreter)
        
           | chaosprint wrote:
           | perhaps refer to the tech behind rust playground:
           | https://play.rust-lang.org/help
        
             | alwaysbeconsing wrote:
             | The Compiler Explorer aka Godbolt also would be a good
             | example: https://c.godbolt.org Source:
             | https://github.com/compiler-explorer/compiler-explorer
        
             | JaDogg wrote:
             | Thank you.
        
         | JaDogg wrote:
         | BTW glicol looks & sounds really good. I have always day
         | dreamed how I would DJ but instead of using traditional tools,
         | I'd be using a programming language to do it. I never had guts
         | to do it in real life tho! :)
        
       | DeathArrow wrote:
       | Obvious question: why a new low level programming language when
       | we have C, Zig, Nim? What are its strengths over these?
        
       | Boxxed wrote:
       | Looks pretty cool! What happens if a program attempts a use-
       | after-free? If this is "memory safe" (aside from leaks) then I
       | think it sits in a pretty interesting space!
        
       | yazzku wrote:
       | Very nice. I had experimented with transpiling Python to C
       | straight from the AST in Python itself. Does this plan to add
       | type inference or "generics"? Currently it appears everything
       | must be explicitly typed.
        
         | JaDogg wrote:
         | yes it is in my local repo. but it is not done yet.
        
       | elcritch wrote:
       | Reminds me of Nim, but with more Python influence on the standard
       | library and overall syntax. It does share the ideal that a
       | Python-esque syntax can be nice for system's programming.
       | 
       | Its surprising how fun programming can be when you eschew
       | unneeded syntactical complexity! Though personally I prefer
       | having memory management and lifetimes handled automatically by
       | default, but with the option for manual management when desired.
        
         | JaDogg wrote:
         | Yes I agree. Time will tell how it will grow. Hopefully it will
         | have a good use.
        
       | DeathArrow wrote:
       | Why aren't you using the LLVM infrastructure?
        
         | WoodenChair wrote:
         | What's wrong with compiling to C? By using C as an intermediate
         | language LLVM can be a backend through Clang, but so can GCC,
         | MSVC, Intel C, etc. It's actually a pretty common choice (see
         | Nim, Chicken Scheme, etc.).
        
       | abhayhegde wrote:
       | Nice. Is it named after the folklore Yakshagana[1]? The logo does
       | resemble the face of a Yaksha.
       | 
       | [1]: https://en.wikipedia.org/wiki/Yakshagana
        
         | FraaJad wrote:
         | yes, indirectly.. likely named after Yakshas themselves -
         | https://en.wikipedia.org/wiki/Yaksha
        
         | JaDogg wrote:
         | Logo is based on a Sri Lankan traditional mask for Fire Devil
         | (Gini Yaka). https://uk.lakpura.com/pages/raksha-masks
        
       | mshockwave wrote:
       | Are you planning to add alternative backends in addition to
       | transpiling to C99?
        
         | JaDogg wrote:
         | Yes I originally wanted to add support for OpenCL style C code
         | too. Time will tell if I figure out how to implement it.
        
       | 29athrowaway wrote:
       | Another language that compiles to C: Vala.
       | 
       | It has a C#-like syntax.
        
       | blakerandall wrote:
       | What's with newer languages putting types after variable/function
       | names? Then you need an extra symbol : or -> and a function
       | keyword. It also breaks readability of long function headers as
       | you have to read the name skip to the end to read the return type
       | then back to the first argument. Is there a good reason for this
       | trend?
        
         | zokier wrote:
         | The convention dates back to at least ML in the 70s, possibly
         | even longer time back. So it is not some new thing, it's recent
         | rise in popularity is more a reflection in MLs increasing
         | influence in language design space.
         | 
         | If I'd had to guess, the syntax might be inspired by math
         | notation such as x [?] R
        
         | mikebenfield wrote:
         | Well, note that partly due to the way variables and functions
         | are declared in C and C++, parsing those languages (especially
         | C++) is a complete mess.
         | 
         | I think the readability argument is pretty subjective.
         | Personally I find declarations in for instance Rust a lot
         | easier to quickly scan than C++. For one thing the names of
         | functions are all at the same offset, which to me is actually
         | the most important thing. I can see at a glance whether it's a
         | function or variable being declared. I've never found the fact
         | that the return type is at the end to be a problem - why would
         | it be?
         | 
         | fn first_function(...) -> i32 { ... }
         | 
         | fn second_function(...) -> Vec<i32> { ... }
         | 
         | const X: i32 = 0;
         | 
         | vs
         | 
         | int first_function(...) { ... }
         | 
         | vector<int> second_function(...) { ... }
         | 
         | int X = 0;
        
         | zumu wrote:
         | Variable/Parameter names are nicely aligned so there's less
         | scanning to read them. Personally I usually read function
         | arguments before return type, but I can see instances where I'd
         | want to look at return type first. If you're line breaking on
         | parameters for long function signatures, it's not so bad though
         | --the return type will be in a predictable place.
        
         | waselighis wrote:
         | I think the C syntax was actually a compromise to simplify the
         | grammar. Remember C dates back to the 60s, and computers had
         | very little RAM and storage back then, so they had to be very
         | clever in how they designed the language. The C function
         | pointer syntax is the way it is because you can reuse the same
         | grammatical rules for parsing types as you do expressions.
         | Pointers are prefix and function calls are suffix.
        
         | JaDogg wrote:
         | I think mainly
         | 
         | 1) Easy to parse (less ambiguous) 2) We like Python
        
         | sideeffffect wrote:
         | It's been like this in the academia (Mathematics in particular)
         | since ever.
         | 
         | Also, some people say that it makes for easier (less
         | ambiguous?) parsing.
         | 
         | But the -> part is a bit weird. It "shouldn't" be
         | def factorial(x: int) -> int:
         | 
         | but it "should" be                   def factorial(x: int): int
         | =
         | 
         | Maybe it's that way because of Python?
        
           | JaDogg wrote:
           | yes
        
         | Yujf wrote:
         | It is easier to parse and you don't get the abomination that is
         | C function pointers
        
           | MathMonkeyMan wrote:
           | It makes me wonder why C put the ultimate type on the left
           | and not on the right.
           | 
           | C type/variable declarations are an expression that
           | transforms the type/variable into a primitive type, which is
           | then annotated on the left of the expression. Why not on the
           | right?
        
             | jejones3141 wrote:
             | The intent, as I understand it, is that "declaration should
             | look like use", so that the base type is on the left. If
             | you declare int *foo; then *foo is an int.
             | 
             | IMHO the existence of "cdecl" is evidence that it might not
             | have been the right choice.
        
             | jstimpfle wrote:
             | Because parsers, like humans, read from left to right.
             | Important parsing decisions are usually made as early as
             | possible. An example is recursive descent parsing, which
             | derives its simplicity from making decisions first,
             | allowing a top-down parse. And when humans skim text, I bet
             | it can be shown that it's easier if the syntactically
             | significant locations are aligned near the beginning of
             | each statement.
        
       | dom96 wrote:
       | Nice! My initial take: love Python-inspired languages but I think
       | manual memory management is distinctly anti-Python so not sure
       | how well that works together.
        
       | gatane wrote:
       | There are no pointers?
        
         | JaDogg wrote:
         | yes there are pointers. See some samples here:
         | https://github.com/YakshaLang/Yaksha/blob/e72d7984a4c8d49e4d...
        
       | netbioserror wrote:
       | Do you mind having a "Why a new language?" primer with some
       | deeper philosophy on your choices? I will never question anyone's
       | desire to make a language for learning or hobby. However, when
       | presenting it to the world for practical use, there has to be
       | some persuasion to move people off of existing tools.
       | 
       | I use Nim at work (I'm lucky) so I'd love to see that comparison
       | in particular, it also being a transpiled-to-C language. I also
       | use it to build static binaries with musl-libc and it's quite
       | easy and clean.
        
         | JaDogg wrote:
         | Sure, main goal was fun. But I should have a write up some
         | time.
         | 
         | I wanted to see following:
         | 
         | 1) Does manual memory management become easier when you use
         | python-esque syntax? 2) OpenCL with @device like syntax so you
         | can mix kernel code and client code in same .yaka file. - Not
         | even started (Not sure if achievable with my time constraints)
        
       | hsfzxjy wrote:
       | A great job! But I found the docs too formal and techincal, which
       | is more like a lang spec. It would be more appealing if some
       | tutorials added.
        
         | JaDogg wrote:
         | Yes very good point, I started this by writing a spec. However
         | I already started a tutorial section in github discussions: htt
         | ps://github.com/orgs/YakshaLang/discussions/categories/tu.... I
         | should add a link to it in main page.
        
       | pacifika wrote:
       | Looks like gdscript. Not a bad thing!
        
         | JaDogg wrote:
         | Thank you.
        
       | Aisen8010 wrote:
       | It's probably in your plans, but it would be nice a page showing
       | the syntax (for example, control flow and variable declaration).
        
         | JaDogg wrote:
         | There are some samples. But yes this is a good idea.
        
       | eps wrote:
       | Show it to /r/ProgrammingLanguages when you have a chance.
        
         | JaDogg wrote:
         | done. Thank you!
         | 
         | https://www.reddit.com/r/ProgrammingLanguages/comments/11vnm...
        
       | JaDogg wrote:
       | It is a rather large project. So here is some information about
       | tech stack.
       | 
       | ----------------------------------
       | 
       | Tech stack: Code is written in C++ for the compiler
       | 
       | carpntr - which acts as the builder is built using Yaksha itself.
       | (I use a python script to bootstrap and carpntr to build carpntr
       | as a second step)
       | 
       | hammer - cross compiler for C/C++ projects written in Yaksha (I'm
       | building Linux version of Yaksha compiler on Windows box
       | leveraging `zig c++`)
       | 
       | Yaksha comes with zig to use zig cc.
       | 
       | Runtime: this is written in C. (There are no .dlls involved,
       | things get built statically, only subset will be built and
       | linked)
       | 
       | Standard library: written in Yaksha.
       | 
       | YakshaIntelliJ - written in Java
       | 
       | Various scripts - Python.
        
       | realworldperson wrote:
       | [dead]
        
       ___________________________________________________________________
       (page generated 2023-03-19 23:00 UTC)