r3wp [groups: 83 posts: 189283]
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

World: r3wp

[World] For discussion of World language

Geomol
30-Nov-2011
[93]
Nothing new here ... move on ... move on ...
Kaj
30-Nov-2011
[94]
No, the innovation is swapping all values in the DLL interface
Geomol
30-Nov-2011
[95]
:D
Pekr
30-Nov-2011
[96]
:-)
sqlab
30-Nov-2011
[97]
is there a way loading and interfacing pure object files, how about 
callbacks ?
Geomol
1-Dec-2011
[98]
Question noted.
Pekr
1-Dec-2011
[99]
hmm, KWATZ, I think that Btiffin would be happy, because IIRC, he 
wanted to be able to load "any" data :-)
Cyphre
1-Dec-2011
[100x2]
I like the kwatz! datatype :-)
Wouldn't be useful to treat the kwatz! type same way as binary! so 
you don't need to always convert it? I mean, all functions that are 
able to take binary! arg should be able to use the kwatz! as well...or 
do you think are there any problems regarding that?
Geomol
1-Dec-2011
[102]
Noted.
Cyphre
1-Dec-2011
[103x2]
When thinking more about it...maybe the kwatz! shouldn't be separate 
datatype (as in fact it is identical with binary!). Instead of that 
you could intorduce KWATZ? native which will check the 'flag'. So 
possible usage:

parse data [
	set val binary! (
		either kwatz? val [
			;make the value valid
		][
			;treat normal properly loaded binary! stuff
		]
	)
]


this way the 'kwatz-flagged' binaries are treated same way as 'properly-loaded' 
binaries without the need to change all functions to support some 
hybrid kwatz! datatype.
Or maybe even better solution to enhance LOAD to support ON-KWATZ 
callback:

load/on-kwatz  "...anydata..." func [
	kwatz [binary!]
	/local valid-data
][
	valid-data: <do something with kwatz here>

 return valid-data ;or return FALSE to not change the data at the 
 loaded block position
]


This way you don't even need to use any new flag for the kwatz binary 
and the colision is detected and solved right during the LOADing 
as I think it is not neccesary to validate the data later than that.
sqlab
1-Dec-2011
[105]
Is there a call-in interface available, meaning I can embed w-l in 
other programs?

Regarding your thesis I guess you have something like an integrated 
db or a special datatype for permanent storage too..
Geomol
1-Dec-2011
[106]
I'm writing on the QA right now, and I'll try answer those questions 
too.
Kaj
1-Dec-2011
[107]
Q: Will the countdown run to 1, or to 0, or to a negative limit, 
or a complex! number, or some unknown kwatz!?
Steeve
1-Dec-2011
[108]
Well, it's all depending of the critical density, resulting in  World's 
crunch or  World's freezing.
Geomol
1-Dec-2011
[109]
:D Kaj, good question! Will be answered in QA ...


... no, will be answered here: Countdown will run to 1, and the next 
blog the day after it say 1, will be the release blog with link to 
the actual released stuff.
Kaj
1-Dec-2011
[110]
Yes, Q #1
Steeve
1-Dec-2011
[111]
just a theory
ddharing
1-Dec-2011
[112]
Never heard of "KWATZ!" before. Here's what I found out -- http://www.livingworkshop.net/kwatz.html
and http://seedsforsanctuary.blogspot.com/2008/06/kwatz.html

Interesting choice. The exclamation point is even in there.
PeterWood
2-Dec-2011
[113x2]
What subset of REBOL2 will run without change in World?
Are there datatype and function comparisons between World and REBOL2?
Oldes
2-Dec-2011
[115]
How many people were working on this World:) Is it just a single 
man project?
Pekr
2-Dec-2011
[116x2]
Q: will there be a GUI?
Q2: are you rich enough to buy Rebol Technologies and employ Carl? 
:-)
Endo
2-Dec-2011
[118]
:)))))
Pekr
2-Dec-2011
[119]
:-)
Geomol
2-Dec-2011
[120x2]
:) I wish.
I expect to have the QA ready to be published here later today.
Pekr
2-Dec-2011
[122]
Is licencing part of QA?
Geomol
2-Dec-2011
[123]
That question would be fun to answer in the QA. :)
Pekr
2-Dec-2011
[124]
What about portability?
Geomol
2-Dec-2011
[125x2]
I know too little about licensing at this point. I need a proper 
license at some point. The alpha license is just:


