« October 2021 | Main | December 2021 »

November 16, 2021

C �з��� Lua ���ñ����Ż�

������д����ʱ�õ�֮ǰд��һ���� Lua ���ñ��� cache ģ�� ���о����������Dz�����෽�㡣�ҽ��춯�����������һ�¡�

�����������ģ�

��Ŀ�зdz����������Ϣ������ Lua �� ����״�㼶�ģ�table �У��󲿷��߼�����ֱ���� Lua ���﷨���ֱ�ӷ��ʡ����ǣ�������������Ҫ���ҵ������ C ��ʵ�ֵģ�C function ��Ҳ��Ҫ��ȡ��Щ����� Lua �е��������ݡ�

������������Ŀ����������dz�Ƶ������������һ��С���ԣ���������ñ����ô������ɵķ�ʽ�ѱ����ɶ�Ӧ�� C/C++ �ṹ������ C side ���� Lua �е������ؽ�һ�� C ����Ҳδ�����ɡ������ google protobuf �ٷ����õķ�ʽ���ô������ɵķ�ʽ���������ݵ� schema ������ C++ �࣬�� C++ ���Է��������Щ���ݣ���

���Ҳ�������ô���ӣ��˷ѣ������󲿷�ҵ��ѭ�������ܶ࣬����Ҫ��ȡ�����ñ���ȴ�Ƚϵ�һ������ȡ��ͬ����Ŀ�������ԣ���Ȼ��һ��ͨ���ַ��� key �𼶽��� Lua ���ñ�������Ϊ��Ч����ֻҪ�� C side ��һ�� cache ģ�黺���¸�Ƶ���ʵ�������Ӧ�þ��ܽ������ƿ����

�Ҳ�����һ���̶���С���ڴ���� hash cache ��key ʹ�ñ���ʱ������ 32bit int ���ú궨�������

���磬�������� name ��һ��Ͷ���һ����

PROTOTYPE(name, string)

����ʾ����һ�����ñ����� "name" ������������ string ��������չ��Ϊһ�� C ����

const char * get_name(struct cache *c, const char &key);

������ʵ��Ҳ���ɺ�չ���ģ�ʵ���ڲ���� name ����һ��Ψһ�� id ��

ps. һ��ʼ���� __LINE__ �����ƴ�ӳ�һ��Ψһ id ��ֻҪ�궨�岻��ͬһ�оͲ����г�ͻ���������֣����ڼ������еı�������֧���� __COUNTER__ ����꣬��������������� id ��

��Ҫ�����ֵ���������ͣ�int float bool �� string ��ǰ�������Ͷ��� 32bit �ģ����ַ����� 64 λƽ̨����һ�� 64bit ָ�� const char * ��string ���ͷdz��ټ����� C �����м���������ʵ���������Ҽ򵥵���һ�� union �������ϸ��������ͻ�Ƚ��˷ѡ���Ϊ������ÿ�� hash slot ����Ҫ 4 (key) + 8 (value) �ֽڡ����ǵ��� cpu cache �ѺõĻ����һ�� key value ���������һ�������� 64bit ƽ̨�ϣ��ٿ��Ƕ������⣬ÿ�� slot ������Ҫ 16 �ֽ� ��

����һ��˼�����ҷ�����ֻ��Ҫ�������� string ���ʹ�������������� slot �У�ÿ�� slot ���һ��Ϳ����ˡ�������ÿ�� slot ��ֻ��Ҫ 4 + 4 �ֽڼ��ɡ�

��� cache �������㷨�������ģ�

  1. ͨ�� get_xxx �� C API ���� cache ��������Ϊ xxx ������һ��Ψһ 32bit id �� key ���Դ� key ��ѯ cache ��������У�ֱ��ȡ�� value �����������Ϣ�DZ����������ģ����Կ��Դ� value �� union ��ȡ����ȷ�����͡�

  2. ��� cache miss ����ͨ����������¼�� key string ȥ Lua side ��ѯ����� value ��������̻����Գ���ʱ���ǿ��Խ��ܵġ������ Lua side �Ҳ�����Ӧ����׳� error ��Ӱ�� C cache ���ҵ��Ļ����͸��¶�Ӧ�� C cache ��Ŀ��

  3. ����Ӧ����Ŀ���ַ���ʱ�������ھ����������� hash ʱԪ����ż����ŵ� slot �ϣ���Ϊ�ô����������� slot �����Ÿ���Ŀ����Ҫ�˶����� slot ��Ӧ�� key �����¶�Ӧ�� value �����ؽ����Ҫ������ slot �ϵ� value ֵ�ϲ�Ϊһ�� const char * ���ء�


��ʹ��ʱ����Ҫ�� C side �����õ������ñ���� key ȫ��������һ�� .h �ļ��У����������ͳһ���� id ��key �����ǵ�ָ���ַ�������Ӧ Lua �е���״�༶����

�� C �в��ṩһ�ζ�ȡһ�������ñ��� api ��

�� C �в��ܵ������ñ���

November 12, 2021

ECS ��ͬ��������ݵĴ���

��֮ǰ���� ECS ģ���µĴ���ģʽ �����ԣ�ECS ģʽ�����Ѵ�������ͬ�� Component ֮�����໥��ϵ�������

��� ECS �������������໥�����ģ�ÿ�����ݵ�Ԫ�������������ݵ�Ԫ������ϵ�����������ݵ�Ԫ���й��е���ϵʱ�������԰����ǿ�����ͬһ��ʵ�壨Entity���µIJ�ͬ�����Component��ʱ����ô�Ϳ��Խ��� Entity �ĸ������������ǡ��������ɿ��԰��̶��Ĵ���ȥ������Щ���ݡ�

