mut field in struct

struct A {
  mut a : Int
} 

fn init {
  let a = { a : 432 } 
  a.a = 42
  println(a.a) // 42
}

一个immut的struct里的mut field为什么可以被修改?

第二行的 mut 不加不能改,加了才能改,这没问题吧?毕竟js的 const也这样。
还是说你觉得要let mut a才能改a.a?

对的,a本身不是mut的话按道理a.a也不能被修改

这属于把mut对应的概念扩大化了,大多数函数式编程语言的mut都只针对绑定对象而言,对象本身是否以及能否修改则是另一回事。
rust这边有个帖子讨论了类似的情况,Structs' field-level mutability control at instantiation (not at definition) - #3 by kornel - language design - Rust Internals

a是一个引用;a不是mut代表你不能修改a所绑定的对象(指不能发生重新绑定)。至于那个对象本身能发生什么修改,那是另一回事。这并不是一个immutable structure。

这个是老生常谈的话题,例如C中也有const int * const ptr这个概念。