Alpha release. For testing only. Use at your own risk. Do not distribute.
Ask a question about portability.
Pekr
2-Dec-2011
[127x2]
What platforms are supported by initial release, and what platforms 
do you plan to support in future?
Answer to above question might be related to the World language being 
open-source or not. Dunno if that one was answered already, or not 
...
Geomol
2-Dec-2011
[129]
Yes, I had some questions about this. I'll add your new question.
Oldes
2-Dec-2011
[130]
Will be there countdown for the QA as well? :)
Geomol
2-Dec-2011
[131x2]
QA in 10 ...
** Cortex meltdown: unknown OP-code
[KWATZ!]
Oldes
2-Dec-2011
[133]
For everybody who want to see the complete World (like me) before 
it meltdowns = http://themes.googleusercontent.com/image?id=1f-p4d2MS_T8qP_40US1-noQRizaQ_2OtaFi66bAkuKLLkaaBJGuFTmrkvYxWGgzDXvIG
BrianH
2-Dec-2011
[134]
If you do copy-on-write then TO-BINARY some-kwatz-value would be 
able to work on the same data, at least until you modified it. That 
would make the binary-vs-kwatz distinction less important. Nonetheless, 
Cyphre's solution of having an internal flag on the binary! type 
to mark it as kwatz! and a KWATZ? function to test for it is similar 
to the fake datatype trick used in R2 2.7.7 and 2.7.8.
Geomol
2-Dec-2011
[135x4]
My answers to questions will follow in the next couple of posts. 
I've tried to answer the questions as precise, as I could, and thanks 
for the interest.
Q: Will this language be an open or closed source project?


A: Long answer: The plan is to fully open source it at some point, 
when version 1 is ready. Host depending sources are open in the alpha 
release, and it may make sense to open source more and more along 
the way, like sources for the different datatypes. The IT world is 
constantly changing. My nephew just went to the Devoxx Java conference 
in Belgium. Everybody had portable Mac computers. That was very different 
just a few years ago. Who knows, what devices we'll use in 5 years? 
I like to bring my software with me to new platforms. To be able 
to support new platforms faster, open source is a good thing. But 
some things needs to be fulfilled, before I'll open source it all.

1. This isn't a hobby project. I've invested a lot of time and work 
in this project, and I need to find a way to get something back from 
all that. One option is to have a good manual ready for developers 
to buy, open source it to get a lot of developers interested, and 
make a profit that way. There may be other ways (like someone or 
some company paying me to open source or make projects in World).

2. I need to know more about the consequences of open sourcing it, 
so I can avoid any nasty surprises. Knowing more from other similar 
projects could help. I need to figure out a proper license.

3. Even if I keep the sources simple and clean, I would like to clean 
up even more, before it can be open sourced.

A: Short answer: Currently it's partly open source.

Q: What is the main target?

A: The World prompt is a very powerful tool. Being what is known 
as "network transparent" helps in the era of the Internet. Server 
scripting and client scripting are obvious uses. The ability to easily 
make dialects makes it possible to wrap the language around the problem 
instead of trying to change the problem to fit the language. Interfacing 
with other technologies ... see "Introduction" on http://world-lang.org
in a few days.

Q: Is it closer to R2, R3, RED, Topaz architecture?

