For anyone who might be interested, all program, classes, objects etc reside in a single operating system file. Only a simple config file resides outside this one file and it is used at startup only. The overhead of 1000's of classes and 10,000's of objects made me decide to make access to any of these objects at least an order of magnitude faster than using many files in an arbitrarily complex operating system directory tree. There are disadvantages to this scheme but the benefits made this my decision.
----- Original Message ----- From: "Chuck Esterbrook" <[EMAIL PROTECTED]> To: <[email protected]> Sent: Saturday, March 24, 2007 9:32 AM Subject: Re: [agi] My proposal for an AGI agenda > For that particular example, yes I believe you can. You do so by > creating a class (or struct; your preference) and giving it an > "implicit cast to long". Can you use the resultant LONG anywhere, with the same syntax and efficiency as if it was just 4 bytes? In my language, you can inherit *any* class as the "base class" on an object and it's that "base class" that determines even the built in methods at execution and compile time. These kind of objects are stored directly in other objects (some objects exist in the object hierarchy) so the overhead is the same as if the object were just the built in variable type. > But another way to use C# would be in place of your C++. You may find > it more productive and if your language features garbage collection, > you get that for free (no future maintenance). With a little bit of > rigging, you would also get access to all .NET libraries, both > built-in and standard. That might be something I consider doing in the future but definitely is worth a look. > Btw I just recalled that Second Life decided to switch their > proprietary VM over to Novell Mono (they run on Linux so they run > .NET's open source clone) for 2 benefits: > 1. Huge increase in speed by leverage the fact that Mono/Novell > generate machine code Generating machine code decreases flexibility (in my design) and wouldn't improve the speed much at all. > 2. Let people choose from a number of languages instead of just one I would like to spend most of my time working on an AGI instead of programming in low level languages, so multi-languages are not an option for me. I tried to track down all the nested include files used by one of my C++ modules and after at least 30 files, I gave up. I will trade some flexibility in what can be usefully programmed in my language for a little bit more simplicity (or a lot more simplicity). Some people enjoy more complexity than others. > Only mildly. There is a Property Inspector you can use at runtime to > modify your objects. You have to provide the UI code that pops it up. All meta and value data is accessible at execution time for *all* objects/variables (even a LONG is an object) in my language. > There is an "edit and continue" feature in the IDE, but it does not impress. My programming model is an event system so "program" has a slightly different meaning that say in C++. Programs can pop into execution space by time, other program invocation or external stimulation like getting a message from a web browser. If a single program stopped because of an error, my system couldn't just let it continue from the console, either. This could be done with the built-in error catching mechanism, however. A normal program written in C++ would end up being many smaller programs running serially or in parallel and each small program can be changed etc while others execute. Unlike a C++ system, not only is all data accessible to running programs and ones triggered by Internet messages, but all their methods are available while editing as well. > You can probably get the IronPython prompt embedded in your .NET > program and get some real in-program coding going. > > What if you need to read in a text file because that's how someone has > delivered some information to you? There is an import facility from a specific operating system directory that can import things like text files, images, and comma delimited files directly into tables. (Any arbitrary file can be imported, not just the 3 kinds mentioned) This means that this language can never be used in direct connection to normal operating system files etc. No ODBC database hooks etc. It does mean that it can never be used to maliciously change any other programs or systems on a persons' computer either. > C# has pointers > (http://www.softsteel.co.uk/tutorials/cSharp/lesson5.html) but hardly > anyone uses them in day-to-day programming. The idea behind having > them was to avoid the Java problem where people get pushed out to JNI > when they want to integrate third party C libs. With C#'s pointers, > structs and arrays, you can stay in the same language. > > Probably another point is to coax more speed out of the > machine--again, without having to "step outside". Stepping outside is not an option in my language. This could be viewed as either good or bad. > Btw your last statement seems a bit reactionary. Just because C# has > some things in common in C doesn't mean one would automatically use C > in the first place. You'd give up garbage collection, exceptions and > classes just for starters! I didn't mean it to be reactionary (negative) at all. I have used C since 1979 and C++ for over 7 years so I don't totally hate these languages at all. C#, I know nothing about at all so it is hard to reply to comparisons about it. I already have very good garbage collection, exceptions and classes created by me. I am not a big fan of multi-program integration. My commercial web site uses Linux, Apache, PHP3, and MySQL. I have had many problems with different versions of these programs not working with other versions. The list of problems I have with this set of 4 (many web sites run this group) programs made by 4 different companies is huge. The sooner I can get my web site running in my language the better. > Sounds good. Like someone else mentioned, I'm especially curious what > role self modifying code plays in your ideas for AGI, and why the code > that people write and that self modifies is the same. In other > systems, such as genetic programming and Novamente, these are separate > languages with different characteristics (that many of us believe are > suited for the role: person programmer vs. automatic programmer). Ben seems (I don't profess to know all the details) to have a C++ program that contains an internal functional or other language to implement his system. The majority of his system seems to be in C++ and only some of his implementation is in his internal language which sounds like it can be programmed by the system itself. If new algorithms are added etc to his AGI, then it would seem those changes would occur in the C++ part of the program rather than in the functional system. I think that developing a huge project in C++ is exceedingly difficult because of the low level of that language. In my C++ program, I have spent my time optimizing that internal language so that my AGI and any functional languages I need to create, can be created, compiled and executed at speeds approaching C++. One example is my inclusion of the LISP macro facility. No run-time execution hit is paid for any number of complex macro code instructions because any LISP function can create standard LISP source code and have it compiled into the program at compile time. The flexibility of the language can be used to create this included source. People who use LISP (I have read on LISP sites) say that this feature is indispensable to them enhancing the abstraction level of LISP. With my integrated and total introspection, I can envision using this macro facility to create native byte code for higher level functional, special purpose languages (for example) instead of simulating that functionality in the code directly. I have other language features that allow the editing of existing methods and the creation of new methods/classes/objects etc at run time. My language won't have to rely just on inheritance to reuse code in new models, for instance. Code from multiple sources can be joined to create new methods automatically without the overhead of another interpreter, on top of an interpreter etc A direct comparison between my language and other languages like Python, LISP, C, C++, C#, Java etc is very useful to me but I don't pretend that the purpose of my language is as general as or can be used in as many normal programming tasks, as these languages can. -- David Clark ----- 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
