David Clark wrote:

My AGI and my language was never designed to have "millions and billions of
asynchronous, concurrent units".  My design certainly has the ability for
run a few thousand events simultaneously and pass messages efficiently
between them but this is not what you are asking.  My language would be
totally inadequate for the kind of solution you envision but I would argue
that for the kinds of systems I envision, current languages are equally
ill-suited.  I have a summary of the features in my system and some examples
concerning why Lisp wasn't suitable at  www.rccconsulting.com/aihal.htm
Here are a few thoughts on the list at your site.

The following is the list of language requirements I thought an AI would minimally need.

  1. Object Oriented.

OO is great except when it isn't. What features do you want from OO? Encapsulation? Modularity? Inheritance? Reuse? All wonderful but OO is not the only and in some situation not the best way to achieve them. Single dispatch or multi-dispatch? Class based or prototype based or a mix? Frame type contstructs? Inheritance or delegation? 2. All Classes, Methods, Properties, Objects can be created and changed easily by the program itself.

Is there a MOP? Can the implementation details be tweaked freely? Can cross cutting concerns be cleaned expressed?
3. Efficiently run many programs at the same time.

What is and isn't a "program" or unit of computation in your thinking? Is this part of the language or the OS or do you agree with Alan Kay that an OS is where you put all that stuff you failed to account for it the language?

4. Fully extensible.

So there is a MOP and the constructs of the language can be change, added to, implemente differently fairly freely?\

5. Built-in IDE (Interactive Development Environment) that allows programs to be running concurrently with program edit, compile and run.

IDE is just another program or set of programs. I don't see it as being particular built-in except languages can support interpretation, reflection, JIT compilation, run time code generation and loading of code and so on that make development and deployment much more efficient. Lisp machines had exactly the type of IDE you are talking about. Smalltalk still does. Both Lisp and Smalltalk allow changing code on the fly without restart.
6. As simple as possible.

Hard to get much simpler than Lisp with as much power.

7. Quick programming turnaround time.

As above concerning interactive iterative devolopment without edit-compile-link-test cycles. If you are concerned with portability writing the language in Java or even smalltalk would give you guaranteed portability on about every system out there. You could also write in Python or Ruby and be much more productive that in C/C++ although you would want to later optimize crucial sections.

8,Fast where most of the processing is done.

In the language or in things written in the language or both? Lisp has been interpreted and compiled simultaneously and nearly seamlessly for 20 years and has efficiency approaching compiled C in many problem domains. Only some programs spend most of their time in indexing, searching and other things you write about optimizing internally. Lisp allows the creation of new "primitives", optimized as highly as you can imagine at any time. If this is mainly about developer productivity and power then getting too caught up in efficiency before addressing productivity and expressiveness and maintainability would be a mistake.

9. Simple hierarchy of Classes and of Objects.

  1. Simple Class inheritance.
  2. Simple external file architecture.
  3. Finest possible edit and compile without any linking of object
     modules.
  4. Scalable to relatively large size.
  5. Built in SQL, indexes, tables, lists, stacks and queues.
  6. Efficient vector handling of all data types.
  7. Internet interface.
  8. Runs on Windows PC machines.
  9. Can run as multiple separate systems on the same computer or in
     the background

Class inheritance is only one of many useful mechanisms. Single or multiple? Mixins supported? Typing ? What do you have in mind as needed external file arhicecture? What kind of module structure? SQL? Why? Don't you want more OQL at least? What kind of tables? Data structures are trivial to build up in any reasonably powerful language so I guess some of this is about what is in the standard library.

On threading I have build an deployed systems running hundreds of threads as appservers on fairly normal mid to high-end desktops under both Windows and Linux coded in Java. So it is certainly false that noone does this. Many locking problems can be ameliorated by using more of a work-queue based approach. Often mechanism like thread-local storage can further reduce the amount of locking needed. Threads can be done in a much more lightweight manner than some of the standard implementations. See Erlang for ones set of interesting approaches.

Why not drop external files altogether? How about keeping source and or bytecode in a database to facilitate creating/searching/loading code as the IDE/programs are created and run? OO and especially persistent OO has implied to me the possibility and desirability of getting away from "files" for about three decades now. Some Lisp and Smalltalk environments used "images" to hold a snapshot of an entire code/working enrionment/system. Others, like the IBM Java and Smalltalk systems stored everything in a database. I have done some work with "cloud of objects" environments where there are no applications per se. Instead their are persistent and distributed objects, classe, code, data and and environment for finding objects and sending messages and loading objects as necessary in ore more processes on one or more machines on the fly on an as needed basis. A set of objects and code used in a word processor may also be used in many other contexts once some of the "file" and "application" barriers are removed.
12. edit and compile?

Why need an explcit compiler at all? You don't (or don't see it unless you choose to) in some language environments. Why not create an instance of a class under development, code up or modify a method and immediately with no compilation at all send it the message to see how it works and immediately use the reflective capabilities of the language to inspect the object? Why not have an environment where something like lisp "trace" function is available so you immediate test shows you exactly what is called with what data in what order without needing to fire up a debugger?

Lisp has been used for some of the largest programs in existence. You are confused about the "list" in lisp. Lisp includes every type of data structure you can imagine.

What is in your database? What kind of database? OODB, relational, hybrid? Highly transparent? What kind of transactionas support? Pessimistic or optimistic locking or both? What granularity of locking? What kind of caching? Recoverability? Redundancy? Change logs? Most dbms systems today have means to extend them to some degree in multiple programming languages. Most have means to be used by multiple programming languages although there is considerable "impedance mismatch" unless quite a bit is done to get beyond it like some of the OODB systems for OO languages and as highly transparent persistence mechanisms as possible given the constraints of the DB machinery and the language at hand (a specialty of mine) . There are also many embedded databases that have some strength in some problem domains. For a system with many processes and perhaps distributed across multiple machines a separate database process or processes is generally required.

Runs on Windows Machines

I think you are pretty much stark raving here. :-) Linux is not cryptic compared to Windoze in the least. I have worked with Window many, many times. When I have a Windows machine that I bought myself it inevitably gets converted to Linux within 6 months. Usually this is after I have had to reinstall the OS at least once to fix the breakage that is the Windows registry. It IDEs for C/C++ are not bad if you don't mind having window-isms leak into every part of your code. .Net is a step into much better direction but I can get most of that goodness under Mono and run on more platforms. Windows GUI is not very good at all once you have lived on the Mac world for very long. The Mac running OS X gives most of the advantages of Unix on a very visually well-designed system with excellent tools. Windows is a disaster for hacking. Most of the nomal cli tools are utterly brain dead. I always load cygwin and live under it as much as possible on windoze. We want even get into the virus breeding idiocy that is Windows. At the least go the Mac route. That is my choice today for the most of the things I care about. Especially now that I can easily run Linux and/or Windows when I need to in virtual machines (Parallels). For many years I did not have any Windows machine and I had no trouble working just fine with the rest of the world. What few Windows programs I needed ran fine under Wine or had quite useable alternatives.

If your language is one OS dependent then it sucks from the beginning.


You say you looked at different languages such as Lisp but your comments say you didn't really understand what you were looking at at all.

- samantha



-----
This list is sponsored by AGIRI: http://www.agiri.org/email
To unsubscribe or change your options, please go to:
http://v2.listbox.com/member/?list_id=303

Reply via email to