Skip to main content
GameDev.net gamedev.net
🔒 Locked

A Universal Project

Started by Omnimmotus Sep 3, 2006 at 5:08 PM 8 replies 1.3k views
Original Post
Omnimmotus
Omnimmotus
Introduction: This topic was created in the footsteps of ApochPiQ's "A pragmatic language for the future" with a slightly different approach to the problem. This is meant to be the preliminary steps to a new and better language. This project requires a significant, and growing, effort, but will eventually begin to grow on its own. Essentially, this will begin a snowball effect to collect and focus the efforts of the different programming scenes, and join with the digital art scenes, to improve the environment for both. This project is created to solve one problem, programming and art is spread across many languages and many programs. There are a number of languages, and in them engines, which split the community into much smaller pieces. This has advantages in that there are many different ways to go toward your goal, but it causes the capabilities of each language and engine to be spread and specific, limiting what one can do, and the support one can get. This is meant to collect people for a joint project, which will lead into what was discussed in "A pragmatic language for the future". Instead of starting with a new language, we start with the old languages, build up, and then build backward to a better language based on what we have learned. “Our goal is not to develop the "perfect" language, or to build anyone's "dream language." Rather, we accept the reality that any language will have to have some ugly, rough edges. At some point, a language must disappoint someone. We are not here to make the ultimate language for everything. However, we do believe that a language can be developed which is both a major improvement on existing tools, and is also suitable for a very wide variety of problem domains. Whereas many highly elegant languages are, realistically speaking, only used in narrow problem spaces, we intend to devise an elegant, rich, and powerful language that is suitable for many problem domains, and is appealing to programmers working in those domains.” Project Outline: The project is still a loose concept, but these are the current directions.
  • Develop the authoritative IDE for the most common languages. First, we need to bring everything we already know and have into one place. Essentially, we build a program which is designed to switch easily between many languages, and is designed to be able to be edited, and then rebuilt repeatedly so the functionality is endless. We want it to be the most customizable, capable, quick, and well built IDE so far built. Firefox had a similar idea in some ways, build the best browser possible, and then improve on it continually. First, we need to perfect everything we have now. This part may start with simply a basic IDE, which will then be improved and improved until it encompasses our goal. It may begin with one language, and end up with hundreds. The more languages, the better we can understand the possibilities. This will actually snowball, so once set it motion, it be continually be improved by the community. NOTE: As Emmanuel said, this pretty well describes Eclipse. It might be advantageous to use Eclipse as the basis of this project. We could either merge with Eclipse, or take it in our own direction. Both have advantages.
  • Develop the most capable engine we can create with present languages. Next, we need to figure out the fastest, most efficient, and most smooth ways to handle most common programming. Then, we compile this into the best engine we can make. Basically, we figure out the best ways to make applications, games, databases, or any sort of program, and come up with the most logical and efficient ways to code it. This is the first step of creating a new language, though the new language is built inside other languages. This too will snowball, once set in motion, the people interested will continue to improve it. The integral part here is to find a balance between ease of use and flexibility, it needs to be both extremely flexible and simple to command. Finally, it is important that this engine is completely open to change, so that it can be modified to suit your needs.
  • Build backward into a better language. Finally, we take what we have learned from the engine we have created and figure out the easiest and most efficient ways to tell the computer what it should do. These won’t be perfect, of course, but they can be improved. Here, the ideas mentioned in “A pragmatic language for the future” will finally begin to truly emerge. Those who have advanced enough knowledge can build a new language to handle many of the programmer’s common problems. If the previous projects are successful, we get the publicity and support of the rest of the project, as well as what we have learned from our past work. This too will snowball. Best of all, this language can be used to improve the engine, where we can then build backward again to improve the language. (Though standardization is important, which we have to take into account.) Finally, we rebuild the IDE and engine to best use this new language, to complete the family.
