Can you add methods to any type? There is an example of adding a method to a builtin type (string) -- can you add also add a method to a union type?
Any plans to add some sort of enum type? If yes, will it be possible to add methods to enums?
How do you support (or intend to support) Unicode? It says "Strings use ASCII encoding" -- why not UTF8?
The example with a timeout channel does not show how / when the timeout will be triggered. Is this a special kind of channel?
It says "Packages will be synchronized to the $HOME/.nature/package directory" -- will this respect the XDG standard directory structure, which defaults to $HOME/{.cache,.local,.config}?
1. nature can add methods to built-in types, example
fn int.to_string() {
}
I haven't considered whether union types can add methods, so I tested it, and it seems to be possible, but this may cause some unexpected behavior, so maybe I should disable this possibility for now.
type test_t = int|null
fn test_t.hello() {
println('hello world')
}
2. Enum support is planned. I plan to use type declarations. Why hasn't enum been added yet? Nature has adopted a conservative syntax design, and I hope to hear more opinions and avoid affecting existing functionality as much as possible when adding syntax features.
type weekly = enum {}
So methods can be added to enums.
fn weekly.found() {
}
3. UTF-8 should be solvable via a library. I haven't thought much about UTF-8 yet, but if it can enhance nature's usability, I'll implement it as soon as possible. Usability is a key focus for nature moving forward.
4. Select{} timeout handling does require a special timer channel, which will be addressed in the standard library. Currently, it can only be handled via ch.try_recv() and ch.try_send(), which do not block the channel.
5. Actually, this is the first time I've heard of the XDG standard. I will study and understand the specification.
---
I am not an experienced programming language designer, so thank you for your questions. I will carefully consider them.
I can confirm this: I downloaded the old version of the app (on a Windows laptop), isolated it so that it would not auto-update, and then used it to download all my books (after the deadline had passed) and convert them with Calibre, which got rid of the DRM crap. You have to do both the downloading and the conversion on the same computer -- other than that, it worked perfectly for my more than 100 books.
> Fred Brooks, in Chapter 9 of The Mythical Man-Month, said this: Show me your flowchart and conceal your tables, and I shall continue to be mystified. Show me your tables, and I won't usually need your flowchart; it'll be obvious. That was in 1975. Eric Raymond, in The Cathedral and the Bazaar, paraphrased Brooks' remark into more modern language: Show me your code and conceal your data structures, and I shall continue to be mystified. Show me your data structures, and I won't usually need your code; it'll be obvious.
Long live Clipper -- one of my first paid gigs. Amazing platform to write (compiled!) console-based applications with a DB living locally or on a networked drive. Something which does not exist anymore as a market.
Same here, good memories, compiling took up to 30 minutes, so during compiling we always went for a game of billiards. Coming back you found out that the compilation had crashed after 5 minutes, fix bug and start the same routine.
I don’t recall compilation being slow. The Clipper app for small businesses that my father created used overlays because it couldn’t fit in memory, yet compilation was still fast (all of this was happening on an XT). Linking, on the other hand, was painfully slow, but one could use Turbo Linker if overlays weren’t needed—TL was unbelievably fast. Later, Blinker came along. It was slower than TL but offered excellent support for overlays (and a bunch of other useful features) while still being much faster than MS Linker.
Same here. I really enjoyed working with Clipper. The fun ran out when my application was bursting through the available memory though. It would be nice to have a 64 bit linux/macos/windows Clipper-like compiler.
Kudos for your project -- it is great fun and a learning experience to implement your own HTTP server in a low(er)-level language.
One question: you say that "Transfer-Encoding: Chunked responds with 411 Length Required, prompting the client to resend with Content-Length". Is there a reason for doing this (security perhaps), or is it just a choice?
Sorry for answering myself. I paid more attention now, and it seems this is disabling chunked transfer encoding from the client to the server, which makes sense from a security / reliability PoV. Disabling it from server to client does not (IMHO).
reply