@effekt-lang/effekt 0.2.2 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/bin/effekt +0 -0
  2. package/bin/effekt.sh +1 -1
  3. package/libraries/chez/common/effekt_primitives.ss +10 -2
  4. package/libraries/chez/common/immutable/cslist.effekt +13 -7
  5. package/libraries/chez/common/mutable/dict.effekt +8 -10
  6. package/libraries/chez/common/text/regex.effekt +7 -9
  7. package/libraries/common/args.effekt +95 -0
  8. package/libraries/common/array.effekt +225 -0
  9. package/libraries/common/bench.effekt +60 -0
  10. package/libraries/common/buffer.effekt +123 -0
  11. package/libraries/common/bytes.effekt +125 -0
  12. package/libraries/{chez/common/immutable → common}/dequeue.effekt +18 -4
  13. package/libraries/common/effekt.effekt +764 -0
  14. package/libraries/common/exception.effekt +122 -0
  15. package/libraries/common/io/console.effekt +66 -0
  16. package/libraries/common/io/error.effekt +365 -0
  17. package/libraries/common/io/files.effekt +282 -0
  18. package/libraries/common/io/network.effekt +105 -0
  19. package/libraries/common/io/time.effekt +15 -0
  20. package/libraries/common/io.effekt +158 -0
  21. package/libraries/{llvm/immutable → common}/list.effekt +83 -74
  22. package/libraries/common/option.effekt +72 -0
  23. package/libraries/common/process.effekt +10 -0
  24. package/libraries/common/queue.effekt +140 -0
  25. package/libraries/common/ref.effekt +63 -0
  26. package/libraries/common/result.effekt +45 -0
  27. package/libraries/{ml/immutable → common}/seq.effekt +30 -19
  28. package/libraries/common/string.effekt +395 -0
  29. package/libraries/common/test.effekt +98 -0
  30. package/libraries/js/effekt_builtins.js +37 -6
  31. package/libraries/js/io.js +143 -0
  32. package/libraries/js/mutable/map.effekt +8 -9
  33. package/libraries/js/text/regex.effekt +7 -8
  34. package/libraries/js/unsafe/cont.effekt +2 -2
  35. package/libraries/js/web/dom.effekt +13 -13
  36. package/libraries/llvm/array.c +53 -0
  37. package/libraries/llvm/buffer.c +181 -76
  38. package/libraries/llvm/forward-declare-c.ll +27 -8
  39. package/libraries/llvm/io.c +543 -1
  40. package/libraries/llvm/io.ll +19 -0
  41. package/libraries/llvm/main.c +3 -1
  42. package/libraries/llvm/ref.c +45 -0
  43. package/libraries/llvm/rts.ll +496 -354
  44. package/libraries/llvm/types.c +23 -0
  45. package/libraries/ml/effekt.sml +2 -0
  46. package/libraries/ml/internal/mllist.effekt +9 -0
  47. package/libraries/ml/internal/mloption.effekt +18 -0
  48. package/libraries/ml/random.effekt +9 -9
  49. package/libraries/ml/text/regex.effekt +14 -19
  50. package/licenses/eclipse public license, version 2.0 - epl-2.0.html +2 -2
  51. package/licenses/mit license - mit-license.html +527 -57
  52. package/licenses/the bsd license - bsd-license.html +530 -55
  53. package/licenses/the mit license - mit.html +528 -58
  54. package/package.json +2 -2
  55. package/libraries/chez/callcc/effekt.effekt +0 -221
  56. package/libraries/chez/common/effekt_matching.ss +0 -100
  57. package/libraries/chez/common/immutable/list.effekt +0 -643
  58. package/libraries/chez/common/immutable/option.effekt +0 -39
  59. package/libraries/chez/common/immutable/result.effekt +0 -29
  60. package/libraries/chez/common/io/args.effekt +0 -20
  61. package/libraries/chez/common/mutable/array.effekt +0 -27
  62. package/libraries/chez/common/mutable/heap.effekt +0 -12
  63. package/libraries/chez/common/test.effekt +0 -59
  64. package/libraries/chez/common/text/string.effekt +0 -46
  65. package/libraries/chez/lift/effekt.effekt +0 -217
  66. package/libraries/chez/monadic/effekt.effekt +0 -218
  67. package/libraries/js/effekt.effekt +0 -284
  68. package/libraries/js/effekt_matching.js +0 -79
  69. package/libraries/js/immutable/dequeue.effekt +0 -78
  70. package/libraries/js/immutable/list.effekt +0 -643
  71. package/libraries/js/immutable/option.effekt +0 -49
  72. package/libraries/js/immutable/result.effekt +0 -29
  73. package/libraries/js/io/args.effekt +0 -9
  74. package/libraries/js/io/async.effekt +0 -28
  75. package/libraries/js/io/async.js +0 -2
  76. package/libraries/js/io/file.effekt +0 -50
  77. package/libraries/js/io/file_include.js +0 -13
  78. package/libraries/js/mutable/array.effekt +0 -98
  79. package/libraries/js/mutable/heap.effekt +0 -32
  80. package/libraries/js/test.effekt +0 -59
  81. package/libraries/js/text/string.effekt +0 -64
  82. package/libraries/llvm/effekt.effekt +0 -243
  83. package/libraries/llvm/immutable/option.effekt +0 -53
  84. package/libraries/llvm/immutable/result.effekt +0 -29
  85. package/libraries/llvm/io/args.effekt +0 -24
  86. package/libraries/llvm/text/string.effekt +0 -179
  87. package/libraries/ml/effekt.effekt +0 -267
  88. package/libraries/ml/immutable/dequeue.effekt +0 -81
  89. package/libraries/ml/immutable/list.effekt +0 -674
  90. package/libraries/ml/immutable/option.effekt +0 -53
  91. package/libraries/ml/immutable/result.effekt +0 -29
  92. package/libraries/ml/internal/option.effekt +0 -18
  93. package/libraries/ml/io/args.effekt +0 -41
  94. package/libraries/ml/mutable/array.effekt +0 -43
  95. package/libraries/ml/test.effekt +0 -60
  96. package/libraries/ml/text/string.effekt +0 -81
