ตัวสร้าง Const สร้างอินสแตนซ์ "canonicalized"
นั่นคือนิพจน์คงที่ทั้งหมดจะเริ่มต้นในรูปแบบบัญญัติและต่อมาสัญลักษณ์ "บัญญัติ" เหล่านี้จะถูกใช้เพื่อรับรู้ความเท่าเทียมกันของค่าคงที่เหล่านี้
การบัญญัติศัพท์:
กระบวนการในการแปลงข้อมูลที่มีการแทนค่าที่เป็นไปได้มากกว่าหนึ่งรายการเป็นการแสดงตามรูปแบบบัญญัติ "มาตรฐาน" สิ่งนี้สามารถทำได้เพื่อเปรียบเทียบการแทนค่าต่างๆสำหรับการเทียบเคียงเพื่อนับจำนวนโครงสร้างข้อมูลที่แตกต่างกันเพื่อปรับปรุงประสิทธิภาพของอัลกอริทึมต่างๆโดยการกำจัดการคำนวณซ้ำ ๆ หรือเพื่อให้สามารถกำหนดลำดับการเรียงลำดับที่มีความหมายได้
ซึ่งหมายความว่านิพจน์ const เช่นconst Foo(1, 1)
สามารถแสดงรูปแบบที่ใช้งานได้ซึ่งเป็นประโยชน์สำหรับการเปรียบเทียบในเครื่องเสมือน
VM จำเป็นต้องคำนึงถึงประเภทค่าและอาร์กิวเมนต์ตามลำดับที่เกิดขึ้นในนิพจน์ const นี้เท่านั้น และแน่นอนว่าจะลดลงสำหรับการเพิ่มประสิทธิภาพ
ค่าคงที่ที่มีค่ามาตรฐานเดียวกัน:
var foo1 = const Foo(1, 1); // #Foo#int#1#int#1
var foo2 = const Foo(1, 1); // #Foo#int#1#int#1
ค่าคงที่ที่มีค่ามาตรฐานที่แตกต่างกัน (เนื่องจากลายเซ็นต่างกัน):
var foo3 = const Foo(1, 2); // $Foo$int$1$int$2
var foo4 = const Foo(1, 3); // $Foo$int$1$int$3
var baz1 = const Baz(const Foo(1, 1), "hello"); // $Baz$Foo$int$1$int$1$String$hello
var baz2 = const Baz(const Foo(1, 1), "hello"); // $Baz$Foo$int$1$int$1$String$hello
ค่าคงที่จะไม่ถูกสร้างขึ้นใหม่ในแต่ละครั้ง พวกเขาได้รับการบัญญัติในเวลาคอมไพล์และจัดเก็บไว้ในตารางการค้นหาพิเศษ (ซึ่งถูกแฮชด้วยลายเซ็นที่เป็นที่ยอมรับ) ซึ่งจะถูกนำมาใช้ใหม่ในภายหลัง
ปล
แบบฟอร์มที่#Foo#int#1#int#1
ใช้ในตัวอย่างเหล่านี้ใช้เพื่อวัตถุประสงค์ในการเปรียบเทียบเท่านั้นและไม่ใช่รูปแบบที่แท้จริงของการบัญญัติ (การแสดง) ใน Dart VM
แต่รูปแบบการบัญญัติศัพท์ที่แท้จริงต้องเป็น "มาตรฐาน" การแสดงตามรูปแบบบัญญัติ