Especially as, if it were just "In celebration of the 125th anniversary of the birth of Vladimir Nabokov", you'd have thought that something like Pale Fire would be a better choice of name for a tech product. Partly because of all the references to it in Blade Runner 2049, but also because Pale Fire is just a much, much cooler name in general.
What is this tendency of naming so many programming languages with some already relatively common words, why isn't there proper search engine optimization going on? I can kinda excuse pre-internet ones, but new ones? Just why are people making lives hard for others...
Yup. Even if the authors are totally naive to the negative association, this name renders it simply unusable to many organizations. Simply Googling the name on a work computer could land some people in hot water.
It is very likely the case that the author does not particularly care about what happens to people who google the name on their work computers. They are probably firing any customers that expect a dependable system from their hobby project.
Yeah I dislike that too. Very annoying. Not as bad as "go" but still, come on, at least change the name a little bit to make it unique but keep the reference you want to use.
Impressive work. The author looks to be in his very early 20s, and his other blogs talk about compiler development and calculus.
The PDF of the language reads like ancient scriptures to me.
——
Re: name
I have emailed the author about the name choice and whether he would reconsider it as I think this is a high-quality project. The author is on HN (same name as his GH handle) so maybe he will reconsider.
I see that the stated reason for the name is that today would have been Nabokov's 125th birthday. But Nabokov had other works (why not call it palefire?) and this could have been released on any particular day. So the connection is tenuous at best.
> Couple of inches taller. Pink-rimmed glasses. New, heaped-up hairdo, new ears. How simple! The moment, the death that I had kept conjuring up for three years was as simple as a bit of dry wood.
This is on the language FAQ. If memory serves this is the scene where Humbert has tracked down Dolores later in life and is contemplating murdering the now pregnant girl who he earlier sexually abused. What the actual hell? If this is supposed to be a joke it’s in decidedly poor taste. And that’s the best case.
At 19, the author's age, I was two years into my Nabokov obsession. I wouldn't have understood why the name was a problem, either. Personally, I'd have thought anyone who criticized it was a philistine. (Nabokov's self-styled "strong opinions" had that effect on me at that age.) Didn't they know the _point_ was that Humbert was a monster, etc. 15 years later, life experience has broadened my horizons a bit, but I still remember the feeling of being under the influence of such an eloquent writer for the first time.
This isn't to justify the name itself but to cut the author some slack since the name is attracting more attention here than the design, and understandably so, but the design is an achievement, and a laudable one. I'd hope someone would've done the same for me at that age if I'd gone public with a project like this.
Insofar as the pull quotes that don't have plausible deniability are по-русски, I'm pretty sure the author knew what he was doing. (aiming at deliberate* impopularity: широко известный в узких кругах?)
eg completely SFW, the references for the design doc:
Cardelli L. A Polymorphic [lambda]-calculus with Type: Type. – Digital Systems Research Center, 1986. ↩ ↩2 ↩3
John McCarthy. 1960. Recursive functions of symbolic expressions and their computation by machine, Part I. Commun. ACM 3, 4 (April 1960), 184–195. https://doi.org/10.1145/367177.367199 ↩
Turchin, Valentin F.. “A dialogue on Metasystem transition.” World Futures 45 (1995): 5-57. ↩
Gundry, Adam and Conor McBride. “A tutorial implementation of dynamic pattern unification A dependently typed programming language implementation pearl.” (2012). ↩
Kovács, András. “Elaboration with first-class implicit function types.” Proceedings of the ACM on Programming Languages 4 (2020): 1 - 29. ↩
Meven Lennon-Bertrand. (2021). Complete Bidirectional Typing for the Calculus of Inductive Constructions. ↩
Augustsson, L. (1999). Cayenne — A Language with Dependent Types. In: Swierstra, S.D., Oliveira, J.N., Henriques, P.R. (eds) Advanced Functional Programming. AFP 1998. Lecture Notes in Computer Science, vol 1608. Springer, Berlin, Heidelberg. https://doi.org/10.1007/10704973_6 ↩ ↩2
White, L., Bour, F., & Yallop, J. (2015). Modular implicits. Electronic Proceedings in Theoretical Computer Science, 198, 22–63. ↩ ↩2
Yang, Y., Bi, X., Oliveira, B.C.d.S. (2016). Unified Syntax with Iso-types. In: Igarashi, A. (eds) Programming Languages and Systems. APLAS 2016. Lecture Notes in Computer Science(), vol 10017. Springer, Cham. https://doi.org/10.1007/978-3-319-47958-3_14 ↩ ↩2 ↩3
Yang, Y., Bi, X., Oliveira, B.C.d.S.: Unified syntax with iso-types. Extended ver- sion available from https://bitbucket.org/ypyang/aplas16 (2016) ↩
Adam Chlipala. 2008. Parametric higher-order abstract syntax for mechanized semantics. In Proceedings of the 13th ACM SIGPLAN international conference on Functional programming (ICFP '08). Association for Computing Machinery, New York, NY, USA, 143–156. https://doi.org/10.1145/1411204.1411226 ↩
Gibbons, Jeremy & Wu, Nicolas. (2014). Folding domain-specific languages: Deep and shallow embeddings (functional Pearl). Proceedings of the ACM SIGPLAN International Conference on Functional Programming, ICFP. 49. 10.1145/2628136.2628138. ↩
Carette, J., Kiselyov, O., Shan, Cc. (2007). Finally Tagless, Partially Evaluated. In: Shao, Z. (eds) Programming Languages and Systems. APLAS 2007. Lecture Notes in Computer Science, vol 4807. Springer, Berlin, Heidelberg. https://doi.org/10.1007/978-3-540-76637-7_15 ↩ ↩2 ↩3 ↩4
Kiselyov, O. (2012). Typed Tagless Final Interpreters. In: Gibbons, J. (eds) Generic and Indexed Programming. Lecture Notes in Computer Science, vol 7470. Springer, Berlin, Heidelberg. https://doi.org/10.1007/978-3...
Anyone care to do a direct comparison with Ocaml? It seems that the types are featured more prominently here. I always thought that type inference was a strength of Ocaml. Maybe that is unpopular now?
In other words, values of type `'a list` are either `[]` (the empty list, like `nil` in Lisp), or `(::)` applied to two arguments (prepending an element to a list, like `cons` in Lisp). We can tell whether a particular value is one of the other by storing a bit of information, called a "tag". We can later branch on that bit to perform pattern-matching.
In constrast, the "tagless" encoding seems closer to Church-encoding. A Church-encoded list is a function which accepts two arguments, say `x` and `y`:
- An "empty list" will return `x` as-is.
- A non-empty list will call `y` with two arguments: one argument is the first element of the list, and the other argument is the result of calling the tail of the list with `x` and `y`.
Such functions have many other names, like "elimination forms", or "induction/recursion schemes", etc.
The linked page shows an example of implementing lists using the tagless approach, which like Church encoding but collects together the required parts in a record. I reckon a similar approach could be implemented via modules, but am not too experienced in Ocaml to know how easy/awkward that would be.
Very impressive feature set, which aligns with many of my own interests too (symbolic execution, partial evaluation, etc.). If nothing else, it's the first explanation of "finally tagless" that clicked for me!
I agree with others that the name is needlessly off-putting.
49 comments
[ 6.7 ms ] story [ 108 ms ] threadPale Fire, Kinbote, Shade, Zembla, Waxwing, Gradus
…All of which are preferable to the name of the language we are discussing, and I’m saying this as both a fan of the book and film.
Sounds like name for a craft beer.
https://www.idris-lang.org/index.html
The PDF of the language reads like ancient scriptures to me.
——
Re: name
I have emailed the author about the name choice and whether he would reconsider it as I think this is a high-quality project. The author is on HN (same name as his GH handle) so maybe he will reconsider.
So maybe... name it Nabokov?
And then there is the docs, taste.md?
It's a little disturbing.This is on the language FAQ. If memory serves this is the scene where Humbert has tracked down Dolores later in life and is contemplating murdering the now pregnant girl who he earlier sexually abused. What the actual hell? If this is supposed to be a joke it’s in decidedly poor taste. And that’s the best case.
This isn't to justify the name itself but to cut the author some slack since the name is attracting more attention here than the design, and understandably so, but the design is an achievement, and a laudable one. I'd hope someone would've done the same for me at that age if I'd gone public with a project like this.
That said, https://github.com/lolita-lang/lolita/blob/master/docs/desig... is impressive, and I guess, as it's open source, someone could always Bowdlerise the project for HN?
* keep in mind my poor track record: I originally thought the religious conceit of TempleOS might have been a similar ploy.Cardelli L. A Polymorphic [lambda]-calculus with Type: Type. – Digital Systems Research Center, 1986. ↩ ↩2 ↩3
John McCarthy. 1960. Recursive functions of symbolic expressions and their computation by machine, Part I. Commun. ACM 3, 4 (April 1960), 184–195. https://doi.org/10.1145/367177.367199 ↩
Turchin, Valentin F.. “A dialogue on Metasystem transition.” World Futures 45 (1995): 5-57. ↩
Jana Dunfield and Neel Krishnaswami. 2021. Bidirectional Typing. ACM Comput. Surv. 54, 5, Article 98 (June 2022), 38 pages. https://doi.org/10.1145/3450952 ↩
Gundry, Adam and Conor McBride. “A tutorial implementation of dynamic pattern unification A dependently typed programming language implementation pearl.” (2012). ↩
Kovács, András. “Elaboration with first-class implicit function types.” Proceedings of the ACM on Programming Languages 4 (2020): 1 - 29. ↩
Meven Lennon-Bertrand. (2021). Complete Bidirectional Typing for the Calculus of Inductive Constructions. ↩
Luca Cardelli. 1996. Type systems. ACM Comput. Surv. 28, 1 (March 1996), 263–264. https://doi.org/10.1145/234313.234418 ↩
Augustsson, L. (1999). Cayenne — A Language with Dependent Types. In: Swierstra, S.D., Oliveira, J.N., Henriques, P.R. (eds) Advanced Functional Programming. AFP 1998. Lecture Notes in Computer Science, vol 1608. Springer, Berlin, Heidelberg. https://doi.org/10.1007/10704973_6 ↩ ↩2
White, L., Bour, F., & Yallop, J. (2015). Modular implicits. Electronic Proceedings in Theoretical Computer Science, 198, 22–63. ↩ ↩2
Yang, Y., Bi, X., Oliveira, B.C.d.S. (2016). Unified Syntax with Iso-types. In: Igarashi, A. (eds) Programming Languages and Systems. APLAS 2016. Lecture Notes in Computer Science(), vol 10017. Springer, Cham. https://doi.org/10.1007/978-3-319-47958-3_14 ↩ ↩2 ↩3
Yang, Y., Bi, X., Oliveira, B.C.d.S.: Unified syntax with iso-types. Extended ver- sion available from https://bitbucket.org/ypyang/aplas16 (2016) ↩
Adam Chlipala. 2008. Parametric higher-order abstract syntax for mechanized semantics. In Proceedings of the 13th ACM SIGPLAN international conference on Functional programming (ICFP '08). Association for Computing Machinery, New York, NY, USA, 143–156. https://doi.org/10.1145/1411204.1411226 ↩
Gibbons, Jeremy & Wu, Nicolas. (2014). Folding domain-specific languages: Deep and shallow embeddings (functional Pearl). Proceedings of the ACM SIGPLAN International Conference on Functional Programming, ICFP. 49. 10.1145/2628136.2628138. ↩
Carette, J., Kiselyov, O., Shan, Cc. (2007). Finally Tagless, Partially Evaluated. In: Shao, Z. (eds) Programming Languages and Systems. APLAS 2007. Lecture Notes in Computer Science, vol 4807. Springer, Berlin, Heidelberg. https://doi.org/10.1007/978-3-540-76637-7_15 ↩ ↩2 ↩3 ↩4
Kiselyov, O. (2012). Typed Tagless Final Interpreters. In: Gibbons, J. (eds) Generic and Indexed Programming. Lecture Notes in Computer Science, vol 7470. Springer, Berlin, Heidelberg. https://doi.org/10.1007/978-3...
In constrast, the "tagless" encoding seems closer to Church-encoding. A Church-encoded list is a function which accepts two arguments, say `x` and `y`:
- An "empty list" will return `x` as-is.
- A non-empty list will call `y` with two arguments: one argument is the first element of the list, and the other argument is the result of calling the tail of the list with `x` and `y`.
Such functions have many other names, like "elimination forms", or "induction/recursion schemes", etc.
The linked page shows an example of implementing lists using the tagless approach, which like Church encoding but collects together the required parts in a record. I reckon a similar approach could be implemented via modules, but am not too experienced in Ocaml to know how easy/awkward that would be.
I agree with others that the name is needlessly off-putting.