���ǣ��ڸ���ϵͳ�У��޿ɱ���ģ�ͬ�������໥֮��Ҳ���Բ�����ϵ�����磺���������У��ڵ�֮���и��ӹ�ϵ������ڵ�Ŀռ�״̬�Ĺ��̶����ݵı���������Ҫ���Ҽ�����̻���Ҫ���ʸ��ڵ��״̬��������������� ECS ��ܵ�һ����ս��

�������һ��� ECS ʵ���г��Թ����ַ�����

����ķ����ǡ�ʹ��һ������� Component�����Լ�������һ�� Entity������ɾ�������ᱻ���á������ṩ id ������ Entity �� id ����������

��������ĺô��ǣ�ʵ�����õĶ������гɱ����ߣ��ӿڼ򵥣��ʺ��� C ������ֱ��ʹ�ã�Lua ����΢��չһ�� select ���﷨Ҳ���Է�����ơ�

��ȱ��Ҳ�����ԣ����������ɱ��ܸߣ���Ҫ�ܶ����Ĵ�����������֤��ȷ�ԡ������������� C �����в����κι��������� raw ָ�롣

�����ҳ�����һ����������ֻ�ʺ��� Lua �ӿ���ʹ�á�����ʹ��һ�� lua table ��Ϊ Entity �е����ö����ɵײ��ܸ������ͬ������״̬������ʱ�̿����������ײ����е�ij�� Entity ������ʵ�ֳ�һ�������ã��� Entity ��ɾ��ʱ�������û��֪�����ڽ�����ʱ�������

���������Ϊͨ�ã�����ֻ�ʺ��� Lua ��ʹ�ã�Ҳ��һ�������гɱ���


����ҳ����˵����ַ�����

�Ҳ���������ͬһ�����ݵķ�ʽ���ò�ͬ��ģ�鹲��ͬһ�����ݡ����ǰ���Ҫ�����Ĺ������ݶ�������һ������������ ECS ���֮�⡣�� ECS �����Ҳ��һ�����������������о���ͬһ�� id ����������ѯ��

��ʵ����˵�������������һ���������ǹ�������Ϸ��������һ��Һ��ܵ�ϵͳ����Ҫģ��Һ���ڹܵ�����������̡�ˮ���ķ�������Ϸ�����ڼ䲻�ǹ̶��ģ�������ÿ��ˮ�ܵ�ˮѹ��Һ��Ķ����Ⱦ�����������㷨�ο������ǹ�������ƪ������־ ��

�㷨��Ҫ�����е�ˮ�ܷ���һ����������������ˮ�������������δ���ˮ�ܣ������ܽ�ÿ��ˮ�ܶ�����������ܺ����⣬��Ϊˮ���������ޣ�����Ҫ��ˮ�����������󣬲��ܷ����ε�ˮ���롣���Ѵ�������ˮ�ܵķֲ棬���ˮ����Ӽ���Դͷ���룬����Ҫ�������������ڣ������ۺϿ������е��ڽ�״̬��ͳһ���������䡣�����Ų������ڹ��������йܵ�����ƽ�ȵģ���ʵ��ȴ��һЩ�ܵ�����һЩ��ƽ�ȡ�

�Ұ������ܵ�����ʵ�ֳ�һ�����壬���� ECS ���֮�⡣��ÿ��ˮ�ܶ���һ��Ψһ id ��ʶ��ECS ����ڣ�ˮ��Ҳ��һ����Ӧ��������������ֻ��ˮ���� id ��û��������Ϣ��

�� ECS ��ܿ���ˮ�ܶ��Ƕ����ġ����ԶԵ���ˮ����ˮ�����ġ���ˮ�����������ڹܵ�ģ���д����ġ�����ֻ��Ҫÿ֡��ˮλͬ���������ɡ�

�� ECS ��߿����������£�

  1. ��ˮ�ó�ˮ��������ˮ�Ļ�����ˮ���������Ϣͨ�� id ͬ����ˮ����
  2. ˮ�����������£���
  3. ��������ˮ�ܣ����� id ��ˮ����ȡ����ǰˮλ��ͬ����ˮ�������

���У�ˮ��ÿ֡��һ��������������ĵ������̣�ά����һ���Ź���Ĵ��򡣷������ʱ���������ˮ����ȷ���¡����������ʵ�������һ��ˮ�����������򼸺����ᷢ���仯������������ʹ�����仯��ÿ�εı仯Ҳ�Ǽ�С�ģ�����ġ�����㷨��һ���ĸ����ԣ����Ͳ��ʺ��� ECS �����ʵ�֡�����Ϊ ECS ����£�ֻ�а��̶�����������������Ч�ģ����ṩ����������ݵ�������

���Dz���Ҫ�־�ά��һ�� id ӳ�����������ϵͳ�������ͬ����

������Ϊ��һ�����������step 1 �У�ˮ�ú���ˮ���������ܴ����Ź����ˮ����Ԫ�����ˡ����ԣ����Խ������� O(1) �ĸ��Ӷȡ�

���� step 3 �У���Ϊ ECS ��߱����������Ǻ㶨�ģ�������Ĺ����������ԣ���ˮ�����ģ����˵��������ͬ���ij�����ѯ��Щ id ������������㹻���Ż������β�ѯ�������� O(1) �ijɱ���