IshKebab 3 days ago

Yeah normally I hate those "but there's already an abandoned programming language from the 80s that had a total of 2 users called X" but in this case the Q array language is pretty well known.

rickcarlino 3 days ago

It really ought to have a simple example in the readme to give people a feel of the syntax.

  • draxil 3 days ago

    does quickly draw attention to it's examples directory though

    • rickcarlino 3 days ago

      I saw the examples directory. It should still be at the top of the readme.

      • a96 3 days ago

        Yes. Screenshots or examples, broad dependencies or used platform/technology should be the first things to show. It's incredible how far down they are buried many times. It's like they want potential users to give up before figuring out if it's a useful thing or not.

        • derdi 2 days ago

          This is someone's private project for their own amusement. It's clearly not in a state where it would be "useful" to "users". Nor is it meant to be. At the moment it's meant for compiler geeks to look at.

          Not every readme is a sales pitch for Enterprise Quality(tm) software.

pbohun 7 days ago

This looks very interesting. I'm hoping there will be more documentation. For example, docs for the standard library/packages and explanation about the design of the language (does it use garbage collection? how does the type system work? how does the foreign function interface work? etc.).

Technically I could find all these things out by reading all the source code, but that's a lot of work just to see if the language meets my needs.

  • pbohun 7 days ago

    Looking through the code a bit. This is quite impressive for such a short time working on it.

anta40 3 days ago

Can build the compiler on macOS 15.6 but it crashes.

./q examples/hello/hello.q

signal: killed

./q examples/collatz/collatz.q

signal: killed

Even copying q files into q's folder doesn't work

Ah, didn't notice the issue is already in discussion: https://git.urbach.dev/cli/q/issues/6

Interesting that one of the goals is not to depend on llvm :D

hmry 3 days ago

From reading the readme, it seems the Language was designed to explore increasing compile speed, and producing optimized code without using LLVM. Yet all the comments are about the syntax. Never change, programmers. Personally, I would have painted the bikeshed blue.

  • debo_ 3 days ago

    Yup. I really like the design goals. It's neat to think of golang being used to make a compiler that builds very tight executables! They might end up with a 100+mb go executable as a compiler.

    The syntax of the language itself seems somewhat go-inspired, which I suppose is natural.

thisislife2 3 days ago

A quick look suggests strong typing and that's a huge plus. The syntax is easy to understand and read, but I hope it will be consistent - if writeInt, why not writeStr etc. too?

tromp 3 days ago
  • kagevf 3 days ago

    When I saw the headline, I thought it referred to "Q" the array programming language (looks like your first link).

  • a96 3 days ago

    Why oh why don't these projects even do simple web searches or stop to think that their users might want to search (and find relevant answers for) their language, library, or other project before picking the same bad names over and over again?

wosined 2 days ago

Major vaporware vibes.

koehr 3 days ago

I think the syntax is really pretty!

fuzztester 2 days ago

I read almost all the examples, except for fizzbuzz.

The syntax looks clean and concise.

The small binaries and claimed speed are pluses.

Hope it picks up.

fsckboy 3 days ago

I wish we could get away from putting syntax and naming betweeen us and languages.

io.write is really annoying to me. rw.read and rw.write makes much more sense, or io.in io.out.

io.writeInt writes an int as what, ascii/unicode, or binary? an Int is likely already binary/2's complement, and the language should print strings too, it's just a bad name.

leaving parentheses out surrounding predicates and/or a semicolon at the end should be my choice, not yours, it has nothing to do with the language and I have preferences.

