duangsuse::Echo
aero-example.c
Win32 API 真的是很不友好... 要记很多东西,而且比如那个 dialog 本来应该是属性的东西却被弄成 callback Query 的形式,真是让人有点难记
虽然所有人看着文档都能写出代码而已,我会很希望默写下来看到的每一行代码... 😭
虽然所有人看着文档都能写出代码而已,我会很希望默写下来看到的每一行代码... 😭
Forwarded from dnaugsuz
说起来我之前以为不能在 Kotlin 里面
现在想来居然可以!
null ?: return 的因为 return 是 Nothing,另一个想法就是表达式求值不应该被中断... (这明显是错误的)现在想来居然可以!
Forwarded from Yuuta
原来 GetModuleHandle(0) 的参数是 LPCSTR
Forwarded from Yuuta
我就把 0 理解为 Null 了
Forwarded from Richard Yu
C里面一般是 #define NULL (void*)0 的,C++ 里面 nullptr 转换为指针的时候也是 0。
Forwarded from dnaugsuz
... 真的不该这么写的,以后千万千万不要把
LLVM Cookbook 这本书里,把所有
书中有一个大概类似这样的子程序:
(
nullptr 、(char*) *{'\0'}; 之类的东西写成 0 了,很多人以为代码短一点很秀,其实反而会导致很大混淆,这是不正确的LLVM Cookbook 这本书里,把所有
* 指针类型的空指针值全写成了 0,我眼睛都要看瞎了书中有一个大概类似这样的子程序:
(
ConstLiteral::Codegen override 了超类 BaseAst 的 virtual Value *Codegen();)Value *ConstLiteral::Codegen() override {
switch (type) {
case vaConstInt: return ConstantInt::get(Type::getInt32Ty(vCtx), (int) value);
default: return 0;
}
}
有的时候父语法树节点依赖子节点的值,然后要 null safe,他是这么判断的(比如 for i=0, 10 循环节点):if (initval.Codegen() == 0) return 0;其实要这么写(也很辣鸡莫名其妙)我都能接受,但他偏偏写了这么多
0...if (initval.Codegen() /*!=0*/) {...}
我的天啊,简直看瞎了,当时我就觉得他们都是些只会抄代码的货,虽然后面的确是有干货,为什么编程风格这么差Forwarded from dnaugsuz
所以以后觉得
这么混淆的确是有点误人子弟,别人看第一眼还以为是
"" 难看就弄一个 EMPTY_CHARP (当然 Windows 里显然要叫 EMPTY_LPCHAR...) 常量算了这么混淆的确是有点误人子弟,别人看第一眼还以为是
GetModuleHandle 函数处理了特别的值,其实只是 "" 而已Forwarded from yunfeng
隔壁 java 留下了眼泪(
Forwarded from dnaugsuz
Jawa 也有一些可以“跨运行时平台”的实现,比如 JSweet transpiler
JVM 本身对 C, C++ 等所谓 Native 语言的编译器也有实现的,至少人家还支持 JNI 扩展底层访问性呢 [比如说这个]
曾经的 GCJ (GNU Compiler for Java) 也是支持 Java -> native code 的
现在 GraalVM 、之前 ExcelsiorJET 不也在吹 AOT 编译的说
JVM 本身对 C, C++ 等所谓 Native 语言的编译器也有实现的,至少人家还支持 JNI 扩展底层访问性呢 [比如说这个]
曾经的 GCJ (GNU Compiler for Java) 也是支持 Java -> native code 的
现在 GraalVM 、之前 ExcelsiorJET 不也在吹 AOT 编译的说
JSweet
JSweet: a transpiler to write JavaScript programs in Java
JSweet is an open transpiler from Java to TypeScript/JavaScript with more than 1000 well-typed JavaScript libraries.
Forwarded from Yuuta
不懂那么深奥的,反正 J AV A 给我的感觉就是有大又笨又老(x
Forwarded from dnaugsuz
Java 是很老,但也是 Kotlin 它干爹啊 🌝
Forwarded from Yuuta
不能完全算吧?从某种意义上说 Kotlin 是 “兼容” Java(x
Forwarded from dnaugsuz
C 自己也有不好的地方,比如 Null safety
你得自己写代码处理输入 ptr 可能为空但不应该为空的情况,而 Kotlin 是自动处理
如果你是比较优秀的程序员,肯定会用子程序对 raw FFI 进行高层封装(比如,一个
这一点 ice1000 的博文《形式验证、依赖类型与动态类型》讲得很好
你得自己写代码处理输入 ptr 可能为空但不应该为空的情况,而 Kotlin 是自动处理
如果你是比较优秀的程序员,肯定会用子程序对 raw FFI 进行高层封装(比如,一个
Optional<T> 会被你弄成 @Throws(XXXNotFound::class) 的形式),这样就避免了每次检查 null safety 的问题,Kotlin 只是做了对的事情,检查了 null 指针的可能性,把运行期的错误提升到了编译期,虽然 Kotlin 它不 Check Exceptions... 也有自己的道理,但完全不 sound (没 error 也没 warn)的编译检查还是....这一点 ice1000 的博文《形式验证、依赖类型与动态类型》讲得很好
Forwarded from dnaugsuz
是啊,几乎是能完全兼容 Java,至少排除元编程的情况下是完全双向兼容
但是 Java 依然还是可以用的,这点不可否认,不过我要说的是,即使是被所有人批判的 Java,也不是被人完全理解的,Java 自己看起来很简单,就算排除掉 JVM,某些细节很多资深工程师也都是说不上来,比方说所有类型表达式的求值顺序、所有语法结构、Annotation Processor 加入后的编译流程
毕竟『精通』和『创造』还是有区别的,一个是使用,一个是实现,实现意味着你得什么都知道,使用是你用什么学什么。
当然如果工程师实现过符合标准的 Java 编译器算我没说
但是 Java 依然还是可以用的,这点不可否认,不过我要说的是,即使是被所有人批判的 Java,也不是被人完全理解的,Java 自己看起来很简单,就算排除掉 JVM,某些细节很多资深工程师也都是说不上来,比方说所有类型表达式的求值顺序、所有语法结构、Annotation Processor 加入后的编译流程
毕竟『精通』和『创造』还是有区别的,一个是使用,一个是实现,实现意味着你得什么都知道,使用是你用什么学什么。
当然如果工程师实现过符合标准的 Java 编译器算我没说
Forwarded from dnaugsuz
🤔 说起来我这么开放地发了那么多字含代码的内容,会不会本群不欢迎贴代码呢?
这么久也没被踢,感觉很不对劲(跑
这么久也没被踢,感觉很不对劲(跑
dnaugsuz
🤔 说起来我这么开放地发了那么多字含代码的内容,会不会本群不欢迎贴代码呢? 这么久也没被踢,感觉很不对劲(跑
This media is not supported in your browser
VIEW IN TELEGRAM