Our momentum is vital. As said in "A pragmatic language for the future": "Just as we must test and use the language while it is being developed, we must also provide incentives for others to do so as well. Enlarging the pool of users and spreading the word is critical. Without widespread support and interest, the language will not be able to compete with established technologies. Achieving this buy-in requires that we be able to offer people the ability to use the language early on. It is vital that, as soon as possible, programmers are able to start writing real, useful code in the language, even if it is just interpreted or bytecode compiled." If done well, the language’s importance and use will spread exponentially, but that may not be easy. We need to provide reasons to use the IDE, engine, and especially language. Finally, there is one last thing we have to do. In many programs, there is some sort of visual representation It is also important that a program have options and flexibility.. In standard coding, you have to recreate things you have made in the past, and those of us who need art rely on artists. You can’t eliminate either problem, but why can’t we make things quite a bit easier?
  • Develop a powerful, and more importantly, flexible, way of creating art and content. Will Wright himself has pointed out the importance of flexibility and the ability to quickly and powerfully make something with great results. In the area of visuals, .kkrieger is a First Person Shooter that is only 96k, and it looks quite decent. (http://produkkt.abraxas-medien.de/) To improve development of projects, and allow more features to be quickly thrown into code, (to create more feature-rich programs) we need to then make it easy to both create and integrate art and features, and even allow this art and these features to be created for you. This will allow more time to be spent in the more important areas, while simple things can be automatically taken care of. Also, it spreads the powers of the few more widely to allow fewer people to do more. (Though, of course, you can’t eliminate the need for artists and specialized coders.) By offering it in open-source, we provide help and the opportunity for the community to contribute. This too, will of course snowball.
As of now, the name of this project is the "Omni Project", based on the Latin word for all. (Omnis) As said before, we need to provide reasons to use what we make, and both make them open-source, and bring them together into one community. If we manage it well, we can build the momentum until, as I’ve said many times before, it will snowball. One of the most difficult parts is just getting it to have enough momentum. (More information may be added to this post as the topic progresses.) [Edited by - Omnimmotus on September 4, 2006 2:30:38 PM]
dao ke dao, fei chang daoming ke ming, fei chang ming
Roboguy
Roboguy
Do you realize that there are about a hundred or more languages? Granted, most of those are toy languages or "joke" languages, but you did say "every language." If you did not mean literally every language, who picks the languages? What criteria will they use to pick them?

EDIT: Here is Wikipedia's alphabetical list of languages. There are almost certainly some which are not on that list, as well.
Omnimmotus
Omnimmotus
Good point. I corrected the first post to more express what is meant.
dao ke dao, fei chang daoming ke ming, fei chang ming
Omnimmotus
Omnimmotus
Edited it slightly further to reflect that too.
dao ke dao, fei chang daoming ke ming, fei chang ming
Emmanuel Deloget
Emmanuel Deloget
A few notes about your idea:

Quote:
Original post by Omnimmotus
  • Develop the authoritative IDE for the most common languages.
    First, we need to bring everything we already know and have into one place. Essentially, we build a program which is designed to switch easily between many languages, and is designed to be able to be edited, and then rebuilt repeatedly so the functionality is endless. We want it to be the most customizable, capable, quick, and well built IDE so far built. Firefox had a similar idea in some ways, build the best browser possible, and then improve on it continually. First, we need to perfect everything we have now. This part may start with simply a basic IDE, which will then be improved and improved until it encompasses our goal. It may begin with one language, and end up with hundreds. The more languages, the better we can understand the possibilities. This will actually snowball, so once set it motion, it be continually be improved by the community.

Actually, and unless I'm mistaken, you are describing Eclipse. Moreover, you have to define what the best IDE is.

Quote:
Original post by Omnimmotus
  • Develop the most capable engine we can create with present languages.
    Next, we need to figure out the fastest, most efficient, and most smooth ways to handle programming. Then, we compile this into the best engine we can make. Basically, we figure out the best ways to make applications, games, databases, or any sort of program, and come up with the most logical and efficient ways to code it. This is the first step of creating a new language, though the new language is built inside other languages. This too will snowball, once set in motion, the people interested will continue to improve it.

There is no such thing as a most efficient way to handle programming. Different people have different views on this subject, and different companies want their workers to work using a scheme that has been validated years ago - and that cannot easily change. By restricting yourself to a single set of practices that are the ultimate answer to your question, you don't take into account the 2% people that are using other parts of their brain to work.

Or maybe I just don't understand this point.

Quote:
Original post by Omnimmotus
  • Build backward into a better language.
    Finally, we take what we have learned from the engine we have created and figure out the easiest and most efficient way to tell the computer what it should do. Here, the ideas mentioned in “A pragmatic language for the future” will finally begin to truly emerge. Those who have advanced enough knowledge can build a new language to handle many of our problems. We get the publicity and support of the rest of the project, as well as what we have learned from our past work. I can offer no idea of what that will be like, but I can assure you, it too will snowball. Best of all, this language can be used to improve the engine, where we can then build backward again to improve the language. Finally, we build the IDE and engine to best use this new language, to complete the family.


You are seeing too far in the future - enthusiasm is good, but realism is even better [smile]. You won't get publicity for your project such easily. Maybe it won't snowball (the snowball effect have a catch: it must start). And what you propose is ultimatelly an evolving language - and such language cannot be used in a production environment where you have to maintain code which is 5 or 10 y.o. This is the reason why standardized languages are good for the industry.

Quote:
Original post by Omnimmotus
If done properly, the language’s importance and use will spread exponentially, but that may not be easy. We need to provide reasons to use the IDE, engine, and especially language.

Agreed - the only problem I see is the definition of "properly".

Quote:
Original post by Omnimmotus
Finally, there is one last thing we have to do. No matter what you make, you need a visual representation.

Not totally true: most embedded software don't have a visual representation - and yes, they represent a huge part of the programming market.

Quote:
Original post by Omnimmotus
Everything needs options and flexibility, as well. Why should you have to make it yourself every time, and why should any of this be in a separate set of tools?

Tools can't make everything well. It is far better to have a set of specialized tool that work well than to have one, unspecialized tool that doesn't do much things and is hard to use (big programs tend to be hard to use well). If you do everything using a single tool that does everything well, consider the view of a typical programmer that have nothing to do with art: why should I pay for something that I don't use? Moreover, art tools are designed to fit the way artists think (of course, if artists and programmers were thinking in the same way, somebody would have noticed - this is obviously not the case).

Quote:
Original post by Omnimmotus
As of now, the name of this project is the "Omni Project", based on the Latin word for all. (Omnis)

(More information may be added to this post as the topic progresses.)


I'm looking for a more detailed view - I'll check back :)