@@ -5,11 +5,21 @@
5
5
  typedef int64_t Int;
6
6
  typedef double Double;
7
7
 
8
+ struct Header {
9
+ uint64_t rc;
10
+ void (*eraser)(void *);
11
+ };
12
+
8
13
  struct Pos {
9
14
  uint64_t tag; // type-local tag
10
15
  void *obj; // pointer into the heap
11
16
  };
12
17
 
18
+ struct Neg {
19
+ void *vtable;
20
+ void *obj;
21
+ };
22
+
13
23
  static const struct Pos Unit = (struct Pos) { .tag = 0, .obj = NULL, };
14
24
  static const struct Pos BooleanFalse = (struct Pos) { .tag = 0, .obj = NULL, };
15
25
  static const struct Pos BooleanTrue = (struct Pos) { .tag = 1, .obj = NULL, };
@@ -17,4 +27,17 @@ static const struct Pos BooleanTrue = (struct Pos) { .tag = 1, .obj = NULL, };
17
27
  typedef struct Pos String;
18
28
 
19
29
 
30
+ // Defined in rts.ll
31
+
32
+ extern void run(struct Neg);
33
+ extern void run_i64(struct Neg, int64_t);
34
+ extern void run_Pos(struct Neg, struct Pos);
35
+
36
+ // Reference counting primitives defined in LLVM
37
+ extern void eraseNegative(struct Neg);
38
+ extern void erasePositive(struct Pos);
39
+
40
+ extern void shareNegative(struct Neg);
41
+ extern void sharePositive(struct Pos);
42
+
20
43
  #endif
@@ -61,3 +61,5 @@ fun mlRandomReal () =
61
61
 
62
62
  (* HOLES *)
63
63
  exception Hole
