GoTo
- is a statement that performs a one-way transfer of control to another point of code; in contrast to a function call which returns control.
Its use has declined significantly since the advent of structured programming in the 1960s. Structured programming languages like #Pascal introduced control structures such as: subroutines, loops and multiway branch for clarity and efficiency. These replace equivalent flows written using gotos and ifs.
Language support:
• #C
• #CSharp: also makes
• #Perl
• #PHP there was no native support for goto until version 5.3
• #Java:
• #Python: does not support it but there are several joke modules that provide it.
The structured program theorem proves that
- is a statement that performs a one-way transfer of control to another point of code; in contrast to a function call which returns control.
Its use has declined significantly since the advent of structured programming in the 1960s. Structured programming languages like #Pascal introduced control structures such as: subroutines, loops and multiway branch for clarity and efficiency. These replace equivalent flows written using gotos and ifs.
Language support:
• #C
• #CSharp: also makes
case and default statements labels, whose scope is the enclosing switch statement; goto case or goto default is often used to replace explicit "fall-through", which C# disallows.• #Perl
• #PHP there was no native support for goto until version 5.3
• #Java:
goto is a reserved word, but is unusable.• #Python: does not support it but there are several joke modules that provide it.
The structured program theorem proves that
goto is not necessary to write programs.The diamond problem
- is an ambiguity that arises when two classes B and C inherit from A, and class D inherits from both B and C. If there is a method in A that B and C have overridden, and D does not override it, then which version of the method does D inherit: that of B, or that of C?
For example, in the context of GUI software development, a class Button may inherit from both classes Rectangle (for appearance) and Clickable (for functionality/input handling), and classes Rectangle and Clickable both inherit from the Object class. Now if the equals method is called for a Button object and there is no such method in the Button class but there is an overridden equals method in Rectangle or Clickable (or both), which method should be eventually called?
How different languages deal with it:
• Common #Lisp: by order "...in the order in which parent classes are named in the subclass definition"
• Curl: "and the secondary constructor will be invoked for all other subclasses."
• Eiffel: "Eiffel will automatically join features together, if they have the same name and implementation."
• Go: compile-time error
• #Java: compile-time error
• #OCaml: by order "...are inherited in the same order, with each newly inherited method overriding any existing methods."
• #Perl: by order "...from as an ordered list. The compiler uses the first method it finds..."
• #Python: by order
• #Ruby: by order "...as rightmost depth first resolution."
• #Scala: by order "allows multiple instantiation of traits, which allows for multiple inheritance by adding a distinction between the class hierarchy and the trait hierarchy. A class can only inherit from a single class, but can mix-in as many traits as desired." This approach is the most similar to #Nile's; traits being qualifications.
• Tcl: by order "the order of specification in the class declaration affects the name resolution for members..."
Languages that allow only single inheritance, where a class can only derive from one base class, do not have the diamond problem.
Moreover, languages such as #Ada, Objective-C, #CSharp, #Delphi/Free #Pascal, Java, #Swift and PHP allow multiple-inheritance of interfaces (called protocols in Objective-C and Swift). Interfaces are like abstract base classes that specify method signatures without implementing any behavior.
When several interfaces declare the same method signature, as soon as that method is implemented (defined) anywhere in the inheritance chain, it overrides any implementation of that method in the chain above it (in its superclasses). Hence, at any given level in the inheritance chain, there can be at most one implementation of any method. Thus, single-inheritance method implementation does not exhibit the Diamond Problem even with multiple-inheritance of interfaces.
- is an ambiguity that arises when two classes B and C inherit from A, and class D inherits from both B and C. If there is a method in A that B and C have overridden, and D does not override it, then which version of the method does D inherit: that of B, or that of C?
For example, in the context of GUI software development, a class Button may inherit from both classes Rectangle (for appearance) and Clickable (for functionality/input handling), and classes Rectangle and Clickable both inherit from the Object class. Now if the equals method is called for a Button object and there is no such method in the Button class but there is an overridden equals method in Rectangle or Clickable (or both), which method should be eventually called?
How different languages deal with it:
• Common #Lisp: by order "...in the order in which parent classes are named in the subclass definition"
• Curl: "and the secondary constructor will be invoked for all other subclasses."
• Eiffel: "Eiffel will automatically join features together, if they have the same name and implementation."
• Go: compile-time error
• #Java: compile-time error
• #OCaml: by order "...are inherited in the same order, with each newly inherited method overriding any existing methods."
• #Perl: by order "...from as an ordered list. The compiler uses the first method it finds..."
• #Python: by order
• #Ruby: by order "...as rightmost depth first resolution."
• #Scala: by order "allows multiple instantiation of traits, which allows for multiple inheritance by adding a distinction between the class hierarchy and the trait hierarchy. A class can only inherit from a single class, but can mix-in as many traits as desired." This approach is the most similar to #Nile's; traits being qualifications.
• Tcl: by order "the order of specification in the class declaration affects the name resolution for members..."
Languages that allow only single inheritance, where a class can only derive from one base class, do not have the diamond problem.
Moreover, languages such as #Ada, Objective-C, #CSharp, #Delphi/Free #Pascal, Java, #Swift and PHP allow multiple-inheritance of interfaces (called protocols in Objective-C and Swift). Interfaces are like abstract base classes that specify method signatures without implementing any behavior.
When several interfaces declare the same method signature, as soon as that method is implemented (defined) anywhere in the inheritance chain, it overrides any implementation of that method in the chain above it (in its superclasses). Hence, at any given level in the inheritance chain, there can be at most one implementation of any method. Thus, single-inheritance method implementation does not exhibit the Diamond Problem even with multiple-inheritance of interfaces.
Quantifier operators
• All: checks if all the elements satisfy a condition
• Any: checks if any of the elements satisfy a condition
• Contains: checks if it contains a specific element
#CSharp, LINQ
• All: checks if all the elements satisfy a condition
• Any: checks if any of the elements satisfy a condition
• Contains: checks if it contains a specific element
#CSharp, LINQ
History of GameMaker: "GameMaker: Studio"
2012, May: GameMaker: Studio was launched as a completely new series that targeted commercial developers instead of hobbyists, and supported: #Windows, #Mac_OS (in development since 2007), #HTML5 (in development since 2011), #Android, #iOS, and many other platforms and OSs.
It also completely changed the projects structure: each project is a folder with all resources as individual
Since the launch of Studio, the product has been fully developed by YoYo Games. This makes Game Maker 8.x a closed chapter.
2015, February: GameMaker was acquired by Playtech together with YoYo Games. Announcements reassured improvements and plans to appeal to more advanced developers. They also promised GameMaker Studio 2.0. Nothing was changed for developers.
2016, November: GameMaker Studio 2 beta was released.
2017, March: GameMaker Studio 2, with a completely redesigned IDE rewritten in #CSharp, was released.
Present
Currently, a single code base can run natively across multiple platforms including Android, iOS, HTML5, PS4, Xbox One, Windows Desktop, OS X, Ubuntu, Windows UWP.
Future
GameMaker Studio 2 Roadmap
2012, May: GameMaker: Studio was launched as a completely new series that targeted commercial developers instead of hobbyists, and supported: #Windows, #Mac_OS (in development since 2007), #HTML5 (in development since 2011), #Android, #iOS, and many other platforms and OSs.
It also completely changed the projects structure: each project is a folder with all resources as individual
.gmx files in #XML format. This allows version control, and thus collaboration. Another new feature is a built-in Box2D physics engine.Since the launch of Studio, the product has been fully developed by YoYo Games. This makes Game Maker 8.x a closed chapter.
2015, February: GameMaker was acquired by Playtech together with YoYo Games. Announcements reassured improvements and plans to appeal to more advanced developers. They also promised GameMaker Studio 2.0. Nothing was changed for developers.
2016, November: GameMaker Studio 2 beta was released.
2017, March: GameMaker Studio 2, with a completely redesigned IDE rewritten in #CSharp, was released.
Present
Currently, a single code base can run natively across multiple platforms including Android, iOS, HTML5, PS4, Xbox One, Windows Desktop, OS X, Ubuntu, Windows UWP.
Future
GameMaker Studio 2 Roadmap