If languages provided flexible syntax per user, divorcing themselves from syntax, then the further description of the language would be semantic. I have no idea what the semantics of this Q are, or are intended to be, and that's what matters. Compilation speed? that's not a language.

  • theamk 3 days ago

    Sounds like you may like Perl, with its TIMTOWTDI ("There's more than one way to do it") principle. For example you can do "if" and "unless", in regular or suffix notation... If you go to Perl 6 (Raku) you can redefine major parts of the language like operators.

    Of course this flexibility is one of the reasons why Perl is no longer popular - everyone has "preferences" and allowing too much freedom just means you cannot read others' programs easily.

    • fsckboy 3 days ago

      i've coded a lot of perl, and i hate "there's more than one way to do it". not that there is more than one way, but the idea that it's a good idea.

      when there is only one way to do it, then you and i will write identical code and it will be therefore easy to maintain, an idea put forward by Charles Simonyi before you were born.

      perl's hodgepodge semantics do make sense if you had already lived on the cli in a perl-less world and already knew grep, sed, awk, etc. because that's where perl grabbed its ideas from and you would already be familiar with them and it would not seem like more of a hodgepodge than what you already knew.

      there is more than one way to do it (semantically) is not there is more than one way to write it (syntactically) The boolean algebra of sets and the boolean algebra of logic are isomorphic (which in a strong sense is "same syntax"), but they are not semantically the same at all, is what I mean by semantics.

      the point I was making has nothing to do with perl's hodge podge of semantics, i simply want to know what the semantics of Q are, and the syntax presentation in the examples hardly distinguishes its semantics from any other post algol language.

      I'm not saying the language should support multiple/lax syntaxes, I'm saying that when I edit a file I should see what I like, and when you edit the file you should see what you like; I should never see what you like unless we agree to share. Same semantics, not same syntax. The syntax would not be part of the language. The fact that syntax is part of our languages is how noobs get syntax confused with semantics and then never learn that semantics are the only important thing.

      • K0balt 3 days ago

        How would one separate syntax from the language?

        Some kind of syntax.conf where syntax would be defined?

        I guess that would mean a syntax compiler stage to an intermediate language- kind of like the way many “languages” compile down to js?

        Or perhaps a shallower version of that idea, with a “plain” syntax and the syntax wrapper lives in a pre-render in the IDE?

        How would you choose to accomplish this?

        • fsckboy 2 days ago

          depends how quickly the "conversions" or "expressions" of syntax can be altered, and how each of us likes to work.

          when we load code into an editor, we get colored syntax highlighting that's done on the fly according to rules which have a syntax of their own. So, perhaps it could be done at that level.

          I would prefer if I ran "make syntax" on my repository, and you ran "make syntax" on yours, and we both ran "git semantics" to update the hub. The reason I prefer that is then I could use cli tools I'm used to, like grep, and only have to keep in mind "my syntax" which I would use for all the languages I code in. Then I could write my own helper tools... or, I could also write helper tools that worked on the semantic version and would not need complex parsers of braces, quotes, backslashes, etc.

          these ideas are not orginal to me, the language CGOL https://en.wikipedia.org/wiki/CGOL was lisp that looked C or algol style. The language CLU https://en.wikipedia.org/wiki/CLU_(programming_language) was OOP that was implemented all as calls to member functions, but then there was a layer of syntactic sugar on the surface so you could write x+y and it would turn into .add(x,y), they had identical semantics.

          • K0balt 2 days ago

            It’s a very interesting idea to separate syntax from language mechanics. In a way, that’s what all programming languages do, with bytecode or machine instructions under the hood, but the idea of segregating syntax from function seems distinct in an intriguing way. I wonder how much, exactly, of the comparative benefits of various languages stem from their syntax rather than the way it is compiled?

      • dolmen 2 days ago

        > when you edit the file you should see what you like; I should never see what you like unless we agree to share.

        Tools beyond compilers are based on a text representation of code.

        I'm thinking to VCS and code review tools. So a whole suite of user (developer) facing tools would be needed beyond the compiler.

        • dolmen 2 days ago

          Many coding environments that provide the editing experience along with the compiler/runtime are in this class.

          I'm thinking to:

            - graphical "languages" like Scratch
            - MS Excel: a French version of Excel has different names for functions than English Excel.
            - bytecode based languages