न्यूबी प्रश्न। मैं बहुत अच्छी Ocaml ORA पुस्तक के माध्यम से जा रहा हूँ। जब मैं मार्शल पर अनुभाग से magic_copy उदाहरण के साथ खेलने के लिए गया था, मैं एक टर्मिनल से एक ब्राउज़र के करीब था, इसलिए मैं ocsigen के toplevel in a browser, जहां मैं परिणाम प्राप्त करने में हैरान था यह पता करने की कोशिश की:मार्शल और magic_copy js_of_ocaml
(* js_of_ocaml *)
# let ora_magic_copy a =
let s = Marshal.to_string a [Marshal.Closures] in
Marshal.from_string s 0;;
val ora_magic_copy : 'a -> 'b = <fun>
# (ora_magic_copy 2 : float) +. 3.1;;
- : float = 5.1
यह जांचना कि ओकंप 2 (वर्तमान संस्करण जब पुस्तक लिखी गई थी) और ओकंपल 3.12.1 के बीच कुछ बदल गया है, जो मेरी मशीन पर स्थापित किया गया है और js_of_ocaml द्वारा उपयोग किया गया है, मैंने अपनी मशीन पर स्थापित सामान्य अपरिवर्तित में एक ही उदाहरण की कोशिश की और मुझे मिला परिणाम पुस्तक में समझाया गया: मार्शल मूल्यों की जांच के साथ टाइप सिस्टम की परेशानी के कारण एक segfault।
(* Linux toplevel *)
# (ora_magic_copy 3: float) +. 2.1;;
Segmentation fault (core dumped)
मैं सिर्फ उत्सुक हूं: क्यों?
मुझे लगता है कि तीन मामलों में, मार्शल.to_स्ट्रिंग एक ही स्ट्रिंग देता है: लिनक्स एक int, js_of_ocaml marshalling और int, js_of_ocaml एक फ्लोट marshalling marshalling। अजीब-आदमी-बाहर लिनक्स एक फ्लोट marshalling toplevel है।
क्या यह जावास्क्रिप्ट के मूल प्रकारों का उपयोग कर js_of_ocaml के बारे में कुछ है? या बस ... अपरिभाषित व्यवहार?