Slide 1

Slide 1 text

!USZ4XJGU5PLZP.BSDIOE 5IF'VUVSFPG$*OUFSPQFSBCJMJUZ *OTJHIUTGSPN1PSUJOHB(BNFUP4XJGU ήʔϜͷ4XJGUҠ২͔Βݟ͑ͨ$JOUFSPQFSBCJMJUZͷల๬ "LJNV)JSBJ -:$PSQPSBUJPO @himeshi_tech

Slide 2

Slide 2 text

4JNVUSBOT 2

Slide 3

Slide 3 text

3 Segmentation fault

Slide 4

Slide 4 text

4JNVUSBOT$PEFCBTF ↟ZFBSTPME ↟,MJOFTPGDPEF ↟.PTUMZXSJUUFOJO$ ↟/PTNBSUQPJOUFS /PPQUJPOBM j 4

Slide 5

Slide 5 text

5 // Updates the way speed limit of the tile of the given position void update_speed_limit(coord3d pos, uint16_t speed) { tile_t* tile = world()->get_tile(pos); way_t* way = tile->get_way(); way->set_speed_limit(speed); }

Slide 6

Slide 6 text

6 // Updates the way speed limit of the tile of the given position void update_speed_limit(coord3d pos, uint16_t speed) { tile_t* tile = world()->get_tile(pos); way_t* way = tile->get_way(); way->set_speed_limit(speed); }

Slide 7

Slide 7 text

7 // Updates the way speed limit of the tile of the given position void update_speed_limit(coord3d pos, uint16_t speed) { tile_t* tile = world()->get_tile(pos); way_t* way = tile->get_way(); way->set_speed_limit(speed); }

Slide 8

Slide 8 text

8 // Updates the way speed limit of the tile of the given position void update_speed_limit(coord3d pos, uint16_t speed) { tile_t* tile = world()->get_tile(pos); way_t* way = tile->get_way(); way->set_speed_limit(speed); } /VMM1PJOUFS"DDFTT /VMM1PJOUFS"DDFTT

Slide 9

Slide 9 text

9 // Updates the way speed limit of the tile of the given position void update_speed_limit(coord3d pos, uint16_t speed) { tile_t* tile = world()->get_tile(pos); if(tile==NULL) { return; } way_t* way = tile->get_way(); if(way==NULL) { return; } way->set_speed_limit(speed); }

Slide 10

Slide 10 text

10 // Updates the way speed limit of the tile of the given position void update_speed_limit(coord3d pos, uint16_t speed) { tile_t* tile = world()->get_tile(pos); if(tile==NULL) { return; } way_t* way = tile->get_way(); if(way==NULL) { return; } way->set_speed_limit(speed); }

Slide 11

Slide 11 text

4JNVUSBOT$PEFCBTF ↟ZFBSTPME ↟,MJOFTPGDPEF ↟.PTUMZXSJUUFOJO$ ↟/PTNBSUQPJOUFS /PPQUJPOBM j ↟-PPLJOHGPSUIFTVDDFTTPSMBOHVBHF ↟5IFNJHSBUJPOIBTUPCFTUFQCZTUFQ 11

Slide 12

Slide 12 text

12

Slide 13

Slide 13 text

13 // Updates the way speed limit of the tile of the given position func updateSpeedLimit(pos: Coord, speed: UInt) { let tile = world().getTile(pos) let way = tile?.way way?.setSpeedLimit(speed) } 4XJGUTPMWFTOVMMQPJOUFSBDDFTTDSBTI

Slide 14

Slide 14 text

14 🤔 $$#:5IF3VTU'PVOEBUJPO

Slide 15

Slide 15 text

$JOUFSPQFSBCJMJUZ 15

Slide 16

Slide 16 text

$UZQFTBSFFYQPTFEUP4XJGU 16 class CppType { public: int32_t myFunc() const { return 42; } }; let cppObj = CppType() let value = cppObj.myFunc()

Slide 17

Slide 17 text

$UZQFTBSFFYQPTFEUP4XJGU 17 class CppType { public: int32_t myFunc() const { return 42; } }; let cppObj = CppType() let value = cppObj.myFunc()

Slide 18

Slide 18 text

$UZQFTBSFFYQPTFEUP4XJGU 18 class CppType { public: int32_t myFunc() const { return 42; } }; let cppObj = CppType() let value = cppObj.myFunc()

Slide 19

Slide 19 text

4XJGUUZQFTBSFFYQPTFEUP$ 19 public struct MyValueType { public init() { /* just make it public */ } public func myFunc() { print("Hello, struct.") } } MyValueType obj = MyValueType::init(); obj.myFunc();

Slide 20