A: World run its code within a custom made virtual machine (VM). 
Compiling in World compiles World sources to this VM. This happen 
when source code is run or if explicitly compiled. REBOL is always 
interpreted (AFAIK), so that's different. I'm far from an expert 
in Red and Topaz, but as I understand it, Topaz is compiled/translated 
to JavaScript. So the JavaScript engine can be seen as the VM in 
World. And Red is compiled to native code, so that's different too. 
As I see it, all these languages work differently and can complement 
each other. (Help me here, if I'm wrong in any of this.)

Q: What was the main motivation, aka - why yet another language?

A: After I've learned REBOL, I find it frustrating to program in 
most (all) other languages. The difference is like when humans moved 
from carving words in stones to using a printing press a la Gutenberg. 
Then I found, I couldn't complete projects like my Canvas RPaint 
program on all major platforms (Win32, OS X and Linux), I couldn't 
run my code on new portable devices, and I needed better performance 
with scientific applications. With my background in graphics, music 
and science, I expect the language to develop into those areas.


Q: If (you) don't have any other target, why don't you work on Red? 
Or fork a project from Red?

A: I started initial work on World in late March 2009. The first 
post in the Red group here in AltME is from 27-Feb-2011. At that 
time, World was more than 7'000 lines of C.
Q: Does World compile into bytecodes (a la java) or machine languages?

A: Into bytecodes for the virtual machine. Each VM instruction is 
32 bytes (256 bits) including data and register pointers.

Q: Can you do operators with more or less than 2 arguments?

A: Not yet. I've considered post-fix operators (1 argument), and 
it shouldn't be too hard to implement. To motivate me, I would like 
to figure out some really good examples. With more arguments, I can 
only think of the ternary operator ("THE ternary operator"). I'm 
not sure, World needs that.

Q: Is range! a series! type?

A: No, range! is a component datatype. It has two components just 
like pair!.

Q: What platforms are supported?

A: For now Mac OS X (64 bit), Linux (32 bit) and Windows (Win32). 
The code is very portable. It took me a few hours to port to Linux 
from OS X and just a few days to Windows.

Q: What platforms do you plan to support in the future?

A: It would be cool to see World on all thinkable platforms. I personally 
don't have time to support all. World is not a hobby project, and 
I'm open for business opportunities to support other platforms. The 
host depending code is open source. I mainly think 64-bit.


Q: I'm a little sorry to see the R2-style port model instead of the 
R3 style. Are all ports direct at least?

A: Yes, ports are direct (no buffering). The ports and networking 
are some of the most recent implemented. More work is needed in this 
area. I would like to keep it simple and fast, yet flexible so we're 
all happy.


Q: What in the world is going on with the World Programming Language? 
This looks like something that must have been under wraps for a long 
time. What's getting released?

A: I didn't speak up about this, until I was sure, there were no 
show-stoppers. The open alpha of World/Cortex is being released as 
executables for Mac OS X, Linux and Windows (Win32), as are the platform 
dependent sources and initial documentation. World implement 74 natives 
and more than 40 datatypes. The Cortex extension (cortex.w) implement 
100 or so mezzanine functions and some definitions. The REBOL extension 
(or REBOL dialect in rebol.w) implement close to 50 mezzanine functions 
(not all functionality) and some definitions.

Q: Did you do some speed benchmark? (R3 vs R2 vc World) ?
A: Yes:

(All tests under OS X using R2 v. 2.7.7.2.5 and R3 v. 2.100.111.2.5)

- A mandelbrot routine (heavy calculations using complex! arithmetic) 
is 6-7 times faster in World than code doing the same without complex! 
in R2 and 11-12 times faster than R3. If using same code, it's 2.5 
times faster in World than R2 and 4.2 times faster than R3.
- A simple WHILE loop like:
n: 1000000 while [0 < n: n - 1] []

is 1.8 times faster in World than in R2 and 2.8 times faster than 
in R3.

- I tested networking in two ways. One sending one byte back and 
forth between client and server task 100'000 times using PICK to 
get it, and another sending 1k bytes back and forth 10'000 times 
using COPY/PART to get it from the port. Both were around 3 times 
faster in World than in R2. (I didn't test this in R3.)

- I tested calling "clock" and "tanh" routines in the libc library. 
I called those routines 1'000'000 times in a loop and subtracted 
the time of the same loop without calling. Calling "clock" is 2.4 
times faster in World than in R2. Calling "tanh" (with argument 1.0) 
is 5.9 times faster in World than in R2. (I didn't test this in R3.)


(Some functions are mezzanines in World, which are natives in REBOL, 
so they'll in most cases be slower in World.)
Q: We already know that your physics background influenced the new 
complex numbers datatype. Should we expect further progress of this 
kind (physics/science)?

A: After pointing this language out to a couple of friends from university, 
I was quickly asked to give scientific examples, like making a Lorentz 
attractor. There will come examples like that. Also I have some contacts 
at the Niels Bohr Institute (Copenhagen University), that I would 
like to show the language to and see, if we can create some projects.


Q: How long has this been in the making in general & how much time 
have you spent programming it?

A: I started R&D late March 2009. In March 2010, I had >7'000 lines 
of C. Then I took almost a year break from World and started up again 
Spring 2011. I have used much time on it this year (2011). So I've 
used 1-2 years effectively, I guess.


Q: Is there a way loading and interfacing pure object files, how 
about callbacks?

A: I don't have much experience in this area. Two of the closed alpha 
testers have looked at interfacing with sqlite3, which uses callbacks 
for some stuff. I would say, it doesn't work 100% yet, but it's being 
worked on. I need to see examples of loading and interfacing with 
pure object files to judge, how much of such functionality should 
be in World.


Q: Wouldn't it be useful to treat the kwatz! type same way as binary! 
so you don't need to always convert it? I mean, all functions that 
are able to take binary! arg should be able to use the kwatz! as 
well...or do you think are there any problems regarding that?

A: I've thought of that and came to the decision, that KWATZ! should 
be treated with some care. Are we always sure, we want to treat that 
data as binary? I need more experience using KWATZ! to judge that. 
Conversion could be fast, if the AS function was introduced, which 
should just change the type without copying.


Q: Is there a call-in interface available, meaning I can embed World 
in other programs?

A: Not yet. Internally I do call World functions from C (to parse 
URLs) by pushing arguments on the VM stack and call the execute_vm() 
C function. I imagine an interface much like in Lua (lua_call), but 
a little more work is needed, before we're there. This is an alpha 
release, so things will change/be added, before we move to beta release.


Q: Regarding your thesis I guess you have something like an integrated 
db or a special datatype for permanent storage too.. ?
A: Too early! :)

Q: What subset of REBOL2 will run without change in World?

A: Uh, ah, hard to tell at this point. When I need new functionality 
in World (because I want to run some of my R2 scripts), I consider, 
if it should be part of World/Cortex or if the new functions should 
go into the REBOL expansion/dialect (%rebol.w). I want World/Cortex 
to be small and compact. The idea with %rebol.w is, that much of 
R2 code could run, after this script has run.


Q: Are there datatype and function comparisons between World and 
REBOL2?

A: No, I haven't documented that ... yet. Maybe someone else wanna 
document that!? But there are differences, like the REBOL decimal!, 
which in World is called real!. And then %rebol.w just include the 
line:
decimal!: :real!
, so REBOL scripts using that will run.


Q: How many people were working on this World? :) Is it just a single 
man project?
A: Yes, just me.

Q: Will there be a GUI?

A: I would really need a GUI for my own work at some point. I have 
ideas, but nothing set in stone yet. And I want World to be open, 
so different GUIs should be possible, also the native GUIs in the 
different OS.


Q: Are you rich enough to buy Rebol Technologies and employ Carl? 
:-)
A: [KWATZ!]
BrianH
2-Dec-2011
[139x3]
When we tried something similar to the LOAD/on-kwatz trick in R3 
(named LOAD/on-error there) it turned out to slow down LOAD so much 
that it made it unusable - something about switching back and forth 
between native and interpreter execution schemes. The alternative 
of having a kwatz! type returned had the effect of changing a load-time 
check for syntax errors in the source code into a runtime check for 
invalid values, but only if you are expecting such things and testing 
for them explicitly. Under normal circumstances a kwatz-accepting 
loader would often result in code that would run slightly wrong but 
not trigger an error to help you figure out why. This is why you 
should make sure that your regular code loader triggers errors by 
default when it encounters unexpected syntax. An option to be more 
forgiving would be helpful when loading dialects that explicitly 
support particular kinds of extended syntax - and thus are expecting 
kwatz! - or for loading user data for analysis.
Glad to hear that C-like code is faster in World than in REBOL :)
Overall the language seems rather Lua-like, with the same advantages 
and disadvantages of that model.
Geomol
2-Dec-2011
[142]
Yeah. I'm also glad, it's faster. That was some of the first tests, 
I did, long before you could call it a language.