Probably, but it depends on a lot of factors. While most reversing tools wouldn’t be made to fully reverse multiple languages, still most languages that compile to native code can map back to pretty sensible “low level C” in a disassembler, so while it would make it very hard to get back the original source code as an actual obfuscation method it might not help that much. Of course different languages likely look different in the patterns in the assembly they generate so it might need some familiarization. But I would guess it isn’t that bad and only slightly harder than for example decompiling a program written purely in C++.
Though there is one thing I didn’t mention yet, which is languages with a lot of runtime or bytecode, as those will likely bloat the executable up a lot so if you mixed like C++ and a more managed language that combination likely would look a bigger mess when decompiling. However, there is a big pitfall: as different languages need to communicate with each other, they often need to rely on C bindings, meaning that the bindings interface would be very easy to dig out and inspect. Meaning that if there’s a constant communication between the two sides of the program, that might reveal a ton of information.
So overall I would think it is a slight increase in difficulty mainly due to needing special tooling that would help in decompiling different parts in different ways. But I would not consider this kind of approach to be worth it at all just for wanting to increase decompiling difficulty.
I don’t understand the point of getters and setters. We have a private variable “name” and public variable “Name” which has a property that allows it to get and set the value of “name“ as if it was public too. If that so, why not have just one public variable?
Because getters and setters are actual methods and can implement custom handling when required. If it is foreseeable that something might need more complex handling than before it is good to make things properties proactively.
I’ve written a ton of properties today, mainly because they needed to be wrappers around an internally held database object.
For example:
public string ComfySettingsRemoteUserName
{
get => comfySettings?.RemoteUserName ?? string.Empty;
set
{
if (comfySettings == null || comfySettings.RemoteUserName == value)
return;
comfySettings.RemoteUserName = value;
UnsavedRunnerSettings = true;
OnPropertyChanged();
OnPropertyChanged(nameof(ComfySettingsError));
}
}
public string ComfySettingsRemotePassword
{
get => comfySettings?.RemotePassword ?? string.Empty;
set
{
if (comfySettings == null || comfySettings.RemotePassword == value)
return;
comfySettings.RemotePassword = value;
UnsavedRunnerSettings = true;
OnPropertyChanged();
OnPropertyChanged(nameof(ComfySettingsError));
}
}
Try to write that without losing your sanity without getters and setters, and you will just have to give up.
They protect all other code from needing to know the internal details of how to accomplish modifying that value on an object.
To answer your question: in many languages it is a total nightmare to swap from direct variable usage to getter usage, so if there’s any doubt that you might want to have a more complex getter in the future, you have to basically write it upfront, even if it seems pointless at that time.
License question: Do all Java projects initially come with the Apache license? Or is it possible to give them other types of licenses such as MIT? How does this all work?
What do you mean by “Java projects”? If you mean just projects that are written in the Java programming language, then that is not true. Like all programming projects, Java projects also have the license that the author picks for them.
That’s crazy that some tool would have such a limitation. Paint brushes don’t have text on them saying that you cannot paint a specific genre of painting with them. That would be as crazy if a programming tool said you must license your code with a specific license.
Of course there’s the caveat that some professional tools have free versions for open source projects (for example some JetBrains tools but they’ve made more of their IDEs available for free users without the stipulation for only being for open source work recently).
Hello, I’m an amateur coder and I’m trying to tinker with the files but godot is giving me belgium. What am I doing wrong? Is this a git issue or is this an issue with my files?
You are probably using the plain version of Godot. We require the Mono version (or .NET version as I think it might be called now) that adds C# support. Without that all of the game code (that is C#, .cs files) will fail to work.