Elm vs Construct 2
When comparing Elm vs Construct 2, the Slant community recommends Elm for most people. In the question“What are the best game engines for web games?” Elm is ranked 1st while Construct 2 is ranked 4th. The most important reason people chose Elm is:
Lack of run-time exceptions makes it easy to produce large swathes of reliable front-end code without drowning in tests.
Specs
Ranked in these QuestionsQuestion Ranking
Pros
Pro No run-time exceptions
Lack of run-time exceptions makes it easy to produce large swathes of reliable front-end code without drowning in tests.
Pro Inferred static typing
ML static typing is great because it's always there, you just choose how explicit you want to be and how much you want the compiler to do.
Pro Super easy refactoring with very helpful compiler errors
In no other language you can refactor so easy without any worries, since the compiler will guide you through. It is like TDD but than compiler-error driven.
Pro Designed around high-level front-end development
As Elm was designed as a front-end langauge, it has out of the box support for things like DOM-element creation, letting programmers focus on their application logic, rather than implementation details specific to the web.
Pro Great and simple way to learn Purely Functional Programming
You can try to apply some functional programming ideas in other languages that have an imperative basis, but you haven't seen the real power unless you tried it in the environment of purely functional programming. Elm is a simple language with great learning resources and easy graphical output, which makes it easy to explore the power of functional programming. Plus programming in Elm is very readable.
Pro Good tooling
All major editors have great support. With Atom for example, Elm plugins are available for linting, formatting, make/compiler support and Elmjutsu will simply overflow you with super useful functions, like navigate to referenced definition and show expression type.
Pro Batteries included
The Elm Architecture means you don't need to spend valuable time and effort choosing the right frameworks, state management libraries, or build tooling. It's all built in.
Pro Static module system
Elm uses easy to use modules.
Use:
import List
import List as L
import List exposing (..)
import List exposing ( map, foldl )
import Maybe exposing ( Maybe )
import Maybe exposing ( Maybe(..) )
import Maybe exposing ( Maybe(Just) )
Creation:
module MyModule exposing (foo, bar)
Pro Missing syntactic sugar
Easy to learn, most functions have only one way, not 5 alternatives where you must study where to best use what.
Pro Growing community
Pro Interactive Programming and Hot Swapping
Support for hot swapping and interactive programming is included.
Pro Easy to code review
The lack of side-effects and simple, consistent language semantics make it easy to quickly review incoming changes.
Pro Higher confidence in code correctness and quality
Pure functions, immutable data structures, amazing compiler, clean and homologous syntax used for HTML, logic, and optionally to replace CSS, elimination of entire classes of bugs so you don't even need most unit tests. These factors lead to better code, better programs, higher confidence, and ultimately, more satisfaction.
Pro Not quite Haskell semantics
Luckily you do not have to learn Haskell to be able to do any Elm. It is meant to be a language that compiles to Javascript, so for Javascript programmers (Front end) not for CS students who want to learn as many different algorithms as possible.
Pro Quick to pick up
Construct 2 is fast to pick up, get into, and belt out some pretty impressive games in a relatively small amount of time. Seems to be built for people who don't have a lot of programming skills, but want to make great games.
Pro Simplicity - it is made for everybody to use and love
Construct 2 is a tool for not just programmers, but artists as well. You can create a game with only visual coding, which is easy to learn and doesn't require any previous programming knowledge. You can focus on making your game better instead of just coding. It has some limitations of course, but it's definitely worth it.
Pro Little programming knowledge needed
Using Construct 2 requires very little programming knowledge because it's all drag'n'drop, intuitive, visual and event-driven instead of code-only.
Pro Built-in physics system
Thanks to the great power of Erin Catto's Box2D, Construct 2 is able to make physics games which are similar to Cut the Rope and Angry Birds.
Pro Cordova support
You can use Cordova plugins from the community
Pro In-depth event system
Construct 2's event system allows for deep, detailed control over all aspects of your game. You aren't limited to just a few options. Rather, Scirra has thought of nearly everything in advance with access to any desired parameter of any object all paired with simple and intuitive ways to interact with them.
Your events can be organized with event sheets (that can be included in other sheets), event groups, sub-events, loops, and functions that make the coding portion of your game as efficient as possible. You don't need any programming knowledge, but if you do have some, you'll feel right at home with the freedom C2 offers.
Pro Supportive community
Construct 2 has a supportive community. Their forums have tens of thousands of topics with ten times more posts. The core maintainers are very helpful and friendly and often reply to questions or issues that may be discussed in the forums.
Pro Easy to create particles and animations
With spriter file implementation and internal animation editor Construct 2 provides an easy way of creating particles and animations.
Pro Free (feature limited) version available
A free version of Construct 2 is available. It's not time restricted in any way, but is feature limited.
Pro Active plugin ecosystem
Construct 2 has an active plugin ecosystem providing behaviors and features that smooth the workflow for certain game types.
Pro Export control for all major platforms
All platform exporters are part of the subscription. There are no additional fees and new exporters are added quickly and maintained well. Currently, 15 platforms are supported, including HMTL 5, iOS, Android, Windows, Chrome Store, PhoneGap and Scirra.
Pro Built in behaviors make development workflows very efficient
Behaviors add pre-packaged functionality to object types.
Pro Very fast preview
In Construct 2 you can preview your games instantly at any time. There’s no need to wait for compiling or other time consuming processes.
Pro Available on Steam
You can also download Construct 2 on Steam.
Pro One-off cost
It's a one off cost for Construct 2 and all updates to the Construct 2 editor are free for life.
Pro Supports camera, microphone, speech recognition and synthesis
Can use cameras in PCs and on mobiles. You can use the synthesis that can recognize your speech or you can write something and it can talk for you.
Pro Interface similar to that of MS office
This engine provides an intuitive workflow for people that are used to the Windows environment.
Pro Runs great on mobile
Performs well on most devices and browsers.
Pro Rapid development
After using a few quick tutorials you can quickly catch on to the event system this program uses and quickly be able to build any type of 2D game you want. You can download a few sprites from google and put together a working level of Mega Man with character movement / animation / enemies / collision detection / scoring / Tile map and AI within about 2 hours.
The built in behaviors are incredible. It's amazing how Construct can simplify the most redundant tasks in game development.
Pro Allow server-less multiplayer game creation
Construct 2 uses WebRTC technology to support it's multiplayer functionality. The nature of the technology allows peer-to-peer connection which does not require game developer to create server side architecture to allow communication between games.
Pro Supportive devs
The developers are always available to help.
Pro Built-in animation/image editor
Basic sprites and tiles of 2D games can be made with engine's built-in tools.
Pro Built-in pathfinding
Has built-in solutions for pathfinding.
Pro Built-in tilemap object
The tilemap object allows tile-based games to be designed more easily. The object's tilemap can also be edited in the layout view using the tilemap bar.
Cons
Con Lack of typeclasses
Elm doesn't have typeclasses which means some code needs to be duplicated. A fix in a function that needs typeclasses means all of the duplicates need to be fixed too.
Con limited js interop
only one way ports are available as a crude js FFI. This means you can only call functions both directions but will not get a result.
Con Harder to get buy-in from devs and mgmt
It's a total divergence from what most people are used to in the JS ecosystem. The change in syntax can be scary, the change in approaching problems can be scary. The fact that it's not backed by FANG can be scary. The fact that it's not v1.0 can be scary. The governance model and the deliberately slow release cadence can be scary. There are a couple harsh medium articles, hackernews/reddit posts out there made by people with an ax to grind that can be scary if you don't have a better picture of the Elm community, the tradeoffs that have been made, or the benefits to be had over other options. None of these are good reasons to write off further investigation of a great tech, but it happens.
Con Code Repetition
Because of the lack of genericness Elm needs a lot of code to be repeated. There are 130+ implementations of map in elms core libraries.
Con Features get removed without warning
Often features that are deemed to be misused by the community like infix operators get removed without much of a warning.
Con Community harsh if criticised
If one even dares to start a discussion about a feature on elms slack, discord, subreddit or github one will be aggressively shut down often argueing that one should use purescript instead
Con Poor Windows support
Few if any of Elm's core contributors are Windows users and breaking bugs are sometimes left for weeks or months.
Con Good for beginners not good for experts
Development in elm is quite nice until you need some more advanced features. These however are actively discontinued and removed because elm wants to establish a "single way of doing things" philosophy
Con Updates break existing code often
The last few updates of elm broke existing code in major ways.
Con Adds an additional layer of abstraction
Some users claim that Elm adds an additional layer of abstraction, meaning that it is one more hurdle between the brain and the product.
Con Functional programming itself has quite a steep learning curve
Functional programming can be quite difficult to get your head around. It takes time to unlearn object orientational habits.
Con No Genericness in the future
Currently there is no code genericness like typeclasses possible, it has been officially stated that this will never change.
Con Not database-friendly
It is lots of work to make a server or database your "one source of truth", as Elm makes you write endless JSON parse boilerplate to talk to the server.
Con No Syntactic Sugar
Often you need to write longer and less readable code because there are no alternatives that are more concise.
Con Poor mobile performance
Construct 2 is focused on Javascript. Javascript isn't as fast as native code, which results in poor performance on mobile.
Con Free version is severely limited
Although a free version of the engine is available, it lacks features that are essential to creating a high quality product.
Con The editor is Windows only
Although Construct 2 is able to export projects to Windows, OS X and Linux, the program itself currently only runs on Windows.
Con HTML5 is very dependent on browser performance
Theoretically all browsers should run HTML5 pretty much the same way, but thats not always the case.
Something that worked fine on Chrome, for instance, might malfunction on Firefox (or vice versa). And there's nothing the devs of Construct 2 can really do about it, but to hope next Firefox update might fix it. Internet Explorer is not even recommended.
Add to that the fact that exporting to mobile or desktops rely on these sort of stripped down versions of web browsers (Node webkit, Crosswalk, Ejecta) that you pack with your game, and you can have a real headache if you're trying to make your game work properly through multiple platforms.
Con Does not export to native mobile code
Construct 2 builds to HTML 5 only, which can cause performance issues on mobile devices depending on the HTML5 engine that the OS is using since that will be the biggest bottleneck. Even though it's not really the engine's fault, it still is at a disadvantage compared to native game engines.
Con Discontinued as of July 2021, in favor of Construct 3
Construct 2 licenses cannot be bought anymore since July 2020, and support has ended on July 1st 2021 with the release of the final r280 version (see here). Existing customers can still use the game engine, but it will no longer be updated.
Con Clickteam Fusion Clone
This is a copy of the Clickteam softwares
Con Dependency on 3rd parties for all exports
Unless you are creating a game strictly for browser/HTML5 usage, exporting to desktop or mobile is risky, as Scirra have no control over your final export quality. Since desktop uses NodeWebkit and mobile is Crosswalk, Phonegap or CocoonJS there is no guarantee that your final export performance and quality will be up to scratch for pro level 2d games. These 3rd party "browser wrappers" are very prone to breaking and introducing lag and bugs that can't be controlled from Scirra's side.
Con HTML5 Only is extremely limiting
If the software could export natively to mobile devices and PC/Mac/Linux it would be extremely powerful. The developer's choice of sticking to only HTML5 has created a bottleneck for anyone wanting to develop with this software.
Con Tilemap object could be better
C2 requires that there's a tilemap objects for each tilemap layer meaning each tilemap object has to be updated when modifying any layer. This could be simplified by adding layer support for tilemap objects.
Con Buggy
Experience regular crashes and inexplicable project file corruption.
Con Unreliable access to online resources
Unreliable access to online resources such as online tutorials and forums, plus extremely outdated offline manual.