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

World: r3wp

[World] For discussion of World language

Oldes
5-Dec-2011
[368]
I guess you will get it once you type TEST end enter.
sqlab
5-Dec-2011
[369]
right
Andreas
5-Dec-2011
[370]
Is there a way to figure out, what directory a command launches from, 
which will work across platforms?

Yes and no. There are platform-specific ways. This gist of it:

- Linux: readlink("/proc/self/exe")
- OSX: _NSGetExecutablePath
- Win32: GetModuleFileNameW

(We recently discussed this issue in relation to R3 as well.)
Geomol
5-Dec-2011
[371x4]
Topic: system/version/platform
To check for which platform, World is running on, system/version/platform 
can today be:

	"Mac OS X"
	"Linux"
	"Win32"


Is that suitable? Are there better suggestions? Is there a standard 
for this?
Maybe I should call it "Linux32" and hold the 64-bit versions clean... 
So there can be a future "Linux", which is 64-bit.
The current Linux version is compiled under Linux Mint 12 "Lisa" 
32-bit.
Andreas
5-Dec-2011
[375]
No standard, I fear. You could use the compiler's (GCC's) target 
machine verbatim, though.
Geomol
5-Dec-2011
[376]
Like:

$ gcc -dumpmachine
i686-apple-darwin10
Andreas
5-Dec-2011
[377x3]
For GCC, you can see get the target machine tuple with the "-dumpmachine" 
flag. This would give you stuff like:
i486-linux-gnu
x86_64-linux-gnu
arm-linux-gnueabi
i686-apple-darwin10
i586-mingw32msvc
Yep.
Not sure if that's the best idea, but maybe worth considering.
Geomol
5-Dec-2011
[380x2]
Yes, worth considering. But do we like to type that in scripts?
My Win32 say:

$ gcc -dumpmachine
i686-pc-mingw32
Andreas
5-Dec-2011
[382]
I think for scripts we want a small helper library with various predicate 
functions.
Geomol
5-Dec-2011
[383x2]
REBOL use this: version.revision.update.platform.variation
See: http://www.rebol.com/docs/version-numbers.html
I could add a system/version/variation at some point.
A helper lib sounds like a good idea, then I could make changes later.
Andreas
5-Dec-2011
[385]
Like: linux? windows? 32bit? 64bit? etc.
BrianH
5-Dec-2011
[386]
ARM, X86, MIPS? There's more than just OS and bits...
Geomol
5-Dec-2011
[387]
That can be handled with system/version/variation, which I'll add.
BrianH
5-Dec-2011
[388x3]
Then you might consider having the platform be a word of just the 
platform name, but also include a platform-plus-hardware word in 
a different field. This would make specialty code that switches on 
the OS (for API stuff) or full platform (for selecting native code) 
much easier to write.
So platform: 'windows but variation: 'windows-intel-32
Or whatever your naming convention is.
Geomol
5-Dec-2011
[391x4]
I see your point. It's not easy to find a good way, that is sure 
to cover all future possibilities.
I went for strings, so it could be e.g. "Mac OS X" and not the word 
mac-os-x.
Maybe platform could be, 'macosx, 'linux and 'windows and variation 
something like 'intel-32, 'intel-64, etc. Or do we need a third variable?
So maybe no variation, but instead processor and bits.
BrianH
5-Dec-2011
[395]
Can you SWITCH on two words at once?
Andreas
5-Dec-2011
[396x2]
In fact, there's so much more than OS and bits, that it's hardly 
worth trying to come up with an all-encompassing scheme.
Others have tried, and failed.
BrianH
5-Dec-2011
[398]
One of the common situations where you need to do platform-specific 
stuff is in loading prebuilt libraries, and those depend on the platform 
and processor variant. That means that selecting one requires selecting 
both, or all 3 if you have a seperate bits field. One SWITCH is better 
than 3.
Geomol
5-Dec-2011
[399]
I would like to have platform, which is kinda the OS, I guess. And 
the consequence of what Andreas just said, then the rest should just 
go into one variable, variation.
Andreas
5-Dec-2011
[400]
case [all [linux? arm?] [...] all [linux? amd64?] [...] ...]
Geomol
5-Dec-2011
[401]
Can you SWITCH on two words at once?


Yes, SWITCH can handle that. I don't have CASE yet, but probably 
will.
BrianH
5-Dec-2011
[402x2]
Something like this?

switch [platform variation] [
	[linux intel-32] [do something]
	[linux intel-64] [do domething else]
]
(sorry, that was bad syntax, but you get the idea)
Geomol
5-Dec-2011
[404x5]
switch reduce ... and without the first blocks inside. Just e.g. 
linux intel-32 [...]
Is it correct, REBOL can't handle that?
w> platform: 'linux
== linux
w> variation: 'intel-32
== intel-32

w> switch reduce [platform variation] [linux intel-32 [print "Found 
it!"]]
Found it!
SWITCH is a mezzaning in World (see cortex.w) and just uses FIND.
*mezzanine*
Geomol
6-Dec-2011
[409x5]
New release at https://github.com/Geomol/World
- The new routine spec is implemented.
- Compiling blocks should be fixed. I also added a test for this.

- system/version changed. Should be able to handle all future platforms/bits/processors/makers/etc.

- Added libs/version.w to help with deciding platform and version.
- Other fixes.
- Now cortex_alpha.pdf is updated too.
- And new version of cortex.w , where HELP can handle routines.
Defining routines is very flexible, a bit against my simplistic philosophy 
for World, but now it's done. Having e.g. libc (OS X example):

libc: load/library %/usr/lib/libc.dylib

Defining PUTS can be as simple as:

puts: make routine! [
	libc "puts" [
		[string!] pointer
	]
	sint
]

or as full of info and features as:

puts: make routine! [
	"Writes a string to stdout followed by a newline."
	[typecheck]
	libc "puts" [
		string [string!] pointer "String to write to stdout"
	]
	sint integer!
]
Compiling blocks is not 100%. Working on it.
Mchean
6-Dec-2011
[414]
Geomol: this is such nice stuff!
Geomol
6-Dec-2011
[415x3]
:)
My first experience with LLVM.


I tried to compile World with llvm-g++ under OS X. When compiling 
with gcc, I normally use -O2 option. I compared performance with 
the Mandelbrot test. Between compilations, I deleted all .o files 
and executable, so new compile started from scratch.

Compiling with llvm-g++:

With -O2 option, file size grow to 105% and execution time extend 
to 105% (slower).

With -O3 option, file size grow to 106% and execution time is the 
same.

With -O4 option (also Link Time Optimization), file size extend to 
122% and execution time grow to 107% (slower).


Then I tried to compile with gcc and -O3 option. Now file size grow 
to 105% and execution time shortened to 85% (faster).

Has anyone had similar experience with LLVM?
(And I thought, LLVM was much better, but maybe I do something wrong 
or miss some option!?)