WebAssembly 现在越来越流行了 以后Cocos 会不会支持c#?

不一定是c#,我觉得可以把cocos native引擎就是C++底层的那部分编译出wasm

方向是这样的

1赞

运算符重载解决了什么问题? 结构体解决了什么问题?

运算符重载和结构体是两个不同的概念,它们解决了不同的问题。让我们分别讨论它们:

  1. 运算符重载:

    运算符重载允许你自定义类或结构的实例与内置运算符之间的行为。这有助于改进代码的可读性和可维护性,以及在特定上下文中为自定义类型定义合理的行为。运算符重载可用于:

    • 提供更自然的语法:例如,你可以重载加法运算符(+),使得两个自定义对象之间的相加操作更直观。

    • 定制复杂数据类型的行为:你可以为自定义类型定义运算符,以使其在特定情况下按照你的期望方式工作。

    • 简化代码:运算符重载可以使代码更简洁,因为你可以使用标准运算符来执行自定义操作。

    举例来说,如果你有一个复数类,你可以通过运算符重载来定义复数的加法、减法、乘法和除法操作,使其更容易理解和使用。

  2. 结构体:

    结构体是一种值类型,用于组织和存储相关数据。它们通常用于解决以下问题:

    • 轻量级对象:结构体是值类型,通常比类(引用类型)更轻量级。它们适用于存储较小的数据,而不需要额外的引用开销。

    • 值语义:结构体在传递和赋值时具有值语义,这意味着它们被复制,而不是共享。这可以防止副作用和不必要的状态修改。

    • 高性能:由于结构体存储在栈上,因此它们通常比类具有更高的访问速度。这使它们适用于需要高性能的场景。

    • 不可变性:你可以创建不可变的结构体,这些结构体的值在创建后不能更改,这有助于编写可靠的并发代码。

    举例来说,你可以使用结构体来表示二维坐标点、日期时间、复杂数据结构等,以便在代码中更有效地管理和传递数据。

总之,运算符重载和结构体是C#中的两个不同的概念,它们解决了不同的问题。运算符重载用于自定义运算符行为,而结构体用于组织和存储数据以实现值语义和性能优化。你可以根据具体的需求来选择使用它们。

3赞

c++/c#也都有再用,运算符重载脚本可以模拟,结构体嘛 iinterface可以代替,这些并不是什么很大的优势,我好奇在游戏开发中哪些地方是那么需要这些特性支持的,桌子板凳准备好听课了

运算重载可以模拟?你会不是想函数add代替+,sub代表- 这种方法吧?
一条运算式 a+b * c-d/a - e , 你替换函数要写多长??你用过js定点数库和c#的定点数库不?用过差距明显。
另外你知道在C#的Directory 和 C++的Map ,[] 方法用key取值是可以重载的,有甚麽好处?我就问你在js中如果有一个{x:0,y:0}这様的坐标对像, 你怎様做map的key?转字符还是用es6 Map的地址比较?但如果在c#或c++我可以重载以x和y来判断。性能上转字符串费性能费内存, 地址比较不实用
另外结构体用interface来代替?你懂struct是特点不?struct在栈上建立,是值类型不是引用类型,无gc的,你不会为以js里let a = {key1:1,key2:2}; 是个结构体不会产生gc吧??

1赞

我个人觉得运算符重载不是非必要的东西, 反而结构体是值类型的,占用内存少,寻址快吧?

个人认为觉得运算符重载是非必要的前端程序,多数做的项目都是等服务端给运算结果付个值就行。
只要是做过重前端运算处理项目的人都不会説出这句。

开始扯皮了,吃瓜

是的,但凡写过运算逻辑多的,都不会觉得运算符重载没必要,写一堆3d向量的运算,难道不会觉得调函数来算很恶心?或者是没有用运算符重载的功能写过这些逻辑,所以就没有对比

2赞

