The following is a list of auto-antonyms, words which have two or more definitions where each is the opposite of the other, yet thanks to the beauty of language these words are rarely confusing to most of us:
“Appropriate” can mean “to give (money or assets) to” or “to delegate to,” as well as “to take something (for one’s own use).”
"Bound" can mean "tied into immobility" or "leaping, jumping.”
"Cite" can mean "to recognize a good deed or performance" (cite for bravery) or "to require a court appearance" (often not a good thing, such as citing for DUI).
"Chuffed" can mean "pleased" or "displeased".
"Cleave" can mean "to cling" or "to split apart".
"Clip" can mean "attach" or "cut off"."
"Conclude" can mean "to start" (a contract) or "to end".
"Demiurge" can refer either to God as the creator or to the devil, depending on philosophical context.
"Drop" can mean to delete or eliminate (e.g., to drop a song from a playlist), but it is also slang for releasing an artistic creation into the world (e.g., to drop a new song on a music streaming service). So, the sentence "Her latest song was dropped" has two opposing meanings.
"Down" can mean unhappy ("I'm feeling down") or happy ("I'm down with that").
"Downhill" can mean things are getting worse, or getting easier.
"Draw" the curtains can mean either to open them or to close them.
"Dust" can mean to remove dust (cleaning a house) or to add dust (e.g. to dust a cake with powdered sugar).
"Egregious" can mean "outstandingly bad". Was originally used to mean
"remarkably good". The word's roots mean simply "standing out from the rest of the group", a concept that can apply either "in a good way" or "in a bad way".
"Execute" can mean either "to begin" (a plan or an action), or "to terminate" (a person).
"Factoid" can refer either to a genuinely true but insignificant statement, or (less often) to a false statement presented as true.
"Fast" as an adjective or adverb can mean "without moving; fixed in place", as in "holding fast" (also as in "steadfast"), or it can mean "moving quickly".
"Hew" can mean "to chop" or (in North America) "to adhere".
"Impregnable" can mean "invulnerable" and also vulnerable (to impregnation).
"Inflammable" technically means "capable of burning" ("in-" functioning as an intensifier) but is commonly misunderstood to mean "unburnable".
"Let" can mean "allow" or "prevent" (A British Passport contains a request that the bearer be allowed to "pass without let or hindrance".)
"Left" can mean "remain" or "leave" ("He left the room" or "He was the last one left in the room")
"Limit" can be inclusive or exclusive. For example, a request to "limit the damage to the clock tower" can mean to protect the clock tower from damage or to protect everything else but the clock tower from damage.
"Nonplussed" can mean "baffled" or "perplexed", but in North America can also be taken mean "not disconcerted" or "unperturbed" (a disputed usage)
"Off" can mean "activated" / "beginning to make a noise" (e.g. "The alarm went off") or "deactivated" / "ceasing operation" (e.g. "The alarm turned off by itself").
"Overlook" can mean to miss seeing something, or a place to see something from above. "Oversight" can mean "accidental omission or error", or "close scrutiny and control".
"Peruse" can mean either to read or go over attentively or read in a casual or cursory manner (e.g. peruse the collection).
"Ravel" can mean either to separate (e.g. threads in cloth) or entangle.
"Refrain" can mean either non-action or the repetition of an action (e.g. in musical notation).
"Restive" can mean "having difficulty staying still" ("restless") or "reluctant to move", though the latter is not a widely accepted meaning.
"Sanction" can mean "approve" or "penalize".
"Scan" can mean "scrutinize" or "skim".
"Strike" can mean to act decisively, or to refuse to act. Also, it can mean to hit, or to miss (as in baseball). In addition, it can mean to create ("strike a deal") or eliminate ("strike that line from the record").
"Table" can mean to discuss a topic at a meeting, or to postpone discussion of a topic.
"Weather" can mean withstand something (i.e. to weather the storm) but also to wear down or age.
Has anyone done a visualization of how the different spheres of #language overlap on the #fediverse? I seem to remember one attempt but would love to see how that has been evolving.
Unless the #programming#language#compiler recognizes declarative predicates and flattens them into if-then-else structures (which turn into if-goto assembler), this could lead to a huge stack full of procedures that are just idling about, waiting for a nested procedure to get released.
It's the exact opposite of #guardClauses which short-circuit execution by failing fast, and return to their caller quickly, freeing that stack frame instantly.
Overriding a central enum to add locally required values.
Use case: an HTTP client's mime types. The client has a preset enum for mime types. My application needs a different mime type. Java won't let me add my own because enums become final static singletons.
One could argue using an enum here was a bad choice. Extensibility should have been expected.
I argue that the bad choice was making enums final.
And in my one application I can create a new Communication instance adding all the info from the old one. switching in the new response code. But in the other. #java won't let me do that. Because there. creating a new Communication requires a SignedRequest. but the old Communication exposes an IRequest. An up-cast would solve this. But the #programming#language won't allow that.
Instead we get to ask ICommunication to perform the switch of the response code - 1/2
But the difficulty is not caused by that algorithm, nor by the requirement to use it.
It is completely caused by the #java#programming#language itself. By the way its designers have implemented the OOP paradigm, and are limiting the expressiveness of our software.
Let me explain.
Interface ICommunication is implemented by classes Communication, InternalError, and InternalWarning. It references fields IRequest and IResponse. IResponse.code is the field I need to override.
All I needed was to override an HTTP response code. In the one app this was easy. In the other it wasn't. The other application requires a specific implementation of the HTTP request class. One that signs requests with a pre-OAuth algorithm we are required to use by our trading partner.
Luckily they are switching to OAuth2, making this part easier.
The reason is the same for #rustlang as for why the #java#programming#language forces us to duplicate interface implementations across applicable classes: a trait can't access an instance field. It only has access to trait functions. To use an instance field in a trait, its struct must implement a function that returns that field's value.
The #Rust#programming#language does not allow us to put a #trait on multiple #structs at the same time. It forces us to repeat the implementation for each applicable struct,
The #Rust#programming#language does not allow us to put a #trait on multiple #structs at the same time. It forces us to repeat the implementation for each applicable struct,
Ad 2) Boilerplate (repetitive, duplicate, error-prone) code caused by implementing #traits in #rustlang.
The #Rust#programming#language lets us implement a trait on any local struct. Naively I hoped to use traits as a way to avoid code duplication, since duplicated code leads to technical debt. That's how I use interfaces and abstract implementations in object-oriented languages like #java and #php.
I've been learning #rustlang, the #Rust#programming#language, by implementing domain objects and information flows I need at work, and already have implemented in #java.
There's 2 things that bother me about Rust at the moment. And this may be caused by my own expectations concerning object-oriented inheritance. And it's possible they'll resolve once I learn to let go of that.
1. Creating Errors to return in a Result; 2. Boilerplate code due to implementing traits.
I find #JPA too broad: most of my apps just need to read. Writing back to the data store happens rarely. When it does, I use #storedProcedures. I don't need a JPA cache: my apps read into local memory objects, execute, and stop.
Many parts of a #POJO#Bean can be auto-generated by #projectLombok, which greatly reduces the amount of logic I have to implement.
But in a suite of applications, the start of each pretty much performs the exact same operations in the exact same way, with little room to remove code duplication.