World: r3wp
[World] For discussion of World language
older newer | first last |
Geomol 5-Dec-2011 [354x4] | The file is found at https://github.com/Geomol/World if that wasn't clear. |
Does R3 (or R2) also cause your firewall to give a warning? | |
Topic: Routines | |
I suggest expanding the make routine! spec to the following: routine-name: make routine! [ "routine description" [special attributes] library "routine-name" [ argument1 [arg1-world-type] arg1-type "argument description" argument2 [arg2-world-type] arg2-type "argument description" ... ] return-type return-world-type ] , where the following fields are optional: Routine description (string!), Special attributes (block!), Argument name (word!) and Argument description (string!). Then good documentation can be made with HELP. Argument names are not really needed, as routines are compiled code in a library, but names can make the docs easier to understand. | |
Oldes 5-Dec-2011 [358] | seems to be fine... what about the return-world-type as optional? |
Geomol 5-Dec-2011 [359] | And then it should try to guess it from the return-type? |
Oldes 5-Dec-2011 [360] | yes |
Geomol 5-Dec-2011 [361] | Ok, makes sense. |
Oldes 5-Dec-2011 [362] | and maybe to make same order like for args. |
Geomol 5-Dec-2011 [363x4] | Actually I had it like that at first, but I found the reverse order to be easier to understand. (It can be just me.) Because then I read a simple routine spec as: routine is in library, named "routine-name", take argument with world type arg1-world-type, which is converted to arg1-type, returns return-type, which is converted to return-world-type. The sequence makes good sense to me. |
And [arg1-world-type] is in a block, so I can allow more than one type in the future. | |
(if typechecking is preferred) | |
If routine takes no arguments, the argument block could even be optional. Today an empty block is needed. | |
sqlab 5-Dec-2011 [367] | I do not remember clear, if all versions of R2 or R3 gave warnings at first start, but now they are in my exception list. And at least once I got suspicious of R2 too, as it initialized / loaded libraries not needed. The curious thing is, that now I do not get a warning at start of world again. And I did not allow it, but choosed "ask again". |
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) | |
older newer | first last |