Slide 20 text

4XJGUUZQFTBSFFYQPTFEUP$ 20 public struct MyValueType { public init() { /* just make it public */ } public func myFunc() { print("Hello, struct.") } } MyValueType obj = MyValueType::init(); obj.myFunc();

Slide 21

Slide 21 text

4XJGUUZQFTBSFFYQPTFEUP$ 21 public struct MyValueType { public init() { /* just make it public */ } public func myFunc() { print("Hello, struct.") } } MyValueType obj = MyValueType::init(); obj.myFunc();

Slide 22

Slide 22 text

22

Slide 23

Slide 23 text

23 0CKFDUJWF$

Slide 24

Slide 24 text

24 0CKFDUJWF$

Slide 25

Slide 25 text

25 0CKFDUJWF$

Slide 26

Slide 26 text

26

Slide 27

Slide 27 text

27 ↟#VJMEDPOGJHVSBUJPO ↟*OIFSJUBODFNJHSBUJPO ↟.FNPSZNBOBHFNFOU ↟1SPUPDPMCBTFEBSDIJUFDUVSF

Slide 28

Slide 28 text

28 ↟#VJMEDPOGJHVSBUJPO ↟*OIFSJUBODFNJHSBUJPO ↟.FNPSZNBOBHFNFOU ↟1SPUPDPMCBTFEBSDIJUFDUVSF

Slide 29

Slide 29 text

*OIFSJUBODFJO4JNVUSBOT 29 rail_vehicle_t road_vehicle_t air_vehicle_t vehicle_t

Slide 30

Slide 30 text

*OIFSJUBODFJO4JNVUSBOT 30 rail_vehicle_t road_vehicle_t air_vehicle_t vehicle_t

Slide 31

Slide 31 text

↟4XJGUUZQFTDBOOPUJOIFSJU$UZQFT ↟$UZQFTDBOOPUJOIFSJU4XJGUUZQFT class rail_vehicle_t: public Vehicle { -JNJUBUJPOT 31 class RailVehicle: vehicle_t {

Slide 32

Slide 32 text

32 C rail_vehicle_t func move() C vehicle_t virtual func move() *OIFSJUT

Slide 33

Slide 33 text

33 S RailVehicle mutating func move() var super: vehicle_t C vehicle_t virtual func move()

Slide 34

Slide 34 text

34 S RailVehicle mutating func move() var super: vehicle_t C vehicle_t virtual func move()

Slide 35

Slide 35 text

35 C vehicle_t virtual func move() C abstract_vehicle_t virtual func move() = 0; S RailVehicle mutating func move() var super: vehicle_t

Slide 36

Slide 36 text

36 C vehicle_t virtual func move() C abstract_vehicle_t virtual func move() = 0; S RailVehicle mutating func move() var super: vehicle_t C wrapped_rail_vehicle_t func move() { innerObject.move(); } RailVehicle innerObject;

Slide 37

Slide 37 text

37 C vehicle_t virtual func move() C abstract_vehicle_t virtual func move() = 0; S RailVehicle mutating func move() var super: vehicle_t C wrapped_rail_vehicle_t func move() { innerObject.move(); } RailVehicle innerObject;

Slide 38

Slide 38 text

38 C vehicle_t virtual func move() S RailVehicle mutating func move() var super: vehicle_t C road_vehicle_t func move()

Slide 39

Slide 39 text

39 C vehicle_t virtual func move() S RailVehicle mutating func move() var super: vehicle_t C road_vehicle_t func move() P Vehicle mutating func move() *OIFSJUT $POGPSNT $POGPSNT

Slide 40

Slide 40 text

40 C vehicle_t virtual func move() S RailVehicle mutating func move() var super: vehicle_t C road_vehicle_t func move() P Vehicle mutating func move() *OIFSJUT $POGPSNT $POGPSNT

Slide 41

Slide 41 text

$PODMVTJPO$BO4XJGUSFQMBDFB$DPEF ↟8FDBOTUBSUSFQMBDJOH$XJUI4XJGU ↟#VUXJUITPNFFGGPSUT ↟$JOUFSPQFSBCJMJUZJTJOBSBQJEHSPXUI ↟*OIFSJUBODFJOUFSPQFSBCJMJUZXJMMNBLFJUNVDICFUUFS 41

Slide 42

Slide 42 text

*UsTUJNFUPNPEFSOJ[F XJUI 42

Slide 43

Slide 43 text

5IBOLZPV "LJNV)JSBJt)JNFTIJu ↟J04FOHJOFFSBU-:$PSQPSBUJPO ↟5XJUUFS!IJNFTIJ@UFDI ↟(JU)VC!UFBNIJNFI 43