38 ms·
Tulip – An untyped functional language
- giancarlostoro 12y agoLink is down for me. Google Cache Text-Only: http://webcache.googleusercontent.com/search?q=cache:cOp3ebJoVLEJ:www.jneen.net/posts/2015-03-01-tulip-language&client=ubuntu&hl=en&gl=us&strip=1 http://webcache.googleusercontent.com/search?q=cache:cOp3ebJ...
- jneen 12y agoArgh, thanks for the cache link. I'm still on heroku free-tier :\
- duaneb 12y agoNote that it definitely has types, they just aren't required explicitly. It seems to use dynamic type matching.
- jneen 12y agoYep! It focuses more on dynamic type-checks than on static typing though, so I put it in the category of "untyped functional" - more like clojure and erlang than haskell or ml.
- duaneb 12y agoWell, dynamic types are still types. :) It also seems strongly typed through a lack of implicit conversions between types. I would say this is more like go than anything, though it seems to lack methods (and interfaces) and includes a functional syntax. You're going to run into issues when attempting to extend polymorphism for built-in functions to user-defined types—imagine trying to figure out how to sort an 'unknown' type without a way to compare them without modifying the method to be explicitly aware of the new type.
- asQuirreL 12y agoThere does seem to be a method/interface system (Under the "Methods, Protocols, Implementations" header). And it seems to have some sort of dispatch system for tagged structures that can be later modified by the user.
- jneen 12y agoExactly! This is what the @method / @impl system is for - it's about equivalent to clojure's defprotocol. Future plans include named protocols consisting of multiple methods, and protocol-based matching.
- namanbharadwaj 12y agoIt's unityped! It has one type with infinitely many variants/tags (.<string>). Match failure occurs at runtime as in any other safe typed language such as Haskell or ML.
- duaneb 12y agoIf you customize your runtime behavior based on any metadata about the value on which you operate, you have multiple types. Attempting to change the syntax will not change the fact that you need to differentiate behavior for numbers and strings.
- klibertp 12y ago> the fact that you need to differentiate behavior for numbers and strings That's actually not exactly right: for example in Forth you really have no types at all. Also, if somewhat uses a word such as "unityped" or "type with infinitely many variants" you should immediately know that any mention that "there are types, alright, just checked on runtime" will be immediately rejected. Majority of static typing fanatics are like that.
- jerf 12y ago"Majority of static typing fanatics are like that." That's not the problem. The problem is that to a first approximation, every language is "type safe" in the sense that you can't add a string to a number. Even in those languages where it looks like you can, it's because of a certain usually-limited set of automatic coercions, not because you can actually add a number to a string. Truly adding a number to a string looks like this: number: 0x000000000000002a string: 0x7ffb000000007264 result: 0x7ffb00000000728e The string is, of course, a pointer, and the result, of course, is gibberish. This is why "no" languages to speak of implement this form of "untyped language"; it isn't what anybody actually wants. (Assembler, of course, has it, but that's an exception for obvious reasons.) A term that describes essentially 100% of languages is not a useful one, so static typing usually refers to a language whose type system is somehow more restrictive at compile time than "Everything is a variant type and we'll work it out at runtime".
- wyager 12y ago"I’ve renamed the language from Unf to Tulip, because some folks pointed out that the old name created an unnecessarily sexualized environment" Are fifth graders critiquing programming languages now? Seriously, who makes that association and then feels the need to comment on it?
- evincarofautumn 12y ago“Unf” is quite widely used as a spelling of a moan, to express sexual desire or gratification. While it can be used to express non-sexual enjoyment, the sexual connotation it evokes is just unnecessary when it comes to a programming language, regardless of the original intent.
- a_c_s 12y agoWhile I've never seen this use personally, UrbanDictionary very strongly corroborates this. http://www.urbandictionary.com/define.php?term=unf http://www.urbandictionary.com/define.php?term=unf
- evincarofautumn 12y agoIt’s worth noting that “universal noise of fucking” is a backronym—the word was originally onomatopoeic.
- TazeTSchnitzel 12y agoIt is, still, but urbandictionary users like making inaccurate definitions as an attempt at "humour"
- david-given 12y agoAs an counter datapoint, this is the first time I have ever heard of this.
- TazeTSchnitzel 12y ago
- lectrick 12y ago> I strongly dislike macros that can hide in code. I get really frustrated when I open a source file and see (foo ...) and can’t tell whether it’s a function or a macro until I read documentation. Well... that's just, like, your opinion, man. Seriously though. In Elixir, for example, much of the language itself is implemented via its own macros, which demonstrates a certain nice extensibility. If Elixir followed this same pattern, it would get really annoying really quickly, as even simple if statements would require a leading slash. Also, I preferred "unf" ;)
- jneen 12y agoYep, it's my opinion, and that's why I put it into the design. Lots of language design comes from opinions. I hope it's borne out. FWIW it's the same approach Rust has taken, where macros have to end with a ! to make them visually distinct.
- lectrick 12y agoThat might be because Rust might not eat its own dogfood in that department, and build some of its own functionality out of its macro system. But I can see just "knowing" at a glance if it's a macro or not. I think the answer would basically be determined by how much of the language itself uses its own macro system AND what type of macro system it actually is. If it's significant, having special syntax would just look weird.
- kibwen 12y agoRust does eat its own dogfood with regard to macros, and over time has steadily replaced former language-level features like `log` and `panic` with macros. Syntactic distinction is a philosophical choice in service of making costs more explicit (and while it's true that functions can hide behavior, overuse of macros can trigger enormous code bloat, such as the `regex!` macro which compiles your regex into a state machine). (There are also valid technical reasons for requiring syntactic distinction, as the sheer flexibility of Rust's macros in their ability to create new syntax run the risk of making it a nightmare to parse if you remove the unambiguous ability of the compiler to drop into macro-parsing mode. These challenges aren't insurmountable, just very hairy.)
- _pmf_ 12y agoThis might seem strange, but if there's one thing from Common Lisp that should receive wider adoption in other languages, it's hyphenated names. They are so much more readable than anything else (well, C with underscores comes close).
- rdtsc 12y agoEasier to type too. No need to press the shift key.
- jewel 12y agoThis would be an easy text-transformation that you could do in vim. Upon opening the file, translate all dashes without spaces "foo-bar" to add spaces "foo - bar". Then convert all underscores to dashes. "foo_bar" to "foo-bar". On save, invert the process. You'd have to actually run the language's parser in order to do the transformation to avoid changing strings, and even then it'd only work if the parser output kept track of the original line and character so that you could know where to make the change. This sort of text-transformation is something I've long wished my text editor did. At a previous job the standard was three-spaces of indent, regardless of the language.
- klibertp 12y ago> This sort of text-transformation is something I've long wished my text editor did. Emacs does this in some cases: specifically for camelCasedWords (http://www.masteringemacs.org/article/making-camelcase-readable-glasses-mode http://www.masteringemacs.org/article/making-camelcase-reada...) and for the word 'lambda' which can be displayed as a symbol. There are many other modes which "overlay" some text over how it looked originally.
- TazeTSchnitzel 12y agoThis is such a good idea I just added it to my current toy language: https://github.com/TazeTSchnitzel/Firth/commit/7b9bf0b4c090efa24944044741d541cb46423ecc https://github.com/TazeTSchnitzel/Firth/commit/7b9bf0b4c090e... Thanks for the idea! :)
- 12y ago
- chubot 12y agoThis looks cool -- is there any source code? What language is it written in? "Tulip is still in active development, and I could use a whole lot of help, both filling in the design gaps here and actually churning out the implementation"
- klibertp 12y agohttps://github.com/jneen/tulip https://github.com/jneen/tulip
- chubot 12y agoOK interesting, it actually appears to be written in RPython, not full Python: https://github.com/jneen/tulip/blob/master/tulip/libedit.py https://github.com/jneen/tulip/blob/master/tulip/libedit.py (RPython is the "static" subset of Python used to bootstrap PyPy)
- maxerickson 12y agoThey have moved towards treating RPython as a framework: http://rpython.readthedocs.org/ http://rpython.readthedocs.org/
- jneen 12y agoYeah, it's basically a toolkit for building jitted languages. Basically the easiest way to get a tracing jit these days. So it'll be a self-hosting jit similar to pypy or pixie.
- otabdeveloper 12y agoIf that sort of thing interests you, also check out my language 'tab' (https://bitbucket.org/tkatchev/tab https://bitbucket.org/tkatchev/tab). Tab is a statically-typed, functional, type-inferred language that occupies a niche between bash and python. It's also not Turing-complete but can compute almost everything you could ever think of. (I wish more languages aimed for Turing-incompleteness -- unsurprisingly, it turns out Turing-incomplete languages have big benefits for performance and resource management.)
- g8gggu89 12y agoHow is yours not Turing-complete and what benefits are there?