Sobes.tech
Middle+

Do you know what de-duplication is?

sobes.tech AI

Answer from AI

Desugaring is the process of converting syntactic sugar (high-level syntactic constructs that make code easier to write) into lower-level, more primitive constructs that are easier for the compiler or runtime environment to process.

Examples in Android development (Java/Kotlin):

  • Lambda expressions:

    // Syntactic sugar: lambda
    Runnable r = () -> System.out.println("Hello");
    

    Desugaring transforms this into an anonymous class:

    // Desugaring: anonymous class
    Runnable r = new Runnable() {
        @Override
        public void run() {
            System.out.println("Hello");
        }
    };
    
  • for-each loops:

    // Syntactic sugar: for-each
    List<String> list = Arrays.asList("a", "b");
    for (String s : list) {
        System.out.println(s);
    }
    

    Desugaring transforms this into an iterator loop:

    // Desugaring: iterator loop
    List<String> list = Arrays.asList("a", "b");
    for (Iterator<String> it = list.iterator(); it.hasNext(); ) {
        String s = it.next();
        System.out.println(s);
    }
    
  • Coroutines in Kotlin (in earlier implementations):

    // Syntactic sugar: suspending function
    suspend fun fetchData(): String {
        delay(1000)
        return "Data"
    }
    

    Desugaring (for example, via state machine generation) transforms this into lower-level code.

Desugaring is important because it:

  • Allows the use of more expressive and concise constructs (sugar) without complicating the compiler/runtime implementation.
  • Ensures backward compatibility, as desugared code can run on older platform or VM versions.
  • Simplifies code analysis and optimization for the compiler.

In Android, desugaring is actively used by JVM/ART and build tools (e.g., D8/R8).