9 ms·
I found Common Lisp to be surprisingly ahead of its time in many regards (debugging, repl, compilation and execution speed, metaprogramming), but unfortunately
by kubb 5y ago
I found Common Lisp to be surprisingly ahead of its time in many regards (debugging, repl, compilation and execution speed, metaprogramming), but unfortunately it doesn't have a large community, and it's showing its age (no standard package management, threading not built into the language). It's also dynamically typed which disqualifies it for large collaborative projects.
- gibsonf1 5y agoIt has great package management with https://www.quicklisp.org/beta/ https://www.quicklisp.org/beta/ and some truly great and high quality libraries, especially Fukamachi's suite of web libraries and so many others. Woo, for example, is the fastest web server. https://github.com/fukamachi/woo https://github.com/fukamachi/woo (Faster then the runner up Go by quite a bit) For parallel computing, we use: https://lparallel.org/ https://lparallel.org/ Its been great at handling massive loads accross all processors elegantly. And then for locking against overwrites on highly parallel database transactions we use mutex locks that are built into the http://sbcl.org/ http://sbcl.org/ compiler with very handy macros.
- Mikeb85 5y agoSlightly off-topic but I'm in awe of Fukamachi's repos. That one person has built so much incredible stuff is amazing to me. Not sure it's enough to get me using CL all the time, but it's very impressive.
- gibsonf1 5y agoThe math library we use is incredibly fast with quaternion matrix transformations: https://github.com/cbaggers/rtg-math/ https://github.com/cbaggers/rtg-math/ The only gaps we've had with our production code and lisp is PDF (we use the java pdfbox), translating between RDF formats (also a java lib) and encrypting JWP tokens for PKCE dPop authentication (also java) The complete conceputal AI system and space/time causal systems digital twin technology is all in common lisp (sbcl) Also fantastic is the sb-profile library in sbcl that lets you profile any number of functions and see number of iterations and time used as well as consing all ordered by slowest cummulative time. That feature has been key on finding those functions that are slow and optimizing leading to orders of magnitude speed improvements.
- medo-bear 5y agoare you able to go into detail as to what sort of AI technology you are using ? when you mention causal systems do you mean causal inference ?
- gibsonf1 5y agoWe basically build a space/time model of the world, where systems are performing functions in events that take input states and change them into output states such that those events either causally trigger each other or the causal link that the input states to an event means that the event outputting that states is the cause of the current event. The conceptual AI models operational concepts based on an understanding on how human concepts work, inference and automatic classification using those concepts, and then learning new concepts. The operational side of the digital twin uses functional specifications held elsewhere, which is also true of the operational concepts which use specifications in the form of conceptual definitions. And the technology takes in RDF graph as data for input, builds the digital twin model from that data with extensive infererence, then expresses itself back out with RDF graph data. (Making https://solidproject.org/ https://solidproject.org/ the ideal protocol for us where each pod is a digital-twin of something)
- dunefox 5y agoDo you have links to more information?
- gibsonf1 5y agoWe have a beta running on that framework: https://graphmetrix.com https://graphmetrix.com The live app and Pod Server is at https://trinpod.us https://trinpod.us We are working toward commercial launch in the coming weeks. (We are adding Project Pods, Business Pods, Site Pods with harvesting the sematic parse we do of PDFs into the pod, so we handle very big data)
- xedrac 5y agoI don't really consider quicklisp to be "great package management" since you have to download it, install it, then load it. And don't forget to modify your sbcl init script to load it automatically for you. It felt quite cumbersome to get started using it, even though it was simple enough after that. Rust has truly great package management in my opinion. I run one command to install Rust and I immediately have access to all crates in crates.io. EDIT: It's kind of ironic for me to make this claim since I use Emacs as my editor...
- formerly_proven 5y ago> It's also dynamically typed which disqualifies it for large collaborative projects. I've been around the block for long enough to see how far the pendulum swings on this one. I'm guessing that it starts going the other way soon.
- ballpark 5y agoI'm not following, could you elaborate?
- varjag 5y agoDynamic/static typing came in/out of fashion several times already. Any trend is temporary; neither kind of type system is a help or impediment in collaboration.
- brundolf 5y agoI think it originally tanked as a backlash against how verbose and painful it was in Java and friends (as well as the limited benefits because of things like nullability) Modern static type systems are a totally different beast: inference and duck-typing cut down on noise/boilerplate, and the number of bugs that can be caught is dramatically higher thanks to maybe-types, tagged unions/exhaustiveness checking, etc. I think we've circled around to a happy best-of-both-worlds and the pendulum is settling there.
- blacktriangle 5y agoLine noise is a red herring in the static/dynamic comparison. You will still run into serious problems trying to shove ugly human-generated data into your nice clean type system. For mechanical things where you the programmer are building the abstractions (compilers, operating systems, drivers) this is a non-issue, but for dealing with the ugly real world dynamic is still the way to go.
- brundolf 5y ago
- medo-bear 5y agocommon lisp supports type annotations. there is even an ML-type language impletmented in it (see coalton). quick lisp [1] is used for package managment, bordeaux-threads [2] for threading. 1. https://www.quicklisp.org/index.html https://www.quicklisp.org/index.html 2. https://github.com/sionescu/bordeaux-threads https://github.com/sionescu/bordeaux-threads
- AlchemistCamp 5y ago> It's also dynamically typed which disqualifies it for large collaborative projects. Like Github or WordPress?
- jcelerier 5y ago.. are those considered "good" ? github is meh at best considering it's 13yo and the billions of dollars poured into it, and wordpress, I don't think anyone can reasonably say that it's a sane software. They are both good arguments against dynamic typing imho (especially the latter).
- vegai_ 5y agoIf what you're saying is true and those software are mediocre at best, this implies that software quality and success have no correlation. Or perhaps that software quality is not at all what the users of this site tend to think.
- kubb 5y agoQuality of code is not necessary for success, nor does it guarantee it. It does improve your quality of life as an engineer, I can promise you that.
- jcelerier 5y ago> this implies that software quality and success have no correlation. I mean, like in most other fields no ? Most successful movies, books, foods, artworks, furnitures, ... are fairly different from the best ones.
- vegai_ 5y agoBut the least successful art is in every measure bad. I mean for example the movies that score 1.0-2.0 in imdb. But yeah, perhaps the comic book movies are not unlike Wordpress.
- jtmoulia 5y agoCommon lisp has a smaller community than the currently most popular languages, but I'm consistently impressed by the range of and quality of libraries the community has created (despite all the "beta" disclaimers) [1] Regarding type-checking, common lisp is expressive enough to support an ML dialect (see coalton), and is easily extended across paradigms [2] 1. https://project-awesome.org/CodyReichert/awesome-cl https://project-awesome.org/CodyReichert/awesome-cl 2. https://coalton-lang.github.io/ https://coalton-lang.github.io/
- SZJX 5y ago> It's also dynamically typed which disqualifies it for large collaborative projects. That’s a quite absolute statement. At least Erlang/Elixir users would tend to disagree. “Dynamically typed” can still represent a huge variety of approaches, and doesn’t have to always look like writing vanilla JavaScript for example.
- kubb 5y agoI hear your argument as "there exist dynamically typed languages therefore the benefits of typing don't matter". To be positive I'll say that it's better than the pendulum argument. I'm aware that there exist dynamically typed languages in which large projects are written, I'm saying that they would be better off with type safety.
- randomswede 5y agoIt is non-optionally strongly typed. It is optionally as statically typed as you want, depending on what compiler you use, I am mostly familiar with SBCL, which does a fair bit of type inference and will tell you at length where your lack of static typic means it will produce slower code.
- cracauer 5y ago> It's also dynamically typed which disqualifies it for large collaborative projects. You can add type declarations and a good compiler will check against them at compile time: https://medium.com/@MartinCracauer/static-type-checking-in-the-programmable-programming-language-lisp-79bb79eb068a https://medium.com/@MartinCracauer/static-type-checking-in-t...