3 ms·
I know what you're talking about, but honestly none of your items enter into my top tiers of porting pains. They tend to generate nice little compiler errors (
by MaulingMonkey 12y ago
I know what you're talking about, but honestly none of your items enter into my top tiers of porting pains. They tend to generate nice little compiler errors (and warnings you can upgrade to errors), and the refactoring tends to be a straightforward 1:1 replacement affair. Noticing the "lock free" code is just plain broken and testing the fixes tends to eat more time than the actual porting.
The "abstractions" written by those who don't have multiplatform experience (aka the ones writing platform specific code in the first place) tend to have broken designs that require refactoring even if they do exist. Very little difference in work between fixing a broken abstraction and implementing a missing abstraction for those items, IMO.
Unabstracted or poorly abstracted rendering, input, user management, matchmaking, leaderboards, achievements, save systems, async I/O, and platform specific serialization (image loaders, varying-size bytewise copied structs)... all without unit tests or an assertion between them... I find all much worse! You get to refactor, redesign, and retest all at the same time, leaving behind a trail of breadcrumbs: backwards compatability hacks and compromises...
(Also fun: When you discover existing abstractions were discarded instead of cleaned up, in favor of new abstractions, and you get to re-fix all the re-introduced TCR violations and corner cases.)