JVM Bytecode Assembly (ผ่านJasmin ) - 952 960 990
.class public Q
.super java/io/File
.method public static main([Ljava/lang/String;)V
.limit stack 9
getstatic java/lang/System/out Ljava/io/PrintStream;
ldc ".class public Q%n.super java/io/File%n.method public static main([Ljava/lang/String;)V%n.limit stack 9%ngetstatic java/lang/System/out Ljava/io/PrintStream;%nldc %c%s%c%nldc 3%nanewarray java/lang/Object%ndup%ndup%nldc 0%nldc 34%ninvokestatic java/lang/Integer/valueOf(I)Ljava/lang/Integer;%ndup_x2%naastore%nldc 2%nswap%naastore%ndup2%nswap%nldc 1%nswap%naastore%ninvokevirtual java/io/PrintStream/printf(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;%npop%nreturn%n.end method"
ldc 3
anewarray java/lang/Object
dup
dup
ldc 0
ldc 34
invokestatic java/lang/Integer/valueOf(I)Ljava/lang/Integer;
dup_x2
aastore
ldc 2
swap
aastore
dup2
swap
ldc 1
swap
aastore
invokevirtual java/io/PrintStream/printf(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;
pop
return
.end method
น่าเศร้าที่ Jasmin ไม่อนุญาตให้ใช้กลอุบายที่ดีเท่าที่ไมโครซอฟท์ilasm
อนุญาต แต่ JVM มีทั้งหมดหกdup
คำสั่งต่าง ๆที่ทำสิ่งสนุก ๆ การเรียงลำดับรายการในสแต็กเป็นสิ่งที่. NET ไม่สนับสนุน
ไม่ว่าในกรณีใดฉันเดาว่าไม่มีรายการใดในสองรายการของฉันที่เป็นคู่แข่งร้ายแรงสำหรับรหัสที่สั้นที่สุด แต่ฉันเดาว่ามันยากที่จะทำให้รายการสั้นลงมาก ดังนั้นเพียงเพื่อความสมบูรณ์ :-)
เวอร์ชันที่มีความคิดเห็นพร้อมข้อมูลเกี่ยวกับสิ่งที่อยู่ในสแต็ก:
.class public Q
.super java/io/File
.method public static main([Ljava/lang/String;)V
.limit stack 9
getstatic java/lang/System/out Ljava/io/PrintStream;
ldc ".class public Q%n.super java/io/File%n.method public static main([Ljava/lang/String;)V%n.limit stack 9%ngetstatic java/lang/System/out Ljava/io/PrintStream;%nldc %c%s%c%nldc 3%nanewarray java/lang/Object%ndup%ndup%nldc 0%nldc 34%ninvokestatic java/lang/Integer/valueOf(I)Ljava/lang/Integer;%ndup_x2%naastore%nldc 2%nswap%naastore%ndup2%nswap%nldc 1%nswap%naastore%ninvokevirtual java/io/PrintStream/printf(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;%npop%nreturn%n.end method"
ldc 3 ; stack; System.out, string, 3
anewarray java/lang/Object ; stack: System.out, string, Object[3]
dup
dup ; stack: System.out, string, array, array, array
ldc 0 ; stack: System.out, string, array, array, array, 0
ldc 34 ; stack: System.out, string, array, array, array, 0, 34
invokestatic java/lang/Integer/valueOf(I)Ljava/lang/Integer;
dup_x2 ; stack: System.out, string, array, array, 34, array, 0, 34
aastore ; stack: System.out, string, array, array, 34
ldc 2 ; stack: System.out, string, array, array, 34, 2
swap ; stack: System.out, string, array, array, 2, 34
aastore ; stack: System.out, string, array
dup2 ; stack: System.out, string, array, string, array
swap ; stack: System.out, string, array, array, string
ldc 1 ; stack: System.out, string, array, array, string, 1
swap ; stack: System.out, string, array, array, 1, string
aastore ; stack: System.out, string, array
invokevirtual java/io/PrintStream/printf(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;
pop
return
.end method
ประวัติความเป็นมา:
- 2011-02-07 02:09 (990) - รุ่นทำงานครั้งแรก
- 2011/02/07 02:11 (960) -
ldc
สั้นกว่าหรือbipush
iconst_*
- 2011-02-07 02:30 (952) - ใครบอกว่าฉันต้องสืบทอดจาก java.lang.Object ชื่อชั้นอื่น ๆ สั้นกว่ามาก :-)