Stories
Slash Boxes
Comments

News for nerds, stuff that matters

Open Source Programming Language Design

Posted by krow on Fri Apr 27, 2001 08:37 PM
from the more-languages-should-look-like-LISP dept.
descubes writes: "It's been a long time since Java, the last major change in programming languages. Could the next one be designed "the Open Source Way"? For a few years, I have been working on a programming language called LX, which is part of a larger system called Mozart. I need some feedback. Could Slashdot readers comment on which programming language features they would like?"
This discussion has been archived. No new comments can be posted.
Display Options Threshold:
The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
(1) | 2 | 3 | 4
  • #!/usr/bin/perl by Anonymous Coward (Score:1) Friday April 27 2001, @04:45PM
  • Re:Modula3 by Anonymous Coward (Score:1) Friday April 27 2001, @05:24PM
  • Re:Bases by Anonymous Coward (Score:1) Friday April 27 2001, @05:57PM
  • Re:What is your goal with the language? by Anonymous Coward (Score:1) Friday April 27 2001, @06:16PM
  • kx.com and k by Anonymous Coward (Score:1) Friday April 27 2001, @10:15PM
  • Re:Stop using tabs, then by Anonymous Coward (Score:1) Saturday April 28 2001, @01:54AM
  • New language? by Anonymous Coward (Score:1) Saturday April 28 2001, @02:45AM
  • Re:Lisp gives you nothing. by Anonymous Coward (Score:1) Saturday April 28 2001, @04:52AM
  • hard-to-express but useful idea by Anonymous Coward (Score:1) Saturday April 28 2001, @05:41AM
  • Object Orientation by Anonymous Coward (Score:1) Saturday April 28 2001, @06:13AM
  • Re:OCaml (Re:What I'd like to see.) by Anonymous Coward (Score:1) Saturday April 28 2001, @11:51AM
  • Identity and Declarations by Anonymous Coward (Score:1) Sunday April 29 2001, @08:17AM
  • Re:Unexperienced Creator of language? by Anonymous Coward (Score:1) Sunday April 29 2001, @09:24AM
  • <Insert-deity>-damn indentation-sensitive stx by Anonymous Coward (Score:2) Friday April 27 2001, @06:44PM
  • Re:Define a problem domain for your language by Anonymous Coward (Score:2) Friday April 27 2001, @07:45PM
  • by Anonymous Coward on Friday April 27 2001, @08:35PM (#260310)
    A very long time ago, IBM tried to combine Fortran, COBOL, and a mess of other languages into an uber-language. They tried to put every feature in, and it got so big and cumbersome that it never became widely adopted. Putting a "request for features" call out to the world will surely never give you the language you're striving for. If Python, Java, Rebol, Perl, C/C++, etc. don't solve your problems, figure out what you're missing and take it from there.
  • by Anonymous Coward on Friday April 27 2001, @04:59PM (#260311)
    Things I'd like to see:
    • Compiled and Interpreted (interpreted for development but a compiler for what needs speed just like some people use C interpreters to develop C apps)
    • A good standard library (like Java/Python/Perl)
    • Perhaps Truly Object Oriented (like Smalltalk)
    • Support flexibility, like I'm annoyed by Java when you can't create references to methods... it'd be very useful in a great many projects I do..

    The key is to be unique, you'll notice Python and recently rose to fame in that it contained ideas not seen in mainstream lately, such as tabs for delimeters of the score. Try to come up with someone radical that most people can't even think of now, but keep it simple so people can use.

  • Re:Perfect Optimizing Compiliers by David Greene (Score:1) Sunday April 29 2001, @08:39AM
  • Re:Define a problem domain for your language by David Greene (Score:2) Saturday April 28 2001, @12:48PM
  • Re:Language design tips by David Greene (Score:2) Saturday April 28 2001, @01:02PM
  • Re:COME FROM (Score:3)

    by The Man (684) on Friday April 27 2001, @07:11PM (#260315) Homepage
    ...You need to have COME FROM, gotos are for wussies who need their hands held...

    Oh, you mean exceptions. After all,

    try {
    foo...
    } catch (SomeExceptionType baz) {
    try_to_recover_from_baz...
    }

    (This text is here in an effort to prevent this post from being considered filled with junk and rejected. Please ignore it and bitch to CowboyNeal that his "lameness filter" fails to catch first ports, hot grits, all your base, and natalie portman garbage but somehow rejects this perfectly valid and even fairly on-topic post. Thanks for nothing, CowboyNeal.)

    is really no different from

    foo...
    baz:
    if (some_condition)
    COME FROM foo;

    At least Intercal folks realize their language is a joke, I don't think Sun have caught on yet.
  • Re:Jikes (Score:5)

    by pohl (872) on Friday April 27 2001, @05:01PM (#260316) Homepage
    There should be a "Misinformative" moderation label. Jikes is not an open source variant of Java. It is a compiler for the Java language, implemented with an open source license. It is merely an alternative to the javac compiler that comes with the JSDK. It was even a faster alternative the last time that I tried it, but it is not a language that was designed in an open community, which is what the question is about. One could use "offtopic", I guess, but then would likely be screwed in metamod. Not that I care about karma.
  • Re:Likes/dislikes by Ian Bicking (Score:1) Saturday April 28 2001, @09:52AM
  • Re:Likes/dislikes (Score:4)

    by Ian Bicking (980) <ianbNO@SPAMcolorstudy.com> on Friday April 27 2001, @11:27PM (#260318) Homepage
    Named/out of order arguments- will cause confusion and bugs
    You are so very, very wrong with this. Named arguments are, IMHO, entirely and completely positive, with no negative effects whatsoever.

    Any function/method with more than, oh, two arguments causes confusion and bugs. Most of the time there is no real natural order to the arguments -- perhaps some conventions, but that's about it. Does the file come first in fputs, or is that fprintf...? Does either of those make more sense then the other?

    Argument ordering is usually arbitrary, but named arguments are never arbitrary. For large function calls (which would include object instantiation) keywords (named arguments) are very good.

  • Re:Perfect Optimizing Compiliers by John Allsup (Score:1) Sunday April 29 2001, @11:56AM
  • Re:Define a problem domain for your language by sjames (Score:2) Saturday April 28 2001, @06:22AM
  • Re:What I'd like to see. by diaphanous (Score:1) Saturday April 28 2001, @07:12AM
  • Re:Define a problem domain for your language by ciurana (Score:2) Friday April 27 2001, @10:52PM
  • by ciurana (2603) on Friday April 27 2001, @04:51PM (#260323) Homepage Journal

    Congratulations on your development of LX. It seems like you've made excellent progress so far, and the language definition and examples are useful for understanding the language itself. It looks cool.

    Rather than commenting on the language and its features, I'd suggest that you identify a problem domain where your language (and Mozart) are a better solution than any other options out there. This will allow users to identify your language more quickly and bring more users to it. When people think of Java they think "the language of the web." PERL? "The duct tape of the Internet." I'm sure you get the idea.

    Cheers!

    E
  • Template Meta Programming by mvw (Score:2) Monday April 30 2001, @02:31PM
  • Re:whatever it happens to be.. by S. Allen (Score:2) Friday April 27 2001, @05:52PM
  • Re:Define a problem domain for your language by Doctor Memory (Score:1) Saturday April 28 2001, @07:12AM
  • From my undergraduate-level compiler design course (which every CS person should take, IMHO), there are many problems in optimizing compilers that are NP-complete. For instance, the favoured method of allocating variables to registers is NP-hard for exact answers, but a heuristic is used that works very well, provided you have more than about 16 registers (one of the main reasons why modern architectures all have 32 or more registers).

    Anyway, there is no such thing as the "perfect optimizing compiler". To be verifiably optimal, as well as knowing everything there is to know about the machine's internal architecture, it would have to have complete knowledge about the dataset that the program to be compiled is to be run on - if that is not available, if there is a tradeoff to be made the compiler has to make a choice that will be suboptimal

    To take a simple example, the compiler might choose functions to be placed in a certain order in the object file so that functions called repeatedly in sequence can all fit in the cache at once. Running the program with a different dataset could produce different call patterns, and thus the optimal layout of functions in the object file might be different.

    So, your program, and any non-trivial program, could only ever be truly "optimized" for one input dataset. Anything else is a compromise.

    Go you big red fire engine!

  • Java? Duh? And the minimalist approach by dido (Score:1) Friday April 27 2001, @07:19PM
  • by scrytch (9198) <chuck@myrealbox.com> on Saturday April 28 2001, @07:10AM (#260329)
    > There are plenty of indentation mode packages arround for emacs already.

    And I only need them for languages which lack any capacity to pretty-print, and thus force me to do it manually.


    --
  • ML by Alexey Nogin (Score:1) Saturday April 28 2001, @01:13AM
  • whatever it happens to be.. by dwlemon (Score:1) Friday April 27 2001, @05:04PM
  • Re:It needs to enforce modularity! by HeghmoH (Score:1) Friday April 27 2001, @06:01PM
  • Re:Great languages come about to solve real proble by nosferatu-man (Score:1) Saturday April 28 2001, @07:07AM
  • Functional Programming on a Palm Pilot by alienmole (Score:1) Saturday April 28 2001, @08:32AM
  • Re:Mainstream influence of Functional Languages by alienmole (Score:2) Saturday April 28 2001, @08:58AM
  • by alienmole (15522) on Friday April 27 2001, @06:36PM (#260336)
    Functional languages have already had quite a strong impact on mainstream languages, but only indirectly. Your professor is absolutely right about how long it takes for programming ideas to hit the mainstream. Java is the first example of a mainstream language which allows some of what Smalltalk enabled back around 1972.

    However, Java focuses almost exclusively on strongly-typed object-orientiation as its primary concept. It completely ignores two related features which make Smalltalk powerful: code blocks and closures. These Smalltalk features were actually derived from LISP, which at the time (1972) could only be called a proto-functional language. The first truly functional language was probably Scheme, in 1975.

    Because the functional ideas inherent in LISP were not fully developed at the time Smalltalk was created, the conceptual emphasis in Smalltalk was on object-orientation, derived from Simula. If Smalltalk had been able to draw from Scheme instead of LISP, there's a strong chance that it would have had a more functional bent, which might have affected the languages which were influenced by Smalltalk.

    Instead, Scheme came along just a little too late to directly influence the mainstream. Only recently have we started to see functional features appearing in mainstream languages. PERL and Javascript both support lambda-calculus-compliant closures, and first-class procedures, which are fully realized incarnations of the original concepts on which Smalltalk's somewhat limited code blocks and closures were based. Python has also recently moved in this direction.

    I predict that functional features will slowly be adopted by most mainstream languages over the next decade or two. Java will be the last new mainstream language that's completely non-functional (pun intended). The power of these functional capabilities is too great for language designers to ignore.

    Note that I'm not saying that current functional languages will become mainstream languages. Rather, just as mainstream languages have absorbed object-oriented concepts, they will also absorb functional concepts.

    Anyone writing a language today who isn't familiar with Scheme, Haskell, and ML may as well throw in the towel right now. Unless they plan to invent the next great paradigm, they will not succeed. I think it's impossible, in 2001, to write a language without taking functional concepts into account. (Of course I'm reminded of Tanenbaum telling Torvalds that writing a monolithic OS kernel in 1991 was a fundamentally bad idea...)

  • Maybe abstraction is the evil by Skapare (Score:2) Friday April 27 2001, @11:50PM
  • Re:No committee, but ... by Jerf (Score:2) Saturday April 28 2001, @05:15AM
  • by Jerf (17166) on Friday April 27 2001, @07:14PM (#260339) Journal
    I want it to be object oriented!... except for the useles parts. Oh, and combine the best of imperative and functional, the best of perl and python, the best of C++ and smalltalk, the best of capabilities and UNIX, the best of BeOS and OSX, the best of nethack and Angband, and the kitchen sink.

    It should be work on Palm Pilots, and Beowolf clusters. It should be easy to extend, easy to parrellize, and easy to optimize for every major processor currently in use. It should be easy to read, have a powerful and compact syntax, familar to people who understand Pascal, Ada, LISP, Prolog, or SQL. It should be comprehensible to an advanced two-year old, usable for teaching computer science concepts in college, and usable in a professional environment. It should be loved by both the Slashdot community and Microsoft, and it should be immune to embrace-and-extend.

    It needs to perfectly fit my needs but also perfectly fit the needs of my grandmother. It should have a dancing baby as a atomic object. By the way, whatever your language is currently doing is totally wrong, and you should totally change it around. Also, you need to satisfy every last comment posted in response to this article, plus the ones people only thought, but didn't take the time to post.

    Your language should replace OpenGL as the dominant graphics platform. Your language should have an order-N searching algorithm built in. Your language should easily extend into the quantum domain when such computers become available. There should be a command-line option that will read in all of my old QuickBasic programs from when I used DOS.

    Your language should be interpreted, compiled to byte-code, compiled to Java(tm) byte-code, or compiled to native code, depending on context. Your language should make sure that all programs written with it should be optimally thread-safe. Your program should be able to detect whether a given program will go into an infinite loop. Your language should have no patent issues. Your language should have all the whiz-bang features other languages have.

    I want to be able to apply an XSL stylesheet to my source code and get the equivalent program in Turing Machine code, but I don't want to learn XML... that's too much to ask. Your language should automatically internationalize all programs written in it.

    Your language should be elegant. I want to be able to implement the Linux kernel in three lines of code.

    I would take any suggestions on Slashdot with a Detroit-salt-mine-sized grain of salt. Consult a real language expert.... because most of all, your language should not designed by a committee of random computer users.

  • Re:Great languages come about to solve real proble by JohnZed (Score:1) Friday April 27 2001, @10:13PM
  • by JohnZed (20191) on Friday April 27 2001, @05:01PM (#260341)

    When developers (Pike + friends) needed an efficient, processor-independent language for systems programming, they created C. Later, when the systems got so huge that they needed a new layer of abstraction, they (Stroustrup et al) looked at the problem and came up with C++.

    Guido wanted a language with the readability of ABC, but with exceptions, OOP, and extensibity, while Larry Wall obviously needed a Postmodern Extension and Reporting Language. Java's history is similarly tied in with very specific problems (smart devices, then applets).

    A programming language is an answer. If you propose to design one without first asking a concrete question (no, it doesn't count if your question is "what would be a really cool language?"), I suggest that you name it "42" for obvious reasons.

    --JRZ

  • Re:What nobody else wants (or will say)... by lytles (Score:1) Friday April 27 2001, @06:51PM
  • Re:What I'd like to see. by ianezz (Score:2) Friday April 27 2001, @10:11PM
  • by gunter (32474) on Friday April 27 2001, @06:05PM (#260344)
    "I like Java because no matter what I do I can't do anything dangerous. Err wait, I hate that about it :)."

    Our resucue here is JNI. With this you can even segfault java :)

  • Re:Every hacker eventually writes a language by Russ Nelson (Score:1) Sunday April 29 2001, @04:24AM
  • Re:Bases by descubes (Score:1) Friday April 27 2001, @08:30PM
  • Re:#!/usr/bin/perl by descubes (Score:1) Friday April 27 2001, @08:32PM
  • Re:Define a problem domain for your language by descubes (Score:1) Friday April 27 2001, @09:52PM
  • Re:Great languages come about to solve real proble by descubes (Score:1) Friday April 27 2001, @09:56PM
  • Re:It needs to enforce modularity! by descubes (Score:1) Friday April 27 2001, @09:59PM
  • Re:Ohw, I dunno by descubes (Score:1) Friday April 27 2001, @10:06PM
  • Re:Another victory for buzzwordism! by descubes (Score:1) Friday April 27 2001, @10:08PM
  • Re:Likes/dislikes by descubes (Score:1) Friday April 27 2001, @10:39PM
  • Re:Nice feature list, a few comments by descubes (Score:1) Friday April 27 2001, @10:57PM
  • Re:Comments on the features so far by descubes (Score:1) Friday April 27 2001, @11:04PM
  • Re:What Are You Trying to Accomplish? by descubes (Score:1) Friday April 27 2001, @11:06PM
  • Re:Define a problem domain for your language by descubes (Score:1) Friday April 27 2001, @11:10PM
  • Re:Modula3 by descubes (Score:1) Friday April 27 2001, @11:17PM
  • Re:Tower of Babel by descubes (Score:1) Friday April 27 2001, @11:26PM
  • Re:Some real problems by descubes (Score:1) Saturday April 28 2001, @12:12AM
  • Re:Likes/dislikes by descubes (Score:1) Saturday April 28 2001, @06:02AM
  • Re:Likes/dislikes by descubes (Score:1) Saturday April 28 2001, @06:39AM
  • Re:Enumeration and distinct scalar types by descubes (Score:1) Saturday April 28 2001, @06:54AM
  • Re:Likes/dislikes by descubes (Score:1) Saturday April 28 2001, @08:58PM
  • Re:Nice feature list, a few comments by descubes (Score:1) Saturday April 28 2001, @09:19PM
  • Re:My thoughts... by descubes (Score:1) Sunday April 29 2001, @08:20AM
  • Re:New language? by descubes (Score:1) Sunday April 29 2001, @09:02AM
  • Re:My thoughts... by descubes (Score:2) Friday April 27 2001, @09:33PM
  • Re:Interesting by descubes (Score:2) Friday April 27 2001, @09:44PM
  • Re:Mozart, what an original name! by descubes (Score:2) Friday April 27 2001, @10:14PM
  • Re:Mandatory comments are a better idea by sprag (Score:2) Saturday April 28 2001, @09:20AM
  • Re:Define a problem domain for your language by Bazzargh (Score:1) Thursday May 03 2001, @03:36AM
  • Bases (Score:5)

    by addaon (41825) <addaon+slashdot@gmail.com> on Friday April 27 2001, @04:52PM (#260373)
    From the webpage:

    integer Large := 16#FFFF_FFFF
    integer Twenty_Seven := 3#1000
    real MAX_FLT is 2#1.1111_1111_1111_1111_1111_1111#E127


    If I can choose a base arbitrarily, why the assumption that I want to choose my base in base 10? Why can't I choose my base in base 16, as such...

    integer thirtytwo = 16#20#10

    But then I still need to choose the base I want to choose my base in in base ten... why not

    integer thirtytwo = 2#10000#20#10

    But then... agh! We're stuck in a loop.

    To be slightly less snide for a moment, what I'm trying to point out is that, while this is a good idea, it is slightly silly and slightly unnecessary. There are certain bases that are used... there are others that, in general, are not. Don't support every base through a clumsy yet silly syntax. I'd rather be able to do the following, and only the following:

    integer ten = 10
    integer ten = 10d
    integer ten = 12o
    integer ten = 0Ah
    integer ten = 1010b

    where the default encoding is decimal, but I can use one of d, o, h, or b to switch to another common base.

  • Re:Earlier comment; People are superficial. by p3d0 (Score:1) Saturday April 28 2001, @06:24AM
  • Re:What we need is C++... by p3d0 (Score:2) Saturday April 28 2001, @06:06AM
  • by p3d0 (42270) on Saturday April 28 2001, @05:57AM (#260376)
    It looks like you have a lot of influence from Ada. Ada adds a new language feature for everything a programmer could want. I always found that this made it tough to learn and understand Ada because there are so many built-in language features. (The difference between Ada and C++, of course, is that in Ada it works.)

    I'm glad to see the influence of Eiffel in there. Eiffel is a language which achieves its generality not by adding features to the language, but by removing them. It doesn't try to cover everything you could want to do with a special case; it has a few well-chosen abstractions that cover a lot of ground.

    Anyway, when your language description looks like a big bag of toys a programmer could use, then perhaps you should take a step back here and ask yourself "what am I contributing?" What is new about your language? If it's just syntactic sugar, then don't bother.

    (I'm not saying LX is just syntactic sugar; I'm saying that your website hasn't convinced me that it isn't. The presentation of language features as a shopping list doesn't convey the real contribution of your new language.)

    You seem to have a grasp of languages that are general because of their complexity (Ada, C++), but make sure you have experience with languages that are general because of their simplicity (Eiffel, scheme, Smalltalk).

    A few other things:

    • I never really liked Eiffel exceptions much. I think Java does it better, but YMMV.
    • Don't make polymorphism explicit (with the "any" keyword). It should be the default. Non-polymorphic references should be the special case.
    • Have you really studied genericity? You seem to have bounded (ala Eiffel) and unbounded (ala C++) genericity, which is good, but have you looked at different schemes, like virtual types, or even Structural Virtual Types?

    --
  • Re:Define a problem domain for your language by Simon Brooke (Score:2) Saturday April 28 2001, @03:05AM
  • Re:Great languages come about to solve real proble by Simon Brooke (Score:2) Saturday April 28 2001, @03:11AM
  • Re:What I'd like to see. by greenrd (Score:1) Saturday April 28 2001, @02:55PM
  • Re:Why the grail fight yet again? by greenrd (Score:1) Saturday April 28 2001, @03:20PM
  • Re:It needs to enforce modularity! by greenrd (Score:1) Saturday April 28 2001, @03:46PM
  • Re:"friend" in C++ can *enhance* modularity by greenrd (Score:1) Saturday April 28 2001, @04:06PM
  • Re:I find TOM pretty impressive. by greenrd (Score:1) Saturday April 28 2001, @04:24PM
  • Re:Define a problem domain for your language by MustardMan (Score:2) Saturday April 28 2001, @04:38AM
  • by MustardMan (52102) on Friday April 27 2001, @06:50PM (#260385)
    C? The retarded horse with a gimpy leg. You wanna shoot the damn thing so bad, but I'll be damned if the sonofabitch can't still get up and run at a decent gallop now and then, when you take a good cattle prod to its ass
  • Re:Define a problem domain for your language by Dwonis (Score:2) Saturday May 05 2001, @10:04PM
  • I find TOM pretty impressive. by jcr (Score:2) Saturday April 28 2001, @01:10AM
  • Forgot to mention... by jcr (Score:2) Saturday April 28 2001, @01:18AM
  • Re:Define a problem domain for your language by 1010011010 (Score:1) Friday April 27 2001, @06:52PM
  • Re:What I'd like to see. by 1010011010 (Score:2) Friday April 27 2001, @06:56PM
  • Perfect Optimizing Compiliers by cameldrv (Score:1) Saturday April 28 2001, @08:32AM
  • Re:Interesting by Oniros (Score:1) Friday April 27 2001, @07:46PM
  • hasn't everyone designed a paper language? by eric17 (Score:1) Friday April 27 2001, @07:19PM
  • Re:What is your goal with the language? by eric17 (Score:2) Friday April 27 2001, @07:38PM
  • Re:Likes/dislikes by Nyh (Score:1) Saturday April 28 2001, @02:17AM
  • Re:Another victory for buzzwordism! by jtdubs (Score:2) Friday April 27 2001, @11:51PM
  • comments by strombrg (Score:1) Monday April 30 2001, @10:09AM
  • New? Try old technology.. by Convergence (Score:2) Friday April 27 2001, @10:08PM
  • by Convergence (64135) on Friday April 27 2001, @10:19PM (#260399) Homepage Journal
    Nope... It's got an unfamilar syntax, as someone earlier pointed above.

    Programmers do not like a syntax that is not close to the syntax of their first language (usually an algolic variant)..

    It's no harder to get used to than C, or any other real language. Try using it with an indenting, syntax hilighting editor for a week. Now, did you spend more than a week when you learned the syntax of your first algolic language?

    Anyone notice how all the languages that seem to be coming out are always algolic? And that they suck... They don't even have closures!

    Syntax is superficial. Semantics is everything.

  • Oberon already encourages open source by Rares Marian (Score:1) Friday April 27 2001, @04:56PM
  • Re:Modula3 by Rares Marian (Score:1) Friday April 27 2001, @05:08PM
  • change? by Alban (Score:1) Friday April 27 2001, @08:12PM
  • Re:Straight jacket vs. control by Florian Weimer (Score:1) Friday April 27 2001, @11:55PM
  • Enumeration and distinct scalar types by Florian Weimer (Score:1) Saturday April 28 2001, @12:08AM
  • Re:Enumeration and distinct scalar types by Florian Weimer (Score:1) Saturday April 28 2001, @02:02AM
  • Re:It needs to enforce modularity! by emmons (Score:1) Friday April 27 2001, @05:52PM
  • by Fjord (99230) on Friday April 27 2001, @07:43PM (#260407) Homepage Journal
    I'm annoyed by Java when you can't create references to methods

    Object o=new Object(); java.lang.reflect.Method hashcode=o.getClass().getDeclaredMethod("hashCode" ,new Class[0]); Integer hc=(Integer)hashcode.invoke(o,new Object[0]); System.out.println(hc);

    Now you try.

  • Re:#!/usr/bin/perl by notsoanonymouscoward (Score:1) Sunday April 29 2001, @11:30AM
  • Re:#!/usr/bin/perl by notsoanonymouscoward (Score:2) Friday April 27 2001, @05:43PM
  • No committee, but ... by bockman (Score:1) Saturday April 28 2001, @12:01AM
  • by BlackStar (106064) on Friday April 27 2001, @07:57PM (#260411) Homepage
    There goes a few moderator points down the toilet. I was hoping SOMEONE who might have wandered through MIT would have put up a contrarian point of view to the whole "best thing" idea in languages. If one did, I can't find it.

    WHY does everyone have a favourite language, and assume it's the cat's PJs for every problem under the sun?

    I use, primarily, Java. Why? Because for what I do, I need the portability, and it's more than fast enough, and yes, the recent versions are portable properly. They're also likely a lot faster than you think they are.

    But my real point, is that it's not the only language, and the reference to MIT is found early in the book Structure and Interpretation of Computer Programs by Abelson, Sussman and Sussman. I myself did not go to MIT, so if I mess up, don't blame them, but the point made in the book is thus:

    "... First, we want to establish the idea that a computer language is not just a way of getting a computer to perform operations but rather that it is a novel formal medium for expressing ideas about methodology. ... Second, we believe that the essential material to be addressed by a subject at this level is not the syntax of particular programming-language constructs ... but rather the techniques used to control the intellectual complexity of large software systems."
    Different languages evolve to solve different problems. People don't build things like Simula for writing a network driver or the next 1st person shooter. They build it to solve complex, physical simulations. The expressive power is greatly increased, but the problem domain is restricted.

    A general language is a nice idea, but we're starting to need something beyond that. The whole idea of the project is actually meta-programming. Not writing your next device driver. Write it in C. Maybe C++ if you must. But the OOP languages have given us a large number of very reusable, efficient components, regardless of what detractors of the OOP approach itself may claim. Knitting those components together right now is tedious in C++, Java, VB or even many of the visual designers. We're still bolting rods to wheels, instead of expressing the transfer of linear force to rotation at a higher level.

    I would humbly suggest that all the crock about the syntax and such be backed off. Especially type constructs, object aspects, and the other things addressed quite well in many different ways by other 3GLs.

    Start with interfaces. Describe the interfaces, and describe the use of an object that adheres to those interfaces. From there, find ways of describing systems of those interactions.

    Contrived example (required): database connector, table model, grid component, graph component, statistical analysis tool. Each has certain interfaces that can connect to each other singly or in groups, and can control things singly or in groups. The old MVC writ large. Find a way to describe and program the MVC system at the MVC level.

    I wish I had any idea how to do this, but I don't. I write in C, C++, Java, Perl, and have dabbled in everything from assembly up to Scheme. It's all so similar in far too many ways. It's not ideas and systems, it's still bits and branches.

    Many posters argue the efficiency. Your points are valid, but large, complex systems spend tens or hundreds of millions of dollars in programmer time for software running on "mere" millions of dollars of hardware. Doubling the amount of hardware and halving the amount of programming is a WIN for all involved.

    Odds are that the approach of the project is already correct. It uses a 3GL as the "worker" bits (Java, in this case, fight about it somewhere else), and tries to put a true meta-layer on top of that.

    The concept is as foreign to working programmers today as it could be. It's like knowing Classical Greek physics only, and getting hit by Relativity and being asked to design the analysis tools for it. You don't even know Newtonian theory yet. There is that large a jump in there.

    So skip the bits about the next cool language. It's a valid discussion, but unless I miss my mark, this project is grasping at something far, far beyond that. And being able to code to a pointer doesn't really matter at that level.

  • Re:Ohw, I dunno by vague (Score:1) Friday April 27 2001, @10:54PM
  • Re:Define a problem domain for your language by blue trane (Score:1) Friday April 27 2001, @11:24PM
  • Design by committee by Michael Woodhams (Score:2) Friday April 27 2001, @05:24PM
  • Re:Interesting by ericdano (Score:1) Friday April 27 2001, @06:26PM
  • What Are You Trying to Accomplish? by smack.addict (Score:1) Friday April 27 2001, @04:44PM
  • Re:My thoughts... by slamb (Score:2) Saturday April 28 2001, @07:39AM
  • My thoughts... (Score:4)

    by slamb (119285) on Friday April 27 2001, @08:14PM (#260418) Homepage

    Here's some things I do like:

    • Indentation-sensitive syntax. I've seen Python code and this seems to really improve readability. It would be especially great for a beginner's language, since it's important to stress proper indentation at the beginning.

    • Named and out-of-order parameters. Your example very clearly demonstrated the advantage of named operators for complex function parameters. This is a feature I don't think I've seen in any language but VHDL. (Though some Perl modules sort of cheat to get this functionality.)

    • Constrained generic types. I think this nicely solves the problem in C++ of getting confusing compile errors when you try to sort objects you've forgotten to define operator< for. This is especially important if plug in the types at runtime instead of compile-time, which it sounds like you intend to do.

    Here's some things I don't like:

    • Expression reduction. This seems like it would be hard to implement and very confusing. Specifically, think about expressions like that within larger expressions. If I define "A*B", "A+B", "A/B", "A*B+C" and "(A+B)/C", what happens when I use "(A*B+C)/D"? What gets called? You could do "(A*B)" then "(A+B)/C" or "A*B+C" then "A/B" or just use the binary operators. There would be a bunch of different cases and its unclear what code would actually be executed. I think it creates too much confusion unless you can demonstrate that this would be a huge speed boost.

    • Variant records.

      The first example you showed of these was basically using them as a replacement for unions. I hate unions. I like the way you can in Java set a security manager that controls what various bits of code can and can not do. But this depends on those bits of code only accessing other objects through the public interfaces. So unions in this case would be very bad for security, and they are very bad already for type safety. I really think we're past the point where we need to save a few bytes.

      Second, you used a variable to size an array. Basically, you created much simpler syntax for dynamic memory management. I think this masks a lot of problems. What happens when you run out of memory trying to resize the array? You never explicitly resize the array, so I don't even know where you'd go about inserting code to deal with that failure. Second, what happens when that variable changes in some non-obvious way? Ie, through a pointer to it or through the union thing you described above. The array isn't resized, and nothing good can come of that.

    • Multiple kinds of pointers.

      I can't help but see so many different types of pointers as needlessly complicated and confusing. What will you really be needing pointers for? You've defined "in", "out", and "inout" parameters, so pointers are no longer needed to pass by reference. They are needed for dynamically allocated memory. And they are needed for really low-level stuff that needs to address specific bits of memory.

      I suggest instead doing this: having the simple pointer type you've defined which does not allow pointer arithmetic or pointers to arbitrary addresses. Having the address type you defined available if the security manager allows it (again, the idea of not only type safety but security from not allowing access to arbitrary regions of memory). autoptr really isn't that different from ptr...especially since in C++ it can be implemented without any language support at all. Leave the others out.

    • Function-based dynamic dispatch (polymorphism). You talk about how C++ has the fragile base class problem, that new virtual functions can't easily be added to the base class. But I think you are misinterpreting where the problem lies. The problem is not that you have to add the virtual functions to the base class. That's just the way it has to be; otherwise, very weird stuff would happen when you try myBaseClass->onlyDefinedInInheritedClass() (remember, you don't know if a shape object is a rectangle or a triangle or whatever, that's the point of polymorphism). The real problem is the way C++ represents virtual function tables in compiled code. Java, for example, does not have this problem.

    Really, quite a few of these features I don't like. It seems like they just add complication to the language spec without solving any huge problem. This will both make it harder for you to create a compiler and harder for people to learn/use the language.

  • Re:Modula3 by BinxBolling (Score:1) Friday April 27 2001, @05:28PM
  • Re:Design by committee by Alea (Score:1) Friday April 27 2001, @06:03PM
  • by pi_rules (123171) <justin@buist.gmail@com> on Friday April 27 2001, @04:47PM (#260421)
    I like C ... because I can manipulate the memory byte by byte in an uncontrolled manner.

    I like C++ because it makes me really say what I want to do if I try and do crazy shit to memory.

    I like Java because no matter what I do I can't do anything dangerous. Err wait, I hate that about it :).

    C++ has a nice way of protecting people.. you need to explicitly say "Yeah I'm totally sure I need to take this hunk of memory, cast it into a void* and do some arithemtic on it." It's too long though.. the lines of source that is.

    Allow a Java like straight jacket... using something like #pragma preprocessor defs or something.

    Examples:
    #babysit_me_i_am_dumb ... this would act like Java :)
    #make_sure_i_am_sure ... this would act like C++
    #back_the_fuck_up ... like C -- you do what you want.

    Justin
  • Re:What I'd like to see. by RevAaron (Score:2) Saturday April 28 2001, @10:45AM
  • by RevAaron (125240) <revaaron@@@hotmail...com> on Friday April 27 2001, @10:35PM (#260423) Homepage
    The ugliness of Java never ceases to amaze me.

    In Smalltalk:

    Transcript show: (Object new perform: #hash).


  • Re:Interesting (Score:5)

    by Gorobei (127755) on Friday April 27 2001, @06:05PM (#260424)
    Sigh, I really don't want to add to the language flames, but here goes anyway:

    Those that do not use LISP are condemned to reinvent it. Badly.

    Every good computer programmer I know has designed several "mini-languages." They all improve expressability in some minor way (because they scatch an itch or are optimized for a specific domain.) But, 99% of them never catch on because they are not extensible in a "deep" fashion, or if extensible, the meta-language of extensibility is painful for real-world problems.

    Languages become nasty because programmers try to write "nice" APIs for their users. E.g. the systems guys provide "clean" APIs for the library writers. The library guys provide "clean" APIs for the application writers. The application writers provide "clean" APIs for the users. Each layer uses a lot of crufty stuff in an attempt to make life easy for the users of the layer. Eventually, the entire system is cruft, and hard for everyone.

    C was clean, but began to collapse when programmers were forced into heavy macro hacks to implement more complex systems.

    C++ started nicely, but soon was burdened by the ancient linker. Templates have become the new evil that replaces the old evil of macros.

    Fortran avoided the whole issue by making abstraction beyond the subroutine level impossible.

    Common Lisp, ML, Prolog, Scheme, Smalltalk, etc, all try to be "honest" languages: the writer of a piece of code trusts his users, and the users can inspect the system they are using. Everyone is assumed to be intelligent, and "information hiding" is looked upon with a degree of suspicion. The more "features" a language has, the more it worries me: these are decisions made by the designer that I cannot change. This is why I like LISP: your program must conform to certain basic rules (it is a list,) but all other design decisions are visible to me, and probably changable by me.

    Of thelist of 38 unqiue characteristics of LX, Common Lisp already has 33 of them. Indentation sensitive syntax is similar to paren-balancing syntax. The other 4 are either artifacts of non-sexpr languages, or trivially implementable in a few lines of LISP.

    LISP was the original user-built, customizable language.

  • Re:Mainstream influence of Functional Languages by Jagasian (Score:2) Friday April 27 2001, @10:00PM
  • Re:Interesting by The Cookie Monster (Score:1) Friday April 27 2001, @11:31PM
  • Re:Interesting by The Cookie Monster (Score:1) Saturday April 28 2001, @04:49AM
  • Re:wish list by istartedi (Score:2) Friday April 27 2001, @06:25PM
  • Re:kx.com and k by baxissimo (Score:1) Saturday April 28 2001, @02:39PM
  • Re:NO! NO! NO! DO NOT DO THIS! by baxissimo (Score:2) Saturday April 28 2001, @02:23PM
  • by MongooseCN (139203) on Friday April 27 2001, @05:02PM (#260431) Homepage
    For example in C++ you have objects which are suppose to be seperate and thought of only through interfaces. Well it just never really works like that. You have public members which other modules can read and write, you got the "friend" keyword hack which lets other special objects access members of a certain object. All these things break all the rules of OO programming and modular programming in general.

    If object A is dependant on a certain public member always being available from object B and suddenly the variable is assigned different types of values or used in another way, the object A will have to be changed to accept the changes in B. Well this synchonization never usually happens unless there is a lot of documentation written (We all know coders love to write documenation!) or it finally produces a bug and you whip out the debugger and start tracing...

    This is just one of the many examples. I would like to see a language where objects are forced to be seperate and truly defined only by their interfaces. C++ almost had it until it introduced all the hack keywords which broke everything.

    A truly modular lanuage would be great for a Open Source language because people could work on different objects without having to worry about the internal details being compatible with another coder's object. This would allow parrallel coding to work more efficiently. Also when people join on Open Source projects, they don't have to time to go through all the code in the project to see how things work, they only have the time to look at a few sections, understand those and start coding. With enforced modular code, the new coder will only have to look at interfaces to understand how a program works.

    Modularity is the key to making Open Source work.
  • Re:Mainstream influence of Functional Languages by aminorex (Score:1) Saturday April 28 2001, @04:38AM
  • Re:Ohw, I dunno by Nohea (Score:1) Friday April 27 2001, @05:16PM
  • OCaml (Re:What I'd like to see.) by kalifa (Score:2) Saturday April 28 2001, @03:12AM
  • Re:OCaml (Re:What I'd like to see.) by kalifa (Score:2) Saturday April 28 2001, @09:42AM
  • by mliggett (144093) on Friday April 27 2001, @07:06PM (#260436) Homepage
    High-level languages don't always result in slow code. Probably the strongest counterexample is Objective Caml [inria.fr]. Functional (1st class functions; lexical closures), OO, exceptions, strictly typed, type inferencing, parameterized modules (and classes), a macro system that lets you extend and modify syntax (in camlp4) and more. The language is probably 10x as expressive as C (e.g. it takes, on average, 1/10 the space to say the same thing in OCaml as C), but it compiles to near-C speeds and sizes (sometimes beats it). This is a 15-year old project with a liberal license (LGPL) that works on UNIX, Windows and Mac OS! An older version (Caml Light) works on Palm OS. More people should be considering languages like this for complicated problems where performance is an issue!
  • The answer is... by Fat Lenny (Score:1) Friday April 27 2001, @04:45PM
  • Re:Squeak is the place to be! by connorbd (Score:2) Saturday April 28 2001, @09:03AM
  • Re:Interesting by connorbd (Score:2) Saturday April 28 2001, @09:09AM
  • by connorbd (151811) on Saturday April 28 2001, @08:58AM (#260440) Homepage
    http://www.geocities.com/connorbd/tarpit/magenta.h tml

    About six years ago I went on alt.folklore.computers on Usenet to create a language spec by this very process, except I did it as a joke. You don't want to write a spec by Bazaar methods -- it's a sure guarantee of an unnecessarily baroque design that will be a bitch to implement from the ground up. If you're doing it seriously, you'll start unnecessary language wars as people pull out there MFTLs for design inspiration. You will get a reference manual two inches thick like Ada or C++. You will get bitched and whined at because your objects aren't as pure as Smalltalk, because your functions aren't as functional as ML, because you're more baroque than Perl.

    Too tough even to change, now that I think of it -- I went back to try and rework Magenta into something coherent and I couldn't cram enough of the design back into my head to make any sense of it a year later. Implementation by committee can be a thing of beauty; that's how the Internet was built. But design by committee... let's just say I originally wanted to call Magenta Linda (as in Lovelace) because it sucked so bad.

    /Brian
  • by chipuni (156625) on Friday April 27 2001, @05:08PM (#260441) Homepage
    It's easy enough to design a language. But your real question should be...

    What is so insanely great about this language that would convince a programmer to use it?

    From my brief reading of the webpage, the language seems to be a mish-mash between Pascal, Perl, C, and Python. Those are all good languages... but I didn't see any reason why Pascal, Perl, C, or Python users should switch to your language.

    Remember that getting in a language is hard. Right now, many programming tools already support the major languages. Unless you have a large corporation behind your language, it's hard to get enough mindshare to get all the tools that programmers want. Are you really willing to do the compiler, debugger, profiler, editor, and all yourself? Across all platforms?

    Before you create a new language, I recommend that you do two things:

    1. Find out why Perl, a language that has mostly accumulated its present form, rather than was designed, has become so popular.
    2. Find out why Eiffel, an incredibly well- designed language that has multi- platform support, excellent tools, and a company behind it, has only remained a niche language.
  • "friend" in C++ can *enhance* modularity by jdennett (Score:2) Saturday April 28 2001, @02:19AM
  • What we need is C++... by imagineer_bob (Score:1) Friday April 27 2001, @08:02PM
  • Re:What we need is C++... by imagineer_bob (Score:1) Saturday April 28 2001, @01:50PM
  • Lisp gives you nothing. by Ars-Fartsica (Score:2) Friday April 27 2001, @09:29PM
  • Functional Language by rusti999 (Score:1) Friday April 27 2001, @05:42PM
  • Re:Perl as good language design???? by Abreu (Score:2) Saturday April 28 2001, @03:51PM
  • by tshak (173364) on Friday April 27 2001, @08:17PM (#260448) Homepage
    You are forgetting the core purpose of a computer - it's supposed to do the work for US, not US the work for it. This is a concept I think many of us "tech geeks" and engineers forget. Although I don't agree with the "just throw hardware at it" attitude, abstraction exists so that we can create more "quicker and easier". You make some good points - especially applicable when it comes to small real-time OS's - but even JAVA is running great on cell phones.

    No offense at all, but unless you're coding an OS, you need to let go of your outdated concepts of low "level code running super efficient" and recognize that abstraction and OOP are here to help the HUMANS - the HUMANS are not created to help the machine! Just imagine Linux being ALL ASM! Unmanageable.
  • Re:Great languages come about to solve real proble by Reality Master 101 (Score:1) Saturday April 28 2001, @04:54AM
  • Re:Great languages come about to solve real proble by Reality Master 101 (Score:1) Saturday April 28 2001, @04:58AM
  • Re:Great languages come about to solve real proble by Reality Master 101 (Score:1) Saturday April 28 2001, @09:46AM
  • Re:Perfect Optimizing Compiliers by Reality Master 101 (Score:1) Saturday April 28 2001, @02:19PM
  • Re:Define a problem domain for your language by Reality Master 101 (Score:2) Friday April 27 2001, @07:06PM
  • Re:Great languages come about to solve real proble by Reality Master 101 (Score:2) Friday April 27 2001, @07:12PM
  • Re:Define a problem domain for your language by spongman (Score:1) Sunday April 29 2001, @01:23AM
  • Re:Likes/dislikes by AuMatar (Score:1) Saturday April 28 2001, @12:40AM
  • Re:Likes/dislikes by AuMatar (Score:1) Saturday April 28 2001, @12:53AM
  • Re:Likes/dislikes by AuMatar (Score:1) Saturday April 28 2001, @07:00AM
  • Re:Likes/dislikes by AuMatar (Score:1) Saturday April 28 2001, @07:03AM
  • Likes/dislikes (Score:4)

    by AuMatar (183847) on Friday April 27 2001, @05:55PM (#260460)
    Since no one seems to be hitting the question much, Ill be the first.

    Likes
    Digit grouping- makes programs far more readable
    Base selection- Will make low level programming easier by making the bases explicit. No more problems due to forgetting an h or b.

    In/out specifying in param lists- will increase efficiency and help tell when functions will actually change a parameter.

    Dislikes
    Tabbing as program structure- Its going to cause problems. People will think that lines will be executed conditionally when they won't be due to forgetting a tab (and vice versa). The reason for a grouping char was to force them to think about what is/isn't in a statement

    Underscore ignoring- Too confusing. People will try to read each others code and be unable to figure out what open_file is. Either make _ illegal or let it be a full character.

    Too many keywords- will make language hard to learn. Plus too much typing.

    Preconditions- If one compiler uses it for optimization and another throws an error at a broken one, your code will do two VERY different things on the compilers. Choose one, then it may be cool.

    Named/out of order arguments- will cause confusion and bugs

    Lack of types- will cause inefficencies of too much/little space being allocated. Also having compiler defined types like integer wioll make programs too compiler dependent.

    Customizable for/cases/etc- It will cause confusion when programmers start taking standard language ideas and twist them. Trust me on this.

    No opinion
    Case insensitive- doesn't make a huge difference, but I do see it causing confusion as the _ ignoring will.

    Im curious- what is the use of this language? I see a basic language, a lot of sytactic sugar with no real use, and a lot of features that will make compiler writing EXTREMELY difficult. Not to mention that most of the language features will be rarely used- You really are trying to add too much to one language. This language does everything, but wont be able to do all of it well. Jack of all trades, master of none.

    And you have one major question left to answer- So why should I use it? What feature(s) does it have that the existing languages don't? I don't see any- in fact you define its features in terms of other languages that have them. You need something that is yours and yours alone if you want this to suceed.
  • Supporting the act of programming by 3seas (Score:1) Friday April 27 2001, @07:57PM
  • Re:Supporting the act of programming by 3seas (Score:1) Saturday April 28 2001, @04:50AM
  • who wants this hyp-o-rama to continue anyway? by zoftie (Score:1) Friday April 27 2001, @05:37PM
  • by groomed (202061) on Saturday April 28 2001, @06:22AM (#260464)
    I've said this before ... I'll say it again:

    Indentation should help the programmer to understand the code. It should not be an additional source of worry.

    As such, indentation should represent the program structure. It should not embody it.

    First, because this approach makes it possible to compute the indentation from the program structure, and this helps to flag many errors without the need for compilation.

    But perhaps more importantly, because the indentation is computable, it is discardable.

    And this makes the language easy to transcribe: you can easily copy and paste snippets of C or Perl code to and from weblogs and email messages and get them to compile, usually without worrying about spaces or tabs or newlines or any such transformations that may have occurred in the process.

    Yes, properly indented code looks gorgeous, and this counts. But in any non-trivial program, semantical ugliness quickly dwarfs syntactical ugliness.

    Mandatory comments would be a better idea.

  • Re:What nobody else wants (or will say)... by rabidcow (Score:1) Saturday April 28 2001, @07:15AM
  • Re:Supporting the act of programming by quinto2000 (Score:1) Friday April 27 2001, @08:47PM
  • Re:Supporting the act of programming by quinto2000 (Score:1) Saturday April 28 2001, @09:35PM
  • Modula3 by Z4rd0Z (Score:1) Friday April 27 2001, @05:02PM
  • A short word on language design by seefried (Score:1) Saturday April 28 2001, @01:26AM
  • Re:Another victory for buzzwordism! by King of the World (Score:1) Friday April 27 2001, @07:24PM
  • Re:Nice feature list, a few comments by Spinality (Score:1) Saturday April 28 2001, @09:07AM
  • Re:Why the grail fight yet again? by Spinality (Score:1) Saturday April 28 2001, @07:27PM
  • Re:Why the grail fight yet again? by Spinality (Score:2) Friday April 27 2001, @08:36PM
  • by Spinality (214521) on Friday April 27 2001, @07:10PM (#260474) Homepage
    Here are a few random comments, based on a history of having designed many languages through the years (none of which you've ever heard about). I hope this isn't considered too bloated a comment; sorry if it pisses you off, but I find the topic so interesting.

    Comments. Make it really easy to provide strong in-line documentation. Don't, for example, emulate whatever brain-dead folks at M$ are responsible for VB still not permitting comments after the "_" used for line continuations, making it impossible to have function parameters documented one-per-line. Consider multiple documentation-related conventions, e.g. "//" for end-of-line comments, perhaps support for standardized structured comment blocks in preambles, ways to comment-out and uncomment blocks of code, ways to group sets of procedures, ways to draw separator lines etc. within listings (printed listings are still useful even in this day and age), ways to generate indices/crossrefs etc. Think of it as an algorithm publication problem.

    PL/1 disease. You've proposed lots of good features. However, as others have pointed out, it will be easy to overload the language with a bazillion keywords and features to satsify every participant's biases. At the end, there will be n separate incarnations of the language, consisting of each user's set of preferred constructs. Nobody will really grasp the whole thing. Instead, strive for the kind of expressive purity of C (better: LISP), where a small number of primitive syntactic components can yield a rich semantics. It's a hard problem, and frankly a collaborative effort rarely can yield the conceptual purity that a single author can impart. But don't give up.

    Extensibility. The most useful languages (IMO) can be extended to suit new situations. In many complex environments, it's better to adapt the language of the solution to match the language of the problem. This is why meaningful names, operator overloading, shared libraries, named constants, preprocessor definitions etc. are so helpful -- you can extend a language's working suite of concepts by documenting the specific interfaces used to interact with a particular execution environment or problem domain. So, for example, resist including I/O primitives and instead make it easy to create extensions from within the language. (Why consider them extensions rather than just traditional function calls? So that we can specify compile-time properties and behavior for their interfaces, such as argument marshalling, synchronization, error handling, exception conditions, etc., without bloating the runtime environment.)

    Encapsulation. We should always be able to replace a named entity that appears to be an atomic value (integer, string, etc.) with a named property having a complex programmatic implementation, with either compile-time or run-time behavior. Such a replacement should be transparent to clients of the associated interface or name. Preferably, this should be possible within a narrow lexical scope, not just between packages or interfaces.

    Integrated data definition/metadata. Try to bridge the gulf between the language's internal namespace and the external database environment. It should be anathema to reference entities using names stored or specified as character strings ("MyDatabase.OpenTable('Employees').Fields('SSN')" as we must do in so many languages when referencing external data). Instead, somehow let us bind the external data definitions into the compiler's namespace, so that referring to "Employees.FirstNaame" generates a compile-time error. (Obviously, we need to control the binding semantics so that in some cases this occurs at run-time, in some cases at link/load time, in some cases at compile-time, in some cases at preprocessing time.) Ideally, the same mechanism should support run-time interfaces to external resources such as CORBA components, including run-time retrieval of interface metadata.

    Incremental compilation. Design the interactive programming environment, the language, and the compiler together, a la Smalltalk, rather than using the raw source code paradigm. Assume that we'll want the ability to dereference variables, determine variable scope, jump to definitions, view cross-references, etc., all while editing the source. This isn't really a language design issue, other than putting an emphasis on components that support separate compilation. But if you build your first compiler this way, e.g. via a p-code implementation, all your successor environments will preserve the interactive development model rather than the batch compilation model.

    Explicit declaration and lexical scope. Help us find those dangling/incorrect references.

    Constants and other compile-time tools. Give us strong support for creating highly-readable code that nevertheless can compile efficiently into in-line code and integer arithmetic. Combining the ability to drill-down to the physical machine with high-level encapsulation and incremental compilation would give us a wonderful span of control. (This is what we love about Smalltalk, being able to hack the running device drivers from inside the source code editor.)

    Asynchrony, continuation-passing, message-passing, interrupts, critical sections, real-time constraints, shared memory, etc. Give serious thought to how deep issues of OS programming would be handled. If possible, address such issues through highly-visible fundamental mechanisms rather than hacks. For example, if you want to provide a way for two execution threads to share write access to a variable, implement some kind of encapsulation that provides well-defined interfaces and behaviors, rather than permitting indeterminate and possibly system-crashing results by making it look like a normal variable.

    Well, that's enough blather for the moment. I hope these comments are useful. A few inspirations I'd love for you to consider in language design: C and BLIS, for their conceptual simplicity; Cedar, for its richness and language/environment integration; Smalltalk, for its extensibility and structural encouragement of small code fragments rather than monolithic procedures; CLU (and Simula and Smalltalk and SQL-embedded languages) for integration of external and internal data.

    Good luck. -- Trevor

  • Re:Enumeration and distinct scalar types by Onno Hovers (Score:1) Saturday April 28 2001, @01:27AM
  • Indentation sensitivity by Onno Hovers (Score:1) Saturday April 28 2001, @02:13AM
  • Re:It needs to enforce modularity! by mcdirmid (Score:2) Friday April 27 2001, @06:04PM
  • Re:Another victory for buzzwordism! by KarmaBlackballed (Score:1) Friday April 27 2001, @06:29PM
  • Modern trends in language design. by bertok (Score:2) Friday April 27 2001, @07:29PM
  • by blamario (227479) on Friday April 27 2001, @05:53PM (#260480)
    When I first saw the story, I thought of another (and IMO more innovative) programming language/system called Mozart [mozart-oz.org]. Would it really hurt to at least check Google for "Mozart programming language" before you name your new project? Not that the original is very original either... If you decide to change the project name, may I suggest not to use Beethoven?
  • Stop using tabs, then by ericvids (Score:2) Saturday April 28 2001, @12:14AM
  • by Kletus Cassidy (230405) on Friday April 27 2001, @07:22PM (#260482)
    I'll split my post up into my ideas on the features you have now and my suggestions for features I'd like in a programming language. Good luck. :)


    Current Features

    The current features I didn't mention are the ones I thought were well thought out or didn't really have any issues with.
    • style insensitive names: These sounds like it will cause more confusion and cause more problems than it will solve (that said, is there actually a problem that it solves or was this just a cool feature you thought of hacking in?).

    • using keyword: Be careful about Keonig lookup [hp.com] if your language isn't going to dynamically load classes like Java does. Some people think the "using" or "import" style keywords should behave like #include but they usually are more subtle than that.
    Features To Consider

    • Threading library: Multithreaded programming is more efficient than the using multiple processes and has grown increasingly popular. The fact that languages like C++ do not have a standard threading library unlike Java is a bad blow.

    • Virtual functions: Be consistent with how virtual functions are used. One of the many failings of C++ is that the behavior of virtual functions is completely unintuitive; virtual func s can't be called in a constructor or destructor, lookup for overloaded functions stops at the current class instead of all the way up the inheritance heirarchy, etc. Keep inheritance simple, C++'s private, public vs. protected inheritance is a mess.

    • Platform independent numeric types: Like byte, int32, int8, int64.

    • Code based documentation: Something similar to javadoc or perlpod. It is great to be able to get an overview of a whole project simply by reading documentation generated by the code.

    • Resumable exceptions: The idea that blocks of code in exceptions can be retried is nice but even cooler would be to borrow a leaf from the Smalltalk book and mark exceptions as resumable or not.
  • Re:What I'd like to see. by Twylite (Score:2) Saturday April 28 2001, @03:49AM
  • by squiggleslash (241428) on Saturday April 28 2001, @06:13AM (#260484) Journal
    Quite.

    My first thought on "open source programming lanugage development" was along the lines of: "You mean... like this?"

    Suppose someone, call him "Dennis", produces their own computer programming language. For the sake of argument, let's call our example language 'C', because it programs Computers.

    Dennis releases the language C to the public domain, by releasing sources (specs).

    Then suppose someone, call him Richard, comes along and takes C and adds a few bits and pieces he wants in it plus some ideas some other people have had. Something he can only do because the language is, er, "open source".

    Then, say, Bjarn and Steve come along and decide to add some features to C and Richard's C (who has named his after his favourate animal) to make it support object orientation. Bjarn calls his version "C++", and Steve calls his "Objective C".

    Then, someone else, ooh, I dunno, Bill J, and maybe another person called Bill G, decide to take C++, and clean up the language and implement a virtual computer architecture in it. Bill J names his after his favourate brand of coffee, and Bill G names his after a musical note.

    And all of them are able to do this because:

    Dennis made his language "open source" by releasing the specs, so Richard and Bjarne were able to add features.

    Richard made his extentions to the language "open source" so Steve was able to add features.

    Bjarne made his extentions "open source", by documenting them again, so Bill G and Bill J were able to add features.

    Would that be what "open source" development of a programming language would be like?
    --