[HN Gopher] Flix - Safe, reliable, concise, and functional-first... ___________________________________________________________________ Flix - Safe, reliable, concise, and functional-first programming language Author : nikolay Score : 133 points Date : 2022-05-20 15:35 UTC (3 days ago) (HTM) web link (flix.dev) (TXT) w3m dump (flix.dev) | hulitu wrote: | > Flix - Safe, Reliable, Concise, and Functional-First | Programming Language | | "Ensure that you have at least Java 11 installed. " | | How about a compiler or an interpreter ? | | "Download the latest version of the Flix compiler (flix.jar) at | https://github.com/flix/flix/releases/latest. | | Create an empty folder (e.g. mkdir flixproject) and place the | downloaded Flix JAR (flix.jar) into that folder. | | Enter the created directory (e.g. cd flixproject) and run java | -jar flix.jar init to create an empty Flix project. | | Run java -jar flix.jar run to compile and run the project. | | Flix will compile the project and execute the main function | (located in src/Main.flix). | | " | | So getting started is about running an empty project file ? How | about some code examples ? I wanted to see what is a "Safe, | Reliable, Concise, and Functional-First Programming Language". | And all i get is an empty project ? | | After reading some docs it looks like a lisp without parantheses | and one has to have a good understanding of lambda functions to | be able to read the documentation. | jorkadeen wrote: | Be sure to check out https://flix.dev/ and | https://github.com/flix/flix/tree/master/examples for more | examples. | | (I am one of the authors of Flix.) | Smaug123 wrote: | Scroll down! The homepage shows examples of ADTs, purity | tracking (yay!) and pattern matching on purity (oooooh), effect | polymorphism (oooooh again), type classes, HKTs, and an | embedded Datalog DSL. | all2 wrote: | I rather liked Nim's one line install of a binary. Starting and | running a project is as simple as "nim c -r <file_name>.nim". | | I appreciate languages/toolkits that are concise in their | tooling. Golang is another language like this. The tooling is | simple (though Golang is more opinionated than Nim in things | like testing and project layouts) and easy to reason about. | lucas_membrane wrote: | Many languages running on JVM boast of an FFI allowing use of | much existing code already written in Java. Is such, or will such | be, possible in Flix? | | What is the overall status of the implementation, particularly | for real world applications (features like talking to a network, | file systems, databases and operating system, and/or FFIs for JVM | or non-JVM languages)? | mjs2600 wrote: | I found this[1] section in the documentation on | interoperability within the JVM. It looks fairly | straightforward to work with. I'm not sure about FFI more | generally. | | [1] https://doc.flix.dev/interoperability/ | rco8786 wrote: | Looks interesting, will definitely dig into. Right off the bat | though, I see 3 different syntaxes for typing? | | > case Rectangle(Int32, Int32) | | > def origin(): (Int32, Int32) = | | > def twoByFour(): {w :: Int32, h :: Int32} = | | case Rectangle: (Int32, Int32) | | def origin(): (Int32, Int32) | | def twoByFour(): (w: Int32, h: Int32) | | ? | djur wrote: | The first one is part of the syntax for defining a sum type, | the second is a function returning a tuple, and the third is a | function returning a record. | codeptualize wrote: | Love the FAQ page! | gunshowmo wrote: | This is an extremely strong set of features in one language. All | the best in this project! | mindcrime wrote: | Wow, this looks pretty exciting. Like @jitl said, the idea of | built-in Datalog support sounds _really_ interesting. I don 't | know how I missed the earlier announcements of this, but now that | I found it I'm definitely going to give it a spin. | the_duke wrote: | Sadly the effects system seems to be just "pure vs impure" | tracking per function. No arbitrary effects or custom handlers. | | Is that accurate?I was hoping for something more like Koka. | | Otherwise that is a very intriguing combination of features, | especially first class Datalog constraints. | | Any plans for additional backends? (native, Webassembly)? | kldx wrote: | Is this what I think it is? | | Ref. _What color is your function_ | jorkadeen wrote: | The color of your function can be "effect polymorphic". In | other words, e.g. List.map works with both pure and impure | functions. You don't have to write two versions of List.map. | jorkadeen wrote: | At the moment the effect system only distinguishes between pure | and impure (and effect polymorphic) expressions, but we are | working towards a richer system. For example, we will soon be | able to express something like: def swap!(a: | Array[a, r], i: Int32, j: Int32): Unit \ { Read(r), Write(r) } | | We are aware of algebraic effects and handlers, but let's just | say that we prefer to underpromise and overdeliver. | | (I am one of the authors of Flix.) | dang wrote: | Related: | | _In Defense of Programming Languages_ - | https://news.ycombinator.com/item?id=27799063 - July 2021 (1 | comment) | | _Flix - Next-generation reliable, concise, functional-first | programming language_ - | https://news.ycombinator.com/item?id=25513397 - Dec 2020 (84 | comments) | | _The Flix Programming Language_ - | https://news.ycombinator.com/item?id=19928153 - May 2019 (2 | comments) | jitl wrote: | The Datalog support is a very interesting feature for such a | fully-featured language. From the home page: | def reachable(g: List[(String, Int32, String)], minSpeed: Int32): | List[(String, String)] = let facts = project g into | Road; let rules = #{ Path(x, y) :- | Road(x, maxSpeed, y), if maxSpeed >= minSpeed. | Path(x, z) :- Path(x, y), Road(y, maxSpeed, z), if maxSpeed >= | minSpeed. }; query facts, rules select | (src, dst) from Path(src, dst) |> Foldable.toList | | Composing datalog natively like any other type - very cool. | all2 wrote: | > Composing datalog natively | | I'm naive. What does this mean and why is it important? | jorkadeen wrote: | Datalog programs are values. You can store them in local | variables, pass them as arguments, and return them. If you | have two Datalog values you can combine them into one | (effectively it's just the union of them). This allows you to | write small "Datalog fragments" and stitch them together into | a larger program. The type system ensures that this stays | meaningful. | | (I am one of the authors of Flix.) | pharmakom wrote: | Just look at any template heavy c++ library. | Blackthorn wrote: | That really doesn't answer the question. (I'm not sure what | it really means either, it's a good question.) | machiaweliczny wrote: | In short you work with tree (AST) and can compose instead of | stiching strings (builder pattern) | | Good thing of having common AST in language is libs | interoperability. | | It's like normal lanugages had SQL support built-in (except | you can't do that easily as SQL is order dependent) | [deleted] | james-redwood wrote: | > Flix looks quite similar to Scala. How are the two languages | related? | | > Flix borrows a lot of syntax from Scala, hence the two | languages have a similar feel. We think Scala made many good | design choices with respect to syntax, including: (a) the use of | short keywords, (b) the x : T syntax for type annotations, (c) | the List[Int32] syntax for type parameters, and (d) if, match, | etc. as expressions. | | > Other than syntax, the two languages are very different: Scala | is object-oriented, Flix is not. Scala has sub-typing, Flix does | not. The Scala type system is unsound and has imperfect type | inference, whereas the Flix type system is both sound and | supports type inference. | | https://flix.dev/faq/ | LesZedCB wrote: | wow this is a really pretty language, nice work to the authors. | definitely will be giving it a shot | zinclozenge wrote: | I've had my eye on flix for a while. I really like the feature | set. ___________________________________________________________________ (page generated 2022-05-23 23:00 UTC)