实际上就是目前这两点,导致了 Vec3 使用和计算的繁琐(需要各种clone和类型转换)。不过语言层面的问题没法解决,只能将就用了。

1赞

ECS:啊?

脚本有脚本的方便 例如json序列化这块 编程语言是弱势 重载运算符也不是不可以用函数替代 eq 和 == 肯定是eq直观点 另外你说的堆和栈无非就是global和local区别 出了作用域都会释放掉 除非new出来的 js也可以做到的
脚本语言的key访问需要查询 但能动态 这是struct做不到的 所以反序列化这块确实方便

5920a70d1179da25ad83cf2ef2a7b0c6
…为什么不用Rust!
Rust也很好!

个人愚见:
CCC性能的关键其实一直不是TS/JS效率不够
再不够能有屁眼子差?(pyhton)
网易还在用屁眼子做脚本呢!你看他们怕了吗?
那么快干啥?投胎啊!?
就不能把吃性能的代码和不吃性能但是吃开发效率的代码,分分?

所以更重要的,是和C++的交换
换种方式说,是高性能任务需求能够怎么方便快捷且尽可能减少损失的交付结果给脚本方
这层Cocos这边就是C++,网易那边NeoX,还是弥撒亚也是C++。

一个语言梭哈全部确实好,但是如果你用一个不方便的语言梭哈,那真的吃大粪,UE就是这样的,虽然也能用LUA这些,但是你如果不用,“U++”是真的体验不好。写这个我不如写2DX

你看看鸿蒙os,arkTs做开发语言,复杂的上C++
像不像?我是说像不像一个椰子游戏引擎?
做好这一层,就够了,虽然目前这一层COCOS也没做好,但是你别忘了, Unity h5当年走得慢,被Cocos狙击,也是因为这块卡了好几年,这几年Wasm给力了,小游戏支持了,才开始有胆子的。
搁以前,谁用啊?
你用吗?我不用。

ps:虽然c#好用,大家也都是"公认"的,那也要看和谁比,和C++一流比,那肯定好用
但是就这样子想和我大TS碰瓷,不好意思了,“孩子永远是后面的可爱” :rofl:

附带一张速度图:

https://github.com/theolivenbaum/h5

类似这样的呢,c#编译到js

WebAssembly 流行 和 支持C# 什么关系?

Rust是一个好语言,无gc设计解决很多痛点,但过严紧的编译器机制, 对于程序员的要求太高, 开发速度会受很大影响,估计语言后面如果不放寛, 感觉很难受大众喜欢, 或者公司会采用这技术方案, 如果走Rust+脚本形式开发项目, 那很多人还是会走回C++&脚本或 C#&脚本的方案

我并没有否定js的优势,脚本语言这是未来趋势, 但不代表语言不用进歩, 一个好的语言已攻占简单领后就应该向深度领域发展,操作重载符只是基本, 你説的eq 更直观十分片面也证明你用ts写的都是简单处理项目, 还是那句, 特殊的一条加减乘除公式处理, 你用符号直观还是add, sub 这种一层嵌套一直观?如果嵌套无所谓干麻要有promise 去解决回调地狱。
另外你説的栈和堆就是global和local, 这是有多肤浅的説法? 你看过v8的js 垃圾回收原理不?标记删除法不用耗cpu资源?任何一款有自动gc的语言都一直在讨论如何有效减少gc,有那个会讨论如何减少栈回收?

用TypeScript没问题,是否有办法在发App的性能更高一些,开发H5体验不变的情况下利用: TypeScript2Cxx (随便搜索的) 把一些耗性能的TS模块直接C++然后再编译打包。(像il2cpp那种玩法)

虽然都说C#好用,但是如果不是unity把他作为主要语言,真看不到他在其他领域有什么大的作为,web前端有用吗?没用,后端有用吗?很少,开发桌面应用有用吗?很少,开发移动APP有用吗?基本没有。或许unity用它的原因之一是他们公司和微软的关系不错~