Tell me more ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

In reading Alan Kay's question on Significant new inventions I was coming up with answers that were not new ideas but old ones that have been passed by in the main stream. So, what significant lost advances that happened on a side track should be revived in the main stream of software?

These would be ideas that worked well in their context but a different context appeared and became dominant the context, even though it lacked the idea. It maybe that in the new dominant context one just cannot do something or it requires great effort to be exerted.

share|improve this question

migrated from stackoverflow.com Feb 5 '11 at 20:50

4 Answers

The condition system from Common Lisp wasn't compatible with the statically-typed languages that were most common at the time. Now that dynamic typing is a valid mainstream option, it may be time to take another look.

The main thing that sets CL's condition system apart is that it doesn't unwind the call stack to find an exception handler. Instead, condition handlers are registered, and if a condition is raised, control is transferred directly to the first registered handler for that condition. If the condition can be fixed by the handler, control can be transferred back to the function that raised the condition.

share|improve this answer
Does that relate to OpenVMS AST (asynchronous system traps)? – C.W.Holeman II Feb 9 '11 at 23:14
@C.W.: CL conditions are synchronous. The main difference from exceptions is how the handler is found. ASTs appear to be an entirely different concept. – Larry Coleman Feb 10 '11 at 13:19

Logical name and search list handling on file open in VAX/VMS aka OpenVMS. In more detail and with path formatting changed to more common usage today:

First, logical name substitution in file specifications at open time. It associates a logical name with a value. The value would be substituted in the file specification that is used in a file open. For example:

Logical Name    Value 
------------    ----- 
source          /user/cwh/src

File Specified  File Opened 
--------------  ----------- 
source/x.c      /user/cwh/src/x.c 

The second feature, is the search list processing of a file specification at open time. The open request would automagicly use the logical to specify a search list by name. For example:

Logical Name    Value 
------------    ----- 
source          /user/cwh/src,/project/src 

Contents of /user/cwh/src       Contents of /project/src 
-------------------------       ------------------------                 
w.c     x.c                     x.c     y.c     z.c

File Specified  File Opened 
--------------  ----------- 
source/w.c      /user/cwh/src/w.c 
source/x.c      /user/cwh/src/x.c 
source/y.c      /project/src/y.c 

The logical name does not add any links in the file system. It is a value defined for the process some what like an environmental variable. It works without any explicit action on the part of the applications.

share|improve this answer
Didn't vaxen have a version-controlled file system as well? – Paul Nathan Feb 9 '11 at 21:51
That's my next answer, also very powerful. How many different ways do apps address it: xxx(copy of).txt, xxx.txt~... – C.W.Holeman II Feb 9 '11 at 23:12

Versioning file systems. I did a lot of my early work in programming on VAXen and more than once (read: more than a hundred times) I've had my ass saved by the fact that the OS created a stack of backups automatically for me. Why this didn't catch on across the computing board baffles me to this day.

Logic programming. It's been around since the early '70s (if not earlier) and it can be easily applied in a lot of domains where imperative solutions are clumsy, unreadable and unmaintainable. It's always been there on the fringes of academia, but it would be nice to finally see its application in the mainstream.

Nested function definitions (like Pascal, Modula-2, etc. -- the whole Wirthian line). They remain, in my opinion, the single best way to write small helper functions without polluting your global namespace and without the unnecessary addition of a whole new class of declarative syntax (like classes). They're not hard to implement, they're not hard to understand when you read -- so why not use them?

share|improve this answer
I use nested functions and procedures all the time, but then I'm a Delphi programmer. I've missed them when using other langs, w=evan as far back as circa 1990 trying to "translate" Turbo Pascal into Turbo C – Gerry Feb 10 '11 at 3:49
JavaScript and C# both have them. – munificent Feb 10 '11 at 21:45
You can mimic them kinda/sorta in JavaScript and C#. – JUST MY correct OPINION Feb 11 '11 at 2:16

In the context of programming languages, I'd really like to see multimethods become mainstream.

share|improve this answer
Do you have a language that does/did provide it? – C.W.Holeman II Feb 9 '11 at 23:15
@C.W.Holeman II: Wikipedia has a bunch of examples. I like that you can (almost) do it in C# 4 (with only a couple of extra lines)... – Dean Harding Feb 9 '11 at 23:47
@C.W.Holeman II: Lisp, Dylan, Clojure off the top of my head. I'm sure if I spent a few minutes on research I'd find a few dozen more. – JUST MY correct OPINION Feb 10 '11 at 3:03

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.