That’s not a lot by LLM standards. :)
Again, it’s very weird to single out one type of control character. You have to compare syntax trade offs holistically. However, even when you straight up compare parens, there isn’t a significant difference. Pretty much every language, except those using whitespace, will have two parens for arguments and curlies for the function body, or a statement. This is roughly the same number of parens you end up with in Clojure, minus all the other characters. The difference is just not that dramatic in practice.
They’re not doing that, they’re using an alternative approach to EUV
You said that “Lisp” is actually a family of languages, that Clojure uses fewer parens than other Lisps (I object: still more than non-Lisps), that there are macros for infix expression syntax (I object: non-standard/3rd-party solutions that only help with operators), that parens don’t even matter because of structural editing tools (I object: irrelevant, the discussion was about the number of parens, not whether they “matter”).
Clojure, uses different types of syntax to denote different types types of data structures, and thus different types of operations, such as statement declaration. I even gave you examples showing that you get the exact same amount of visual information as you do in other languages.
Meanwhile, you object to the very nature of how Lisp works. The whole point Lisps is that you allow the user to easily create whatever semantics they want using macros. This is something that’s not possible to do in most languages. If you want some new semantics or syntax you have to wait for the language committee to agree on that.
The big advantage here is that the core language can stay small and focused without having to grow over time. This is what you see happening in practically all mainstream languages. Usage patterns change, applications of the language change, and as a result new syntax continues being bolted on which makes the language ever bigger and harder to learn.
On the other hand, with Lisp approach, you have a small language that’s simple and consistent while libraries express different semantics that happen to be needed at the time. As a user you only have to learn the semantics of the libraries used in the project you’re working on. As different patterns fall out of use, they don’t accrete within the core language. New users don’t need to know about random quirks that were popular a decade ago.
Your second objection is also nonsensical because these is how the language used in practice. Pretty much nobody would write code without syntax highlighting, and similarly you wouldn’t use s-expressions based language without structural editing. This is a made up argument that’s a complete non sequitur. I’ve even showed you sweet expression alternative syntax that exists and literally nobody uses. If your argument had any merit to it, then that’s what Lispers would use.
I also disagree with “the total number of parens in your examples is about the same”. This is a micro-example, so when the original Lisp (Clojure) code has 4 pairs of parens and the C-style (JavaScript, Perl) version has 2, that’s twice the parentheses to me, not “about the same”.
const hypot = (x, y) => Math.sqrt(x ** 2 + y ** 2);
4 parens, 1 ,
,1 =
, 1 ;
, 1 =>
, 1 =
(defn hypot [x y] (infix sqrt(x ** 2 + y ** 2)))
6 parens, 1 [
Clojure version is more consistent with less noise. Ignoring all the other noise you have to add is frankly intellectually dishonest. Whether it’s a paren or a comma, or a semicolon, an arrow or an equals sign, it’s still syntax. Clojure version has less syntax. That’s literally less stuff I need to parse visually and worry about when writing code.
Let’s take a look at your JavaScript version more closely, and it immediately becomes obvious that you’re not actually saving anything here. You just end up sprinkling more types of control characters in it:
9 {
, 15 (
, 12 =
(for assignment), 16 ;
3 ,
, 1 ?
,
:`
That’s about a factor of 3. Now, you can argue that I shouldn’t care about the parentheses, but my point is simply that they’re there and you can’t really avoid them if you write in anything resembling idiomatic Lisp.
Yeah if you just ignore all the other control characters you had to add instead then you sure saved on parens. Bravo!
Your whole argument is basically treating parens as something different from other syntax characters, which is a nonsensical argument. If you’re going to compare syntax then you have to compare all the syntax you have. The only type of syntax that will give you significant reduction would be white space based syntax as seen in Python or Haskell, but that adds its own problems hence why most languages avoid it.
the 3B version should need fairly modest hardware
this might be of interest, it’s a model that generates svgs that work really great for stuff like icons https://github.com/OmniSVG/OmniSVG
I’ve found lots of great uses. I find LLMs are great for grammar and spellchecking, acting as a sounding board, doing translations, writing shell scripts, digging through unfamiliar code bases, figuring out configurations for tools, finding relevant stuff in large documents, and they can be helpful for coding in languages I’m not well versed in.
Correct, they built their own infrastructure and aren’t dependent on US big tech by design. Other countries can do this too.
The African Internet Exchange System project was launched by the African Union Commission to promote the exchange of intra-African internet traffic within the continent. Before the project, Africa was paying overseas carriers to handle this traffic, which was both costly and inefficient. The project is a key part of the Program on Infrastructure Development in Africa, which aims to establish an intra-African broadband infrastructure and has highlighted the importance of Internet Exchange Points.
The main difference between the AXIS project’s proposed system and the global internet is the way internet traffic is routed. The global internet often routes intra-African traffic through overseas carriers. The AXIS project’s goal is to keep this traffic within the continent by exchanging it locally or regionally through IXPs. This eliminates the need for international transit, which reduces latency and saves costs.
there’s some more info here
You don’t see google doing much in China or Russia nowadays.
I think it would be a good idea, especially if it’s configurable. Currently, threads on most posts tend to be fairly small, and combining them could help lead to more lively discussions.
I find the whole thing with task estimation is largely masturbative. The reality is that the only thing you have to decide is whether the task is worth doing or not. If it is, then it needs to be done correctly, and that means it’ll take as long as it takes to finish. You can’t just cut corners on a feature for the sake of a timeline. Realistically, deciding on what tasks are a priority should be the main focus of planning. You pick the tasks that are most urgent, and then you work on them till they’re done.
Furthermore, there are broadly two types of tasks. First, is something you’ve done before using the same tools. For that sort of task you can give a relatively accurate estimate. However, any task where you’re doing something new, or using a different tool such as a new framework, library, etc., then all best are off. Even if the task is simple conceptually, it can take a long time because there will be some weird quirk in the libraries, or how they interface together, or a million other things that can go wrong. Best you can do here is to do a research spike that’s time boxed to get a feel for how long the task will take.
The problem is that management gets really obsessive with trying to fit work into whatever timelines are pushed onto them from up top. So they end up forcing developers to commit to some arbitrary numbers that are largely pulled out of your ass, and then either projects run overtime or they’re delivered with lots of bugs because the timeline was completely unreasonable.
The total number of parens in your examples is about the same, except you also have a bunch of noise like random semicolons sprinkled in. Meanwhile, nesting is a feature, not a bug because it provides you with additional visual information about relationships in code. The only people who incessantly bray about nested parens are the ones who’ve never actually worked with Lisp for any period of time. If this was a genuine problem with the syntax then stuff like sweet expressions would’ve taken off. The reality is, as I already explained and you’ve ignored, is that the editor manages the parens for you. When you work with Lisp, typing opening paren is equivalent to having a command sequence to say I’m starting a new expression.
OK, my code snippets are Common Lisp. But note that none of them involve list/vector/set literals. I was thinking of [] for array indexing and {} for code blocks.
Again, Clojure uses vectors for arguments, so you end up with syntax like this which provides the same visual information as any mainstream language.
It doesn’t solve the main issue anyway. Take this snippet from the “infix” readme:
Yes it does actually because you have syntax hints indicating the type of data structure you’re looking at. For example, in the snippet you highlight, the function arguments are in a vector.
It ends with a cluster of )))) (reinforcing the “lots of parentheses” impression) and all of those parentheses mean something different
First of all, you have exact same amount of parens as you would in a mainstream language like Java, C, or Js. Second, the parens do mean the same thing in that example. The big benefit with s-exps though is that you have structural editing, and you don’t actually manage parens by hand or even think about them. You treat expressions as building blocks that you manipulate and compose together. There’s nothing even remotely comparable to this available in languages like Haskell.
However, here’s an example for you where you don’t have same parens.
(defn foo [{:keys [x y]}]
(let [z (str x " " y)]
{:result z}))
here you have different data structures manipulated, and you have different parens representing them.
From the outside in, we have the end of a symbol definition (def …), the end of a function (fn …), the end of a macro invocation (infix …), and the end of a function call sqrt(…). It definitely isn’t just “the same number [of parentheses] as any other language that uses parentheses to make function calls”.
It’s just broken down in the example. In practice you have defn
and you just write:
(defn hypot [x y] (infix sqrt(x ** 2 + y ** 2)))
The huge advantage over Haskell is that syntax is very simple and regular. You don’t have to think about it at all. Languages like Haskell and Perl introduce a lot of mental overhead because you have to memorize all the special cases and behaviors the syntax introduces. You can write really concise code, but there’s a cost to it. There’s a reason people refer to Perl as a write only language. On the other hand, Clojure hits the sweet spot of being very concise without needing a complex syntax.
If anything, I’d argue that superficial similarity to math notation is just more confusing when you’re learning imperative languages.
The whole conspiracy theory started with a claim of millions of Uyghurs being supposedly imprisoned story is based on two highly dubious “studies.”. However, this claim is completely absurd when you stop and think about it even for a minute. That figure 1 million is repeated again and again. Let’s just look at how much space would you actually need to intern one million people.
This is a photo of Rikers Island, New York City’s biggest prison. The actual size of a facility interning ten thousand people.
According to Wikipedia, “The average daily inmate population on the island is about 10,000, although it can hold a maximum of 15,000.” Let’s assume this is a Xinjiang detention camp, holding ten to fifteen thousand people. How many of these would it take to hold one million people?
Let’s do some math:
Rikers Size | Rikers Prisoners | One Million Uyghurs Size |
---|---|---|
413.2 acres (0.645 square miles) | 10,000 to 15,000 | 43 to 64 square miles |
In reality, one million people would probably take more space; all the supposed detention camps we see are much less dense than Rikers.
For comparison, San Francisco is 47 square miles. Amsterdam is 64 square miles. You’d literally need detention camps that total the size of San Francisco or Amsterdam to intern one million Uyghurs. It’d be like looking at a map of California. There’s Los Angeles. There’s San Diego. And look, there’s San Francisco Concentration City with its one million Uyghurs.
Literally visible to the naked eye from space.
CHRD states that it interviewed dozens of ethnic Uyghurs in the course of its study, but their enormous estimate was ultimately based on interviews with exactly eight Uyghur individuals. Based on this absurdly small sample of research subjects in an area whose total population is 20 million, CHRD “extrapolated estimates” that “at least 10% of villagers […] are being detained in re-education detention camps, and 20% are being forced to attend day/evening re-education camps in the villages or townships, totaling 30% in both types of camps.” Furthermore, it doesn’t even make sense from logistics perspective.
Practically all the stories we see about China trace back to Adrian Zenz is a far right fundamentalist nutcase and not a reliable source for any sort of information. The fact that he’s the primary source for practically every article in western media demonstrates precisely what I’m talking about when I say that coverage is divorced from reality.
Zenz is a born-again Christian who lectures at the European School of Culture and Theology. This anodyne-sounding campus is actually the German base of Columbia International University, a US-based evangelical Christian seminary which considers the “Bible to be the ultimate foundation and the final truth in every aspect of our lives,” and whose mission is to “educate people from a biblical worldview to impact the nations with the message of Christ.”
Zenz’s work on China is inspired by this biblical worldview, as he recently explained in an interview with the Wall Street Journal. “I feel very clearly led by God to do this,” he said. “I can put it that way. I’m not afraid to say that. With Xinjiang, things really changed. It became like a mission, or a ministry.”.
Along with his “mission” against China, heavenly guidance has apparently prompted Zenz to denounce homosexuality, gender equality, and the banning of physical punishment against children as threats to Christianity.
Zenz outlined these views in a book he co-authored in 2012, titled Worthy to Escape: Why All Believers Will Not Be Raptured Before the Tribulation. In the tome, Zenz discussed the return of Jesus Christ, the coming wrath of God, and the rise of the Antichrist.
The fact that this nutcase is being paraded as a credible researcher on the subject is absolutely surreal, and it’s clear that the methodology of his “research” doesn’t pass any kind of muster when examined closely.
It’s also worth noting that there is a political angle around the narrative around Xinjiang. For example, here’s George Bush’s chief of staff openly saying that US wants to destabilize the region, and NED admitting to funding Uyghur separatism for the past 16 years on their own official Twitter page. An ex-CIA operative details US operations radicalizing and training terrorists in the region in this book. Here’s an excerpt:
US has been stoking terrorism in the region while they’ve been running a propaganda campaign against China in the west. In fact, US even classified Uyghur separatists as a terrorist group at one point https://www.mintpressnews.com/us-was-at-war-uyghur-terrorists-now-claims-etim-doesnt-exist/276916/
Here’s an interview with a son of imam killed in Xinjiang https://news.cgtn.com/news/2020-06-19/Son-of-imam-assassinated-in-Kashgar-s-2014-mosque-attack-speaks-out-RqNiyrcRuo/index.html
Here’s an account from a Pakistani journalist who has been all over Xinjiang (which borders Pakistan) claims that western media reports on “atrocities” are lies. https://dailytimes.com.pk/723317/exposing-the-occidents-baseless-lies-about-xinjiang/
It’s also worth noting that the accusations originate entirely from the west while Muslim majority countries support China, and their leaders have visited Xinjiang many times.
Also notable that whenever western media actually deigns to visit Xinjiang, which is not often, they’re unable to produce support for any of their claims of mass imprisonment and oppression, so they opt for insinuations instead https://apnews.com/article/coronavirus-pandemic-lifestyle-china-health-travel-7a6967f335f97ca868cc618ea84b98b9
There’s a further list of debunking here if you’re interested https://redsails.org/the-xinjiang-atrocity-propaganda-blitz/
The whole thing is very clearly a propaganda blitz that US is cynically using to manipulate impressionable people in the west.
The whole notion that voting is the only action one can take to participate politically is absurd. You can join a union, educate people around you, organize strikes, do mutual aid, and a myriad other things that don’t involve voting for a party that’s simply less heinous than the alternative.