3 ms·
Is there any way you could explain that again? I don't quite get what you are doing.
by retbull 10y ago
Is there any way you could explain that again? I don't quite get what you are doing.
- shoo 10y agothe user can optionally specify which version of behaviour they want. This is named the `opt_compat` value in the code. All through the code there are checks against the `opt_compat` value to decide which version of which old/current behaviour to use.
- kazinator 10y agoAnd the opt_compat has C integer/boolean semantics in this case, so the test if (opt_compat) ... tests whether the option has a nonzero value (has been specified). And so if (opt_compat && opt_compat <= 130) means "user has requested compatibility, with a value of 130 or less". By the way -C 0, which would look as a Booealn false, as if -C were not specified, is not allowed. If the user specifies -C N such that N is lower than the oldest version that we emulate, the implementation terminates with an error message like "sorry, compatibility with versions less than 70 is not supported by version 140".
- mschuster91 10y agoIt's similar to the stuff you see in a raw "mysqldump" output, PHP extensions or in Microsoft's C stdlib headers. Shitloads of stuff hidden between #ifdef VER > xxx. Pretty easy to deal with, tbh. And it's flexible as hell. You can flame MS for a LOT of things, but not for ignoring backwards compatibility. You can take most age-old VC6 projects, import them in a modern VS version, and BUILD them and it will WORK. Not so much in the Linux space. A statically compiled binary from Win95 may very well run on a Win7 machine (e.g. EarthSiege 2)... good luck trying to get a Linux binary from the same era running on a similarly fresh Linux kernel.
- kazinator 10y agoWithout knowing which part you don't get, there is a risk I just repeat everything in a scrambled order! The highlights are: We have software (a programming language and its library) that is versioned in a simple, linear way: it goes from version N, to N+1, to N+2 and so on. Users who are using version K now depend on some features. Suppose the behavior in version K+1 changes some of the features. The users will be rightfully unhappy; they upgrade to K+1 and things work differently, breaking their code. To anticipate this, we can have a command line switch or environment variable whereby users can request "please emulate version K". Then version K+1 (and K+2, K+3 ...) will restore those behaviors which were altered starting in K+1. This does not disable purely new features that don't break existing behaviors. For instance, if a two-argument function can now take an optional third argument, such that a two-argument call behaves exactly the same way as before, that won't be subject to emulation. A whole new function that didn't exist in version K is not going to disappear under K emulation. This isn't a perfect strategy. Things can go wrong. But it's fairly decent.