64
+
65
+ exception Absurd
@@ -0,0 +1,9 @@
1
+ module internal/mllist
2
+
3
+ extern type MLList[Elem] // = 'elem list
4
+ extern pure def isEmpty[A](l: MLList[A]): Bool = ml "null ${l}"
5
+ extern pure def head[A](l: MLList[A]): A = ml "hd ${l}"
6
+ extern pure def tail[A](l: MLList[A]): MLList[A] = ml "tl ${l}"
7
+
8
+ def toList[A](l: MLList[A]): List[A] =
9
+ if (l.isEmpty) Nil() else Cons(l.head, toList(l.tail))
@@ -0,0 +1,18 @@
1
+ module internal/mloption
2
+
3
+ import effekt
4
+ import option
5
+
6
+ extern type MLOption[T]
7
+
8
+ extern pure def isDefined[T](opt: MLOption[T]): Bool =
9
+ ml "Option.isSome ${opt}"
10
+
11
+ def isEmpty[T](opt: MLOption[T]): Bool = not(opt.isDefined())
12
+
13
+ extern pure def force[T](opt: MLOption[T]): T =
14
+ ml "Option.valOf ${opt}"
15
+
16
+ def toOption[T](opt: MLOption[T]): Option[T] = {
17
+ if (isDefined(opt)) Some(force(opt)) else None()
18
+ }
@@ -10,12 +10,12 @@ module random
10
10
  * effect [[Random]], below.
11
11
  */
12
12
  extern type RNG // = int * int
13
- extern io def seed(n: Int, m: Int): RNG = "Random.rand (${n}, ${m})"
14
- extern pure def toString(s: RNG): String = "Random.toString ${s}"
13
+ extern io def seed(n: Int, m: Int): RNG = ml "Random.rand (${n}, ${m})"
14
+ extern pure def toString(s: RNG): String = ml "Random.toString ${s}"
15
15
 
16
- extern io def int(s: RNG): Int = "Random.randInt ${s}"
17
- extern io def int(s: RNG, from: Int, to: Int): Int = "Random.randRange (${from}, ${to}) ${s}"
18
- extern io def double(s: RNG): Double = "Random.randReal ${s}"
16
+ extern io def int(s: RNG): Int = ml "Random.randInt ${s}"
17
+ extern io def int(s: RNG, from: Int, to: Int): Int = ml "Random.randRange (${from}, ${to}) ${s}"
18
+ extern io def double(s: RNG): Double = ml "Random.randReal ${s}"
19
19
 
20
20
 
21
21
  /**
@@ -29,15 +29,15 @@ extern io def double(s: RNG): Double = "Random.randReal ${s}"
29
29
  */
30
30
  extern type PseudoRNG
31
31
  extern pure def random(s: PseudoRNG): PseudoRNG =
32
- "Rand.random ${s}"
32
+ ml "Rand.random ${s}"
33
33
  extern pure def range(s: PseudoRNG, n: Int, m: Int): Int =
34
- "Rand.range (${n}, ${m}) ${s}"
34
+ ml "Rand.range (${n}, ${m}) ${s}"
35
35
  extern pure def norm(s: PseudoRNG): Double =
36
- "Rand.norm ${s}"
36
+ ml "Rand.norm ${s}"
37
37
 
38
38
  // converting two integers into a word that is between randMin and randMax is completely made up
39
39
  extern pure def pseudo(n: Int, m: Int): PseudoRNG =
40
- "Word.fromInt ((Word.toInt Rand.randMin) + ((abs (${n} * ${m})) mod (Word.toInt Rand.randMax)))"
40
+ ml "Word.fromInt ((Word.toInt Rand.randMin) + ((abs (${n} * ${m})) mod (Word.toInt Rand.randMax)))"
41
41
 
42
42
 
43
43
 
@@ -1,21 +1,16 @@
1
1
  module text/regex
2
2
 
3
- extern type MLList[Elem] // = 'elem list
4
- extern pure def isEmpty[A](l: MLList[A]): Boolean = "null ${l}"
5
- extern pure def head[A](l: MLList[A]): A = "hd ${l}"
6
- extern pure def tail[A](l: MLList[A]): MLList[A] = "tl ${l}"
7
-
8
- def toList[A](l: MLList[A]): List[A] =
9
- if (l.isEmpty) Nil() else Cons(l.head, toList(l.tail))
3
+ import internal/mllist
4
+ import internal/mloption
10
5
 
11
6
  extern type Char // TODO move to text/string
12
7
  type Chars = MLList[Char]
13
8
 
14
9
 
15
- extern pure def chars(str: String): Chars = "String.explode ${str}"
16
- extern pure def toString(chars: Chars): String = "String.implode ${chars}"
10
+ extern pure def chars(str: String): Chars = ml "String.explode ${str}"
11
+ extern pure def toString(chars: Chars): String = ml "String.implode ${chars}"
17
12
 
18
- extern """
13
+ extern ml """
19
14
 