Regards,
Omnimmotus
Omnimmotus
Thank you Emmanuel. I have tried to fix some of the confusing segments to reflect what you have said. To everyone, keep in mind, what is in my post is not the final outline of the project. As long as there is consensus, feel free to improve the project. Also, this is an early idea of the project, by the end it may have had whole sections removed and whole sections added.
dao ke dao, fei chang daoming ke ming, fei chang ming
Ezbez
Ezbez
Sorry if this sounds harsh, but as far as I can tell, all that you're saying is "Let's program a bunch of stuff so that we get really good at programming, then let's make a really good language."
Omnimmotus
Omnimmotus
Absolutely Ezbez. Just because it is a simple and straight-forward idea doesn't mean it's a bad one. More so, I hope that what I say will be taken from simple and straight-forward to advanced and complex.
dao ke dao, fei chang daoming ke ming, fei chang ming
yunnat
yunnat
At some point I thought about a universal programming language. My idea was that you could allow to define new language constructs. You would define somehow the syntax (using e.g. lex/yacc), and then define the semantics of the new construct using formal logic. For example, you could have something like this defined in a header file called C++.h:

syntax: lvalue++
pre-conditions: none
post-conditions: (new lvalue) == (old lvalue) + 1

Or, you could have something like this defined in a header lisp.h:

syntax: (++ lvalue)
pre-conditions: none
post-conditions: (new lvalue) == (old lvalue) + 1

You could then #include "C++.h" to program in C++ or #include "lisp.h" to use lisp syntax.

Of course, defining formal semantics of complex constructs (like virtual functions) will be extremely difficult. And going from a formal logic statement about what a construct does to compiled code that actually does it will be even more difficult...

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.