Inventing on Principle - amazing video!

Started by
65 comments, last by ddn3 12 years, 1 month ago

[quote name='ddn3' timestamp='1329775272' post='4914971']
No I never got into functional programming, my brain doesn't work that way and it's actually harder to understand, for me anyways. I'm sure if your mathematically inclined, functional programming would come naturally but I'm not.. Closest I get to FP is some stuff i do in Lua.

Functional programming doesn't have to mean LISP. If you've ever used the STL algorithms, a foreach loop, or a lambda function, you are using functional programming techniques.

And the STL algorithms are a great example of just how much trouble can be saved by applying functional techniques to a problem, even in a language that is generally not all that functionally-inclined.
[/quote]No one has used LISP since the 1980's. Lisp, or Common Lisp, is not functional.
Advertisement

No one has used LISP since the 1980's.

We still teach Scheme, and there is still a large body of projects using various dialects of Lisp - close enough. The capitalisation (or lack thereof) is irrelevant.

Lisp, or Common Lisp, is not functional.[/quote]
That was kind of my point. You can write in a 'functional style' in any language with rudimentary support for first-class functions. Pure functional languages themselves are a tad unpleasant to work with - nobody likes pedantry, after all.

Tristam MacDonald. Ex-BigTech Software Engineer. Future farmer. [https://trist.am]



A system like that exists. (insert obligatory comment about Lisp doing it before everyone).

It's a Turing machine, we get it. But quite frankly, whether in software or hardware, a Turing machine is still a Turing machine.
[/quote]
What does Turing-completeness have to do with anything? That we can accomplish this with any language/machine? Are we going to skip over the barrier to implementing something like this in most languages/OSs?

If that's all you have to say, I'd argue that you don't get it. LISP machines were (are) far from perfect, but there's something magical about being able to redefine/add/extend functionality to the editor you're using _in_ the editor you're using. Or your documentation browser, web browser or just about any other application, not to mention significant portions of the OS. Outside of tinkering with an ancient LISP OS, you can still get a feel for it from modern products like LispWorks and Allegro. I use MatLab and Visual Studio regularly, but some of the things I am able to do with LispWorks, despite a lot of clunkiness, can save a lot of time and allow me to bend the tool to me/the project as opposed to the opposite (or dealing with very chunky SDKs/APIs that still require re-compilation, etc). I once used a SmallTalk system, whose name escapes me, that encompassed similar ideas.

It's not necessarily dependent on Lisp, Common Lisp is far from my ideal Lisp, but there are not too many alternatives, yet. More languages are becoming "alive", in the sense that the compiler exists at runtime and you can poke around just about anything while it is executing, but we're not quite there. Certainly, most languages still do not encourage "dangerous," otherwise "unnecessary" functionality that compiler macros and vanilla macros provide for. I'm amazed that we don't see more of these living systems in Ruby, Python and Javascript. Demos like in the OP come up pretty frequently in smaller circles, but I'm still surprised we don't see more concerted efforts at "living" IDEs and the like.

Yeah, you _can_ do that in a lot of isolated contexts on Linux, OS X and Windows, but it is no where near as easy or as significant as it was when it was a genuine focus. Turing-completeness is entirely irrelevant to that line of discussion.


[quote name='kordova' timestamp='1330880071' post='4919205']
No one has used LISP since the 1980's.

We still teach Scheme, and there is still a large body of projects using various dialects of Lisp - close enough. The capitalisation (or lack thereof) is irrelevant.[/quote]I know, I use Common Lisp professionally. Even in the CL, Scheme and Clojure communities, LISP is understood to be the historical thing the past and Lisp is generally accepted to mean CL, unless otherwise stated.

there's something magical about being able to redefine/add/extend functionality to the editor you're using _in_ the editor you're using.

And in the few areas that turned out to be a reasonable end-user feature, I can still do that (i.e. emacs).

I really don't get your and Antheus' fascination with being able to do this at every level of the OS - it just strikes me as a maintenance/stability nightmare. What exactly is wrong with having this sort of functionality implemented in user space (and entirely ignoring the underlying kernel/hardware layers)?

Tristam MacDonald. Ex-BigTech Software Engineer. Future farmer. [https://trist.am]


I really don't get your and Antheus' fascination with being able to do this at every level of the OS - it just strikes me as a maintenance/stability nightmare. What exactly is wrong with having this sort of functionality implemented in user space (and entirely ignoring the underlying kernel/hardware layers)?


Same reason why I want ability to put together my own PC from scratch. Or car. Or house. Or being able to take one of those apart.

Doesn't mean I'll do it, but I like to know ability like that exists.

In software, that's almost completely gone, even for developers.

And in the few areas that turned out to be a reasonable end-user feature, I can still do that (i.e. emacs).

I don't think this was some logical progression where the other ones were weeded out. It's more that for various reasons (not all technical, though those were there as well) that avenue of exploration just ceased almost altogether. Emacs isn't really a great example, because without integration, you end up with what it is now. An independent mini-OS sitting in your terminal. It does not play nicely nor is it consistent with the window manager,



I really don't get your and Antheus' fascination with being able to do this at every level of the OS - it just strikes me as a maintenance/stability nightmare. What exactly is wrong with having this sort of functionality implemented in user space (and entirely ignoring the underlying kernel/hardware layers)?
Well, I'd also point it out as security nightmare, though I'd estimate most machines are effectively single-user anyway. To answer your question, there's nothing necessarily wrong with what you are proposing, though when we mention the entire OS, we are probably including the UI which may run but is not actually modifiable in user space. Depending on your profession, access to exactly how interrupts are handled, redefining/hooking into any/all system calls and the underlying hardware might have non-academic benefits.
though when we mention the entire OS, we are probably including the UI which may run but is not actually modifiable in user space[/quote]

That is just an arbitrary division. Hiding the code that performs file write through to disk doesn't affect security.

I'd also point it out as security nightmare[/quote]

Security is a process. No tech makes anything secure by itself. For consumer, access to that might not matter. But most of this tech isn't available to developers. Even Google couldn't gain access to Flash, for example, and it would be hard to argue that they lack motivation, money or leverage.

With that said - kernels today are opaque and buffer overflows are still an important vector of attack, they are discovered even in JS engines.

Only thing that holds is that security through obscurity (aka let's hide this under layers of abstraction) doesn't solve the problem no more than exposing these parts weakens it (aka open source).

If security matters, all of these parts are opened anyway, even proprietary software needs to often be disclosed for review.

[quote name='swiftcoder' timestamp='1331132194' post='4920073']
I really don't get your and Antheus' fascination with being able to do this at every level of the OS - it just strikes me as a maintenance/stability nightmare. What exactly is wrong with having this sort of functionality implemented in user space (and entirely ignoring the underlying kernel/hardware layers)?


Same reason why I want ability to put together my own PC from scratch. Or car. Or house. Or being able to take one of those apart.

Doesn't mean I'll do it, but I like to know ability like that exists.

In software, that's almost completely gone, even for developers.
[/quote]

I don't think it's gone, you could get a commodity level blank PC like the Raspberry or build one and flash it's bios with your own custom bios to boot up your own custom OS which allows you to run code in ring 0, but that's alot of work, for very dubious gain. Having the ability to "hack" the execution flow, permutate data and code on fly and have execution safety all on one, that's a major technological challenge, if your not willing to run VM sandboxes everywhere. And even then it's all based on a premise that this is a "better" way to develop programs, which I don't even think it is.. Truthfully there is nothing stopping anyone from doing this, if they wanted too..

Good Luck!

-ddn

I don't think it's gone, you could get a commodity level blank PC like the Raspberry or build one and flash it's bios with your own custom bios to boot up your own custom OS which allows you to run code in ring 0, but that's alot of work, for very dubious gain.


Yes, for the fifth time in this thread, one needs to go to extreme measures to gain sufficient insight, because most widely available platforms (aka cheapest and ubiquitous) no longer provide it.

It's also the same thing if you build your own engine that supports discussed functionality - it will be built from scratch for that particular purpose. Instead of messing with BIOS, one will be messing with integrating an interpreter or resource manager, but there are plenty of those available today - completely open, not as binary dll.

And even then it's all based on a premise that this is a "better" way to develop programs, which I don't even think it is.. [/quote]

Web is built on open stacks. I find it would be hard to advocate that choosing a closed stack there would offer more benefits and numbers support that. The reason is simple - when your service goes down, waiting for vendor to integrate their next fix into service pack 3 months from now won't help.

It also raises an interesting proposition. While those companies clearly benefit from open nature, the services they provide are not necessarily open.


Ironically, many VS developers swear by Resharper and Eclipse community is all about plugins. Microsoft is going to great lengths to open their development stack while struggling to retain complete control. So apparently there is commercial interest, even though these tools are used predominantly in IT which isn't known for technical prowess.

Security is a process. No tech makes anything secure by itself. For consumer, access to that might not matter. But most of this tech isn't available to developers.
I agree with this and your other statements. I meant this more in the context of swiftcoder's more conventional concerns about maintenance and stability. The notion of complete look through and ability to recompile on-the-fly any component from hardware drivers up on a multi-user system lends itself to security concerns. LISP OSs avoided this discussion by being single-user systems.

I wouldn't personally actually be concerned about security in the domains where I'd find this useful.

This topic is closed to new replies.

Advertisement