On Friday, 10 May 2024 at 08:43:14 UTC, RazvanN wrote:
> Hello everyone,
Next week I'm going to have a talk on D at an open source conference in Zagrab [1].
This is a great opportunity to advertise D so I'm going to talk about D's strength's. However, the talk is only 30 minutes in length and there's a lot of things I could potentially touch on - templates, dynamic arrays, safety, C interoperability etc. What do you think that I should focus my talk on? Any suggestions or cool D snippets are welcome.
Regards,
RazvanN
[1] https://www.dorscluc.org/
I have some cool features which is quite hard to see in other languages:
module hip.systems.input;
import hip.jni.jni;
import hip.jni.helper.jnicall;
///Setups an Android Package for HipremeEngine
alias HipAndroidInput = javaGetPackage!("com.hipremeengine.app.HipInput");
alias HipAndroidRenderer = javaGetPackage!("com.hipremeengine.app.Hip_GLES30_Renderer");
@JavaFunc!(HipAndroidInput) void onMotionEventActionMove(int pointerId, float x, float y)
{
HipEventQueue.post(0, HipEventQueue.EventType.touchMove, HipEventQueue.Touch(cast(ushort)pointerId, x,y));
}
@JavaFunc!(HipAndroidInput) void onMotionEventActionPointerDown(int pointerId, float x, float y)
{
HipEventQueue.post(0, HipEventQueue.EventType.touchDown, HipEventQueue.Touch(cast(ushort)pointerId, x,y));
}
mixin javaGenerateModuleMethodsForPackage!(HipAndroidInput, hip.systems.input);
This code exposes functions on Java/Android, they iterate the current module, looking for @JavaFunc
(I could have written ExternJava). They will generate based on the java package:
// file com/hipremeengine/app/HipInput.java
public static class HipInput
{
public static native void onMotionEventActionMove(int pointerId, float x, float y);
public static native void onMotionEventActionPointerDown(int pointerId, float x, float y);
}
Not only that, but you can also pretty easily call Java functions from D:
alias HipAndroid = javaGetPackage!("com.hipremeengine.app.HipremeEngine");
int[2] wsize = HipAndroid.javaCall!(int[2], "getWindowSize");
AAssetManager* aaMgr = cast(AAssetManager*)HipAndroid.javaCall!(Object, "getAssetManager");
Beyond that, I have also written code that auto translates to Lua and Objective-C. So D is quite flexible into that.
The main 2 packages I know from dub that does that are:
- arsd.jni
- objc_meta