The Phix Programming Language
phix.x10.mx
phix.x10.mx
http://phix.x10.mx/docs/html/phixvscl.htm
The only strange thing is release date and references to 64 bit arch..
May be it's a false alarm, but I thought I had better share it here.
[1] https://www.cs.utexas.edu/users/EWD/transcriptions/EWD08xx/E...
I think other languages aimed at mathematicians, like Julia[1], do this for similar reasons but, honestly, unless you're writing a CAS, I think it's a bad idea.
Having lived with Dijkstra's ideas for a while, I will say that people find closed-open sequences highly counter-intuitive.
I work on a financial simulator, so we use dates quite a bit. Representing a year as 1-Jan-X up to but not including 1-Jan-(X + 1) is perfectly natural, and really works well with date-time libraries. It still works if you're using dates and decide to extend it to handle datetimes, and even months 1-M-X to nextmonth(1-M-X) do what you'd expect. So he's right, the math works beautifully. You also avoid writing a successor function when you split closed-open ranges; easy with integers, but gets tricky with almost anything else.
But I've had to nag people many times to not use Dec 31. I think the intuition for a closed-closed ranage is deeply ingrained and that extra "Jan 1" seems to stick out and bother people.
From that discussion, here's an interesting argument in favor of 1-based indexing:
> Let me try to briefly convey how I learned to stop worrying and love 1-based indexing. Basically it comes down to the fact that there are three significant numbers you have to think about when it comes to an array: it's initial index, final index, and length. In 0-based indexing, these are all different: 0, n-1, and n. In 1-based indexing, the final index and length are the same: 0, n, n. That's one less thing to think about and keep track of when coding. It seems trivial, but when you're doing something tricky and juggling a lot of complicated things in your head, even the tiniest alleviation of cognitive load helps, I find.
[1]: https://groups.google.com/forum/?hl=en#!topic/julia-dev/tNN7...
First position, last position, and length for an array of [1, 2, 3].
0-based: 0, 2, 3 (0, n-1, n)
1-based: 1, 3, 3 (1, n, n)
Actually, that's a pretty convincing argument. I've played with Lua before, and did get the feeling that 1-based index has some advantages (but couldn't articulate why).Having the last position and the length be the same seems to fit the common intuition, like how children count: "What is the position of the last thing" and "How many things do we have?".
So it may make the language easier to learn. On the other hand, it may make the learner struggle to pick up most other languages which use 0-based index. I suppose it's been argued in depth on both sides..
For me it's far more confusing when I have to write code in a language with 1-based indexing, although I can see why e.g. Julia does it as it's more focused on mathematics and also in some cases the indexing is actually simpler when specifying a range.
Zero-based indexing makes sense only in light of the underlying mechanics of memory address offsets (which, IIRC, isn’t even how eg C literally works). Natural numbers are counting numbers. It makes “more sense” that a sequence up to N contains N numbers, that is, its members can be put in a bijection with {1,...,N}
These are all conventions, of course. But the latter convention has a finer pedigree.
If you're trying to describe an offset from a starting position, then zero-indexing makes sense.
If you're trying to describe the rank/position of something in a list, then IMO one-indexing is not unreasonable.
Ah, got it. You need to download the executable p64, see http://phix.x10.mx/download.php Like with old lisps.
Writing an entire language as a way to hone someone's skills is great, even if it is very time consuming vs. the output (skills learned). But I wonder what better options exist.
Or, for medium scale ideas, maybe taking another language and forking it would be useful.
In "Phix vs Conventional Languages" I'm told that "1/2 is always 0.5". And "Library Routines" / "Math" includes sin, cos and tan. What's going on here?
> An atom can hold a single floating point numeric value, or an integer
I don't know why it isn't called "number", but it exists.
The page on atom also mentions:
> It can also hold a raw pointer, such as allocated memory or a call_back address, but that is typically only used when interfacing to external code in a .dll or .so file.
But that still leaves the ASCII tree diagram agreeing with the sentence "Phix has just five builtin data types:" while showing (and describing, in the following bullet point list) five data types that don't include "number" or a floating-point type.
So what's left is a minor but consistently repeated error in the doc, on the "Core Language" page.
If your description just lists (howsoever appealing) platitudes, I don't get the answers I need.
Okay, the design whispers to me that "lack of community/ecosystem" sets it apart.
Doesn’t this describe many of the modern languages - python’s lists, ruby’s arrays, etc...? Or is the cool part the lack of more specialized classes like dict or set?
Okay.
In other words, it seems it's easier to make your own programming language than learn the ones that already exist.
They all have plenty in common and exist along a continuum of complexity that includes scripting languages and goes all the way to general purpose.
Isn't that the point? Building a serious scripting language is a huge project. It's far more ambitious than writing a simple text-based calculator.
If you want to build a scripting language worth actually adopting, it's going to have to be far better than Python. That's a very high bar.
The same applies for everything in technology. You could try to write your own OS rather than use an existing one, but it's almost certainly a terrible idea.
I once replaced a convoluted pricerule framework based on fixed options in a booking system with a simple evaluator that exposed variables for number of days, number of guests etc. That was very much worth adopting for that specific use case.
Your line of arguing always assumes that any solution has to cover all bases, which is just not true when you're solving a specific problem.
And no, the same doesn't apply for everything in technology. The continuum for operating systems starts at a much higher level of effort and cost of maintenance. Nothing is black or white.
If you ask me; people should build more simple languages, and learning how be considered an essential part of becoming a programmer. It's not rocket surgery.