In computing , cross-platform software (also called multi-platform software , platform-agnostic software , or platform-independent software ) is computer software that is designed to work in several computing platforms . Some cross-platform software requires a separate build for each platform, but some can be directly run on any platform without special preparation, being written in an interpreted language or compiled to portable bytecode for which the interpreters or run-time packages are common or standard components of all supported platforms.
90-410: Rebol ( / ˈ r ɛ b əl / REB -əl ; historically REBOL ) is a cross-platform data exchange language and a multi-paradigm dynamic programming language designed by Carl Sassenrath for network communications and distributed computing . It introduces the concept of dialecting : small, optimized , domain-specific languages for code and data, which is also the most notable property of
180-420: A fat binary . The use of different toolsets may not be enough to build a working executables for different platforms. In this case, programmers must port the source code to the new platform. For example, an application such as Firefox, which already runs on Windows on the x86 family, can be modified and re-built to run on Linux on the x86 (and potentially other architectures) as well. The multiple versions of
270-549: A production rule with nonterminal symbols ), with various meanings, often being used for control flow , such as the word if in most procedural languages, which indicates a conditional and takes clauses (the nonterminal symbols); names of primitive types in a language that support a type system , such as int ; primitive literal values such as true for Boolean true; or sometimes special commands like exit . Other uses of keywords in phrases are for input/output, such as print . The distinct definitions are clear when
360-434: A standard library but not built into a language are not considered reserved words or keywords. The terms "reserved word" and "keyword" are often used interchangeably – one may say that a reserved word is "reserved for use as a keyword" – and formal use varies from language to language. For this article, we distinguish as above. In general reserved words and keywords need not coincide, but in most modern languages keywords are
450-583: A JVM. Java software can be executed by a hardware-based Java processor . This is used mostly in embedded systems. Java code running in the JVM has access to OS-related services, like disk input/output (I/O) and network access, if the appropriate privileges are granted. The JVM makes the system calls on behalf of the Java application. This lets users to decide the appropriate protection level, depending on an access-control list (ACL). For example, disk and network access
540-450: A block is passed to a specific interpreter function. A specific problem worth noting is that composite values, assigned to variables, are not copied. To make a copy, the value must be passed to the copy function. The do function normally follows a prefix style of evaluation , where a function processes the arguments that follow it. However, infix evaluation using infix operators exists too. Infix evaluation takes precedence over
630-442: A client/web-server architecture. The distinction between traditional and web applications is not always clear. Features, installation methods and architectures for web and traditional applications overlap and blur the distinction. Nevertheless, this simplifying distinction is a common and useful generalization. Traditional application software has been distributed as binary files, especially executable files . Executables only support
720-446: A compiler, notably in name mangling . This is most often done by using a prefix, often one or more underscores . C and C++ are notable in this respect: C99 reserves identifiers that start with two underscores or an underscore followed by an uppercase letter, and further reserves identifiers that start with a single underscore (in the ordinary and tag spaces) for use in file scope ; with C++03 further reserves identifiers that contain
810-469: A current use (a reserved word that is not a keyword), as this allows the word to be used in future without breaking existing programs. Alternatively, new language features can be implemented as predefineds, which can be overridden, thus not breaking existing programs. Reasons for flexibility include allowing compiler vendors to extend the specification by including non-standard features, different standard dialects of language to extend it, or future versions of
900-494: A double underscore anywhere – this allows the use of a double underscore as a separator (to connect user identifiers), for instance. The frequent use of a double underscores in internal identifiers in Python gave rise to the abbreviation dunder; this was coined by Mark Jackson and independently by Tim Hochberg, within minutes of each other, both in reply to the same question in 2002. The list of reserved words and keywords in
990-419: A final product. Because of this, identifier/reserved word collisions can occur when code implemented in one language tries to execute code written in another language. For example, a Visual Basic (.NET) library may contain a class definition such as: If this is compiled and distributed as part of a toolbox, a C# programmer, wishing to define a variable of type " this " would encounter a problem: 'this'
SECTION 10
#17327985645701080-610: A function. So, the below expression: first reads the Misplaced Pages Rebol page and then passes the result to the print function. Parentheses can be used to change the order of evaluation. Using prefix notation , the usage of parentheses in expressions can be avoided. The simple precedence rules are both an advantage: as well as a disadvantage: The parse function is preferably used to specify, validate, transform and interpret dialects. It does so by matching parse expressions at run time. Parse expressions are written in
1170-483: A game with the intention of release on the latest Nintendo and Sony game consoles. Should Disney license the game with Sony first, it may be required to release the game solely on Sony's console for a short time or indefinitely . Several developers have implemented ways to play games online while using different platforms. Psyonix , Epic Games , Microsoft , and Valve all possess technology that allows Xbox 360 and PlayStation 3 gamers to play with PC gamers, leaving
1260-455: A keyword representing the Boolean value "true", in which case it should appear in the grammar as a possible expansion of the production BinaryExpression , for instance. Beyond reserving specific lists of words, some languages reserve entire ranges of words, for use as private spaces for future language version, different dialects, compiler vendor-specific extensions, or for internal use by
1350-454: A language are defined when a language is developed, and both form part of a language's formal specification . Generally one wishes to minimize the number of reserved words, to avoid restricting valid identifier names. Further, introducing new reserved words breaks existing programs that use that word (it is not backwards compatible), so this is avoided. To prevent this and provide forward compatibility , sometimes words are reserved without having
1440-450: A language is analyzed by a combination of a lexer and a parser, and the syntax of the language is generated by a lexical grammar for the words, and a context-free grammar of production rules for the phrases. This is common in analyzing modern languages, and in this case keywords are a subset of reserved words, as they must be distinguished from identifiers at the word level (hence reserved words) to be syntactically analyzed differently at
1530-472: A language often coincide or are almost equal, and the distinction is subtle, so the terms are often used interchangeably. However, in careful use they are distinguished. Making keywords be reserved words makes lexing easier, as a string of characters will unambiguously be either a keyword or an identifier, without depending on context; thus keywords are usually a subset of reserved words. However, reserved words need not be keywords. For example, in Java, goto
1620-405: A local variable. In Common Lisp, however, there are two special symbols which are not in the keyword package: the symbols t and nil . When evaluated as expressions, they evaluate to themselves. They cannot be used as the names of functions or variables, so are de facto reserved. (let ((t 42))) is a well-formed expression, but the let operator will not permit the usage. Typically, when
1710-512: A paid license; they add features like ODBC data access, and the option to create standalone executable files. Cross-platform For example, a cross-platform application may run on Linux , macOS and Microsoft Windows . Cross-platform software may run on many platforms, or as few as two. Some frameworks for cross-platform development are Codename One , ArkUI-X, Kivy , Qt , GTK , Flutter , NativeScript , Xamarin , Apache Cordova , Ionic , and React Native . Platform can refer to
1800-645: A particular platform—either the hardware, OS, or virtual machine (VM) it runs on. For example, the Java platform is a common VM platform which runs on many OSs and hardware types. A hardware platform can refer to an instruction set architecture . For example: ARM or the x86 architecture. These machines can run different operating systems. Smartphones and tablets generally run ARM architecture, these often run Android or iOS and other mobile operating systems . A software platform can be either an operating system (OS) or programming environment , though more commonly it
1890-621: A programmer attempts to use a keyword for a variable or function name, a compilation error will be triggered. In most modern editors, the keywords are automatically set to have a particular text colour to remind or inform the programmers that they are keywords. In languages with macros or lazy evaluation , control flow constructs such as if can be implemented as macros or functions. In languages without these expressive features, they are generally keywords. Different languages often have widely varying numbers of reserved words. For example, COBOL has about 400. Java, and other C derivatives, have
SECTION 20
#17327985645701980-535: A rather sparse set, about 50. Pure Prolog and PL/I have none. Definition of reserved words in a language raises problems. The language may be difficult for new users to learn because of a long list of reserved words to memorize which can't be used as identifiers. It may be difficult to extend the language because addition of reserved words for new features might invalidate existing programs or, conversely, "overloading" of existing reserved words with new meanings can be confusing. Porting programs can be problematic because
2070-554: A representation of data which is then executable as programs" and as one of JSON 's influences. Originally, the language and its official implementation were proprietary and closed source, developed by REBOL Technologies. Following discussion with Lawrence Rosen , the Rebol version 3 interpreter was released under the Apache 2.0 license on December 12, 2012. Older versions are only available in binary form, and no source release for them
2160-428: A separate facility (macro processing) to allow its use as if it were a new keyword without any prefixing, while C++11 introduce the keyword thread_local despite this not being an existing reserved word, breaking any programs that used this, but without requiring macro processing. A related notion to reserved words are predefined functions, methods, subroutines, types, or variables, particularly library routines from
2250-405: A special character. As a consequence, keywords are not reserved words, and thus the same word can be used for as a normal identifier. However, one stropping regime was to not strop the keywords, and instead have them simply be reserved words. Some languages, such as PostScript , are extremely liberal in this approach, allowing core keywords to be redefined for specific purposes. In Common Lisp ,
2340-488: A special word that cannot be used as a user-defined name. The meaning of keywords, and the meaning of the notion of keyword , differs widely from language to language. Concretely, in ALGOL 68, keywords are stropped (in the strict language, written in bold) and are not reserved words – the unstropped word can be used as an ordinary identifier. The " Java Language Specification" uses the term "keyword". The ISO 9899 standard for
2430-439: A specific purpose. Dialects can be used to define business rules, graphical user interfaces or sequences of screens during the installation of a program. Users can define their own dialects, reusing any existing Rebol word and giving it a specific meaning in that dialect. Dialects are interpreted by functions processing Rebol blocks (or parsing strings) in a specific way. An example of Rebol's dialecting abilities can be seen with
2520-568: A subset of reserved words, as this makes parsing easier, since keywords cannot be confused with identifiers. In some languages, like C or Python , reserved words and keywords coincide, while in other languages, like Java , all keywords are reserved words, but some reserved words are not keywords, being reserved for future use. In yet other languages, such as ALGOL , FORTRAN , ooRexx , PL/I , and REXX there are keywords but no reserved words, with keywords being distinguished from identifiers by other means. The sets of reserved words and keywords in
2610-443: A third. While this is straightforward, compared to developing for only one platform it can cost much more to pay a larger team or release products more slowly. It can also result in more bugs to be tracked and fixed. Another approach is to use software that hides the differences between the platforms. This abstraction layer insulates the application from the platform. Such applications are platform agnostic . Applications that run on
2700-527: A time-consuming task because different OSs have different application programming interfaces (API). Software written for one OS may not automatically work on all architectures that OS supports. Just because software is written in a popular programming language such as C or C++ , it does not mean it will run on all OSs that support that language—or even on different versions of the same OS. Web applications are typically described as cross-platform because, ideally, they are accessible from any web browser :
2790-424: A word not reserved by one system or compiler might be reserved by another. Because reserved words cannot be used as identifiers, users may choose deliberate misspellings of reserved words as identifiers instead, such as clazz for Java variables of type Class . Microsoft's .NET Common Language Infrastructure (CLI) specification allows code written in 40+ different programming languages to be combined into
Rebol - Misplaced Pages Continue
2880-469: A workaround for this problem. Tools such as the Page Object Model allow cross-platform tests to be scripted so that one test case covers multiple versions of an app. If different versions have similar user interfaces, all can be tested with one test case. Web applications are becoming increasingly popular but many computer users still use traditional application software which does not rely on
2970-700: Is IBM PowerVM Lx86 , which allows Linux/x86 applications to run unmodified on the Linux/Power OS. Example of cross-platform binary software: A script can be considered to be cross-platform if its interpreter is available on multiple platforms and the script only uses the facilities built into the language. For example, a script written in Python for a Unix-like system will likely run with little or no modification on Windows, because Python also runs on Windows; indeed there are many implementations (e.g. IronPython for .NET Framework ). The same goes for many of
3060-553: Is a tree data structure consisting of blocks (the root block is implicit, subblocks are delimited by square brackets ), parens (delimited by round brackets ), strings (delimited by double quotes or curly brackets suitable for multi-line strings; caret notation is used for unprintable characters), URLs , e-mail addresses, files, paths or other composite values . Unlike ALGOL blocks , Rebol blocks are composite values similar to quoted s-expressions in Lisp . The fact that code
3150-418: Is a combination of both. An exception is Java , which uses an OS-independent virtual machine (VM) to execute Java bytecode . Some software platforms are: The Java language is typically compiled to run on a VM that is part of the Java platform. The Java virtual machine (Java VM, JVM) is a CPU implemented in software, which runs all Java code. This enables the same code to run on all systems that implement
3240-577: Is a reserved word in C#. Thus, the following will not compile in C#: A similar issue arises when accessing members, overriding virtual methods , and identifying namespaces. This is resolved by stropping . To work around this issue, the specification allows placing (in C#) the at-sign before the identifier, which forces it to be considered an identifier rather than a reserved word by the compiler: For consistency, this use
3330-421: Is a reserved word, but has no meaning and does not appear in any production rules in the grammar. This is usually done for forward compatibility , so a reserved word may become a keyword in a future version without breaking existing programs. Conversely, keywords need not be reserved words, with their role understood from context, or they may be distinguished in another manner, such as by stropping . For example,
3420-516: Is a term that can also apply to video games released on a range of video game consoles . Examples of cross-platform games include: Miner 2049er , Tomb Raider: Legend , FIFA series , NHL series and Minecraft . Each has been released across a variety of gaming platforms, such as the Wii , PlayStation 3 , Xbox 360 , personal computers , and mobile devices . Some platforms are harder to write for than others, requiring more time to develop
3510-399: Is a word that cannot be used as an identifier , such as the name of a variable, function, or label – it is "reserved from use". This is a syntactic definition, and a reserved word may have no user-defined meaning. A closely related and often conflated notion is a keyword , which is a word with special meaning in a particular context. This is a semantic definition. By contrast, names in
3600-442: Is a word unlike a + b , which is a sequence of three words separated by spaces. Comments may appear following the semicolon until the end of the line. Multi-line comments or comments not ignored by the lexical parser can be written using "ordinary" datatypes like multi-line strings. Blocks containing domain-specific language can be submitted as arguments to specific evaluator functions. The most frequently used evaluator
3690-568: Is associated with values. The result, i.e. the evaluation of a word is returned, when a word is encountered by the do function. The set-word form of a word can be used for assignment . While not having statements, assignment, together with functions with side-effects can be used for imperative programming . Subblocks of the root block evaluate to themselves. This property is used to handle data blocks, for structured programming by submitting blocks as arguments to control functions like if , either , loop , etc., and for dialecting, when
Rebol - Misplaced Pages Continue
3780-430: Is available on Windows, macOS (both PowerPC and x86 through what Apple Inc. calls a Universal binary ), Linux, and BSD on multiple computer architectures. The four platforms (in this case, Windows, macOS, Linux, and BSD) are separate executable distributions, although they come largely from the same source code . In rare cases, executable code built for several platforms is combined into a single executable file called
3870-540: Is given by new keywords in C11 compared with C++11 , both from 2011 – recall that in C and C++, identifiers that begin with an underscore followed by an uppercase letter are reserved: The C committee prefers not to create new keywords in the user name space, as it is generally expected that each revision of C will avoid breaking older C programs. By comparison, the C++ committee (WG21) prefers to make new keywords as normal‐looking as
3960-428: Is legal, as the bold keyword if does not conflict with the ordinary identifier if : However, in ALGOL 68 there is also a stropping regime in which keywords are reserved words, an example of how these distinct concepts often coincide; this is followed in many modern languages. A reserved word is one that "looks like" a normal word, but is not allowed to be used as a normal word. Formally this means that it satisfies
4050-427: Is planned. Rebol has been used to program Internet applications (both client- and server-side ), database applications, utilities , and multimedia applications. Rebol was initially an acronym for R elative E xpression B ased O bject L anguage written in all caps. To align with modern trends in language naming represented, e.g. by the change replacing historical name LISP by Lisp , programmers ceased
4140-448: Is separation of functionality, which disables functionality not supported by browsers or OSs, while still delivering a complete application to the user. (See also: Separation of concerns .) This technique is used in web development where interpreted code (as in scripting languages) can query the platform it is running on to execute different blocks conditionally. Third-party libraries attempt to simplify cross-platform capability by hiding
4230-433: Is stored in a single executable file. Rebol/Core 2.7.8, the console edition, is about 300 KB and Rebol/View 2.7.8, the graphical user interface edition, is about 650 KB in size. Rebol/View provides platform-independent graphics and sound access, and comes with its own windowing toolkit and extensible set of styles ( GUI widgets ). Extended editions, such as Rebol/Command 2.7.8 or Rebol/SDK 2.7.8 require
4320-559: Is the do function. It is used by default to interpret the text input to the interpreter console . The do dialect interpreted by the do function, is an expression-oriented sublanguage of the data exchange dialect . The main semantic unit of the language is the expression . In contrast to imperative programming languages descending from ALGOL , the do dialect has neither keywords, nor statements. Words are used as case-insensitive variables . Like in all dynamically typed languages , variables don't have an associated type, type
4410-491: Is the data exchange dialect ; other dialects are usually derived from it. In addition to being the common platform for all dialects, the data exchange dialect is directly used to represent data and metadata, populate data structures, send data over Internet, and save them in data storage. In contrast to programming languages like C , the data exchange dialect does not consist of declarations , statements , expressions or keywords. A valid data exchange dialect text stream
4500-547: Is the practice of deliberately writing software to work on more than one platform. There are different ways to write a cross-platform application. One approach is to create multiple versions of the same software in different source trees —in other words, the Microsoft Windows version of an application might have one set of source code files and the Macintosh version another, while a FOSS *nix system might have
4590-411: Is used with this technique. Cross-platform applications need much more integration testing . Some web browsers prohibit installation of different versions on the same machine. There are several approaches used to target multiple platforms, but all of them result in software that requires substantial manual effort for testing and maintenance. Techniques such as full virtualization are sometimes used as
SECTION 50
#17327985645704680-764: Is usually enabled for desktop applications, but not for browser-based applets . The Java Native Interface (JNI) can also be used to access OS-specific functions, with a loss of portability. Currently, Java Standard Edition software can run on Microsoft Windows, macOS, several Unix-like OSs, and several real-time operating systems for embedded devices. For mobile applications, browser plugins are used for Windows and Mac based devices, and Android has built-in support for Java. There are also subsets of Java, such as Java Card or Java Platform, Micro Edition , designed for resource-constrained devices. For software to be considered cross-platform, it must function on more than one computer architecture or OS. Developing such software can be
4770-464: Is written in the form of Rebol blocks makes the language homoiconic . Blocks as well as parens may contain other composite values (a block may contain subblocks, parens, strings, ...) or scalar values like words, set-words (words suffixed by the colon ), get-words (words prefixed by the colon), lit-words (words prefixed by the apostrophe ), numbers, money, characters , etc., separated by whitespace . Special characters are allowed in words, so a+b
4860-569: The C language uses the term "keyword". In many languages, such as C and similar environments like C++ , a keyword is a reserved word which identifies a syntactic form. Words used in control flow constructs, such as if , then , and else are keywords. In these languages, keywords cannot also be used as the names of variables or functions. In some languages, such as ALGOL and ALGOL 68 , keywords cannot be written verbatim, but must be stropped . This means that keywords must be marked somehow. E.g. by quoting them or by prefixing them by
4950-422: The open-source scripting languages . Unlike binary executable files, the same script can be used on all computers that have software to interpret the script. This is because the script is generally stored in plain text in a text file . There may be some trivial issues, such as the representation of a new line character . Some popular cross-platform scripting languages are: Cross-platform or multi-platform
5040-415: The parse dialect , which, like the do dialect , is an expression-oriented sublanguage of the data exchange dialect . Unlike the do dialect , the parse dialect uses keywords representing operators and the most important nonterminals , infix parsing operators don't have prefix equivalents and use precedence rules ( sequence has higher precedence than choice ). Actions can be included to be taken during
5130-598: The parsing expression grammar (PEG). The main similarity is the presence of the sequence and choice operators all the family members have. Parse dialect syntax and the similarities between the parse dialect and the PEG are illustrated by this transliteration of a PEG example that parses an arithmetic expression: The official Rebol 2.7.8 implementation is available in several editions ( /Core , /View , /Command , /SDK and /IOS ). Both /Core and /View editions are freely redistributable software . The runtime environment
5220-583: The JVM are built this way. Some applications mix various methods of cross-platform programming to create the final application. An example is the Firefox web browser, which uses abstraction to build some of the lower-level components, with separate source subtrees for implementing platform-specific features (like the GUI), and the implementation of more than one scripting language to ease software portability . Firefox implements XUL , CSS and JavaScript for extending
5310-462: The beginning of the next line. A Rebol interpreter with graphical abilities must understand and interpret many dialects. The table below lists the most important ones in order of significance. Rebol syntax is free-form , not requiring specific positioning. However, indentation is often used to better convey the structure of the text to human readers. Syntactic properties of different dialects may differ. The common platform for all Rebol dialects
5400-486: The browser is the platform. Web applications generally employ a client–server model , but vary widely in complexity and functionality. It can be hard to reconcile the desire for features with the need for compatibility. Basic web applications perform all or most processing from a stateless server , and pass the result to the client web browser. All user interaction with the application consists of simple exchanges of data requests and server responses. This type of application
5490-466: The browser, in addition to classic Netscape -style browser plugins. Much of the browser itself is written in XUL, CSS, and JavaScript. There are many tools available to help the process of cross-platform programming: There are many challenges when developing cross-platform software. Keyword (computer programming) In a computer language , a reserved word (also known as a reserved identifier )
SECTION 60
#17327985645705580-449: The code may be stored as separate codebases, or merged into one codebase. An alternative to porting is cross-platform virtualization , where applications compiled for one platform can run on another without modification of the source code or binaries. As an example, Apple's Rosetta , which is built into Intel -based Macintosh computers, runs applications compiled for the previous generation of Macs that used PowerPC CPUs. Another example
5670-470: The code, but can be worthwhile where the amount of platform-specific code is high. This strategy relies on having one codebase that may be compiled to multiple platform-specific formats. One technique is conditional compilation . With this technique, code that is common to all platforms is not repeated. Blocks of code that are only relevant to certain platforms are made conditional, so that they are only interpreted or compiled when needed. Another technique
5760-447: The complexities of client differentiation behind a single, unified API, at the expense of vendor lock-in . Responsive web design (RWD) is a Web design approach aimed at crafting the visual layout of sites to provide an optimal viewing experience—easy reading and navigation with a minimum of resizing, panning, and scrolling—across a wide range of devices, from mobile phones to desktop computer monitors. Little or no platform-specific code
5850-526: The decision of which platform to use to consumers. The first game to allow this level of interactivity between PC and console games (Dreamcast with specially produced keyboard and mouse) was Quake 3 . Games that feature cross-platform online play include Rocket League , Final Fantasy XIV , Street Fighter V , Killer Instinct , Paragon and Fable Fortune , and Minecraft with its Better Together update on Windows 10 , VR editions, Pocket Edition and Xbox One . Cross-platform programming
5940-426: The extent of some scope . Languages vary as to what is provided as a keyword and what is a predefined. Some languages, for instance, provide keywords for input/output operations whereas in others these are library routines. In Python (versions earlier than 3.0) and many BASIC dialects, print is a keyword. In contrast, the C, Lisp, and Python 3.0 equivalents printf , format , and print are functions in
6030-439: The language according to its designer Carl Sassenrath : Although it can be used for programming, writing functions, and performing processes, its greatest strength is the ability to easily create domain-specific languages or dialects Douglas Crockford , known for his involvement in the development of JavaScript , has described Rebol as "a more modern language, but with some very similar ideas to Lisp, in that it's all built upon
6120-535: The language to include additional features. For example, a procedural language may anticipate adding object-oriented capabilities in a future version or some dialect, at which point one might add keywords like class or object . To accommodate this possibility, the current specification may make these reserved words, even if they are not currently used. A notable example is in Java , where const and goto are reserved words — they have no meaning in Java but they also cannot be used as identifiers. By reserving
6210-454: The more recent versions of popular web browsers. These features include Ajax , JavaScript , Dynamic HTML , SVG , and other components of rich web applications . Because of the competing interests of compatibility and functionality, numerous design strategies have emerged. Many software systems use a layered architecture where platform-dependent code is restricted to the upper- and lowermost layers. Graceful degradation attempts to provide
6300-422: The old keywords. For example, C++11 defines a new thread_local keyword to designate static storage local to one thread. C11 defines the new keyword as _Thread_local. In the new C11 header <threads.h>, there is a macro definition to provide the normal‐looking name: That is, C11 introduced the keyword _Thread_local within an existing set of reserved words (those with a certain prefix), and then used
6390-500: The package named COMMON-LISP are basically reserved words. The effect of redefining them is undefined in ANSI Common Lisp. Binding them is possible. For instance the expression (if if case or) is possible, when if is a local variable. The leftmost if refers to the if operator; the remaining symbols are interpreted as variable names. Since there is a separate namespace for functions and variables, if could be
6480-411: The parsing process as well and the parse function can be used to process blocks or strings. At the string parsing level parse must handle the "low level" parsing, taking into account characters and delimiters. Block parsing is higher level, handling the scanning at the level of Rebol values. The parse dialect belongs to the family of grammars represented by the top-down parsing language or
6570-458: The phrase if = 1 is unambiguous in most grammars, since a control statement of an if clause cannot start with an = , and thus is allowed in some languages, such as FORTRAN . Alternatively, in ALGOL 68 , keywords must be stropped – marked in some way to distinguished – in the strict language by listing in bold, and thus are not reserved words. Thus in the strict language the following expression
6660-420: The phrase grammar, as terminal symbols . For example, the production rule for a conditional expression may be IF Expression THEN Expression . In this case IF and THEN are terminal symbols, meaning "a token of type IF or THEN , respectively" – and due to the lexical grammar, this means the string if or then in the original source. As an example of a primitive constant value, true may be
6750-424: The phrase level (as keywords). In this case reserved words are defined as part of the lexical grammar, and are each tokenized as a separate type, distinct from identifiers. In conventional notation, the reserved words if and then for example are tokenized as types IF and THEN , respectively, while x and y are both tokenized as type Identifier . Keywords, by contrast, syntactically appear in
6840-542: The platform they were built for—which means that a single cross-platform executable could be very bloated with code that never executes on a particular platform. Instead, generally there is a selection of executables, each built for one platform. For software that is distributed as a binary executable, such as that written in C or C++, there must be a software build for each platform, using a toolset that translates—transcompiles—a single codebase into multiple binary executables. For example, Firefox , an open-source web browser,
6930-433: The practice of writing REBOL in all caps. Sassenrath eventually put the naming question to the community debate on his blog. In subsequent writing, Sassenrath adopted the convention of writing the language name as Rebol . First released in 1997, Rebol was designed over a 20-year period by Carl Sassenrath, the architect and primary developer of AmigaOS , based on his study of denotational semantics and using concepts from
7020-449: The prefix evaluation. For example, returns 1, since the infix addition takes precedence over the computation of the absolute value. When evaluating infix expressions, the order of evaluation is left to right, no operator takes precedence over another. For example, returns 20, while an evaluation giving precedence to multiplication would yield 14. All operators have prefix versions. Do usually evaluates arguments before passing them to
7110-543: The programming languages Lisp , Forth , Logo , and Self . One of the Rebol design principles is "to do simple things in simple ways". In the following example the Visual interface dialect is used to describe a simple Hello world program with a graphical user interface: This is how a similar example looks in R3-GUI: [REDACTED] Rebol domain-specific languages , called dialects , are micro-languages optimized for
7200-497: The same or similar functionality to all users and platforms, while diminishing that functionality to a least common denominator for more limited client browsers. For example, a user attempting to use a limited-feature browser to access Gmail may notice that Gmail switches to basic mode, with reduced functionality but still of use. Some software is maintained in distinct codebases for different (hardware and OS) platforms, with equivalent functionality. This requires more effort to maintain
7290-597: The standard library (notably in collections) would break compatibility. JavaScript also contains a number of reserved words without special functionality; the exact list varies by version and mode. Languages differ significantly in how frequently they introduce new reserved words or keywords and how they name them, with some languages being very conservative and introducing new keywords rarely or never, to avoid breaking existing programs, while other languages introduce new keywords more freely, requiring existing programs to change existing identifiers that conflict. A case study
7380-403: The standard library. Similarly, in Python prior to 3.0, None , True , and False were predefined variables, but not reserved words, but in Python 3.0 they were made into reserved words. Some use the terms "keyword" and "reserved word" interchangeably, while others distinguish usage, say by using "keyword" to mean a word that is special only in certain contexts but "reserved word" to mean
7470-420: The standard library. These are similar in that they are part of the basic language, and may be used for similar purposes. However, these differ in that the name of one of these entities is typically categorized as an identifier instead of a reserved word, and is not treated specially in the syntactic analysis. Further, reserved words may not be redefined by the programmer, but predefineds can often be overridden for
7560-487: The term "keyword" (or "keyword symbol") is used for a special sort of symbol , or identifier. Unlike other symbols, which usually stand for variables or functions, keywords are self- quoting and self-evaluating and are interned in the KEYWORD package. Keywords are usually used to label named arguments to functions, and to represent symbolic values. The symbols which name functions, variables, special forms and macros in
7650-425: The terms, they can be implemented in future versions of Java, if desired, without breaking older Java source code. For example, there was a proposal in 1999 to add C++-like const to the language, which was possible using the const word, since it was reserved but currently unused; however, this proposal was rejected – notably because even though adding the feature would not break any existing programs, using it in
7740-447: The type of processor (CPU) or other hardware on which an operating system (OS) or application runs, the type of OS, or a combination of the two. An example of a common platform is Android which runs on the ARM architecture family . Other well-known platforms are Linux / Unix , macOS and Windows , these are all cross-platform. Applications can be written to depend on the features of
7830-404: The usual lexical syntax (syntax of words) of identifiers – for example, being a sequence of letters – but cannot be used where identifiers are used. For example, the word if is commonly a reserved word, while x generally is not, so x = 1 is a valid assignment, but if = 1 is not. Keywords have varied uses, but mainly fall into a few classes: part of the phrase grammar (specifically
7920-497: The video game to the same standard. To offset this, a video game may be released on a few platforms first, then later on others. Typically, this happens when a new gaming system is released, because video game developers need to acquaint themselves with its hardware and software. Some games may not be cross-platform because of licensing agreements between developers and video game console manufacturers that limit development to one particular console. As an example, Disney could create
8010-405: The word return . In the data exchange dialect return is just a word not having any specific meaning. In the do dialect , return is a global variable referring to a native function passing back a function result value. In the visual interface dialect (VID) , return is a keyword causing the layout engine to simulate a carriage return , moving the "rendering pen" down to
8100-565: Was the norm in the early phases of World Wide Web application development. Such applications follow a simple transaction model, identical to that of serving static web pages . Today, they are still relatively common, especially where cross-platform compatibility and simplicity are deemed more critical than advanced functionality. Prominent examples of advanced web applications include the Web interface to Gmail and Google Maps . Such applications routinely depend on additional features found only in
#569430