20
15
  (** The RegExp module is created by choosing a parser (P) and an engine (E)
21
16
  * for regular expressions.
@@ -42,7 +37,7 @@ record Match(matched: String)
42
37
 
43
38
  // TODO handle CannotParse and CannotCompile ml exceptions.
44
39
  extern pure def regex(regexString: String): Regex =
45
- "RegExp.compileString ${regexString}"
40
+ ml "RegExp.compileString ${regexString}"
46
41
 
47
42
 
48
43
  // A stream of elements of type Elem, read from a source of type Source
@@ -52,7 +47,7 @@ extern type MLStream[Elem, Source] // = ('elem, 'source) StringCvt.reader
52
47
  // <https://www.smlnj.org/doc/smlnj-lib/RegExp/str-MatchTree.html>
53
48
  extern type MLMatchResult // = match * char list
54
49
 
55
- extern """
50
+ extern ml """
56
51
  type regex_match = {len: int, pos: char list} MatchTree.match_tree;
57
52
  fun matchedString (match : regex_match * char list) =
58
53
  let val res = MatchTree.root (#1 match)
@@ -76,25 +71,25 @@ fun unsafeSplit str sep =
76
71
  """
77
72
 
78
73
  extern pure def getMatch(result: MLMatchResult): String =
79
- "matchedString ${result}"
74
+ ml "matchedString ${result}"
80
75
  extern pure def getRemainder(result: MLMatchResult): Chars =
81
- "remainderChars ${result}"
76
+ ml "remainderChars ${result}"
82
77
 
83
78
  extern pure def unsafeSplit(str: String, ch: Char): MLList[String] =
84
- "String.fields (fn c => c = ${ch}) ${str}"
79
+ ml "String.fields (fn c => c = ${ch}) ${str}"
85
80
 
86
81
  extern pure def unsafeMatchPrefix(r: Regex, str: Chars): MLOption[MLMatchResult] =
87
- "RegExp.prefix ${r} List.getItem ${str}"
82
+ ml "RegExp.prefix ${r} List.getItem ${str}"
88
83
 
89
84
  extern pure def unsafeSplit(str: String, sep: String): MLList[String] =
90
- "unsafeSplit ${str} ${sep}"
85
+ ml "unsafeSplit ${str} ${sep}"
91
86
 
92
- extern """
87
+ extern ml """
93
88
  val NEWLINE_CHAR = #"\n";
94
89
  """
95
90
 
96
91
  extern pure def unsafeLines(str: String): MLList[String] =
97
- "String.fields (fn c => c = NEWLINE_CHAR) ${str}"
92
+ ml "String.fields (fn c => c = NEWLINE_CHAR) ${str}"
98
93
 
99
94
  def lines(str: String): List[String] = unsafeLines(str).toList
100
95
 
@@ -1,4 +1,4 @@
1
- <!doctype html><html lang=en><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Eclipse Public License 2.0 (EPL) | The Eclipse Foundation</title><meta property="og:title" content="Eclipse Public License 2.0 (EPL) | The Eclipse Foundation"><meta name=twitter:title content="Eclipse Public License 2.0 (EPL) | The Eclipse Foundation"><meta name=description content="The Eclipse Foundation provides our global community of individuals and organisations with a mature, scalable, and business-friendly environment for open source …"><meta property="og:description" content="The Eclipse Foundation provides our global community of individuals and organisations with a mature, scalable, and business-friendly environment for open source …"><meta name=twitter:description content="The Eclipse Foundation provides our global community of individuals and organisations with a mature, scalable, and business-friendly environment for open source …"><meta name=author content="Wayne Beaton"><link href=/favicon.ico rel=icon type=image/x-icon><meta property="og:image" content="https://www.eclipse.org/images/logos/eclipse-foundation-400x400.png"><meta name=twitter:image content="https://www.eclipse.org/images/logos/eclipse-foundation-400x400.png"><meta name=twitter:card content="summary"><meta name=twitter:site content="@eclipsefdn"><meta name=twitter:creator content="@eclipsefdn"><meta property="og:url" content="https://www.eclipse.org/legal/epl-2.0/"><meta property="og:type" content="website"><meta property="og:site_name" content="Eclipse Foundation"><meta name=keywords content="epl,epl-2.0,legal,foundation,eclipse,eclipse public license,license,licenses"><meta name=generator content="Hugo 0.110.0"><link rel=canonical href=https://www.eclipse.org/legal/epl-2.0/><link rel=alternate href=/legal/epl-2.0/index.xml type=application/rss+xml title><link rel=stylesheet href="/public/css/styles.css?v=1724865025"><script>(function(e,t,n,s,o){e[s]=e[s]||[],e[s].push({"gtm.start":(new Date).getTime(),event:"gtm.js"});var a=t.getElementsByTagName(n)[0],i=t.createElement(n),r=s!="dataLayer"?"&l="+s:"";i.async=!0,i.src="https://www.googletagmanager.com/gtm.js?id="+o+r,a.parentNode.insertBefore(i,a)})(window,document,"script","dataLayer","GTM-5WLCZXC")</script><script>var tableClasses="table"</script><link href="https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" rel=stylesheet type=text/css></head><body><noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-5WLCZXC" height=0 width=0 style=display:none;visibility:hidden></iframe></noscript><a class=sr-only href=#content>Skip to main content</a><header class="header-wrapper header-wrapper" id=header><div class=header-toolbar><div class=container><div class=header-toolbar-row><div class="toolbar-btn toolbar-search-btn dropdown"><button class=dropdown-toggle id=toolbar-search type=button data-toggle=dropdown tabindex=0 aria-label=Search>
1
+ <!doctype html><html lang=en><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><title>Eclipse Public License 2.0 (EPL) | The Eclipse Foundation</title><meta property="og:title" content="Eclipse Public License 2.0 (EPL) | The Eclipse Foundation"><meta name=twitter:title content="Eclipse Public License 2.0 (EPL) | The Eclipse Foundation"><meta name=description content="The Eclipse Foundation provides our global community of individuals and organisations with a mature, scalable, and business-friendly environment for open source …"><meta property="og:description" content="The Eclipse Foundation provides our global community of individuals and organisations with a mature, scalable, and business-friendly environment for open source …"><meta name=twitter:description content="The Eclipse Foundation provides our global community of individuals and organisations with a mature, scalable, and business-friendly environment for open source …"><meta name=author content="Wayne Beaton"><link href=/favicon.ico rel=icon type=image/x-icon><meta property="og:image" content="https://www.eclipse.org/images/logos/eclipse-foundation-400x400.png"><meta name=twitter:image content="https://www.eclipse.org/images/logos/eclipse-foundation-400x400.png"><meta name=twitter:card content="summary"><meta name=twitter:site content="@eclipsefdn"><meta name=twitter:creator content="@eclipsefdn"><meta property="og:url" content="https://www.eclipse.org/legal/epl-2.0/"><meta property="og:type" content="website"><meta property="og:site_name" content="Eclipse Foundation"><meta name=keywords content="epl,epl-2.0,legal,foundation,eclipse,eclipse public license,license,licenses"><meta name=generator content="Hugo 0.110.0"><link rel=canonical href=https://www.eclipse.org/legal/epl-2.0/><link rel=alternate href=/legal/epl-2.0/index.xml type=application/rss+xml title><link rel=stylesheet href="/public/css/styles.css?v=1726491576"><script>(function(e,t,n,s,o){e[s]=e[s]||[],e[s].push({"gtm.start":(new Date).getTime(),event:"gtm.js"});var a=t.getElementsByTagName(n)[0],i=t.createElement(n),r=s!="dataLayer"?"&l="+s:"";i.async=!0,i.src="https://www.googletagmanager.com/gtm.js?id="+o+r,a.parentNode.insertBefore(i,a)})(window,document,"script","dataLayer","GTM-5WLCZXC")</script><script>var tableClasses="table"</script><link href="https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" rel=stylesheet type=text/css></head><body><noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-5WLCZXC" height=0 width=0 style=display:none;visibility:hidden></iframe></noscript><a class=sr-only href=#content>Skip to main content</a><header class="header-wrapper header-wrapper" id=header><div class=header-toolbar><div class=container><div class=header-toolbar-row><div class="toolbar-btn toolbar-search-btn dropdown"><button class=dropdown-toggle id=toolbar-search type=button data-toggle=dropdown tabindex=0 aria-label=Search>
2
2
  <i class="fa fa-search fa-lg" aria-role=none></i></button><div class="toolbar-search-bar-wrapper dropdown-menu dropdown-menu-right" aria-labelledby=toolbar-search><form action=https://www.eclipse.org/home/search method=get><div class=search-bar><input class=search-bar-input name=q placeholder=Search>
3
3
  <button>
4
4
  <i class="fa fa-search" type=submit></i></button></div></form></div></div><div class="toolbar-btn toolbar-user-menu-btn dropdown"><button class=dropdown-toggle id=toolbar-user-menu type=button data-toggle=dropdown tabindex=0 aria-label="User Menu">
@@ -57,5 +57,5 @@ open source software collaboration and innovation.</p></div><div class=mega-menu
57
57
  <i class="fa fa-linkedin fa-stack-1x fa-inverse" aria-hidden=true></i>
58
58
  <span class=sr-only>Linkedin account</span></span></a></li></ul></div></div><div class="footer-sections row equal-height-md font-bold"><div class=col-md-15><div class=row><section id=footer-eclipse-foundation class="footer-section col-sm-8"><div class=menu-heading>Eclipse Foundation</div><ul class=nav><li><a href=https://www.eclipse.org/org/>About</a></li><li><a href=https://projects.eclipse.org/>Projects</a></li><li><a href=https://www.eclipse.org/collaborations/>Collaborations</a></li><li><a href=https://www.eclipse.org/membership/>Membership</a></li><li><a href=https://www.eclipse.org/sponsor/>Sponsor</a></li></ul></section><section id=footer-legal class="footer-section col-sm-8"><div class=menu-heading>Legal</div><ul class=nav><li><a href=https://www.eclipse.org/legal/privacy/>Privacy Policy</a></li><li><a href=https://www.eclipse.org/legal/terms-of-use/>Terms of Use</a></li><li><a href=https://www.eclipse.org/legal/compliance/>Compliance</a></li><li><a href=https://www.eclipse.org/org/documents/Community_Code_of_Conduct.php>Code of Conduct</a></li><li><a href=https://www.eclipse.org/legal/>Legal Resources</a></li><li><a class=toolbar-manage-cookies href=# onclick=event.preventDefault()>Manage Cookies</a></li></ul></section><section id=footer-more class="footer-section col-sm-8"><div class=menu-heading>More</div><ul class=nav><li><a href=https://www.eclipse.org/security/>Report a Vulnerability</a></li><li><a href=https://status.eclipse.org/>Service Status</a></li><li><a href=https://www.eclipse.org/org/foundation/contact.php>Contact Us</a></li><li><a href=https://www.eclipse.org/projects/support/>Support</a></li></ul></section></div></div><div id=footer-end class="footer-section col-md-8 col-md-offset-1 col-sm-24"><div class=footer-end-newsletter><form id=mc-embedded-subscribe-form action=https://eclipsecon.us6.list-manage.com/subscribe/post method=post novalidate target=_blank><label class=footer-end-newsletter-label for=email>Subscribe to our Newsletter</label><div class=footer-end-newsletter-input-wrapper><input class=footer-end-newsletter-input type=email id=email name=EMAIL autocomplete=email placeholder="Enter your email address"><div><i class="fa fa-solid fa-envelope fa-lg" aria-hidden=true></i></div></div><input type=hidden name=u value=eaf9e1f06f194eadc66788a85>
59
59
  <input type=hidden name=id value=46e57eacf1>
60
- <input id=mc-embedded-subscribe type=submit name=subscribe hidden></form></div></div></div><div class="col-sm-24 margin-top-20"><div class=row><div id=copyright class=col-md-16><p id=copyright-text>Copyright &copy; Eclipse Foundation AISBL. All Rights Reserved.</p></div></div></div><a href=# class=scrollup>Back to the top</a></div></footer><div id=footer-js><script src="/public/js/main.js?v1.0?v=1724865025"></script>
60
+ <input id=mc-embedded-subscribe type=submit name=subscribe hidden></form></div></div></div><div class="col-sm-24 margin-top-20"><div class=row><div id=copyright class=col-md-16><p id=copyright-text>Copyright &copy; Eclipse Foundation AISBL. All Rights Reserved.</p></div></div></div><a href=# class=scrollup>Back to the top</a></div></footer><div id=footer-js><script src="/public/js/main.js?v1.0?v=1726491576"></script>
61
61
  <script>(function(){})(jQuery,document)</script></div></body></html>