Slide 1

Slide 1 text

Javaʹ͓͚Δ ؔ਺ܕϓϩάϥϛϯά΁ͷऔΓ૊Έ ᓎఉ༞Ұ Java in the Box

Slide 2

Slide 2 text

Java 8 2014: Project Lambda Lambda ࣜ& Stream API ແ໊ؔ਺ ಺෦ΠςϨʔλʔ var nums = List.of(0, 1, 2, 3, 4); ྫ ϦετͷཁૉΛ ৐ͨ͠ϦετΛ࡞੒ var squared = nums.stream() .map( x -> x*x ) .toList(); ετϦʔϜม׵ ϥϜμࣜ

Slide 3

Slide 3 text

Function f = x -> x*x; ؔ਺ܕͰ͸ͳ͍ ϝιουΛ ͚ͭͩఆٛͨ͠ΠϯλϑΣʔε f ͸ Function ΦϒδΣΫτ

Slide 4

Slide 4 text

Function f = x -> x*x; ϝιουΛ ͚ͭͩఆٛͨ͠ ΠϯλϑΣʔεΛ࣮૷ͨ͠ ΫϥεͷΠϯελϯγΤʔγϣϯ x*x ͕ϝιουͷϘσΟ

Slide 5

Slide 5 text

Java ͷݴޠ࢓༷ͷมߋ Java Lang Spec ͚ͩͷมߋͰࡁΉ࢓༷มߋ ൺֱత༰қʹมߋՄೳ JVM Spec ͷมߋ͕ඞཁͱͳΔ࢓༷มߋ ͱͯ΋ϋʔυϧ͕ߴ͍ ؔ਺ܕͷಋೖ͸ JVM Spec ͷมߋ͕ඞཁ

Slide 6

Slide 6 text

Lambdaࣜͷ࣮ݱํ๏ InvokeDynamicͷ׆༻ ݩʑ͸JRubyͳͲಈతܕ෇͚ݴޠͷͨΊʹ Java 7Ͱಋೖ͞Εͨϝιουίʔϧ༻ͷόΠτίʔυ ࣮ߦ࣌ʹίʔϧ͢ΔϝιουΛ୳ࡧ͔ͯ͠Β ϝιουίʔϧΛߦ͏ LambdaࣜͰ͸ಈతʹΫϥεੜ੒Λߦ͔ͬͯΒ ΦϒδΣΫτΠϯελϯγΤʔγϣϯΛߦ͏

Slide 7

Slide 7 text

InvokeDynamicͷಈ࡞ ొ৔ਓ෺ bootstrapϝιου CallSiteΫϥε MethodHandleΫϥε ୳ࡧΛߦ͍݁ՌΛCallSiteͰ໭͢ϝιου MethodHandleΛอ࣋͢Δίϯςφ ࣮ߦ͢ΔϝιουΛࣔ͢ indy ॳճ bootstrap ϝιου୳ࡧ CallSite MethodHandle ੜ੒ λʔήοτϝιου ࣮ߦ

Slide 8

Slide 8 text

InvokeDynamicͷಈ࡞ ొ৔ਓ෺ bootstrapϝιου CallSiteΫϥε MethodHandleΫϥε ୳ࡧΛߦ͍݁ՌΛCallSiteͰ໭͢ϝιου MethodHandleΛอ࣋͢Δίϯςφ ࣮ߦ͢ΔϝιουΛࣔ͢ indy bootstrap CallSite MethodHandle λʔήοτϝιου ճ໨Ҏ߱ ࣮ߦ

Slide 9

Slide 9 text

Lambdͷࣜͷಈ࡞ Java ιʔείʔυ ΫϥεϑΝΠϧ ίϯύΠϧ ϥϜμࣜͷϝιουϘσΟΛ static ϝιουԽͯ͠௥Ճ -BNCEB ࣮ࣜߦ CPPUTUSBQ ॳճ ΠϯλϑΣʔε࣮૷ΫϥεΛಈతੜ੒ static ϝιουΛίʔϧ͢ΔΑ͏ʹ͢Δ ಈతੜ੒ΫϥεΛΠϯελϯγΤʔγϣϯ͢Δ CallSite Λੜ੒ CallSite ͔ΒΠϯελϯγΤʔγϣϯ࣮ߦ

Slide 10

Slide 10 text

Lambdͷࣜͷಈ࡞ Java ιʔείʔυ ΫϥεϑΝΠϧ ίϯύΠϧ ϥϜμࣜͷϝιουϘσΟΛ static ϝιουԽͯ͠௥Ճ -BNCEB ࣮ࣜߦ CPPUTUSBQ ॳճ ΠϯλϑΣʔε࣮૷ΫϥεΛಈతੜ੒ static ϝιουΛίʔϧ͢ΔΑ͏ʹ͢Δ ಈతੜ੒ΫϥεΛΠϯελϯγΤʔγϣϯ͢Δ CallSite Λੜ੒ CallSite ͔ΒΠϯελϯγΤʔγϣϯ࣮ߦ ճ໨Ҏ߱

Slide 11

Slide 11 text

Project LambdaҎ߱ͷؔ਺ܕϓϩάϥϛϯάػೳ Optional Record Πϛϡʔλϒϧͳσʔλܕ Sealed Class ܧঝͷ੍ݶ ୅਺తσʔλܕ switchࣜ ܕʹΑΔύλʔϯϚονϯά ͚͍ܽͯΔ΋ͷ if ࣜ ྫ֎ॲཧ EitherͳͲ͸ఏڙ͞Ε͍ͯͳ͍ I/O ैདྷͷखଓ͖తͳI/OॲཧͷΈ

Slide 12

Slide 12 text

Project LambdaҎ߱ͷؔ਺ܕϓϩάϥϛϯάػೳ ࠓޙಋೖ༧ఆ Stream Gatherer Streamͷ΢Οϯυ΢ॲཧ null ڐ༰ܕඇڐ༰ܕ JVMSͷมߋ͕ඞཁ

Slide 13

Slide 13 text

JavaΛ࢖͏ଆͷঢ়گ खଓ͖తهड़͔Βએݴతهड़΁ͷա౉ظ એݴతͳඪ४ϥΠϒϥϦ CompletableFuture Flow (Reactive Stream) HTTP Client એݴతͳϥΠϒϥϦϑϨʔϜϫʔΫ Spring WebFlux Oracle Helidon Red Hat Quarkus

Slide 14

Slide 14 text

·ͱΊ Java 8ͰͷProject Lambda͕୺ॹ LambdaࣜΛؔ਺ͱͯ͠ѻ͏ ύλʔϯϚονϯά ADTͳͲͷಋೖ͕ਐΉ ݱࡏ͸એݴతهड़΁ͷա౉ظ

Slide 15

Slide 15 text

Javaʹ͓͚Δ ؔ਺ܕϓϩάϥϛϯά΁ͷऔΓ૊Έ ᓎఉ༞Ұ Java in the Box