TE
科技回声
首页24小时热榜最新最佳问答展示工作
GitHubTwitter
首页

科技回声

基于 Next.js 构建的科技新闻平台,提供全球科技新闻和讨论内容。

GitHubTwitter

首页

首页最新最佳问答展示工作

资源链接

HackerNews API原版 HackerNewsNext.js

© 2025 科技回声. 版权所有。

I don't want to go to Chel-C

123 点作者 contrapunctus将近 3 年前

18 条评论

ezy将近 3 年前
This is, of course, an argument against a strawman. I wish the author had not mentioned certain folks by name, because the analysis is interesting on its own, and makes some good points about apparent simplicity. However, by mentioning a specific person, and then restating that person&#x27;s opinion poorly, it does a disservice to the material, and basically it just devolves the whole thing.<p>My understanding of Jon Blow&#x27;s argument is <i>not</i> that he is against certain classes of &quot;safe&quot; languages, or even formal verification. It is that software, self-evidently, does not work well -- or at least not as well as it should. And a big reason for that is indeed layers of unnecessary complexity that allow people to pretend they are being thoughtful, but serve no useful purpose in the end. The meta-reason being that there is a distinct lack of care in the industry -- that the kind of meticulousness one would associate with something like formal verification (or more visibly, UI design and performance) <i>isn&#x27;t present</i> in most software. It is, in fact, this kind of care and dedication that he is arguing <i>for</i>.<p>His language is an attempt to express that. That said, I&#x27;m not so sure it will be successful at it. I have some reservations that are sort of similar to the authors of this piece -- but I do appreciate how it makes an attempt, and I think <i>is</i> successful in certain parts, that I hope others borrow from (and I think some already have).
评论 #31707476 未加载
评论 #31707607 未加载
评论 #31713131 未加载
评论 #31711047 未加载
评论 #31711287 未加载
Stampo00将近 3 年前
I agree with the overall sentiment. There&#x27;s a loud minority of developers out there who are nostalgic for something they never actually experienced. It&#x27;s a reaction to the explosion of complexity of computers and the increasing depth of the stack of software we must depend on to get anything done. It makes us vulnerable because we must depend on leaky abstractions since there&#x27;s too much software to fully understand all of it. And sometimes there are bugs and it only takes being burned once or twice before you become suspicious of any software you haven&#x27;t (or couldn&#x27;t have) written yourself. But starting from scratch kills your productivity, maybe for years!<p>I&#x27;m truly sympathetic. The simplicity of the microcomputer era has a certain romance to it, especially if you never lived through the reality of it. There&#x27;s a sense of freedom to the model of computing where only your program is running and the entirety of the machine is your own little playground. So I get why people make stuff like PICO-8 and uxn.<p>I agree with the criticism of Jon Blow&#x27;s rhetoric, even though the tone is harsher than strictly necessary. Blow&#x27;s criticisms and proposed solutions seem overly opinionated to me, and he&#x27;s throwing out the baby with the bath water. He describes things like compile time and runtime hygienic macros like they&#x27;re a new invention that hasn&#x27;t existed in Lisp since before he was born.<p>However, I think targeting uxn is unfair. Uxn would be viewed better as an experiment in minimalism and portability. I think of it more like an art project.<p>It&#x27;s unfair because the author is comparing mainstream languages that benefit from countless users&#x27; input and innovations over the course of 60 years to a niche system with a small handful of developers that has existed for maybe 2 years or so. That&#x27;s a strawman if I ever heard one.
评论 #31706301 未加载
评论 #31708584 未加载
评论 #31706359 未加载
评论 #31707638 未加载
评论 #31706794 未加载
评论 #31717095 未加载
entaloneralie将近 3 年前
Hi all,<p>My name is Devine, and I&#x27;m to blame for the uxn disaster.. I&#x27;m getting this link thrown at me from all sides right now, so I figured I might as well chip in.<p>I&#x27;m a bit more on the design-y side of things, and all these fancy words to talk about computers and retro computing, are a bit beyond me, and reference an era of computing which I didn&#x27;t really had a chance to experience first hand.<p>But let&#x27;s talk about &quot;the uxn machine has quite the opposite effect, due to inefficient implementations and a poorly designed virtual machine, which does not lend itself to writing an efficient implementation easily.&quot;<p>This is meaningful to me and I&#x27;d love to have your opinion on this. Before setting on the journey to build uxn, I looked around at the options that were out there, that would solve our specific problems, and I&#x27;d like to know what you would recommend.<p>Obviously, I take it that the author is not advocating that we simply return to Electron, and I take it they understand that re-compiling C applications after each change is not viable with our setup, that Rust is manyfolds too slow for us to make any use of it, and that they understand that our using Plan 9, C is not a good candidate for writing cross-compatible(libdraw) applications anyway.<p>So, what should we have done differently?<p>I&#x27;m genuinely looking for suggestions, even if one suggestion might not be compatible with our specific position, many folks come to us asking for existing solutions in that space, and I would like to furnish our answers with things I might have not tried.<p>Here are some directions we tried prior to Uxn:<p><a href="https:&#x2F;&#x2F;wiki.xxiivv.com&#x2F;site&#x2F;devlog.html" rel="nofollow">https:&#x2F;&#x2F;wiki.xxiivv.com&#x2F;site&#x2F;devlog.html</a><p>Ah, one last thing, this is how you fib the first 65k shorts in uxntal:<p><a href="https:&#x2F;&#x2F;git.sr.ht&#x2F;~rabbits&#x2F;uxn&#x2F;blob&#x2F;main&#x2F;projects&#x2F;examples&#x2F;exercises&#x2F;fib.tal" rel="nofollow">https:&#x2F;&#x2F;git.sr.ht&#x2F;~rabbits&#x2F;uxn&#x2F;blob&#x2F;main&#x2F;projects&#x2F;examples&#x2F;e...</a>
评论 #31708744 未加载
评论 #31708428 未加载
评论 #31713582 未加载
评论 #31711681 未加载
评论 #31709400 未加载
spicyusername将近 3 年前
&gt; In a DevGAMM presentation, Jon Blow managed to convince himself and other game developers<p>Setting the content aside, when an author starts off their with with this kind of tone I&#x27;m immediately turned off.<p>There&#x27;s no need to be so antagonistic. Jonathan Blow &quot;said&quot;, &quot;claimed&quot;, &quot;discussed&quot;, or any of the infinite other neutral and non-insulting ways to refer to another person&#x27;s work.
评论 #31708950 未加载
评论 #31706637 未加载
stephc_int13将近 3 年前
This is beyond stupid.<p>There is no such thing as &quot;safe language&quot;.<p>The author has clearly never seen what real safety critical code look like.<p>When safety&#x2F;robustness really is critical, there are ways to achieve it with high confidence, and it can be done in any language as long as the team doing it is qualified and applying stringent rules.<p>Of course this is time consuming and costly but luckily we&#x27;ve known how to do it for decades.<p>The kind of rules I am talking about are more stringent than most people who never worked on those fields realize.<p>In the most extreme case I&#x27;ve seen (aerospace code) the rules were : no dynamic memory allocation, no loop, no compiler. Yeah, pure hand-rolled assembly. Not for speed, for safety and predictability.
评论 #31708473 未加载
评论 #31709708 未加载
评论 #31707589 未加载
评论 #31707401 未加载
评论 #31709019 未加载
bebrws将近 3 年前
In my experience this statement is incorrect: “Using abstractions extensively actively encourages study into how to implement them efficiently, contrary to Blow&#x27;s claim that their use will lead to few understanding their implementation.”<p>I would agree with Jonathon Blow here that it is very common to use abstractions without there being any understanding of or even an interest to discover the underlining implementation of that abstraction.<p>For example, why else would the question, “Do you use multithreading in NodeJS?” be a common interview question?<p>It is commonly known that NodeJS “runs code asynchronously” but how often would it be that an engineer could accurately explain how this is done?<p>While some may find the benefit in understanding the system in which they work in completion I believe a majority is content with living with assumptions.
mhh__将近 3 年前
My personal opinion of this is that you can have high and low level code written in the same language at the expense of requiring more skill from the programmer.<p>You can write a pure-functional RPN calculator in a handful of lines of D, you can also write D&#x27;s entire implementation in D including the &quot;low-level&quot; aspects.<p>I also think the distinction between low and high level code in languages that are not built around some theoretically abstract model of execution (e.g. the lambda calculus) to be rather pointless and mostly useful only for making poor arguments.<p>I&#x27;m also sceptical of simplicity as an unqualified idea. I have read &quot;simple&quot; code with no abstractions that makes it extremely hard to read, I have read &quot;simple&quot; code that can be considered as such because the abstractions are actually abstractions: &quot;Abstraction is the removal of irrelevant detail&quot;.
travisgriggs将近 3 年前
Buried in the lengthy conclusion at the end:<p>&gt; Simplicity needs to be pervasive through the system, and further in the context it resides in, for one to benefit from it<p>This should have been the opening text of the essay.
评论 #31706628 未加载
Xeoncross将近 3 年前
There are best practices and optimized algorithms. Due to ignorance or preference these are sometimes ignored. This results in a lot of confusion, bloat, and failed attempts.<p>We all want less sloppy code and less sloppy abstractions, but it&#x27;s hard to do in the real world with tens of millions of developers placed under different constraints.<p>&quot;I was not given time to do this correctly, I&#x27;ll just use a library that adds 200mb RES but basically works for now.&quot;<p>The Internet Architecture Board, W3 working groups, OWASP, Open telemetry, and hundreds of other groups are working hard to standardize things so we don&#x27;t have to repeat the same mistakes in a problem area. Heck even community sites like leetcode help raise awareness about sub-optimal solutions to problem spaces.
gerikson将近 3 年前
Upvote for Elvis Costello reference alone.
评论 #31705541 未加载
评论 #31711406 未加载
cyber_kinetist将近 3 年前
The article is all over the place, I don&#x27;t really know what it&#x27;s trying to say. It starts by criticizing Jon Blow&#x27;s talk about &quot;collapse of civilization by nobody being to able to do low-level programming anymore&quot; as a tirade against the tirade of abstractions, but then talks about dxn as a prime (flawed) example of this &quot;effort to remove abstractions&quot;. I mean, dxn is clearly just a wrong abstraction for the hardware we have right now, it&#x27;s actually opposite to what most low-level programmers would do. So the dxn example is actually supporting what Jon was saying in the talk? It&#x27;s just not a good example.<p>Also, the example about dynamic dispatch isn&#x27;t really as persuasive as the author might think. Even if everyone benefits from these abstractions, what&#x27;s the point when that abstraction is fundamentally slow on hardware in the first place, no matter how much optimization you can do? I mean, the Apple engineers have done everything they can do to optimize obj_msgSend() down to the assembly level, but you&#x27;re still discouraged to use Obj-C virtual method calls in a tight loop because of performance problems. And we know in both principle and practice that languages which heavily rely on dynamic polymorphism (like Smalltalk) tends to perform much worse than languages like C&#x2F;(non-OOP)C++&#x2F;Rust which (usually) doesn&#x27;t rely heavily on dynamic polymorphism. In these languages, when performance matters devs often use the good ol&#x27; switch statement (with enums &#x2F; tagged unions &#x2F; ADTs) instead to specify different kinds of behavior, since they are easier to inline for the compiler and the hardware is made to run switch statements faster than virtual calls. (Or to go even further you can just put different types of objects in separate contiguous arrays, if you are frequently iterating and querying these objects...) The problem I think for most programmers is that they don&#x27;t know they can actually make these design choices in the first place, since they&#x27;ve learned &quot;use virtual polymorphism to model objects&quot; in OOP classes as a dogma that they must always adhere to, whereas a switch statement could have been better in most cases (both in terms of performance and code readability&#x2F;maintainability. Virtual calls may be a good abstraction in some cases, but in most cases there are multiple abstractions competing with it that are more performant (and arguably, can actually be simpler).<p>The point Jon is trying to make (although maybe not that clear enough from the talk), is that we simply need better abstractions for the hardware that we have. And C&#x2F;C++ doesn&#x27;t really cut it for him, so that&#x27;s why he&#x27;s creating his own abstractions from scratch by writing a new language. He has often said that he dislikes &quot;big ideas programming&quot;, which believes that if every programmer believes in a core &quot;idea&quot; of programming then everything will magically get better. He instead opts towards a more pragmatic approach to writing software, which is writing for the hardware and the design constraints we have right now. Maybe he may seem a bit grumpy from the perspective of people outside of OS&#x2F;compiler&#x2F;game development (since he also lets out some personal developer grievances in the talk), but I think his sentiment make sense in a big picture, that we have continuously churned out heaps of abstractions that have gone too far from the actual inner workings of the hardware, up to the point that desktop software has generally become too slow compared to the features it provides to users (Looking at you, Electron...)
twic将近 3 年前
As an aside, Tony Hoare is a national treasure.
yellowapple将近 3 年前
The &quot;analysis&quot; of uxn is unproductive to the point of being anti-productive.<p>In particular:<p>&gt; The most significant performance issue is that all uxn implementations we have found use naïve interpretation. A typical estimation is that an interpreter is between one and two magnitudes slower than a good compiler. We instead propose the use of dynamic translation to generate native code, which should eliminate the overhead associated with interpreting instructions.<p>Okay, go for it. Literally nothing is stopping you from implementing an optimizing compiler for uxn bytecode.<p>Meanwhile, zero mention in this &quot;analysis&quot; of program size, or memory consumption, or the fact that uxn implementations exist even for microcontrollers. Interpreters are slow, but they&#x27;re also straightforward to implement and they can be pretty dang compact, and so can the interpreted bytecode be much smaller than its translated-to-native-machine-code equivalent.<p>(Interpreters also don&#x27;t need to be all that slow; I guess this guy&#x27;s never heard of Forth? Or SQLite?)<p>&gt; Writing a decent big-integer implementation ourselves requires some design which we would rather not perform, if possible. Instead, we can use a library for simulated 32-bit arithmetic. […] The resulting program takes 1.95 seconds to run in the &quot;official&quot; uxn implementation, or 390 times slower than native code! This amount of overhead greatly restricts what sort of computations can be done at an acceptable speed on modern computers; and using older computers would be out of the question.<p>Well yeah, no shit, Sherlock. Doing 32-bit arithmetic on an 8-bit machine is gonna be slow. Go try that on some Z80 or 6502 or whatever and get back to us.<p>And no, using older computers ain&#x27;t &quot;out of the question&quot;. There are literally uxn ports to DOS, to the Raspberry Pi Pico, to the goddamn <i>Gameboy Advance</i>, to all sorts of tiny constrained systems. The author would know this if one had done even the slightest bit of investigation before deciding to shit all over uxn and the folks making it.<p>&gt; The uxn system could also be a sandbox, and prevent damage outside of its memory, but a filesystem device is specified for the platform, and is often implemented, and so a uxn program can destroy information outside its virtual machine. Any isolation would have to be performed outside of the virtual machine; thus running a random uxn program is as insecure as running a random native executable.<p>Absolutely nothing in the uxn spec suggests that the &quot;filesystem&quot; in question should be the host&#x27;s filesystem; it could very well be some loopback device or a sandbox or what have you. If security&#x2F;isolation is desired, then that&#x27;s pretty trivial to implement in a way that a tiny bytecode stack machine would have a <i>very</i> hard time escaping. Either the author is incapable of actually reading the documentation of the thing being analyzed, or one is being blatantly intellectually dishonest.<p>----<p>Like, I don&#x27;t know what the author&#x27;s beef is - maybe Rek and Devine ran over the author&#x27;s dog with their sailboat, or maybe the Bytecode Interpreter Mafia smashed the author&#x27;s kneecaps with hammers - but the article reads more like bone-pickery than some objective analysis.
评论 #31708479 未加载
评论 #31711087 未加载
评论 #31711438 未加载
mwcampbell将近 3 年前
&gt; we&#x27;d even say that the greatest programmers are so because of how they produce redundancy.<p>Perhaps the greatest of all programmers produce redundancy while depending on very little of it in their own code. For example, Richard Hipp created SQLite, the ubiquitous and amazingly high-quality embedded database, in C. Thinking about that makes me feel like I ought to be using C in my own, much more modest attempt at a reusable infrastructure project [1]. Cue the cliches about younger generations (like mine) being soft compared to our predecessors.<p>[1] <a href="https:&#x2F;&#x2F;github.com&#x2F;AccessKit&#x2F;accesskit" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;AccessKit&#x2F;accesskit</a> (it&#x27;s too late now, I&#x27;m committed to doing it in Rust)
评论 #31708339 未加载
评论 #31707680 未加载
评论 #31709153 未加载
chubot将近 3 年前
I tend to agree (although this article feels a bit like it&#x27;s &quot;picking on&quot; some whimsical projects that aren&#x27;t making grand claims ... or are they?)<p>A term I like to use for this phenonemon is &quot;Inner Platform Effect&quot;.<p><a href="https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Inner-platform_effect" rel="nofollow">https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Inner-platform_effect</a><p>The prime example is that in the 90&#x27;s, Java thought they were going to make Windows irrelevant (a pile of poorly debugged device drivers or something like that).<p>But now Java is just Windows&#x2F;Unix process.<p>Same with all these &quot;alternative computing stacks&quot; -- in the end they will almost certainly be just Unix processes.<p>The only situation I can think of where they wouldn&#x27;t be is a revolution in hardware like the IBM PC producing MS-DOS, etc. And even not then, because we already had the mobile revolution starting ~15 years ago, and both platforms are based on Unix (iOS&#x2F;Android).<p>----<p>I do think people should carefully consider whether they want to create an &quot;inner platform&quot; or make the platforms we ACTUALLY USE better.<p>That is the purpose of <a href="https:&#x2F;&#x2F;www.oilshell.org&#x2F;" rel="nofollow">https:&#x2F;&#x2F;www.oilshell.org&#x2F;</a>.<p>Evolving working systems is harder than creating clean slates. So clean slates are fun for that reason: you get to play God without much consequence.<p>Sometimes clean slates introduce new ideas, and that&#x27;s the best case. But a common pattern is that they are better along certain dimensions (the &quot;pet peeves&quot; of their creator -- small size, etc.), but they are WORSE than their predecessors along all the other dimensions!<p>So that is the logic of Oil being compatible and painstakingly cleaning up bash -- to not be worse than the state of the art along any dimension! I&#x27;ve experimented writing a clean slate shell in the past, but there are surprising number of tradeoffs, and a surprising number of things that Unix shell got right.<p>-----<p>But Oil can ALSO be viewed as a clean slate, which is sometimes hard to understand. <a href="https:&#x2F;&#x2F;www.oilshell.org&#x2F;release&#x2F;latest&#x2F;doc&#x2F;oil-language-tour.html" rel="nofollow">https:&#x2F;&#x2F;www.oilshell.org&#x2F;release&#x2F;latest&#x2F;doc&#x2F;oil-language-tou...</a><p>I just drafted this doc, and surprisingly little breaks even in the non compatible mode:<p><i>What Breaks When You Upgrade to Oil</i> <a href="https:&#x2F;&#x2F;www.oilshell.org&#x2F;preview&#x2F;doc&#x2F;upgrade-breakage.html" rel="nofollow">https:&#x2F;&#x2F;www.oilshell.org&#x2F;preview&#x2F;doc&#x2F;upgrade-breakage.html</a><p>So I would like to see more systems take a DUAL view -- compatible, but also envision the ideal end state, and not just pile on hacks (e.g. Linux cgroups and Docker are a prime example of this.)<p>You will learn the wisdom of the system that way, and the work will be more impactful. For example, it forced me to put into words what Unix (and the web) got right: <a href="https:&#x2F;&#x2F;www.oilshell.org&#x2F;blog&#x2F;2022&#x2F;03&#x2F;backlog-arch.html" rel="nofollow">https:&#x2F;&#x2F;www.oilshell.org&#x2F;blog&#x2F;2022&#x2F;03&#x2F;backlog-arch.html</a>
hsn915将近 3 年前
The basic premise of this article seems to be &quot;writing good programs without heavy runtime checks is physically impossible&quot;.<p>I&#x27;d like to ask the author, how does he think his computer works? The hardware is rather complex and it has to work near perfectly all the time. It should be impossible according to his premise, but it&#x27;s clearning happening.
评论 #31705852 未加载
评论 #31705920 未加载
rurban将近 3 年前
Reads like a typical mid-80ies manifesto for safer languages until we arrive at gcc-11. There was no gcc-11 then.
评论 #31705933 未加载
benreesman将近 3 年前
Jon Blow live-codes compilers and 3D rendering engines and shit from scratch on YouTube or whatever. Starting you essay by dissing him is not a great intro.
评论 #31705975 未加载
评论 #31706281 未加载