4 ms·
This kind of thing was one of the reasons Visual Basic macros for Microsoft Office was so successful. You can perform actions in Word, Excel, watch the macros t
by smy1es 3y ago
This kind of thing was one of the reasons Visual Basic macros for Microsoft Office was so successful. You can perform actions in Word, Excel, watch the macros they produce then customise themselves to your needs afterwards in code. It is a simple and powerful concept, so good to see it in curl.
- actionfromafar 3y agoI was going to say, there has to be a generic pattern for things like this. Also made me think of AREXX on the Amiga.
- sph 3y agoThere is, but we need to throw away our outdated current programming model. Think Lisp or Smalltalk. There should not be a separation between program written in some language, operating system and shell [1]. You'd simply run: CURL url: "https://example.com" method: 'post in an interactive system, that can either represent your shell, or your application code. We need --libcurl because UNIX is not an interactive environment, so there is an enormous abyss between runtime and compile time. (Syntax in this example from a Smalltalk-like environment I have been designing, should be understandable enough) --- 1: "An operating system is a collection of things that don't fit in a language. There shouldn't be one." — Dan Ingalls, 1981
- supriyo-biswas 3y agoGiven that we already have the concepts of exported entry points and extern in C, this should already be possible to a certain extent. The only other thing which needs to happen is that ELFs should have the concept of exported data structures, so while "URL" might not be a defined structure in the OS, something like curl can provide it. Too bad we're stuck with UNIX/POSIX model - you could even take this idea of exported data structures and have the terminal represent data in the preferred users format instead of having tools like jq.
- sph 3y agoWe have dlopen and we can list exported symbols, but we have no information about a function's arguments, ABI and calling convention, so it's pretty much impossible to turn UNIX into a fully late-bound and interactive REPL. Same issue with syscalls. The only way is starting from scratch, with a novel approach and programming model.
- overboard2 3y agoOr you could add some more sections to object files. Just make clang and/or gcc export function signatures, structs, enums, and typedefs
- actionfromafar 3y agoI wonder if one of the existing interpreted languages (python/javascript/ruby/whatever) could maintain a patch for llmv/gcc which did exactly that and in the process make the most incredible seamless integration ever between itself and C (and also C++ now with its ABI stabilizing!)
- supriyo-biswas 3y agoWhy can’t you add additional data about the data types of parameters in a separate ELF section? It would be only used by programs that look for it like a specially designed shell. The calling convention can be assumed to be the same as used by the OS/arch combination.
- sph 3y agoYou could, but you then have to recompile the world with this new information stored as a ELF header or something, and good luck if the library is not written in C (so it has its own conventions, ABI, memory model and binary format) I'm talking about the status quo today, not how you can improve in a perfect world where everybody adopts a better way of doing things. Implementing an half-baked Smalltalk layer on top of UNIX will not turn UNIX into a Smalltalk environment.
- 3y ago
- xnorswap 3y agoWhat you're looking for exists, it's powershell. Invoke-WebRequest -Method 'Get' -Uri 'https://example.com' And the response is a typed object: That you can pipe properly by piping objects not strings, e.g. : Invoke-WebRequest -Method 'Get' -Uri 'https://example.com' | Select-Object -ExpandProperty Headers Outputs: Key Value --- ----- Age 438810 Vary Accept-Encoding X-Cache HIT Content-Length 1256 Cache-Control max-age=604800 Content-Type text/html; charset=UTF-8 Date Mon, 29 Jan 2024 15:08:42 GMT Expires Mon, 05 Feb 2024 15:08:42 GMT ETag "3147526947+ident" Last-Modified Thu, 17 Oct 2019 07:18:26 GMT Server ECS (nyb/1D15)
- freedomben 3y agoYes yes, power shell is powerful and really good. I wanted to hate it because it seems too verbose and I don't like the mix of capitals and hashes in names. but the APIs they make available from .Net are pretty phenomenal. Extreme verbosity aside, done day I'm have to seriously learn it
- actionfromafar 3y agoCan't hate it, but I can't love it either. I wish some other more "normal" languages (Ruby? Python?) had a better "shell" story and dotnet integration.
- int_19h 3y agoFor Python, https://sh.readthedocs.io/ https://sh.readthedocs.io/ is very nice, but unfortunately no Windows support.
- freedomben 3y agoFor so long I have dreamed of a ruby-like shell language. At one point I even built a prototype that was a ruby DSL, but I found myself continually having to implement functions and it never seemed to get to a point where I could use it all day and not run into missing functionality that I had to add. Some day I'll return to it, but it will have to be a day when I don't have a real job :-D
- philzook 3y agoYou might find this work and talks on liballocs by Stephen Kell interesting. The pitch is how to enable smalltalk like reflection for unix as it exists today. https://www.humprog.org/~stephen/#works-in-progress https://www.humprog.org/~stephen/#works-in-progress
- sph 3y agoI saw his talk on the topic, but his home page has a lot of good reading material. Thanks for sharing!
- cm2187 3y agoOr the excel side by side xaml/UI of the wpf editor in visual studio.
- jasomill 3y agoWhile it doesn't appear to have been updated in many years, Microsoft built a similarly useful tool[1] that lets you browse the structure of a given Office document and see C# code that generates various components of it. [1] https://github.com/dotnet/Open-XML-SDK/releases/tag/v2.5 https://github.com/dotnet/Open-XML-SDK/releases/tag/v2.5