HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
prestodb
presto
Java2013–2025
prestodb / presto

presto

The official home of the Presto distributed SQL query engine for big data

20Distinct people
26Mentions
1Explicit recommenders
16.8KGitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

The official home of the Presto distributed SQL query engine for big data

GitHub

Where it is used

No documented product use was verified in the last source check.

What people are saying

Java is much heavier weight [1] than languages like PHP and Python, and that’s not at all a bad thing - it just changes what the language is used for [2] and what’s normal…

wrmsr used a recommendation phrase. One indexed comment matches. This is a phrase match, not a verdict.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

Mentioned in the same Hacker News threads. That is not proof they are substitutes.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 3:56:07 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by year26 dated mentions

Observed mentions: 2013-11-06 23:45:24 UTC to 2025-11-14 12:34:26 UTC.

012342013-01-01 00:00:00 UTC to 2014-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments20132014-01-01 00:00:00 UTC to 2015-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2015-01-01 00:00:00 UTC to 2016-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2016-01-01 00:00:00 UTC to 2017-01-01 00:00:00 UTC (exclusive): 3 mentions; 0 submissions, 3 comments2017-01-01 00:00:00 UTC to 2018-01-01 00:00:00 UTC (exclusive): 4 mentions; 0 submissions, 4 comments2018-01-01 00:00:00 UTC to 2019-01-01 00:00:00 UTC (exclusive): 2 mentions; 1 submissions, 1 comments2019-01-01 00:00:00 UTC to 2020-01-01 00:00:00 UTC (exclusive): 2 mentions; 1 submissions, 1 comments20192020-01-01 00:00:00 UTC to 2021-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2021-01-01 00:00:00 UTC to 2022-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2022-01-01 00:00:00 UTC to 2023-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2023-01-01 00:00:00 UTC to 2024-01-01 00:00:00 UTC (exclusive): 3 mentions; 1 submissions, 2 comments2024-01-01 00:00:00 UTC to 2025-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2025-01-01 00:00:00 UTC to 2026-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2025

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
20132013-01-01 00:00:00 UTC2014-01-01 00:00:00 UTC101
20142014-01-01 00:00:00 UTC2015-01-01 00:00:00 UTC101
20152015-01-01 00:00:00 UTC2016-01-01 00:00:00 UTC202
20162016-01-01 00:00:00 UTC2017-01-01 00:00:00 UTC303
20172017-01-01 00:00:00 UTC2018-01-01 00:00:00 UTC404
20182018-01-01 00:00:00 UTC2019-01-01 00:00:00 UTC211
20192019-01-01 00:00:00 UTC2020-01-01 00:00:00 UTC211
20202020-01-01 00:00:00 UTC2021-01-01 00:00:00 UTC101
20212021-01-01 00:00:00 UTC2022-01-01 00:00:00 UTC202
20222022-01-01 00:00:00 UTC2023-01-01 00:00:00 UTC202
20232023-01-01 00:00:00 UTC2024-01-01 00:00:00 UTC312
20242024-01-01 00:00:00 UTC2025-01-01 00:00:00 UTC202
20252025-01-01 00:00:00 UTC2026-01-01 00:00:00 UTC101

What Hacker News says

26 sources
In Go you've got: go-mysql-server [0], vitesse's parser [1], and one I wrote [2]. In JavaScript you've got: Alasql's [3] (this is a large file) and here's another SQLite parser [4]. In Java there's JSQLParser [5] and I think you can access Presto's parser too [6]. [0] https://github.com/dolthub/go-mysql-server [1] https://github.com/blastrain/vitess-sqlparser [2] https://github.com/eatonphil/gosql [3] https://github.com/agershun/alasql/blob/develop/src/alasqlpa... [4] https://github.com/codeschool/sqlite-parser [5] https://github.com/JSQLParser/JSqlParser [6] https://github.com/prestodb/presto
In Let's write a compiler, part 5: A code generator
One quick detail on the Trino description is that not only are some of the initial developers but all of the creators and the majority of contributors (https://github.com/prestodb/presto/graphs/contributors?from=...) and still have contributed the majority of the code in both Presto (https://github.com/prestodb/presto/graphs/contributors)/Trin... (https://github.com/trinodb/trino/graphs/contributors). To really jump into this, take a look at https://trino.io/blog/2020/12/27/announcing-trino.html. A few more stats and info: Trino commits: 22,383 Presto commits: 18,582 Trino slack members: 3,603 Presto slack members: 1,575 Trino supports iceberg: https://trino.io/docs/current/connector/iceberg.html HDP3 Support: https://github.com/trinodb/trino/issues/1218 Trino has addressed a critical security vulnerability that still exists in Presto: ht
Read the rest
In Minimally Invasive (and More Accurate) Analytics: GoAccess and Athena/SQL
This is actually pretty true based upon what I've personally observed too. While Apache Spark [0] and Presto [1] use ANTLR to implement their parsers, when I searched about TypeScript's parser and noticed that they implement their own parser [2] (in TypeScript itself), the reason I was able to find was that the nuanced error messages which a language like TypeScript has to provide is only feasible by hand-writing the parser. [0] https://github.com/apache/spark/blob/master/sql/catalyst/src... [1] https://github.com/prestodb/presto/blob/master/presto-parser... [2] https://github.com/microsoft/TypeScript/blob/master/src/comp...
In Why not to use (f)lex, yacc or bison
wrmsr·Feb 28, 2018Recommendation phrase
Java is much heavier weight [1] than languages like PHP and Python, and that’s not at all a bad thing - it just changes what the language is used for [2] and what’s normal within it. As such the threshold for overengineering is significantly higher than in most other languages. Dependency injection for example is something that in the small looks like needless complexity but when used well [3] makes things that would be realistically impossible without it easy and routine. Java is a very dumb language, and that’s also not at all a bad thing. What we get from this dumbness is best-in-class tooling. I don't think I have to say it but pick one of the 3 major IDE’s: IntelliJ, Eclipse, or NetBeans. If you have no preference IJ tends to be the modern (and my) favorite. I frankly switched from years of emacs to PyCharm for even my dynalang stuff
Read the rest
due to the quality. Java lacks [4][5] many of the powerful and dynamic features of other languages like eval, code execution during class definition, the ability to flat lie to the type checker, et cetera. In return we have an ecosystem of tools that can nearly perfectly understand the intent of code statically - things beyond simple templated code generation like 'go to definition’ and 'find all references’ work so well that automatic refactoring can usually be done fearlessly. The downside of this is that I’ve yet to see a code review system that can gracefully handle the giant diffs these tend to create, but the end result has a vastly higher chance of success than for more expressive languages, and it’s better than the alternative of accumulating technical debt (and hey, nothing’s perfect :). Similarly get used to using the debugger. You basically never have to resort to 'printf debugging’ in Java due to the high quality tooling. To learn a codebase set breakpoints and poke around. To your 80%/20% question: in my opinion Java’s killer feature is its unbeaten ease at handling vast codebases, which unfortunately presents a barrier to short-term entry. I think I’d say look for a Java-only library that interests you and put a web interface on it. Due in part to Hadoop there are lots of Java-only (or effectively so as a result of shoddy ports) systems that deserve an HTTP wrapper so other languages can access them (a colleague of mine wrote one for Kafka a while back as an example, and frankly things like Elasticsearch and Solr are basically this for Lucene). This will get you into exploring and getting familiar with not only the library you wrap but the webserver (like Jetty) or framework you choose. Due to its tooling I find learning large Java codebases easier than those of any other language [6] and as above to me that’s what Java is 'for’. [1] HotSpot more or less expects to be able to use all of its host’s cores, which somewhat clashes with modern container-centric ecosystem. Containers have always meant less to Java though as it’s had things like jar shading, internal access control, and classloader isolation for many years. OSGi for example has been capable of similar multitenancy through these features. That's not to say docker isn't still remarkably useful to Java development, it just tends to be less ‘amazing’ in the context. [2] The amount time it takes to build a simple CRUD site will likely be higher than in, say, Rails (although it’s getting better all the time), but many of the things a growing site winds up talking to (Elasticsearch, Cassandra, ZooKeeper, et cetera) are implemented in Java. Different tools and all that. I’m not discouraging its use for even smaller projects but it does tend to be more of an up-front investment than a lighter language all else equal. [3] As a Guice fan I recommend checking out the Presto codebase ( https://github.com/prestodb/presto ) - lovely and extensive (perhaps a tad too much :) use of Guice, and extraordinarily high quality codebase in general. I’ve never used much of Spring[Boot] myself but as with Java in general many of the criticisms aimed at it are many years out of date and irrelevant. [4] All of these things are ~possible~, just (as usual :) more involved and verbose than in many other languages, and more importantly extremely non-idiomatic (or at least considered 'big guns’). As an example in lieu of eval many systems leverage runtime bytecode generation to do things like building object proxies and computation pipelines at boot or on user input. HotSpot dutifully jits, optimizes, profiles, and inlines this with 'normal’ code resulting in usually impressive performance, but it also involves jumping through a lot of hoops to make it work right as the vm spec mandates fairly strict requirements. [5] Notable though is Java’s extensive use of annotations - they’re used to communicate to both tools and people (though primarily the former), and you can stick them nearly anywhere. Annotations themselves do absolutely nothing - they exist purely as introspectable markers (not to be confused with similar looking Python decorators). Tools like serialization libraries, web frameworks, dependency injection systems, and thread safety analyzers scan for these and do things with them as they please. A lot tends to happen at boot and during warmup in Java systems both in the app code and in the vm, and much of it is powered by these otherwise-do-nothing purely-for-reflection annotations. [6] The only other equal to me is C#, which is basically Microsoft Java. There are numerous differences (mostly more advanced static language features at the expense of a dumber runtime - .NET has F# but Java has Nashorn and Graal) but they share the spirit of dumb but extremely toolable 'heavy’ languages. I haven't touched Mono in quite a while though so I can’t comment on its modern usability.
In How should I learn Java Web Development?

Showing the 15 most recent of 26 sources. Enable JavaScript to search and browse every indexed mention.

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.