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.
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.
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.
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.
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.
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.
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?
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?
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.
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.
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.
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.
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?
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
There's already a Q language from KX.
https://code.kx.com/q/
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.
It really ought to have a simple example in the readme to give people a feel of the syntax.
does quickly draw attention to it's examples directory though
I saw the examples directory. It should still be at the top of the readme.
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.
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.
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.
Looking through the code a bit. This is quite impressive for such a short time working on it.
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
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.
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.
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?
Not to be confused with any of
https://en.wikipedia.org/wiki/Q_(programming_language_from_K...
https://en.wikipedia.org/wiki/Q_Sharp
https://q-lang.sourceforge.net/qdoc.pdf
When I saw the headline, I thought it referred to "Q" the array programming language (looks like your first link).
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?
Major vaporware vibes.
I did something similar. Similar in every way. https://github.com/nature-lang/nature
I think the syntax is really pretty!
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.
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.
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.
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.
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?
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.
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?
> 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.
Many coding environments that provide the editing experience along with the compiler/runtime are in this class.
I'm thinking to: