diff --git a/README.md b/README.md index 46ed3aa..5c64299 100644 --- a/README.md +++ b/README.md @@ -156,7 +156,7 @@ Now, Russ is the tech leader of the Go team. - Rob Pike. (Robert C. Pike, M. Sc.) [Website](http://herpolhode.com/rob/), [Blog](https://commandcenter.blogspot.com/), [GitHub](https://github.com/robpike), [Twitter](https://twitter.com/rob_pike), [Reddit](https://www.reddit.com/user/robpike). (Retired) + Alma mater: University of Toronto (BS), California Institute of Technology + [talk/rob2007](https://www.youtube.com/watch?v=hB05UFqOtFA)
Advanced Topics in Programming Languages: Concurrency/message passing Newsqueak. May 9, 2007 -

Summary: Summary: In this Google Tech Talk from May 2007, Rob Pike, creator of UTF-8 and Plan 9 for Bell Labs, discusses his programming language, New Squeak, which features interesting mechanisms for concurrency and message passing. Pike argues that there are two ways to deal with the mismatch between the concurrent world we live in and the sequential computers we use to write programs: make the world look synchronous and sequential, or make software concurrent. Pike discusses the limitations of low-level concepts like threads, shared memory, and locks when it comes to programming for concurrency. New Squeak is a programming language that was created in 1988 to address issues that arise when writing software for a concurrent world. It has lambdas as functions, process management software, and channels as first-class citizens. The language inspired other languages and was used as a systems language at Bell Labs for a few years to build interesting tools. The talk focuses on processes and channels in New Squeak and how to write programs using these concepts. Channels are a communication tool used in programming that reduce the number of tokens needed for communication. Channels in CSP are introduced by the keyword Chan in New Squeak and are unbuffered synchronous communication ports that synchronize and communicate values between processes. New Squeak's channels and select statements enable potential communications and allow processes to block until one or more communications can proceed. The article introduces a simple language with n-way muxing and presents a program that prints sequential integers to a channel. It also explains the concept of a prime sieve and filter process to find all the primes that come out of a calculation. The system can also be used to manipulate power series. The article discusses the use of interfaces and channels in programming, with an example from the Newspeak language. The author discusses a system model used in building window systems in Plan Nine, which involves defining components as interfaces that capture communication and data flow through channels. This approach was used in all major user-level services in Plan Nine and was made easier by the author's previous experience with concurrency models in programming. The model allows for complex interactions between components and allows for composing interfaces themselves, rather than just state machines. The author also discusses the challenges of debugging concurrent programs and the limitations of CSP-like libraries for implementing select operations. They propose the idea of a shim interface that guarantees deadlock-free operation and can isolate and kill misbehaving clients. The Squint interpreter, a code from 1988, lacks many libraries for graphics and other functions. The idea of implementing a communication channel model on top of mutexes in C++ is discussed, and the cost of a channel versus a callback is debated. Optimizations can be made to generate more compact code for different forms of select.

+

Summary:In this Google Tech Talk from May 2007, Rob Pike, creator of UTF-8 and Plan 9 for Bell Labs, discusses his programming language, New Squeak, which features interesting mechanisms for concurrency and message passing. Pike argues that there are two ways to deal with the mismatch between the concurrent world we live in and the sequential computers we use to write programs: make the world look synchronous and sequential, or make software concurrent. Pike discusses the limitations of low-level concepts like threads, shared memory, and locks when it comes to programming for concurrency. New Squeak is a programming language that was created in 1988 to address issues that arise when writing software for a concurrent world. It has lambdas as functions, process management software, and channels as first-class citizens. The language inspired other languages and was used as a systems language at Bell Labs for a few years to build interesting tools. The talk focuses on processes and channels in New Squeak and how to write programs using these concepts. Channels are a communication tool used in programming that reduce the number of tokens needed for communication. Channels in CSP are introduced by the keyword Chan in New Squeak and are unbuffered synchronous communication ports that synchronize and communicate values between processes. New Squeak's channels and select statements enable potential communications and allow processes to block until one or more communications can proceed. The article introduces a simple language with n-way muxing and presents a program that prints sequential integers to a channel. It also explains the concept of a prime sieve and filter process to find all the primes that come out of a calculation. The system can also be used to manipulate power series. The article discusses the use of interfaces and channels in programming, with an example from the Newspeak language. The author discusses a system model used in building window systems in Plan Nine, which involves defining components as interfaces that capture communication and data flow through channels. This approach was used in all major user-level services in Plan Nine and was made easier by the author's previous experience with concurrency models in programming. The model allows for complex interactions between components and allows for composing interfaces themselves, rather than just state machines. The author also discusses the challenges of debugging concurrent programs and the limitations of CSP-like libraries for implementing select operations. They propose the idea of a shim interface that guarantees deadlock-free operation and can isolate and kill misbehaving clients. The Squint interpreter, a code from 1988, lacks many libraries for graphics and other functions. The idea of implementing a communication channel model on top of mutexes in C++ is discussed, and the cost of a channel versus a callback is debated. Optimizations can be made to generate more compact code for different forms of select.

+ [talk/rob2009](https://changelog.com/podcast/3) The Go Programming Language. Nov 27, 2009. @@ -219,8 +219,7 @@ Now, Russ is the tech leader of the Go team.

Summary: In the video episode titled "Lang NEXT 2012 Expert Panel: Native Languages, " a panel of experts discusses the advantages and limitations of native code programming. The panelists share their experiences and preferences, with some favoring native code for its speed, efficiency, and control. They emphasize the importance of using the most advantageous mechanism for each situation, comparing it to the choice of programming languages for specific tasks. The panelists discuss the benefits of native code execution, such as optimized user experiences and the ability to work closely with hardware. They also highlight the ability to directly call C code as a major advantage of native code. However, they acknowledge the potential issues with virtual machine (VM) implementation. The panelists also explore the advantages and disadvantages of native code and managed code. Native code offers speed and control, while managed code allows for advanced processing during load time. The choice between the two depends on the biggest cost for the application. The panelists discuss the challenges faced by native languages in achieving interoperability and language design. They mention the development of protocols for interoperability by companies like Google and Facebook. The panel expresses optimism about research advancements in this area and the significance of a common interface for plug-and-play compatibility. The video also highlights the shift in Facebook's backend development from PHP to C++. This change has been driven by the need for more efficient power consumption and improved performance. The use of C++ allows for a more efficient use of power per user and enables the development of high-performance ads. The panelists discuss the trade-off between program productivity and performance in software design. They emphasize the importance of prevention over cure and the different approaches taken by managed and native languages. The significance of maintaining consistent databases in the web world is also emphasized. The video concludes with a discussion on the complexity of programming languages and the challenges of memory management. The panelists mention the need for research to determine the most complex language specification and highlight the trade-off between safety and efficiency in memory management. Overall, the episode emphasizes the importance of using the appropriate programming language for specific tasks and staying updated with advancements in the field. The panelists provide insights into the advantages and limitations of native code programming and the ongoing developments in the industry.

+ [talk/robert2015](https://www.youtube.com/watch?v=0ReKdcpNyQg)
The Evolution of Go. GopherCon 2015. Jul 28, 2015.

Summary: In the video episode titled "GopherCon 2015: Robert Griesemer - The Evolution of Go, " Robert Griesemer discusses the evolution of the Go programming language. Griesemer begins by sharing his background in programming languages, including studying under the creator of Pascal. He reflects on the challenges of creating a good programming language and the difficulty of maintaining productivity in his career. After programming in C++ for 15 years, Griesemer decides to start a new project to create a better language. He emphasizes the importance of simplicity, safety, and readability in language design. Griesemer believes that these principles are crucial in creating an easy-to-use and understandable language. He also discusses the decision-making process involved in language design and the importance of making certain aspects of programming easy to write. Griesemer mentions the lack of literature on language design but recommends two papers by Tony Hoare. He also discusses the process of brainstorming and the importance of direction and collaboration in language design. The video episode explores the evolution of programming languages, focusing on successors of Pascal and the programming language Oberon. Griesemer highlights the similarities and differences between Pascal and C, as well as the introduction of new features in languages like Modula-2 and Oberon. He also discusses the similarities between the programming languages Go and Oberon, emphasizing their shared origins in Oberon and the influence of C on Go. Griesemer then delves into the development of the Go programming language, highlighting its roots in Oberon and the incorporation of object orientation. He emphasizes the importance of object orientation and interfaces in Go, drawing inspiration from Smalltalk. Griesemer also discusses dynamic dispatch and the absence of generics in Go, explaining the challenges and the Go team's decision to prioritize established mechanisms. The team is still evaluating the implications of introducing generics. The development of the Go programming language involved a thorough testing process and emotional discussions among the small team of creators. The addition of Ross Cox improved the development process, and multiple independent implementations revealed bugs in both the compilers and the specification. The inclusion of the go types package further validated the code. The language has undergone significant changes, resulting in a more robust language with tools for easy adjustments and backward compatibility. The future of Go looks promising based on clear targets, available libraries and tools, market readiness, technological breakthroughs, and unique features. The video episode concludes by questioning whether Go will become mainstream and mentioning the need to unify the Go community. It also discusses pitfalls in language design, the history of programming languages, and how they reflect their creators. The episode wonders if the new language Co can be successful.

- + [talk/robert2016a](https://www.youtube.com/watch?v=t-w6MyI2qlU)
Lightning Talk: Alias Declarations for Gom: A proposal. GopherCon 2016. Oct 9, 2016. -

Summary:

+ + [talk/robert2016a](https://www.youtube.com/watch?v=t-w6MyI2qlU) Lightning Talk: Alias Declarations for Gom: A proposal. GopherCon 2016. Oct 9, 2016. + [talk/robert2016b](https://www.youtube.com/watch?v=vLxX3yZmw5Q)
Prototype your design!. dotGo 2016. Nov 29, 2016.

Summary: In the video episode titled "dotGo 2016 - Robert Griesemer - Prototype your design!", Robert Griesemer discusses the importance of prototyping in software design. He explains how prototyping can inform the existing design and lead to a better final design. Griesemer starts by emphasizing the significance of the design phase in the software development process. He mentions Stanford University's five-step design process as an example of how designing and prototyping are important in various industries. He highlights that designers are not just thinkers, but also doers. The main focus of the episode is on language design, specifically multi-dimensional slice support in the Go programming language. Griesemer explains that the Go community has been working on finding a solution for two-dimensional indexing, which is still a challenge. He proposes a solution to improve readability and performance in Go through multi-dimensional indexing. To implement this proposal, Griesemer emphasizes the importance of a rewriter prototype. This prototype allows for the analysis of design options and avoids making drastic changes to the compiler. He explains how index expressions can be manually or automatically rewritten into method calls using special method names and the plus operator for clarity. Griesemer discusses the process of rewriting and modifying code in the Go programming language. He explains how new index expressions can be given meaning by calling specific methods. He also mentions the importance of rewriting the syntax tree instead of the source code, as it allows for changes to be made to existing libraries with minimal code modifications. The episode also touches on the use of a Go type checker to improve accuracy and efficiency in the language. Griesemer explains how rewriting binary additions can address missing types and serve as the core of the prototype for experimentation and refinement. Throughout the episode, Griesemer emphasizes the importance of concrete implementation for testing and refining design. He highlights the surprise discovery of effective index operators and questions if they are sufficient for certain problems. He concludes by reiterating the value of prototyping in programming. In summary, the video episode explores the importance of prototyping in software design, specifically in the context of multi-dimensional slice support in the Go programming language. Griesemer discusses the process of rewriting and modifying code, as well as the use of a Go type checker for accuracy and efficiency. He emphasizes the significance of concrete implementation and the role of prototyping in informing and improving the final design.

+ [talk/robert2017](https://www.youtube.com/watch?v=KPk1UPihWtY)
Opening Keynote: Exporting Go. GopherCon SG 2017. May 29, 2017. @@ -408,21 +407,26 @@ his work is mainly in the runtime memory system such as the refactoring of memor + [talk/brad2016d](https://www.youtube.com/watch?v=18kmlJvR6Bk)
The Go Open Source Project's Innards. GothamGo 2016. Dec 15, 2016.

Summary:In the video episode titled "GothamGo 2016 - The Go Open Source Project's Innards, " Brad Fitzpatrick, a member of the Go programming language team at Google, provides a comprehensive overview of the tools and processes used in the Go open source project. Fitzpatrick emphasizes the importance of understanding these tools and processes for informed decision-making. He discusses the evolution of version control systems and code review processes, highlighting the use of GitHub issues for bug reporting and tracking. Fitzpatrick also mentions the implementation of labels and short links for easy navigation. He explains the use of milestones in GitHub for managing the release cycle and emphasizes the stability of the current system. Fitzpatrick goes on to discuss the communication channels used in the Go development community, including mailing lists, Google Groups, Slack, and IRC. He mentions the frustration caused by a tool called 'come to push back' that automatically closes pull requests. The video episode also covers the testing and build system used for Golang. org, including the use of arbitrary labels for voting and the creation of a label called 'run try bot'. Fitzpatrick explains the matrix of configurations tested and the integration with Gerrit and GitHub. Other tools mentioned in the episode include Docker, Kubernetes, and VMware for debugging and development purposes. Fitzpatrick also discusses the features of a debugging system that allows users to run commands, stream output, and receive exit codes. Overall, the episode provides a comprehensive tour of the tools and processes used in the Go open source project, offering valuable insights for developers and contributors.

+ [talk/brad2017](https://www.youtube.com/watch?v=4fWqcOubYQ0)
Half my life spent in open source. May 19, 2017. -

Summary:

+

Summary:In this episode of the podcast, titled "Half my life spent in open source, " Brad Fitzpatrick, a software engineer at Google, reflects on his journey through the world of open source. He shares his experiences from his early days in high school, where he first dipped his toes into the world of the internet. Brad reminisces about using AOL and sharing confidential information in chat rooms, as well as getting kicked off and eventually discovering a local ISP. As he delves into web development, Brad talks about the challenges he faced and the skills he acquired. He mentions learning HTML and the tediousness of manually creating web pages. He also discusses his experience with Perl, a language he used to create website pages when other languages were not widely accessible. Throughout his journey, Brad engaged in online forums to improve his skills and overcome obstacles. He excitedly recalls the release of "Programming Perl Second Edition" and how he stumbled upon it while skiing with his family. To his surprise, a stranger overheard his conversation and confirmed that they were talking about the same book. Overall, Brad shares his wisdom and amusing anecdotes from his path through various open source projects over the years. From his early internet experiences to his involvement in web development and his passion for open source, Brad's journey is a testament to the power of curiosity and perseverance in the world of technology.

+ [talk/brad2018a](https://www.youtube.com/watch?v=ZCB-g2B4Y5A)
Go: looking back and looking forward. Apr 2, 2018. -

Summary:

+

Summary:In this video episode titled "Go: looking back and looking forward, " Brad Fitzpatrick from Google reflects on the evolution of the Go programming language. He discusses the early history of Go, highlighting the motivation behind its creation, which was the increasing complexity of C++ and slow builds at Google. The development of Go started with designing a specification and consensus among the creators, including Robert Grissom, Rob Pike, and Ken Thompson. The language evolved with changes in syntax and naming conventions. After two years of development, Go was open sourced, leading to rapid growth and development. The popularity and growth of Go in the past six years can be attributed to the language's compatibility and promise not to break code. While the language itself is relatively stable, the runtime, tools, and ecosystem of Go are constantly evolving and improving. Significant improvements have been made in the Go garbage collector, resulting in reduced pauses and improved performance. The current state of the Go programming language ecosystem is discussed, highlighting improvements in tooling and upcoming features in Go 1. 11. The importance of community feedback in shaping the future of Go is emphasized, as well as the challenge of integrating Go One and Go Two code. The desire for generics in Go is mentioned, although their implementation is uncertain. Discussions are also taking place on reducing error handling. Go is planning significant changes in its upcoming version, focusing on minor cleanups and a smaller standard library. Improved package management is expected to move much of the standard library elsewhere. The text also discusses the importance of simplicity in programming and the desire for future programming languages to be easy to learn. The author shares their experience with BASIC and expresses hope for simplicity in programming languages, but acknowledges uncertainty. The consideration of adding new interfaces to the standard library is discussed, as well as the ongoing discussion within the community about the proper use of the error interface. Overall, this video episode provides a comprehensive overview of the evolution of the Go programming language, highlighting changes and improvements made leading up to the release of Go 1. It emphasizes the importance of community feedback and the constant evolution of the Go ecosystem.

+ [talk/brad2018b](https://www.youtube.com/watch?v=rWJHbh6qO_Y)
Go 1 11 and beyond. Aug 26, 2018. -

Summary:

+

Summary:In this video episode titled "Brad Fitzpatrick: Go 1. 11 and beyond, " Brad from the Go team at Google discusses the latest updates and future plans for the Go programming language. He highlights the stability of the language specification and standard library, while mentioning the exciting tools and runtime. Go 1. 11 brings updates such as no longer supporting Windows XP and introducing support for web assembly, which allows for high-performance applications on the web platform. However, using Go Web Assembly for web development has its limitations, such as the need to redownload the Go runtime and restrictions on blocking interactions. Brad also discusses new features in Go 1. 11, including Goroutines for concurrent programming and module support. He mentions recent changes in Go modules, performance improvements in struct fields, and upgrades to the compiler. The compiler now tracks relations between variables and can optimize runtime balance checks. The video also addresses the criticism faced by the current version of Go and plans for future releases, such as Go 2. The development of Go 2 will depend on factors like Go modules and the Go 2 design. One of the top priorities for Go 2 is the addition of generics, which has been a topic of debate within the community. The release date for Go 2 is anticipated to be November 2019. The video also discusses the challenges and progress of implementing generics in Go, as well as the complaints and challenges related to Go's error handling approach. The Go team is working on addressing these issues and ensuring compatibility and usability of existing code. Overall, the video provides insights into the current state of Go, its future plans, and the challenges it faces in terms of generics and error handling. It encourages listeners to explore the release notes for more information and stay updated on the latest developments in the Go programming language.

+ [talk/brad2018c](https://www.youtube.com/watch?v=69Zy77O-BUM)
Lightning Talk: The nuclear option, go test -run=InQemu. GopherCon 2018. Sep 11, 2018. -

Summary:

+

Summary:In this episode of GopherCon 2018 Lightning Talk, Brad Fitzpatrick discusses the challenges of testing side effects in Go. He suggests injecting side effects and testing them separately, but acknowledges the difficulties that arise when dealing with a large number of side effects. The text also explores the management of side effects and disk space in cloud native environments, as well as the process of expanding disk space and the need for a better tool. Fitzpatrick proposes using a virtual machine, specifically Qemu, for fast and accessible testing. By bypassing the BIOS and grub, Qemu allows for quick booting of a minimal Linux kernel and init RD, which is ideal for efficient testing. He also suggests using Go as an alternative to traditional init systems, simplifying the boot process. This involves copying the Go test executable into the initrd and dynamically generating a user space using a cpio archive. The episode concludes by explaining the process of using the Linux kernel for emulation and testing purposes. Overall, Fitzpatrick's talk provides valuable insights into the challenges of testing side effects in Go and offers innovative solutions for efficient and effective testing.

+ [talk/brad2019](https://www.youtube.com/watch?v=BRSam0xQJKY)
Brad Fitzpatrick likes Go better than C, C++, Rust, Perl, Python, Ruby, JavaScript and Java. Nov 28, 2019. -

Summary:

+

Summary:In this episode of the video, titled "Brad Fitzpatrick likes Go better than C, C++, Rust, Perl, Python, Ruby, JavaScript and Java, " the author reflects on their experience with various programming languages. They express a preference for Perl and frustration with languages like C++ and Python. However, they emphasize the importance of personal preference and team conventions when choosing a language. The author goes on to discuss Go, a programming language that combines C and JavaScript features. They highlight its high-level functionality and unique feature called GoRoutines. GoRoutines allows for readable and efficient code that handles APIs and long-running tasks without consuming threads or wasting memory. The author also mentions the diminishing effectiveness of Perl, once a powerful tool, and suggests that it is no longer meeting the required standards. They find Go to be a suitable choice, as it addresses their frustrations with other languages and offers a more efficient and effective solution. Overall, this episode explores the author's journey with programming languages and their ultimate preference for Go. They highlight the importance of personal preference and team conventions when choosing a language, and discuss the unique features of Go that make it a favorable choice.

- Bryan C. Mills. [GitHub](https://github.com/bcmills) - + [talk/bryan2017](https://www.youtube.com/watch?v=C1EtfDnsdDs) Lightning Talk: An overview of sync.Map. GopherCon 2017. Jul 24, 2017. - + [talk/bryan2018](https://www.youtube.com/watch?v=5zXAHh5tJqQ) Rethinking Classical Concurrency Patterns. GopherCon 2018. Sep 14, 2018 + + [talk/bryan2017](https://www.youtube.com/watch?v=C1EtfDnsdDs)
Lightning Talk: An overview of sync.Map. GopherCon 2017. Jul 24, 2017. +

Summary:In this episode of GopherCon 2017, Bryan C Mills gives a lightning talk on the sync. Map in Go 1.9. He starts by explaining that the sync. Map provides atomic versions of common map operations and solves the problem of cache contention. However, he cautions that it is not suitable for all use cases and should not be used in exported APIs. Mills encourages experimentation with different map implementations. He then introduces the synced out map, which is a useful tool for managing maps with stable keys and concurrent loops. However, he mentions that it may have slower performance and larger code size. The API of the synced out map is limited to maintain future optimization possibilities. Mills goes on to discuss the implementation of synced maps in Go 1.9, which improves speed and memory efficiency by using two maps, a mutex, and atomic values. He also mentions that a runtime independent prototype has been developed to optimize efficiency and memory. Finally, Mills talks about the introduction of the 'sink thought map' in the standard library, which eliminates unnecessary pointer indirection. Overall, this lightning talk provides an overview of the sync.Map in Go 1.9 and highlights its benefits and limitations. It also encourages developers to experiment with different map implementations to find the best fit for their use cases.

+ + [talk/bryan2018](https://www.youtube.com/watch?v=5zXAHh5tJqQ)
Rethinking Classical Concurrency Patterns. GopherCon 2018. Sep 14, 2018 +

Summary:In the GopherCon 2018 video episode titled "Rethinking Classical Concurrency Patterns, " Bryan C. Mills discusses the importance of reevaluating traditional concurrency patterns in Go programming. He emphasizes the need to understand the principles behind goroutines and channels, which are key components of Go's concurrency model. Mills explores various topics related to asynchronous programming, including condition variables and the worker pool pattern. He explains how asynchronous APIs can improve concurrency and reduce latency, but also acknowledges that they can make the caller side of the API less clear. To address this, he suggests rethinking the pattern by making the API synchronous and allowing the caller to add concurrency as needed. The video also delves into the use of condition variables in Go programming for sharing resources. Mills explains their basic operations and potential downsides, such as spurious wake-ups. He proposes an alternative approach of sharing resources through communication using semaphores and channels, highlighting the simplicity of release and hijack operations in this approach. Additionally, the video discusses the use of channels in Go for communication and resource management. Mills emphasizes the importance of sending data along with signals to ensure all interested receivers receive the data. He introduces the concept of using a cue state struct to efficiently communicate with multiple callers. The worker pool pattern in Go is also explored, which allows for the reuse of goroutines for multiple tasks. Mills acknowledges the challenges of debugging deadlocks and finding specific goroutines in this pattern. He suggests a new approach of starting goroutines only when necessary and using the semaphore channel pattern to limit work, with the goal of simplifying worker pools while still distributing work across threads. Overall, the video provides guidelines for effective use of goroutines and communication in Go programming. It emphasizes the importance of starting goroutines for concurrent work, avoiding blocking the caller, and not spooling up idle workers. Direct communication and clear documentation are also highlighted as crucial aspects of Go programming.

+ - Dmitri Shuralyov. (Dmitri Shuralyov, M. Sc.) [Website](https://dmitri.shuralyov.com/), [GitHub](https://github.com/dmitshur), [YouTube](https://www.youtube.com/c/DmitriShuralyov) - + [talk/dmitri2016](https://www.youtube.com/watch?v=9XTl1d4nwdY) Go in the browser. dotGo. Oct 10, 2016. + + [talk/dmitri2016](https://www.youtube.com/watch?v=9XTl1d4nwdY)
Go in the browser. dotGo. Oct 10, 2016. +

Summary:In this episode of dotGo 2016, Dmitri Shuralyov discusses the use of Go in the browser using the GopherJS compiler. He presents three interesting examples of how Go can be utilized in frontend programming. First, Shuralyov talks about the Kell programming language, which offers a pleasant refactoring experience and easy code reusability across projects. Kell is versatile, working on both desktop and mobile operating systems. Next, he highlights Gopher, a compiler that converts Go code to JavaScript for browser use. He mentions Gopher Jazz and a J's package for JavaScript integration in Go. He also discusses the GS package in Go, which allows developers to interact with JavaScript, providing an API similar to C but with the semantics of the reflect package. This package enables object conversion, key setting, and access to the global object. Shuralyov then introduces Gil, a programming language that can be used on the front end for tasks such as implementing a reader and writer, using the DOM, and making XHR requests. He explains the implementation of an I/O writer and reader in a browser console using the DOM. He also discusses the use of channels and readers in JavaScript to create a blocking operation for user input. Additionally, Shuralyov demonstrates streaming HTTP response bodies in Go and mentions that the same code can be used on the front end using the fetch API. He provides an example of streaming and parsing a CSV file in Go. Finally, he discusses the challenges of using Go in the browser, including the lack of a React-like library and large JavaScript output. However, he emphasizes that Go's performance is excellent and efforts are being made to improve tooling. He suggests targeting web assembly as the next step, although it is still a work in progress. Overall, Shuralyov shares his positive experience with Go and explains why it can make frontend programming enjoyable.

+ - Steve Francia. [Website](https://spf13.com/), [GitHub](https://github.com/spf13), [Twitter](https://twitter.com/spf13). + [talk/steve2019a](https://spf13.com/presentation/what-should-a-modern-practical-programming-language-look-like/) What Should A Modern Practical Programming Language Look Like. Landing Festival. April 4, 2019. + [talk/steve2019b](https://spf13.com/presentation/the-legacy-of-go/) The Legacy Of Go. Go Lab. Oct 22, 2019. @@ -435,7 +439,8 @@ his work is mainly in the runtime memory system such as the refactoring of memor - Dave Cheney. [Website](https://dave.cheney.net/), [GitHub](https://github.com/davecheney), [Twitter](https://twitter.com/davecheney) - Sam Boyer. [GitHub](https://github.com/sdboyer), [Twitter](https://twitter.com/sdboyer) - Fillippo Valsorda. [Website](https://filippo.io/), [GitHub](https://github.com/FiloSottile), [Twitter](https://twitter.com/FiloSottile) - + [talk/filo2016](https://www.youtube.com/watch?v=lhMhApWQp2E) From cgo back to Go. July 12, 2016 + + [talk/filo2016](https://www.youtube.com/watch?v=lhMhApWQp2E)
From cgo back to Go. July 12, 2016 +

Summary:In the GopherCon 2016 video episode titled "cgo Safely Taming the Beast, " Filippo Valsorda discusses the challenges and benefits of using Cgo in Go development. He highlights the advantages of Go, such as its efficient memory management, speed, and the availability of community-built tools. However, he also acknowledges the limitations of Cgo, including issues with memory management and slow compilation. Valsorda explains the role of garbage collection in managing memory allocation and deallocation in Go. He discusses potential issues with garbage collection when pointers are stored in global variables and the potential issues that can arise when using the garbage collector and Segoe in Go programming. He suggests using C memory instead of Go pointers to avoid these issues. The video also explores the use of an arena for memory management in Go, which simplifies code and eliminates the need for manual memory freeing. Valsorda discusses the use of unsafe pointers in Go for casting memory into different types without a garbage collector. He highlights the benefits of using the Kellogg function for memory allocation and zeroing out. The episode emphasizes the advantages of using Go pointers over C pointers for memory copying and provides instructions on using Go pointers with C functions. The arena pattern is discussed for efficient and reliable memory management in both C and Go programming languages. The video also delves into the rules and consequences of passing pointers in Go, emphasizing the importance of following these rules to avoid program crashes. Valsorda discusses the use of C Go pointers and callbacks, providing guidelines for using export annotations and addressing the issue of user data. The episode covers memory management challenges in both C and Go programming languages, highlighting the importance of sticking to familiar rules to avoid complexity. It suggests running C on its own thread for improved performance but warns about the need for careful memory and concurrency management. Overall, the video provides valuable insights into the challenges and benefits of using Cgo in Go development, offering practical tips and guidelines for efficient memory management and performance optimization.

+ [talk/filo2017](https://speakerdeck.com/filosottile/calling-rust-from-go-without-cgo-at-gothamgo-2017) From Go to Rust without cgo. + [talk/filo2018](https://speakerdeck.com/filosottile/why-cgo-is-slow-at-capitalgo-2018) Why cgo is slow. CapitalGo 2018. + [talk/speakerdeck](https://speakerdeck.com/filosottile?page=1) @@ -446,13 +451,20 @@ his work is mainly in the runtime memory system such as the refactoring of memor ### Group Interviews -- [talk/goteam2012](https://www.youtube.com/watch?v=sln-gJaURzk) Meet the Go Team. Google I/O 2012. Jul 2, 2012. -- [talk/goteam2013](https://www.youtube.com/watch?v=p9VUCp98ay4) Fireside Chat with the Go Team. Google I/O 2013. May 18, 2013. -- [talk/goteam2014](https://www.youtube.com/watch?v=u-kkf76TDHE) Inside the Gophers Studio with Blake Mizerany. GopherCon 2014. May 21, 2014 -- [talk/goteam2019](https://www.youtube.com/watch?v=3yghHvvZQmA) Meet the Authors: Go Language. Cloud Next '19. Apr 10, 2019. -- [talk/goteam2020a](https://www.youtube.com/watch?v=gJxvkOHpTSM) GoLab 2020: Go Team AMA. Oct 22, 2020. -- [talk/goteam2020b](https://www.youtube.com/watch?v=BNHwHLNLjLs) GopherCon 2020: Go Team AMA. Nov 16, 2020. -- [talk/goteam2021](https://www.youtube.com/watch?v=hu9spj-GJ1U&) GopherCon 2021: Go Time Live - Go Team "Ask Me Anything", Dec 28, 2021. +- [talk/goteam2012](https://www.youtube.com/watch?v=sln-gJaURzk)
Meet the Go Team. Google I/O 2012. Jul 2, 2012. +

Summary:In the video episode titled "Google I/O 2012 - Meet the Go Team, " the Go Team at Google is introduced. The team consists of members Andrew Gerrand, Brad Fitzpatrick, Ken Thompson, Rob Pike, Robert Griesemer, and David Simons. The team is currently focused on internal development and plans to release Go 1.1 by the end of the year. This release will include performance improvements and minor additions to libraries. The team is committed to making the APIs correct before making significant changes. They are also working on improving the garbage collector and promoting other operating system ports to fully supported status. Go 1.1 will enhance performance, efficiency, and reliability and will support FreeBSD, Windows, Linux, and other platforms. The video highlights the impact of concurrency and interfaces on programming in Go. The ease of working with concurrency and the significance of interfaces in software development are discussed. The advantages of package files being a single file are also mentioned, as it simplifies code maintenance. The video also discusses the improvements in scheduling Go routines and ongoing discussions on enhancing the scheduler and efficiency of the Go language runtime. The need for a preemptive scheduler to improve resource management and load balancing is emphasized. The limitations of current concurrency and synchronization features in Go channels are discussed, along with the possibility of implementing higher-order features on top of low-level synchronization features. The importance of structuring programs in Go and the need for higher-level libraries are emphasized, along with the efficiency and flexibility of Go routines. The video also delves into the growth and design processes of the programming languages D and Go. The simplicity and effectiveness of Go can be attributed to the agreement among the creators on every feature. Overall, the video highlights the features and advantages of the Go programming language, including its simplicity, efficiency, and flexibility. The Go Team at Google is actively working on improving the language and addressing its limitations. They are committed to making Go a reliable and efficient programming language for developers.

+- [talk/goteam2013](https://www.youtube.com/watch?v=p9VUCp98ay4)
Fireside Chat with the Go Team. Google I/O 2013. May 18, 2013. +

Summary:In this episode of the Google I/O 2013 Fireside Chat with the Go Team, members of the Go Team at Google, including Andrew Gerrand, Brad Fitzpatrick, David Symonds, Ian Lance Taylor, Nigel Tao, Rob Pike, Robert Griesemer, and Sameer Ajmani, discuss various topics related to the Go programming language. The session begins with a discussion on recent developments in Go, including the release of Go 1.1 and the significant speed improvements that came with the transition from Go 1.0 to 1.1. The team also expresses gratitude for regular users and discusses ongoing efforts to optimize garbage generation in Go programs to improve performance. The conversation then moves on to the issue of versioning in Go Get and potential solutions for better collaboration and stability in teams. The team also discusses the desire for support for compiled Go libraries, although there are no immediate plans for it. The team praises the Go language for Android development but suggests adding more features. They question why expressions were not included in Go and discuss the use of variables instead of vowels and limitations on immutability. The team also discusses the impact of control flow on program reasoning and the performance improvements in Go's interface with cgo. The team also discusses the use of Go at Google, with the company transitioning from using C++ to Go for its internal systems. They discuss the goal of making Go the best language for App Engine and providing excellent tools for it. The team also mentions that debugging tools for running an App Engine app locally are in development. The team explores the compatibility of Go with Chromebook and the possibility of using it as a replacement for Kosh. However, the lack of a script interpreter for Go raises questions about its feasibility. The team also discusses suggestions for improving variable declaration, in-range loops, and the Syscall package in Go. They mention the feasibility of using Go for writing code for Google Glass and discuss the use of JSON RPC and REST API for HTTP communication. The team concludes by mentioning the enthusiasm of former Ruby programmers in the Go community and the potential of creating a Go script interpreter to engage more developers and expand Go's audience. They also discuss the appeal of the Go programming language for former Ruby programmers, highlighting its concurrency packages and structures. Overall, the episode provides valuable insights into the Go programming language and its future development.

+- [talk/goteam2014](https://www.youtube.com/watch?v=u-kkf76TDHE)
Inside the Gophers Studio with Blake Mizerany. GopherCon 2014. May 21, 2014 +

Summary:In the video episode titled "GopherCon 2014 Inside the Gophers Studio with Blake Mizerany, " Blake Mizerany, a member of the Go team at Bell Labs, conducts a panel discussion with other members of the team. The episode begins with Blake explaining that he had to change his presentation topic due to overlap with other talks. Instead, he decides to host a Q&A session with Andrew Durand, Rob Commander Pike, Bradley Joseph Fitzpatrick, and Robert Griesinger. The panel discussion revolves around the challenges and experiences of working on the Go team at Bell Labs. One of the frustrations mentioned is the repetitive typing involved in programming. They also discuss the benefits of embedding Pearl in Go and the surprises that come with using Go, such as the HTTP handler funk type and automatic struct generation. The panelists share their experiences and challenges encountered while programming in Go. They mention issues with the XML package, non-nil interfaces, and calling methods on nil pointers. They emphasize the need to educate people about Go's simplicity and the challenges faced by developers transitioning from other languages. The use of channels and select statements in Go routines is highlighted as a common source of awkwardness. The importance of understanding and embracing Go's unique features and mindset is emphasized throughout the discussion. The panelists also discuss their proud contributions and regrets in Go development. They express dissatisfaction with the lack of consistency in variable declaration but acknowledge that it generally works well. The episode also touches on the growth and adoption of the Go programming language. Efforts to enhance the garbage collector in Go and expand its usage beyond servers are mentioned. The growing Go community and potential for widespread adoption are highlighted, although the panelists acknowledge the need for future cleanup in terms of inconsistent naming conventions and legacy packages in the Go standard library. Overall, the episode provides insights into the challenges and experiences of working on the Go team at Bell Labs. It highlights the surprises and challenges encountered while programming in Go, as well as the importance of understanding and embracing Go's unique features. The episode also discusses the growth and potential of the Go programming language, while acknowledging areas for improvement.

+- [talk/goteam2019](https://www.youtube.com/watch?v=3yghHvvZQmA)
Meet the Authors: Go Language. Cloud Next '19. Apr 10, 2019. +

Summary:In this episode of the Cloud Next '19 video, the focus is on the Go programming language. The discussion is led by the authors of Go, Ian Taylor and Robert Van Gent, who introduce themselves and their contributions to the language. They highlight the tools they have developed, such as gofmt and goimports, which have made coding in Go more efficient. The panel discussion delves into the versatility of Go and its advantages in terms of simplicity, efficiency, and concurrency. It is praised for its performance and ease of learning, making it suitable for both beginners and experienced developers. The language has found applications in cloud computing, with Google using it for various services like Docker, Kubernetes, Istio, and gVisor. The panel also discusses the Bazel build system, which is highly effective for complex programs with multiple languages and generated code. While Go has its own build system, Bazel offers a more efficient solution. However, there are still some tools in development that may not fully align with Go's built-in build system. The Go ecosystem is working towards making tools agnostic, allowing developers to use different build systems. The discussion also touches on the improvements made in the Go ecosystem, such as the ability to import GitHub repositories and libraries, and the changes made to the standard library to make it smaller and more modular. The lack of support for Go in Google Cloud and Google App Engine flexible environment is a concern for the audience, but improvements have been made in recent years. The panel also discusses the upcoming release of Go 2, which will bring significant changes to the language and libraries. The Go team is currently focusing on dependency management, errors, and generics for Go 2. The importance of simplicity and readability in code is emphasized, as well as the need for collaboration and transparency in decision-making processes. Overall, the panel highlights the strengths of the Go programming language and its potential for future development. It is clear that Go has become a popular choice for developers due to its simplicity, efficiency, and suitability for large applications and teams.

+- [talk/goteam2020a](https://www.youtube.com/watch?v=gJxvkOHpTSM)
GoLab 2020: Go Team AMA. Oct 22, 2020. +

Summary:In this episode of the GoLab conference, Miriah Peterson and Natalie Pistunovich moderate an "Ask Me Anything" session with members of the Go Team, including Carmen Hernandez Andoh, Austin Clements, Katie Hockman, and Ian Lance Taylor. The session provides an opportunity for participants to ask questions about recent developments and future plans for the Go programming language. The conversation covers a range of topics, including the conference's Twitter handle and hashtag, different time zones and locations, and personal details about the team members. Carmen, who is actively involved in the Go community, is mentioned as having recently moved to Ann Arbor, Michigan. The author, a facilitator of the session, shares their collection of sewer plate pictures from around the world and their love for their dogs and cat, Java. The author then transitions to their introduction to programming, influenced by their father's career. They recall their early exposure to computers and their interest in programming, leading them to discover their passion for computer science. They discuss their pandemic hobbies, such as smart home automation and cooking, and emphasize the importance of keeping programming languages simple and consistent. The team members discuss their current projects, including improving the linker in Go 116, focusing on CPU and RAM enhancements. They reflect on their experience in the security field and their work on adding native fuzzing to the Go language to identify vulnerabilities. They also mention their focus on improving the runtime and compiler. The team shares their plans for the future of Go, including the implementation of generics, the release of Mango programming language, and the addition of support for concurrent data structures. They discuss the challenges of managing go routines in concurrency and the ongoing project of reducing pause times in the Go garbage collector. The team emphasizes the importance of simplicity in programming and the need for clearer understanding of programs with large numbers of go routines. They express interest in improved observability and debuggability for highly concurrent systems. They also mention the launch of pkg. go. dev, a new package discovery site, and the efforts to make the Go ecosystem easier to use and understand. The team discusses the challenges of managing external contributions to GitHub and improving the review process. They highlight the importance of engaging stakeholders and maintaining good relationships with vulnerability reporters. They also discuss the balance between performance improvements and potential slowdowns. The team emphasizes the importance of fuzzing and language features in software development and the ongoing development of fuzz testing tools. They discuss the challenges of linking large Go projects and the improvements made to the Go linker. The team reflects on their experience transitioning to Go from other programming languages and the value of the Go community. They express gratitude to the participants for joining the conference and announce the schedule for tomorrow's sessions. Overall, the episode provides valuable insights into the recent developments and future plans for the Go programming language. The team's dedication to improving the language and its ecosystem is evident, and they emphasize the importance of community engagement and collaboration.

+- [talk/goteam2020b](https://www.youtube.com/watch?v=BNHwHLNLjLs)
GopherCon 2020: Go Team AMA. Nov 16, 2020. +

Summary:In the video episode titled "GopherCon 2020: Ask Me Anything with the Go Team, " Kelsey Hightower from the Google Cloud team moderates a discussion with members of the Go Team. The episode covers a wide range of topics related to the Go programming language and its development. The episode begins by introducing the members of the Go Team and their roles and responsibilities. It then delves into the features and support for editors in Go, particularly highlighting Go Please, a language server that provides editor support and IDE-like features. The Language Server Protocol is mentioned as a way to provide consistent features across different editors. Go Please offers functionalities such as auto completion, jump to definition, find references, and the ability to extract code into its own function. The addition of Go Please to the Acme Editor is mentioned, although the constant information provided is overwhelming for the author. The Go Team's focus on developing Go Package Discovery, a platform for finding and evaluating third-party packages for Go projects, is discussed. Despite delays caused by COVID-19, the team remains committed to unifying the web experience for Go and providing developers with the necessary information to determine if a package meets their criteria. The episode also explores the role of foundations in language communities, with Python having one and Go not. The importance of transparency, decision making, and governance in the Go language community is emphasized. The partnership with the Gobridge foundation, which focuses on providing technical education for underrepresented groups, is mentioned as well. The Go Team's growth and efforts to diversify by bringing in cross-functional partners are highlighted. The challenges faced in developing the Go Package Dev site and a production service are discussed, emphasizing the importance of feedback and communication in addressing these challenges. The episode also touches on the upcoming release of Go 2. 0 and how developers can prepare for it. The introduction of version numbers in Go programming and the challenges they present are explored. The benefits of Go in reducing decision fatigue and conceptual overhead, promoting collaboration, and enabling large-scale projects are acknowledged, along with areas for improvement. Overall, the episode provides valuable insights into the development and future plans of the Go programming language, while also addressing the challenges and opportunities it presents.

+- [talk/goteam2021](https://www.youtube.com/watch?v=hu9spj-GJ1U&)
GopherCon 2021: Go Time Live - Go Team "Ask Me Anything", Dec 28, 2021. +

Summary:In the video episode titled "GopherCon 2021: Go Time Live - Go Team 'Ask Me Anything'", Go Time's Host, Mat Ryer, moderates a discussion with members of the Go Team at Google. The episode covers a wide range of topics related to managing and developing the Go programming language. The Go Team at Google has grown from 12 to over 50 members, focusing on scaling and collaboration. They have prioritized security and addressed the needs of mainstream and enterprise adopters. User experience research is important for improving developer workflows, and the team has conducted the Go Developer Survey, which received over 10, 000 responses. One significant focus of the discussion is the introduction of generics in the Go programming language. The impact of generics on the tools ecosystem, package compatibility, and code translation is discussed. The team acknowledges the challenges in areas such as static analyzers and the vet command, and the need for further work. The upcoming release of Go 1. 18 will introduce generics for the core, but most of the standard library still lacks generics. The community aims to make some of the standard library packages generic in a sensible way in the future. The goal is to set a good example and create a good experience for developers. The episode also emphasizes the importance of user feedback in software development, particularly in identifying pain points and addressing security concerns. The Go Team conducts surveys and studies to gather insights from users and prioritizes issues based on their feedback. The discussion also touches on the preferences of team members for different tools and IDEs, such as Jim, VS Code, Vim, and Emacs. The importance of having a text editor for coding and data analysis tasks is highlighted. Overall, the episode provides valuable insights into the Go Team's roles in managing and developing the Go programming language, their focus on security and user experience, and their plans for the future, including the introduction of generics and improvements to the standard library.

[Back To Top](#top) @@ -577,7 +589,8 @@ The historical release notes may helpful for general information: + [talk/type-alias](https://www.youtube.com/watch?v=t-w6MyI2qlU) GopherCon 2016 - Lightning Talk: Robert Griesemer - Alias Declarations for Go, A proposal. Oct 9, 2016 + [issue/16339](https://go.dev/issue/16339) proposal: Alias declarations for Go + [issue/18130](https://go.dev/issue/18130) all: support gradual code repair while moving a type between packages -- [talk/refactor-video](https://www.youtube.com/watch?v=h6Cw9iCDVcU) Russ Cox. Codebase Refactoring (with help from Go). GothamGo 2016. November 18, 2016. +- [talk/refactor-video](https://www.youtube.com/watch?v=h6Cw9iCDVcU)
Russ Cox. Codebase Refactoring (with help from Go). GothamGo 2016. November 18, 2016. +

Summary:In the video episode titled "GothamGo 2016 Codebase Refactoring (with help from Go)" by Russ Cox, the challenges of working with large code bases in Go and the importance of scalability are discussed. Cox, who has been involved in the development of the Go Programming Language since its early stages, shares his insights on how Go can better assist in the refactoring of code package structures. The episode begins by highlighting the challenges faced when dealing with large code bases, such as Google's single repository, and emphasizes the need for efficient imports and minimizing unnecessary dependencies. Cox explains the reasons for splitting code into separate packages, which include improving manageability and reducing dependencies. Cox then discusses the process of codebase refactoring, suggesting breaking it down into three stages: making preliminary changes, updating the code to use the new API, and removing the old API. This gradual approach allows for easier review and submission of smaller commits, especially when dealing with code spread across multiple repositories. The video also delves into the challenges of achieving interchangeability in Go programming. While functions and types can be defined as interchangeable, moving a type from one package to another poses limitations. Cox mentions a solution implemented in 2011 but suggests it may not be ideal. He also highlights the difficulties faced in the Kubernetes project when moving types in a codebase. Cox proposes the addition of a mechanism to create interchangeable names for types and emphasizes the need for Go to support gradual code repair for moving types between packages. He expresses gratitude for input on the matter and mentions that the inclusion of type aliases is being reevaluated to determine the appropriate course of action. Overall, the podcast provides valuable insights into the challenges of working with large code bases in Go and offers suggestions for improving codebase refactoring and achieving interchangeability.

+ [doc/refactor](https://go.dev/talks/2016/refactor.article) Russ Cox. Codebase Refactoring (with help from Go). [Back To Top](#top) @@ -775,8 +788,10 @@ Error handling includes two separate works: error values and error formatting. H ### Office Hours - [discuss/runtime-office-hours](https://docs.google.com/document/d/17YYCLhsyoGx7wLVGUET2VvHog9oJE4xLCljUGmJCucU/edit) compiler & runtime office hours - + [talk/runtime-office-meeting1](https://www.youtube.com/watch?v=p69c_R-YdFk&ab_channel=TheGoProgrammingLanguage) Go compiler & runtime office hours 2022-12-19 - + [talk/runtime-office-meeting2](https://www.youtube.com/watch?v=x7-5qlTW0J8&ab_channel=TheGoProgrammingLanguage) Go compiler & runtime office hours 2023-01-19 + + [talk/runtime-office-meeting1](https://www.youtube.com/watch?v=p69c_R-YdFk&ab_channel=TheGoProgrammingLanguage)
Go compiler & runtime office hours 2022-12-19 +

Summary:The Go team at Google recently held an open meeting to discuss various topics related to the Go programming language. One of the main concerns raised was the issue of Windows ownership and the perceived neglect of the platform. Microsoft has acknowledged the need for improvement and plans to enhance the integration of Windows and interaction with Windows Tools. Increased community ownership is also seen as beneficial. Another topic of discussion was the potential usefulness of the new standard Library package called Arenas. While Arenas are being used at Google for data serialization and deserialization, there are concerns about manual memory release. Specific feedback is needed to improve the proposed API and address issues like controlling chunk size. The importance of investing in RAM efficiency and reducing memory footprint was emphasized, along with exploring methods to automatically free resources more efficiently. The meeting also touched on the performance trade-offs and impact on different platforms, particularly in atomic reads. A prototype of a Swiss table implementation is being developed, with ongoing discussions and issue tracking. The team is seeking feedback on the benchmarks they are running and their representativeness. Other topics discussed include understanding stack growth and frame pointers in binaries for different architectures, the importance of PDB files for efficient Windows debugging, and the limitations and scalability issues with PGO (Profile-Guided Optimization). The inliner has undergone changes with the implementation of unified IR, removing limitations and enhancing inlining. The team is also exploring ways to integrate inlining and escape analysis into SSA (Static Single Assignment) and improve the computation and usage of hairiness. The meeting concluded with appreciation for the participants, and the next meeting is scheduled for a month later. Overall, the meeting covered a range of topics related to the Go compiler and runtime, addressing concerns, seeking feedback, and discussing potential improvements and optimizations.

+ + [talk/runtime-office-meeting2](https://www.youtube.com/watch?v=x7-5qlTW0J8&ab_channel=TheGoProgrammingLanguage)
Go compiler & runtime office hours 2023-01-19 +

Summary:In the Go compiler and runtime office hours on January 19, 2023, several key topics were discussed. The focus was on reducing binary sizes and identifying dead code in large programs with dependencies. The current method of using 'go mode vendor' and grep for reflection was considered hacky, and the author suggested that the Linker could provide more detailed information on the function triggering dead code behavior. Reflection abuse in dependency trees can be managed by using a method by name with variable strings and analyzing the entire dependency tree using a reachability graph. The discussion also touched on the challenges faced in debugging on Plan 9 due to infrastructure issues and lack of support for runtime changes. The adoption of the New Port policy has helped reduce this problem. Plan 9's unique memory manager poses compatibility issues with other architectures, and manipulating page tables is a challenge. The system's memory management provides efficient allocation but has limited availability of support. In terms of performance optimization, periodic reloading of data in the live Heap slows down request processing, and garbage collection cycles further slow down go routines. However, scaling the cluster is costly, and optimization efforts can eliminate tail latency. The use of a user space pacer to predict the start of the collection cycle improves CPU time efficiency. Finalizers and background processes schedule and make decisions during garbage collection cycles. Monitoring the live Heap and adjusting trigger points based on its trend is crucial for optimizing performance. Improving communication and support within the Plan 9 community was also highlighted, as well as the process for adding new members to the group. The need for updates in certain apps and understanding the process of updating Go versions was emphasized. Scheduling future discussions on these topics was recommended. Overall, the office hours provided valuable insights into various aspects of the Go compiler and runtime. The discussions focused on reducing binary sizes, identifying dead code, debugging challenges on Plan 9, performance optimization, and improving communication within the community. The experts acknowledged the challenges and committed to finding solutions through open communication and collaboration.

### Compiler @@ -811,7 +826,8 @@ Error handling includes two separate works: error values and error formatting. H - [design/64align](https://go.dev/design/36606-64-bit-field-alignment) Dan Scales. Proposal: Make 64-bit fields be 64-bit aligned on 32-bit systems, add //go:packed, //go:align directives. 2020-06-08. + [issue/599](https://go.dev/issue/599) cmd/compile: make 64-bit fields 64-bit aligned on 32-bit systems + [issue/36606](https://go.dev/issue/36606) proposal: cmd/compile: make 64-bit fields be 64-bit aligned on 32-bit systems, add //go:packed directive on structs -- [talk/gccgo](https://www.youtube.com/watch?v=U0w9eFunkX4) Brief overview of gccgo, "the other" Go compiler. Aug 6, 2015. +- [talk/gccgo](https://www.youtube.com/watch?v=U0w9eFunkX4)
Brief overview of gccgo, "the other" Go compiler. Aug 6, 2015. +

Summary:In this episode, Chris Manghane from the core Go language team at Google provides a brief overview of gccgo, also known as "the other Go compiler. " Gccgo is a Go compiler that utilizes the power of GCC for compilation and optimization. It was written by Ian Lance Taylor and released in November 2009, and it is still actively maintained by him. Manghane explains that the decision to develop gccgo using C++ and targeting GCC was made because GCC supports a wide range of architectures and offers extensive capabilities in code analysis, optimization, and generation. By using GCC as a compiler, technical honesty is promoted, as it avoids dependence on a single implementation. Additionally, having multiple implementations of a product helps identify flaws and improve designs. However, gccgo faces challenges in achieving feature parity with the go compiler. It has an outdated garbage collector and experiences delays in updates. Version 1. 4 brings changes to the C runtime and the way the garbage collector expects type information. The shift from segmented to contiguous stacks also poses challenges, as current C compilers do not support the necessary precise control and use of stack knives. Despite these challenges, gccgo has seen significant improvements, becoming separate from GCC and offering greater flexibility. The implementation of LLVM has resulted in a more efficient compiler. The use of Portable Native Client allows for running native code in web browsers, leading to increased adoption of Go. Manghane emphasizes the importance of catching up with the go compiler and experimenting with features like generics. He also highlights the need to improve basic tools, particularly in authorization and book compilers. Minimizing garbage collection overhead is crucial, and stamp analysis is proposed as a method to enhance the performance of the garbage collector. The ultimate goal is to achieve a more efficient and versatile garbage collector. Additionally, the language fancy power has the potential to improve binary generation and inspire improvements in the go compiler.

- [issue/54534](https://go.dev/issue/54534) cmd/compile: design doc explaining unified IR implementation - [discuss/53060](https://go.dev/issue/53060) discussion: clarify Go support policy for secondary ports - [issue/53383](https://go.dev/issue/53383) clarify Go support policy for secondary ports @@ -912,9 +928,12 @@ in Go 1.15 and Go 1.16. - [design/go-dep](https://docs.google.com/document/d/18tNd8r5DV0yluCR7tPvkMTsWD_lYcRO7NhpNSDymRr8) Go Packaging Proposal Process - [design/go-dep2](https://docs.google.com/document/d/1qnmjwfMmvSCDaY4jxPmLAccaaUI5FfySNE90gB0pTKQ/edit) Dependency Management Tool - [doc/go-dep](6https://blog.gopheracademy.com/advent-2016/saga-go-dependency-management/) Sam Boyer. The Saga of Go Dependency Management. Dec 13, 201 - - [talk/go-dep](https://www.youtube.com/watch?v=5LtMb090AZI) GopherCon 2017: Sam Boyer - The New Era of Go Package Management. Jul 24, 2017 - - [talk/go-dep-design](https://www.youtube.com/watch?v=wBTGd_dvnO8) dotGo 2017 - sam boyer - The Functional Design of Dep. Dec 8, 2017 - - [discuss/go-dep](https://www.youtube.com/watch?v=sbrZfPgNmfw) Building Predictability into Your Pipeline :: Russ Cox; Jess Frazelle, Sam Boyer, Pete Garcin. Feb 22, 2018 + - [talk/go-dep](https://www.youtube.com/watch?v=5LtMb090AZI)
GopherCon 2017: Sam Boyer - The New Era of Go Package Management. Jul 24, 2017 +

Summary:In the GopherCon 2017 episode titled "The New Era of Go Package Management, " Sam Boyer discusses the importance of package management in software development and the transition towards official tooling. He emphasizes the need for a common language in the software ecosystem to effectively share code and improve collaboration. Boyer acknowledges the challenges of dependency management in Go programming, such as the lack of emphasis on releases and potential conflicts with the go get tool. However, he highlights the Go community's culture of caution and thoughtfulness when dealing with dependencies. Various tools, including Goep, Glide, and GB, have been developed to address reproducibility and versioning issues. The introduction of the vendor directory in 2015 improved dependency management but also introduced new challenges. To address these issues, a committee was formed, and GitHub Depp was introduced as an official experiment in dependency management. Depp relies heavily on community participation and follows a two-file system using a Toml file to declare rules and constraints. It generates a lock file for reproducibility and follows semantic versioning. Boyer also mentions Digby, a package managing gopher that aims to integrate relevant behavior into the tool chain. The development of the Go tool chain involves experimentation and mapping to ensure a clear transition. Boyer emphasizes the importance of community participation and support in the success of these tools. Overall, the Go programming language offers effective dependency management tools and owes its success to the contributions and support of the community.

+ - [talk/go-dep-design](https://www.youtube.com/watch?v=wBTGd_dvnO8)
dotGo 2017 - sam boyer - The Functional Design of Dep. Dec 8, 2017 +

Summary:In this episode of dotGo 2017, Sam Boyer discusses the functional design principles behind dep, a dependency management tool for Go. Despite Go not being a functional language, Boyer demonstrates how principles from functional programming can be leveraged to design efficient and effective Go programs. One key concept Boyer explores is memoization, a technique that improves the performance of functions by caching their results. He explains how memoization can be applied to the Fibonacci sequence, reducing the number of function calls and improving computation time. By storing previously computed values, the time complexity of the function is reduced to O(n). Boyer emphasizes the relevance of memoization in avoiding unnecessary work and highlights dep ensure as a key function in the code. Boyer also delves into the topic of dependency management in Go. He explains that dependency managers map project source code to its dependencies, adding metadata to describe desired sources. He discusses the two notions of 'should' for dependencies: looser constraints and stricter reproducible builds. Go uses static analysis to map project source to manifest, and the relationship between project source, manifest, and lock files is crucial. Boyer explains how the depth model analyzes import statements and uses the go package Tommo to create a lock and populate the vendor directory. Overall, Boyer emphasizes the importance of designing transparent and error-free systems with valid inputs and outputs. He suggests that exploring different programming models, such as functional programming and actor models, can lead to innovative and beneficial systems. By applying principles from functional programming, even in non-functional languages like Go, developers can create more efficient and effective programs.

+ - [discuss/go-dep](https://www.youtube.com/watch?v=sbrZfPgNmfw)
Building Predictability into Your Pipeline :: Russ Cox; Jess Frazelle, Sam Boyer, Pete Garcin. Feb 22, 2018 +

Summary:In the episode "Building Predictability into Your Pipeline, " Pete Garcin from ActiveState, Sam Boyer from Stripe, Russ Cox from Google, and Jess Frazelle from Microsoft discuss the challenges and solutions related to reproducible builds, environment configuration, and dependency management. Dependency management has been a long-standing problem in software development, but Go has made improvements with code hosting site import paths and the introduction of vendor directories. Tools centered around vendor directories, such as DEP, have been widely utilized in production. However, the availability of updated data on its usage is limited. The adoption of semantic versions and the need for clear documentation and user-friendly interfaces are ongoing areas of improvement. Implementing dependency management in the build pipeline has resulted in significant improvements for large projects like Kubernetes. Vigo, a new tool that provides an alternative solution for package management in Go programming, has proven to be highly efficient and capable of handling complex environments. However, the use of symlinks in Kubernetes has caused some problems. Vigo is gaining traction and being adopted by major projects. Reproducible builds ensure consistent deployment of applications, and containerization offers a solution by providing a consistent environment for application deployment. Transitioning to containers has benefits, such as easier updates and maintenance, but it requires effort to change workflows and specific tooling for integration with CI/CD processes. Optimizing container images and reducing dependencies are crucial for performance. Language package managers play a crucial role in software development, and verification steps ensure integrity. Proxy support for the system is a challenge, as companies want to ensure package stability and security. Ongoing work is being done to improve tooling and verification methods, with Microsoft's open source team involved in the development process. The adoption of Go language faces challenges due to its perception as a bleeding-edge technology. To address this, changes are being made to introduce package management and versioning, crucial for reproducible builds and compatibility. Gathering community feedback is essential before implementing these changes, and an official go proposal will soon be initiated. Overall, the experts emphasize the importance of reproducible builds, clear documentation, user-friendly interfaces, and community engagement to overcome challenges in adopting Go and ensure predictability in the software development pipeline.

- [design/vgo](https://go.dev/design/24301-versioned-go) Russ Cox. Proposal: Versioned Go Modules. March 20, 2018. + [issue/24301](https://go.dev/issue/24301) cmd/go: add package version support to Go toolchain + [doc/deps](https://research.swtch.com/deps) Russ Cox. Our Software Dependency Problem. January 23, 2019. @@ -1475,7 +1494,8 @@ These issues are discussion the current performance issue that exist in the curr - ["The Best Programming Advice I Ever Got" with Rob Pike](https://www.informit.com/articles/article.aspx?p=1941206) - [An Interview with Brian Kernighan By Mihai Budiu](http://www.cs.cmu.edu/~mihaib/kernighan-interview/index.html) - [Language Design with Brian Kernighan Holiday Repeat By SE Daily](https://softwareengineeringdaily.com/2017/12/28/language-design-with-brian-kernighan-holiday-repeat/) -- ["C" Programming Language: Brian Kernighan - Computerphile](https://youtu.be/de2Hsvxaf8M) +- ["C" Programming Language: Brian Kernighan - Computerphile](https://youtu.be/de2Hsvxaf8M)
"C" Programming Language: Brian Kernighan - Computerphile +

Summary:In this episode of Computerphile, Professor Brian Kernighan discusses the creation of the book "C" Programming Language. The book, co-written by Kernighan and Dennis Ritchie, is a comprehensive guide to the widely used programming language. Kernighan explains that the development of "C" was influenced by the MULTICS project, which aimed to create a computing utility. Ken Thompson and Dennis Ritchie, who were involved in MULTICS, went on to develop UNIX, a stripped-down operating system. They experimented with high-level languages and created B, a precursor to "C". "C" allowed the operating system to be rewritten in a high-level language, making it more understandable and portable across different architectures. The book, published in 1978, included mathematical expressions and tables, and went through multiple editions. Kernighan also mentions that he wrote tutorial documents on programming languages B and "C" due to market demand. He convinced Dennis Ritchie to co-write a book on "C", combining the tutorial document with Ritchie's reference manual. The book became a definitive guide to "C" and played a significant role in the language's widespread adoption.

- [Debugging performance issues in Go* programs By Dmitriy Vyukov](https://software.intel.com/content/www/us/en/develop/blogs/debugging-performance-issues-in-go-programs.html) - [Interesting papers I'd like to implement (or at least have implementations of)](https://github.com/dgryski/interesting-papers) - [golang/wiki/ResearchPapers](https://github.com/golang/go/wiki/ResearchPapers) diff --git a/README_cn.md b/README_cn.md index aa6c465..7243a71 100644 --- a/README_cn.md +++ b/README_cn.md @@ -366,22 +366,25 @@ Dmitry 来自谷歌动态测试工具团队而不是 Go 团队。他编写了可 + [talk/brad2016d](https://www.youtube.com/watch?v=18kmlJvR6Bk)
Go 开源项目的内部结构。2016年 GothamGo。2016年12月15日。

Summary:在题为“GothamGo 2016 - Go 开源项目的内部结构”的视频节目中,Google Go 编程语言团队成员 Brad Fitzpatrick 全面概述了 Go 开源项目中使用的工具和流程。 Fitzpatrick 强调了解这些工具和流程对于做出明智决策的重要性。 他讨论了版本控制系统和代码审查流程的演变,重点介绍了使用 GitHub 问题进行错误报告和跟踪。 Fitzpatrick 还提到了标签和短链接的实现,以便于导航。 他解释了如何使用 GitHub 中的里程碑来管理发布周期,并强调当前系统的稳定性。 Fitzpatrick 继续讨论 Go 开发社区中使用的沟通渠道,包括邮件列表、Google Groups、Slack 和 IRC。 他提到了一种名为“come to put back”的工具所带来的挫败感,该工具会自动关闭拉取请求。 该视频节目还涵盖了用于 Golang 的测试和构建系统。 org,包括使用任意标签进行投票以及创建名为“run try bot”的标签。 Fitzpatrick 解释了测试的配置矩阵以及与 Gerrit 和 GitHub 的集成。 本集中提到的其他工具包括用于调试和开发目的的 Docker、Kubernetes 和 VMware。 Fitzpatrick 还讨论了调试系统的功能,该系统允许用户运行命令、流输出和接收退出代码。 总体而言,本集全面介绍了 Go 开源项目中使用的工具和流程,为开发人员和贡献者提供了宝贵的见解。

+ [talk/brad2017](https://www.youtube.com/watch?v=4fWqcOubYQ0)
我的前半生在开源项目。2017年3月19日。 -

Summary:

+

Summary:在这一题为“我的半生花在开源中”的视频节目中,Google 软件工程师 Brad Fitzpatrick 回顾了他在开源世界中的旅程。他分享了他在高中时期的经历,当时他第一次涉足互联网世界。 Brad 回忆起使用 AOL 并在聊天室中共享机密信息,以及被解雇并最终发现当地 ISP 的经历。当布拉德深入研究网络开发时,他谈到了他面临的挑战和他获得的技能。他提到了学习 HTML 以及手动创建网页的繁琐性。他还讨论了他使用 Perl 的经验,当其他语言无法广泛访问时,他用 Perl 语言创建网站页面。在整个旅程中,布拉德参与在线论坛来提高自己的技能并克服障碍。他兴奋地回忆起《Programming Perl Second Edition》的发布以及他是如何在与家人一起滑雪时偶然发现这本书的。令他惊讶的是,一个陌生人无意中听到了他的谈话,并证实他们正在谈论同一本书。总的来说,Brad 分享了他多年来在各种开源项目中的智慧和有趣的轶事。从他早期的互联网经历到参与网络开发以及对开源的热情,Brad 的旅程证明了对技术世界的好奇心和毅力的力量。

+ [talk/brad2018a](https://www.youtube.com/watch?v=ZCB-g2B4Y5A)
Go:回顾和展望。2018年4月2日。 -

Summary:

- + [talk/brad2018b](https://www.youtube.com/watch?v=rWJHbh6qO_Y)
Go 1.11 和未来。2018年8月26日。 -

Summary:

+

Summary:在这个题为“Go:回顾与展望”的视频节目中,来自 Google 的 Brad Fitzpatrick 反思了 Go 编程语言的演变。他讨论了 Go 的早期历史,强调了其创建背后的动机,即 C++ 的复杂性不断增加以及 Google 的缓慢构建。 Go 的开发始于设计规范并在创建者(包括 Robert Grissom、Rob Pike 和 Ken Thompson)之间达成共识。该语言随着语法和命名约定的变化而发展。经过两年的发展,Go 开源了,导致了快速的成长和发展。 Go 在过去六年中的流行和发展可以归因于该语言的兼容性和不破坏代码的承诺。虽然语言本身相对稳定,但 Go 的运行时、工具和生态系统都在不断发展和完善。 Go 垃圾收集器进行了重大改进,从而减少了暂停并提高了性能。讨论了 Go 编程语言生态系统的当前状态,重点介绍了 Go 1 中工具的改进和即将推出的功能。 11. 强调了社区反馈在塑造 Go 未来方面的重要性,以及集成 Go One 和 Go 的挑战两码。提到了 Go 中对泛型的渴望,尽管它们的实现尚不确定。关于减少错误处理的讨论也在进行。 Go 计划在其即将发布的版本中进行重大更改,重点是较小的清理和较小的标准库。改进的包管理预计会将大部分标准库转移到其他地方。文本还讨论了编程简单性的重要性以及对未来编程语言易于学习的渴望。 作者分享了他们使用 BASIC 的经验,并表达了对编程语言简单性的希望,但也承认存在不确定性。讨论了向标准库添加新接口的考虑,以及社区内关于正确使用错误接口的持续讨论。总体而言,本视频节目全面概述了 Go 编程语言的演变,重点介绍了 Go 1 发布之前所做的更改和改进。它强调了社区反馈和 Go 生态系统不断发展的重要性。

+ + [talk/brad2018b](https://www.youtube.com/watch?v=rWJHbh6qO_Y)
Go 1 11 和未来。2018年8月26日。 +

Summary:在这个名为“Brad Fitzpatrick:Go 1.11 及更高版本”的视频节目中,来自 Google Go 团队的 Brad 讨论了 Go 编程语言的最新更新和未来计划。他强调了语言规范和标准库的稳定性,同时提到了令人兴奋的工具和运行时。 Go 1.11 带来了更新,例如不再支持 Windows XP 并引入了对 Web Assembly 的支持,从而允许在 Web 平台上实现高性能应用程序。然而,使用Go Web Assembly进行Web开发有其局限性,例如需要重新下载Go运行时以及阻塞交互的限制。 Brad 还讨论了 Go 1.11 中的新功能,包括用于并发编程和模块支持的 Goroutines。他提到了 Go 模块的最新变化、结构字段的性能改进以及编译器的升级。编译器现在跟踪变量之间的关系,并可以优化运行时平衡检查。该视频还解决了当前版本的 Go 面临的批评以及未来版本(例如 Go 2)的计划。Go 2 的开发将取决于 Go 模块和 Go 2 设计等因素。 Go 2 的首要任务之一是添加泛型,这一直是社区内争论的话题。 Go 2 的发布日期预计为 2019 年 11 月。视频中还讨论了在 Go 中实现泛型的挑战和进展,以及与 Go 错误处理方法相关的投诉和挑战。 Go 团队正在致力于解决这些问题并确保现有代码的兼容性和可用性。总的来说,该视频提供了有关 Go 当前状态、未来计划以及它在泛型和错误处理方面面临的挑战的见解。 它鼓励听众探索发行说明以获取更多信息,并随时了解 Go 编程语言的最新发展。

+ [talk/brad2018c](https://www.youtube.com/watch?v=69Zy77O-BUM)
快速谈话:核选项,`go test -run=InQemu`。2018年 GopherCon,2018年9月11日。 -

Summary:

+

Summary:在 GopherCon 2018 Lightning Talk 的这一集中,Brad Fitzpatrick 讨论了在 Go 中测试副作用的挑战。他建议注射副作用并单独测试它们,但承认处理大量副作用时会出现困难。文中还探讨了云原生环境中副作用和磁盘空间的管理,以及扩展磁盘空间的过程以及对更好工具的需求。 Fitzpatrick 建议使用虚拟机(特别是 Qemu)进行快速且可访问的测试。通过绕过 BIOS 和 grub,Qemu 允许快速启动最小的 Linux 内核和 init RD,这是高效测试的理想选择。他还建议使用 Go 作为传统 init 系统的替代品,简化启动过程。这涉及将 Go 测试可执行文件复制到 initrd 中并使用 cpio 存档动态生成用户空间。本集最后解释了使用 Linux 内核进行仿真和测试的过程。总的来说,Fitzpatrick 的演讲为 Go 中测试副作用的挑战提供了宝贵的见解,并为高效和有效的测试提供了创新的解决方案。

+ [talk/brad2019](https://www.youtube.com/watch?v=BRSam0xQJKY)
Brad Fitzpatrick 更喜欢 Go,而非 C, C++, Rust, Perl, Python, Ruby, JavaScript 和 Java。2019年11月28日。 -

Summary:

+

Summary:在本期视频中,标题为“Brad Fitzpatrick 比 C、C++、Rust、Perl、Python、Ruby、JavaScript 和 Java 更喜欢 Go”,作者反思了他们使用各种编程语言的经验。他们表达了对 Perl 的偏好,并对 C++ 和 Python 等语言感到沮丧。然而,他们在选择语言时强调个人喜好和团队惯例的重要性。作者接着讨论了 Go,一种结合了 C 和 JavaScript 特性的编程语言。他们强调了其高级功能和称为 GoRoutines 的独特功能。 GoRoutines 允许使用可读且高效的代码来处理 API 和长时间运行的任务,而不会消耗线程或浪费内存。作者还提到了曾经强大的工具 Perl 的有效性正在减弱,并表明它不再符合所需的标准。他们发现 Go 是一个合适的选择,因为它解决了他们对其他语言的不满,并提供了更高效和有效的解决方案。总的来说,这一集探讨了作者的编程语言之旅以及他们对 Go 的最终偏好。他们强调了选择语言时个人偏好和团队惯例的重要性,并讨论了 Go 使其成为有利选择的独特功能。

- Bryan C. Mills. [GitHub](https://github.com/bcmills) - + [talk/bryan2017](https://www.youtube.com/watch?v=C1EtfDnsdDs) 快速谈话:sync.Map 的概述。2017年 GopherCon,2017年7月24日。 - + [talk/bryan2018](https://www.youtube.com/watch?v=5zXAHh5tJqQ) 重新思考经典的并发模式。2018年 GopherCon,2018年9月14日。 + + [talk/bryan2017](https://www.youtube.com/watch?v=C1EtfDnsdDs)
快速谈话:sync.Map 的概述。2017年 GopherCon,2017年7月24日。 +

Summary:在 GopherCon 2017 的这一集中,Bryan C Mills 就同步问题发表了精彩演讲。 Go 1.9 中的映射。他首先解释了同步。 Map 提供了常见映射操作的原子版本,并解决了缓存争用问题。不过,他警告说,它并不适合所有用例,并且不应在导出的 API 中使用。米尔斯鼓励尝试不同的 Map 实现。然后他介绍了同步输出映射,这是一个有用的工具,用于管理具有稳定密钥和并发循环的映射。然而,他提到它的性能可能会较慢且代码量较大。同步出的 Map 的 API 受到限制,以保持未来的优化可能性。 Mills 继续讨论 Go 1.9 中同步映射的实现,它通过使用两个映射、一个互斥锁和原子值来提高速度和内存效率。他还提到,已经开发了一个独立于运行时的原型来优化效率和内存。最后,Mills 谈到了标准库中“sink 思维图”的引入,它消除了不必要的指针间接。总的来说,这个闪电演讲提供了同步的概述。 Go 1.9 中的 Map 并强调其优点和局限性。它还鼓励开发人员尝试不同的 Map 实现,以找到最适合其用例的方案。

+ + [talk/bryan2018](https://www.youtube.com/watch?v=5zXAHh5tJqQ)
重新思考经典的并发模式。2018年 GopherCon,2018年9月14日。 +

Summary:在 GopherCon 2018 视频节目“重新思考经典并发模式”中,Bryan C. Mills 讨论了重新评估 Go 编程中传统并发模式的重要性。他强调需要理解 goroutine 和通道背后的原理,它们是 Go 并发模型的关键组成部分。 Mills 探讨了与异步编程相关的各种主题,包括条件变量和工作池模式。他解释了异步 API 如何提高并发性并减少延迟,但也承认它们可能会使 API 的调用方变得不太清晰。为了解决这个问题,他建议重新思考该模式,使 API 同步并允许调用者根据需要添加并发性。该视频还深入探讨了在 Go 编程中使用条件变量来共享资源。米尔斯解释了它们的基本操作和潜在的缺点,例如虚假唤醒。他提出了一种通过使用信号量和通道进行通信来共享资源的替代方法,强调了这种方法中释放和劫持操作的简单性。此外,视频还讨论了 Go 中使用通道进行通信和资源管理。米尔斯强调了随信号一起发送数据的重要性,以确保所有感兴趣的接收者都能收到数据。他介绍了使用提示状态结构与多个调用者有效通信的概念。还探讨了 Go 中的工作池模式,它允许为多个任务重用 goroutine。 Mills 承认调试死锁和在此模式中查找特定 goroutine 的挑战。 他提出了一种新方法,即仅在必要时启动 goroutine,并使用信号量通道模式来限制工作,其目标是简化工作池,同时仍然跨线程分配工作。总的来说,该视频提供了在 Go 编程中有效使用 goroutine 和通信的指南。它强调了启动 goroutine 进行并发工作、避免阻塞调用者以及不占用空闲工作线程的重要性。直接沟通和清晰的文档也被强调为 Go 编程的关键方面。

- Dmitri Shuralyov. (Dmitri Shuralyov, M. Sc.) [Website](https://dmitri.shuralyov.com/), [GitHub](https://github.com/dmitshur), [YouTube](https://www.youtube.com/c/DmitriShuralyov) - + [talk/dmitri2016](https://www.youtube.com/watch?v=9XTl1d4nwdY) Go in the browser. dotGo. 2016年10月10日。 + + [talk/dmitri2016](https://www.youtube.com/watch?v=9XTl1d4nwdY)
Go in the browser. dotGo. 2016年10月10日。 +

Summary:在 dotGo 2016 的这一集中,Dmitri Shuralyov 讨论了使用 GopherJS 编译器在浏览器中使用 Go。他提供了三个有趣的例子来说明如何在前端编程中使用 Go。首先,Shuralyov 谈到了 Kell 编程语言,它提供了令人愉快的重构体验和跨项目的轻松代码重用性。 Kell 多才多艺,可以在桌面和移动操作系统上工作。接下来,他重点介绍了 Gopher,这是一个将 Go 代码转换为 JavaScript 以供浏览器使用的编译器。他提到了 Gopher Jazz 和用于 Go 中 JavaScript 集成的 J 包。他还讨论了 Go 中的 GS 包,它允许开发人员与 JavaScript 交互,提供类似于 C 的 API,但具有 Reflect 包的语义。该包支持对象转换、密钥设置以及对全局对象的访问。 Shuralyov 随后介绍了 Gil,这是一种编程语言,可在前端用于实现读取器和写入器、使用 DOM 以及发出 XHR 请求等任务。他解释了使用 DOM 在浏览器控制台中实现 I/O 编写器和读取器。他还讨论了在 JavaScript 中使用通道和读取器来创建用户输入的阻塞操作。此外,Shuralyov 演示了 Go 中的流式 HTTP 响应主体,并提到可以使用 fetch API 在前端使用相同的代码。他提供了一个在 Go 中流式传输和解析 CSV 文件的示例。最后,他讨论了在浏览器中使用 Go 的挑战,包括缺乏类似 React 的库和大量 JavaScript 输出。不过,他强调Go的性能非常出色,并且正在努力改进工具。他建议下一步将网络组装作为目标,尽管这仍然是一项正在进行的工作。 总的来说,Shuralyov 分享了他使用 Go 的积极经验,并解释了为什么它可以使前端编程变得有趣。

- Steve Francia. [Website](https://spf13.com/), [GitHub](https://github.com/spf13), [Twitter](https://twitter.com/spf13). + [talk/steve2019a](https://spf13.com/presentation/what-should-a-modern-practical-programming-language-look-like/) 现代实用编程语言应该是什么样子。Langding Festival,2019年4月4日。 @@ -403,7 +406,8 @@ Dmitry 来自谷歌动态测试工具团队而不是 Go 团队。他编写了可 - Sam Boyer. [GitHub](https://github.com/sdboyer), [Twitter](https://twitter.com/sdboyer) - Fillippo Valsorda. [Website](https://filippo.io/), [GitHub](https://github.com/FiloSottile), [Twitter](https://twitter.com/FiloSottile) - + [talk/filo2016](https://www.youtube.com/watch?v=lhMhApWQp2E) 从 cgo 回到 Go。2016年7月12日。 + + [talk/filo2016](https://www.youtube.com/watch?v=lhMhApWQp2E)
从 cgo 回到 Go。2016年7月12日。 +

Summary:在 GopherCon 2016 视频节目“cgo Safely Taming the Beast”中,Filippo Valsorda 讨论了在 Go 开发中使用 Cgo 的挑战和好处。他强调了 Go 的优势,例如高效的内存管理、速度以及社区构建工具的可用性。不过,他也承认 Cgo 的局限性,包括内存管理和编译缓慢的问题。 Valsorda 解释了垃圾收集在管理 Go 中的内存分配和释放方面的作用。他讨论了当指针存储在全局变量中时垃圾收集的潜在问题,以及在 Go 编程中使用垃圾收集器和 Segoe 时可能出现的潜在问题。他建议使用 C 内存而不是 Go 指针来避免这些问题。该播客还探讨了在 Go 中使用 arena 进行内存管理,这简化了代码并消除了手动内存释放的需要。 Valsorda 讨论了在 Go 中使用不安全指针将内存转换为不同类型而无需垃圾收集器。他强调了使用 Kellogg 函数进行内存分配和清零的好处。本集强调了使用 Go 指针相对于 C 指针进行内存复制的优势,并提供了有关在 C 函数中使用 Go 指针的说明。讨论了 Arena 模式,以实现 C 和 Go 编程语言中高效可靠的内存管理。该视频还深入研究了 Go 中传递指针的规则和后果,强调遵循这些规则以避免程序崩溃的重要性。 Valsorda 讨论了 C Go 指针和回调的使用,提供了使用导出注释和解决用户数据问题的指南。 本集涵盖了 C 和 Go 编程语言中的内存管理挑战,强调了坚持熟悉的规则以避免复杂性的重要性。它建议在自己的线程上运行 C 以提高性能,但警告需要仔细的内存和并发管理。总体而言,该视频提供了有关在 Go 开发中使用 Cgo 的挑战和好处的宝贵见解,并提供了高效内存管理和性能优化的实用技巧和指南。

+ [talk/filo2017](https://speakerdeck.com/filosottile/calling-rust-from-go-without-cgo-at-gothamgo-2017) 不使用 cgo,从 Go 到 Rust。 + [talk/filo2018](https://speakerdeck.com/filosottile/why-cgo-is-slow-at-capitalgo-2018) 为什么 cgo 太慢。2018年 CapitalGo。 + [talk/speakerdeck](https://speakerdeck.com/filosottile?page=1) @@ -414,12 +418,20 @@ Dmitry 来自谷歌动态测试工具团队而不是 Go 团队。他编写了可 ### 小组会谈 -- [talk/goteam2012](https://www.youtube.com/watch?v=sln-gJaURzk) Go 团队集会。2012年谷歌网络开发者大会。2012年7月2日。 -- [talk/goteam2013](https://www.youtube.com/watch?v=p9VUCp98ay4) 和 Go 团队的炉边谈话。2013年谷歌网络开发者大会。2013年5月18日。 -- [talk/goteam2014](https://www.youtube.com/watch?v=u-kkf76TDHE) 和 Blake Mizerany 在 Gophers 工作室。2014年 GopherCon。2014年5月21日。 -- [talk/goteam2019](https://www.youtube.com/watch?v=3yghHvvZQmA) 认识作者:Go 语言。2019年 Cloud Next 大会,2019年4月10日。 -- [talk/goteam2020a](https://www.youtube.com/watch?v=gJxvkOHpTSM) 2020年 GoLab:Go 团队问答。2020年10月22日。 -- [talk/goteam2020b](https://www.youtube.com/watch?v=BNHwHLNLjLs) 2020年 GopherCon:Go 团队问答。2020年11月16日。 +- [talk/goteam2012](https://www.youtube.com/watch?v=sln-gJaURzk)
Go 团队集会。2012年谷歌网络开发者大会。2012年7月2日。 +

Summary:在题为“Google I/O 2012 - 认识 Go 团队”的视频节目中,介绍了 Google 的 Go 团队。该团队由安德鲁·杰兰德、布拉德·菲茨帕特里克、肯·汤普森、罗布·派克、罗伯特·格里塞默和大卫·西蒙斯等成员组成。该团队目前专注于内部开发,计划在今年年底发布 Go 1.1。此版本将包括性能改进和对库的少量添加。该团队致力于在进行重大更改之前确保 API 正确。他们还致力于改进垃圾收集器并将其他操作系统端口提升到完全支持的状态。 Go 1.1 将增强性能、效率和可靠性,并将支持 FreeBSD、Windows、Linux 和其他平台。该视频重点介绍了并发和接口对 Go 编程的影响。讨论了并发工作的易用性以及接口在软件开发中的重要性。还提到了包文件作为单个文件的优点,因为它简化了代码维护。该视频还讨论了调度 Go 例程的改进以及关于增强 Go 语言运行时的调度程序和效率的持续讨论。强调需要抢占式调度程序来改进资源管理和负载平衡。讨论了 Go 通道中当前并发和同步功能的局限性,以及在低级同步功能之上实现高阶功能的可能性。强调了 Go 中构建程序的重要性和对更高级别库的需求,以及 Go 例程的效率和灵活性。该视频还深入探讨了编程语言 D 和 Go 的发展和设计过程。 Go 的简单性和有效性可以归因于创建者之间对每个功能的一致同意。总体而言,该视频重点介绍了 Go 编程语言的特性和优势,包括其简单性、高效性和灵活性。 Google 的 Go 团队正在积极致力于改进该语言并解决其局限性。他们致力于使 Go 成为开发人员可靠且高效的编程语言。

+- [talk/goteam2013](https://www.youtube.com/watch?v=p9VUCp98ay4)
和 Go 团队的炉边谈话。2013年谷歌网络开发者大会。2013年5月18日。 +

Summary:在本期 Google I/O 2013 与 Go 团队的炉边聊天中,Google Go 团队的成员包括 Andrew Gerrand、Brad Fitzpatrick、David Symonds、Ian Lance Taylor、Nigel Tao、Rob Pike、Robert Griesemer 和 Sameer Ajmani,讨论与 Go 编程语言相关的各种主题。会议首先讨论 Go 的最新发展,包括 Go 1.1 的发布以及从 Go 1.0 到 1.1 的过渡所带来的显着速度改进。该团队还对普通用户表示感谢,并讨论了持续努力优化 Go 程序中的垃圾生成以提高性能。然后,讨论转向 Go Get 中的版本控制问题以及改善团队协作和稳定性的潜在解决方案。该团队还讨论了支持编译型 Go 库的愿望,尽管目前还没有计划。该团队赞扬 Go 语言用于 Android 开发,但建议添加更多功能。他们质疑为什么 Go 中不包含表达式,并讨论了使用变量而不是元音以及对不变性的限制。该团队还讨论了控制流对程序推理的影响以及 Go 与 cgo 接口的性能改进。该团队还讨论了 Go 在 Google 的使用,该公司的内部系统从使用 C++ 过渡到 Go。他们讨论了使 Go 成为 App Engine 最佳语言并为其提供优秀工具的目标。该团队还提到,用于本地运行 App Engine 应用程序的调试工具正在开发中。该团队探索了 Go 与 Chromebook 的兼容性以及使用它作为 Kosh 替代品的可能性。 然而,Go 缺乏脚本解释器引发了对其可行性的质疑。该团队还讨论了改进 Go 中的变量声明、范围内循环和 Syscall 包的建议。他们提到了使用 Go 为 Google Glass 编写代码的可行性,并讨论了使用 JSON RPC 和 REST API 进行 HTTP 通信。该团队最后提到了 Go 社区中前 Ruby 程序员的热情以及创建 Go 脚本解释器以吸引更多开发人员并扩大 Go 受众的潜力。他们还讨论了 Go 编程语言对前 Ruby 程序员的吸引力,强调了它的并发包和结构。总的来说,这一集提供了有关 Go 编程语言及其未来发展的宝贵见解。

+- [talk/goteam2014](https://www.youtube.com/watch?v=u-kkf76TDHE)
和 Blake Mizerany 在 Gophers 工作室。2014年 GopherCon。2014年5月21日。 +

Summary:在题为“GopherCon 2014 Inside the Gophers Studio with Blake Mizerany”的视频中,贝尔实验室 Go 团队成员 Blake Mizerany 与团队其他成员进行了小组讨论。本集一开始,布莱克解释说,由于与其他演讲重叠,他不得不改变演讲主题。相反,他决定与安德鲁·杜兰德、罗伯·派克指挥官、布拉德利·约瑟夫·菲茨帕特里克和罗伯特·格里辛格主持问答环节。小组讨论围绕贝尔实验室 Go 团队工作的挑战和经验展开。提到的挫折之一是编程中涉及的重复打字。他们还讨论了在 Go 中嵌入 Pearl 的好处以及使用 Go 带来的惊喜,例如 HTTP 处理程序 funk 类型和自动结构生成。小组成员分享了他们在 Go 编程时遇到的经验和挑战。他们提到了 XML 包、非 nil 接口以及调用 nil 指针方法的问题。他们强调需要让人们了解 Go 的简单性以及从其他语言过渡到开发人员所面临的挑战。在 Go 例程中使用通道和 select 语句被认为是尴尬的常见根源。在整个讨论中都强调了理解和接受 Go 的独特功能和思维方式的重要性。小组成员还讨论了他们在 Go 开发中的自豪贡献和遗憾。他们对变量声明缺乏一致性表示不满,但承认它通常运行良好。本集还涉及 Go 编程语言的发展和采用。提到了增强 Go 中的垃圾收集器并将其用途扩展到服务器之外的努力。 尽管小组成员承认未来需要清理 Go 标准库中不一致的命名约定和遗留包,但仍强调了不断发展的 Go 社区和广泛采用的潜力。总的来说,这一集深入了解了贝尔实验室 Go 团队工作的挑战和经验。它强调了用 Go 编程时遇到的惊喜和挑战,以及理解和拥抱 Go 独特功能的重要性。本集还讨论了 Go 编程语言的发展和潜力,同时承认需要改进的领域。

+- [talk/goteam2019](https://www.youtube.com/watch?v=3yghHvvZQmA)
认识作者:Go 语言。2019年 Cloud Next 大会,2019年4月10日。 +

Summary:在 Cloud Next '19 视频中,重点是 Go 编程语言。讨论由 Go 的作者 Ian Taylor 和 Robert Van Gent 主持,他们介绍了自己以及对这门语言的贡献。他们重点介绍了自己开发的工具,例如 gofmt 和 goimports,这些工具使 Go 编码更加高效。小组讨论深入探讨了 Go 的多功能性及其在简单性、效率和并发性方面的优势。它因其性能和易于学习而受到赞誉,适合初学者和经验丰富的开发人员。该语言已在云计算中得到应用,Google 将其用于 Docker、Kubernetes、Istio 和 gVisor 等各种服务。该小组还讨论了 Bazel 构建系统,该系统对于具有多种语言和生成代码的复杂程序非常有效。虽然 Go 有自己的构建系统,但 Bazel 提供了更有效的解决方案。然而,仍有一些正在开发的工具可能与 Go 的内置构建系统不完全一致。 Go 生态系统正在努力使工具变得不可知,允许开发人员使用不同的构建系统。讨论还涉及 Go 生态系统中所做的改进,例如导入 GitHub 存储库和库的能力,以及对标准库进行的更改以使其更小、更模块化。 Google Cloud 和 Google App Engine 柔性环境中缺乏对 Go 的支持是观众关心的问题,但近年来已经有所改进。该小组还讨论了即将发布的 Go 2,它将给语言和库带来重大变化。 Go 团队目前专注于 Go 2 的依赖管理、错误和泛型。 强调了代码简单性和可读性的重要性,以及决策过程中协作和透明度的必要性。总体而言,该小组强调了 Go 编程语言的优势及其未来发展的潜力。显然,Go 因其简单、高效且适合大型应用程序和团队而成为开发人员的热门选择。

+- [talk/goteam2020a](https://www.youtube.com/watch?v=gJxvkOHpTSM)
2020年 GoLab:Go 团队问答。2020年10月22日。 +

Summary:在这一集中的 GoLab 会议中,Miriah Peterson 和 Natalie Pistunovich 与 Go 团队成员主持了“Ask Me Anything”会议,其中包括 Carmen Hernandez Andoh、Austin Clements、Katie Hockman 和 Ian Lance Taylor。该会议为参与者提供了一个机会来询问有关 Go 编程语言的最新发展和未来计划的问题。对话涵盖了一系列主题,包括会议的 Twitter 账号和标签、不同的时区和地点,以及团队成员的个人详细信息。卡门积极参与 Go 社区,据称最近搬到了密歇根州安娜堡。作者是会议的主持人,分享了他们收集的来自世界各地的下水道板图片以及他们对爪哇狗和猫的热爱。然后,受父亲职业生涯的影响,作者转向了编程入门。他们回忆起自己早期接触计算机以及对编程的兴趣,从而发现了自己对计算机科学的热情。他们讨论了他们的流行爱好,例如智能家居自动化和烹饪,并强调保持编程语言简单和一致的重要性。团队成员讨论他们当前的项目,包括改进 Go 116 中的链接器,重点是 CPU 和 RAM 增强。他们反思了自己在安全领域的经验以及在 Go 语言中添加本机模糊测试以识别漏洞的工作。他们还提到了他们对改进运行时和编译器的关注。该团队分享了他们对 Go 未来的计划,包括泛型的实现、Mango 编程语言的发布以及添加对并发数据结构的支持。 他们讨论了管理并发 Go 例程的挑战以及正在进行的减少 Go 垃圾收集器暂停时间的项目。该团队强调编程简单性的重要性以及更清晰地理解具有大量 Go 例程的程序的需要。他们对提高高度并发系统的可观察性和可调试性表示出兴趣。他们还提到了 pkg 的推出。去。 dev,一个新的包发现网站,以及使 Go 生态系统更易于使用和理解的努力。该团队讨论了管理 GitHub 的外部贡献和改进审核流程的挑战。他们强调了吸引利益相关者并与漏洞报告者保持良好关系的重要性。他们还讨论了性能改进和潜在减速之间的平衡。该团队强调模糊测试和语言功能在软件开发以及模糊测试工具的持续开发中的重要性。他们讨论了链接大型 Go 项目的挑战以及对 Go 链接器所做的改进。该团队反思了他们从其他编程语言过渡到 Go 的经验以及 Go 社区的价值。他们对与会者参加会议表示感谢,并宣布了明天会议的日程安排。总的来说,这一集为 Go 编程语言的最新发展和未来计划提供了宝贵的见解。该团队对改进语言及其生态系统的奉献是显而易见的,他们强调社区参与和协作的重要性。

+- [talk/goteam2020b](https://www.youtube.com/watch?v=BNHwHLNLjLs)
2020年 GopherCon:Go 团队问答。2020年11月16日。 +

Summary:在题为“GopherCon 2020:向 Go 团队提问”的视频中,来自 Google Cloud 团队的 Kelsey Hightower 主持了与 Go 团队成员的讨论。本集涵盖了与 Go 编程语言及其开发相关的广泛主题。本集首先介绍 Go 团队的成员及其角色和职责。然后深入研究了 Go 编辑器的功能和支持,特别强调了 Go Please,这是一个提供编辑器支持和类似 IDE 功能的语言服务器。语言服务器协议被认为是在不同编辑器之间提供一致功能的一种方式。 Go Please 提供自动完成、跳转到定义、查找引用以及将代码提取到自己的函数中的功能等功能。提到了在 Acme 编辑器中添加 Go Please,尽管不断提供的信息对作者来说是难以承受的。讨论了 Go 团队开发 Go Package Discovery 的重点,Go Package Discovery 是一个用于查找和评估 Go 项目第三方包的平台。尽管受到 COVID-19 的影响,该团队仍然致力于统一 Go 的 Web 体验,并为开发人员提供必要的信息来确定包是否符合他们的标准。这一集还探讨了基础在语言社区中的作用,Python 有一个而 Go 没有。强调了 Go 语言社区中透明度、决策和治理的重要性。还提到了与 Gobridge 基金会的合作伙伴关系,该基金会专注于为代表性不足的群体提供技术教育。重点介绍了 Go 团队的成长以及通过引入跨职能合作伙伴实现多元化的努力。 讨论了开发 Go Package Dev 站点和生产服务时面临的挑战,强调了反馈和沟通在应对这些挑战中的重要性。本集还涉及即将发布的 Go 2.0 以及开发人员如何为此做好准备。探讨了 Go 编程中版本号的引入及其带来的挑战。 Go 在减少决策疲劳和概念开销、促进协作和支持大型项目方面的好处以及需要改进的领域得到了认可。总的来说,这一集提供了有关 Go 编程语言的发展和未来计划的宝贵见解,同时也解决了它带来的挑战和机遇。

+- [talk/goteam2021](https://www.youtube.com/watch?v=hu9spj-GJ1U&)
GopherCon 2021: Go Time Live - Go Team "Ask Me Anything", Dec 28, 2021. +

Summary:在题为“GopherCon 2021:Go Time Live - Go Team 'Ask Me Anything'”的视频中,Go Time 的主持人 Mat Ryer 主持了与 Google Go 团队成员的讨论。本集涵盖了与管理和开发 Go 编程语言相关的广泛主题。 Google 的 Go 团队已从 12 名成员增加到 50 多名成员,专注于扩展和协作。他们优先考虑安全性并满足主流和企业采用者的需求。用户体验研究对于改进开发人员工作流程非常重要,该团队进行了 Go 开发人员调查,收到了超过 10, 000 份回复。讨论的一个重要焦点是 Go 编程语言中泛型的引入。讨论了泛型对工具生态系统、包兼容性和代码翻译的影响。该团队承认静态分析仪和兽医指挥等领域面临的挑战以及进一步工作的需要。即将发布的Go 1.18将为核心引入泛型,但大多数标准库仍然缺乏泛型。社区的目标是在未来以合理的方式使一些标准库包变得通用。目标是为开发者树立良好的榜样并创造良好的体验。该集还强调了用户反馈在软件开发中的重要性,特别是在识别痛点和解决安全问题方面。 Go 团队进行调查和研究,收集用户的见解,并根据他们的反馈对问题进行优先级排序。讨论还涉及团队成员对不同工具和 IDE 的偏好,例如 Jim、VS Code、Vim 和 Emacs。强调了使用文本编辑器来执行编码和数据分析任务的重要性。 总的来说,这一集提供了有关 Go 团队在管理和开发 Go 编程语言方面的角色、他们对安全性和用户体验的关注以及他们未来的计划(包括泛型的引入和标准库的改进)的宝贵见解。

[Back To Top](#top) @@ -524,7 +536,8 @@ Dmitry 来自谷歌动态测试工具团队而不是 Go 团队。他编写了可 + [talk/type-alias](https://www.youtube.com/watch?v=t-w6MyI2qlU) 2016年 GopherCon —— 快速谈话:Robert Griesemer - Go 别名说明,建议。2016年10月9日。 + [issue/16339](https://go.dev/issue/16339) 提案:Go 别名说明。 + [issue/18130](https://go.dev/issue/18130) 所有:支持渐进式代码修复,同时在包之间移动类型。 -- [talk/refactor-video](https://www.youtube.com/watch?v=h6Cw9iCDVcU) Russ Cox,重构代码库(在 Go 的帮助下)。2016年 GothamGo,2016年11月18日。 +- [talk/refactor-video](https://www.youtube.com/watch?v=h6Cw9iCDVcU)
Russ Cox,重构代码库(在 Go 的帮助下)。2016年 GothamGo,2016年11月18日。 +

Summary:在 Russ Cox 题为“GothamGo 2016 代码库重构(在 Go 的帮助下)”的播客节目中,讨论了在 Go 中使用大型代码库的挑战以及可扩展性的重要性。 Cox从早期就参与了Go编程语言的开发,他分享了他对Go如何更好地协助代码包结构重构的见解。这一集首先强调了处理大型代码库(例如 Google 的单一存储库)时所面临的挑战,并强调了高效导入和最小化不必要依赖项的必要性。 Cox 解释了将代码拆分为单独包的原因,其中包括提高可管理性和减少依赖性。 Cox 随后讨论了代码库重构的过程,建议将其分为三个阶段:进行初步更改、更新代码以使用新 API 以及删除旧 API。这种渐进的方法可以更轻松地审查和提交较小的提交,特别是在处理分布在多个存储库中的代码时。该播客还深入探讨了在 Go 编程中实现可互换性的挑战。虽然函数和类型可以定义为可互换的,但将类型从一个包移动到另一个包会带来限制。 Cox 提到了 2011 年实施的解决方案,但表示它可能并不理想。他还强调了 Kubernetes 项目在代码库中移动类型时面临的困难。 Cox 提议添加一种机制来为类型创建可互换的名称,并强调 Go 需要支持逐步代码修复以在包之间移动类型。 他对有关此事的意见表示感谢,并提到正在重新评估类型别名的包含,以确定适当的行动方案。总的来说,该播客提供了有关在 Go 中使用大型代码库的挑战的宝贵见解,并提供了改进代码库重构和实现可互换性的建议。

+ [doc/refactor](https://talks.go.dev/2016/refactor.article) Russ Cox,重构代码库(在 Go 的帮助下)。 [Back To Top](#top) @@ -666,7 +679,8 @@ Dmitry 来自谷歌动态测试工具团队而不是 Go 团队。他编写了可 - [design/64align](https://go.dev/design/36606-64-bit-field-alignment) Dan Scales,提案:在32位系统上使64位字段作为64位对齐,添加 //go:packed,//go:align 指令,2020年6月8日。 + [issue/599](https://go.dev/issue/599) cmd/compile: 在32位系统上使64位字段作为64位对齐 + [issue/36606](https://go.dev/issue/36606) 提案:cmd/compile: 在32位系统上使64位字段作为64位对齐,在结构体上添加 //go:packed,//go:align 指令 -- [talk/gccgo](https://www.youtube.com/watch?v=U0w9eFunkX4) gccgo 的简要概述,“另一个” Go 编译器。2015年8月6日。 +- [talk/gccgo](https://www.youtube.com/watch?v=U0w9eFunkX4)
gccgo 的简要概述,“另一个” Go 编译器。2015年8月6日。 +

Summary:在本集中,来自 Google 核心 Go 语言团队的 Chris Manghane 简要概述了 gccgo,也称为“另一个 Go 编译器”。Gccgo 是一个 Go 编译器,利用 GCC 的强大功能进行编译和优化。它由 Ian Lance Taylor 编写并于 2009 年 11 月发布,并且仍然由他积极维护。 Manghane 解释说,之所以决定使用 C++ 并针对 GCC 来开发 gccgo,是因为 GCC 支持广泛的体系结构,并提供了代码分析、优化和生成方面的广泛功能。通过使用 GCC 作为编译器,可以促进技术诚实,因为它避免了对单一实现的依赖。此外,产品的多种实现有助于识别缺陷并改进设计。然而,gccgo 在实现与 go 编译器功能对等方面面临着挑战。它有一个过时的垃圾收集器,并且更新出现延迟。版本 1.4 对 C 运行时以及垃圾收集器期望类型信息的方式进行了更改。从分段堆栈到连续堆栈的转变也带来了挑战,因为当前的 C 编译器不支持堆栈刀的必要精确控制和使用。尽管面临这些挑战,gccgo 仍取得了重大改进,与 GCC 分离并提供了更大的灵活性。 LLVM 的实现带来了更高效的编译器。可移植本机客户端的使用允许在 Web 浏览器中运行本机代码,从而提高 Go 的采用率。 Manghane 强调了赶上 go 编译器并尝试泛型等功能的重要性。他还强调需要改进基本工具,特别是授权和书籍编译器。 最小化垃圾收集开销至关重要,并且提出了标记分析作为增强垃圾收集器性能的方法。最终目标是实现更高效、更通用的垃圾收集器。此外,语言的强大功能有可能改进二进制生成并激发 go 编译器的改进。

- [issue/28262](https://go.dev/issue/28262) cmd/compile:反馈导向优化 [Back To Top](#top) @@ -748,9 +762,12 @@ Ken Thompson 编写了 Go 连接器,Russ 在 Go 1.3 中进行了一些大修 - [design/go-dep](https://docs.google.com/document/d/18tNd8r5DV0yluCR7tPvkMTsWD_lYcRO7NhpNSDymRr8) Go 打包的建议流程 - [design/go-dep2](https://docs.google.com/document/d/1qnmjwfMmvSCDaY4jxPmLAccaaUI5FfySNE90gB0pTKQ/edit) 依赖管理工具 + [doc/go-dep](https://golang.design/history/6https://blog.gopheracademy.com/advent-2016/saga-go-dependency-management/) Sam Boyer,Go 依赖管理事迹。2016年12月13日。 - + [talk/go-dep](https://www.youtube.com/watch?v=5LtMb090AZI) GopherCon 2017:Sam Boyer,Go 依赖管理的新时代。2017年7月24日。 - + [talk/go-dep-design](https://www.youtube.com/watch?v=wBTGd_dvnO8) dotGo 2017:sam boyer, 依赖的功能设计。2017年12月8日。 - + [discuss/go-dep](https://www.youtube.com/watch?v=sbrZfPgNmfw) Russ Cox,Jess Frazelle, Sam Boyer, Pete Garcin,构建时添加可预测性。2018年2月22日。 + + [talk/go-dep](https://www.youtube.com/watch?v=5LtMb090AZI)
GopherCon 2017:Sam Boyer,Go 依赖管理的新时代。2017年7月24日。 +

Summary:在 GopherCon 2017 题为“Go 包管理的新时代”的一集中,Sam Boyer 讨论了包管理在软件开发中的重要性以及向官方工具的过渡。他强调软件生态系统需要一种通用语言来有效共享代码并改善协作。 Boyer 承认 Go 编程中依赖管理的挑战,例如缺乏对发布的重视以及与 go get 工具的潜在冲突。然而,他强调了 Go 社区在处理依赖关系时的谨慎和深思熟虑的文化。人们开发了各种工具(包括 Goep、Glide 和 GB)来解决再现性和版本控制问题。 2015 年供应商目录的引入改进了依赖管理,但也带来了新的挑战。为了解决这些问题,成立了一个委员会,并引入了 GitHub Depp 作为依赖管理的官方实验。 Depp 严重依赖社区参与,并遵循使用 Toml 文件声明规则和约束的双文件系统。它生成一个锁定文件以实现可重复性并遵循语义版本控制。 Boyer 还提到了 Digby,这是一个包管理 gopher,旨在将相关行为集成到工具链中。 Go 工具链的开发涉及实验和映射,以确保清晰的过渡。博耶强调社区参与和支持对于这些工具的成功的重要性。总的来说,Go 编程语言提供了有效的依赖管理工具,并将其成功归功于社区的贡献和支持。

+ + [talk/go-dep-design](https://www.youtube.com/watch?v=wBTGd_dvnO8)
dotGo 2017:sam boyer, 依赖的功能设计。2017年12月8日。 +

Summary:在 dotGo 2017 的这一集中,Sam Boyer 讨论了 dep(Go 的依赖管理工具)背后的功能设计原则。尽管 Go 不是一种函数式语言,但 Boyer 演示了如何利用函数式编程的原理来设计高效且有效的 Go 程序。 Boyer 探索的一个关键概念是记忆化,这是一种通过缓存结果来提高函数性能的技术。他解释了如何将记忆化应用于斐波那契数列,从而减少函数调用次数并缩短计算时间。通过存储先前计算的值,函数的时间复杂度降低至 O(n)。 Boyer 强调了记忆在避免不必要的工作方面的相关性,并强调了 dep Ensure 作为代码中的关键功能。 Boyer 还深入研究了 Go 中的依赖管理主题。他解释说,依赖关系管理器将项目源代码映射到其依赖关系,添加元数据来描述所需的源。他讨论了依赖项“应该”的两个概念:更宽松的约束和更严格的可重现构建。 Go 使用静态分析将项目源映射到清单,项目源、清单和锁定文件之间的关系至关重要。 Boyer 解释了深度模型如何分析 import 语句并使用 go 包 Tommo 创建锁并填充供应商目录。总的来说,博耶强调了设计具有有效输入和输出的透明且无错误的系统的重要性。他建议探索不同的编程模型,例如函数式编程和参与者模型,可以带来创新且有益的系统。 通过应用函数式编程的原理,即使在像 Go 这样的非函数式语言中,开发人员也可以创建更高效、更有效的程序。

+ + [discuss/go-dep](https://www.youtube.com/watch?v=sbrZfPgNmfw)
Russ Cox,Jess Frazelle, Sam Boyer, Pete Garcin,构建时添加可预测性。2018年2月22日。 +

Summary:在“在管道中构建可预测性”一集中,ActiveState 的 Pete Garcin、Stripe 的 Sam Boyer、Google 的 Russ Cox 和 Microsoft 的 Jess Frazelle 讨论了与可重复构建、环境配置和依赖项管理相关的挑战和解决方案。依赖管理一直是软件开发中长期存在的问题,但 Go 通过代码托管站点导入路径和供应商目录的引入进行了改进。以供应商目录为中心的工具(例如 DEP)已在生产中广泛使用。然而,有关其使用情况的更新数据的可用性是有限的。语义版本的采用以及对清晰文档和用户友好界面的需求是持续改进的领域。在构建管道中实施依赖管理已经为 Kubernetes 等大型项目带来了显着的改进。 Vigo 是一个新工具,为 Go 编程中的包管理提供了替代解决方案,已被证明是高效的并且能够处理复杂的环境。然而,在 Kubernetes 中使用符号链接引起了一些问题。 Vigo 正在获得关注并被大型项目采用。可重复的构建确保应用程序部署的一致性,而容器化通过为应用程序部署提供一致的环境来提供解决方案。过渡到容器有好处,例如更容易更新和维护,但需要努力改变工作流程和特定工具以与 CI/CD 流程集成。优化容器镜像和减少依赖性对于性能至关重要。语言包管理器在软件开发中起着至关重要的作用,验证步骤可确保完整性。 对系统的代理支持是一个挑战,因为公司希望确保包的稳定性和安全性。目前正在进行的工作是改进工具和验证方法,微软的开源团队也参与了开发过程。 Go 语言的采用面临着挑战,因为它被认为是一种前沿技术。为了解决这个问题,我们正在进行更改以引入包管理和版本控制,这对于可重复构建和兼容性至关重要。在实施这些更改之前,收集社区反馈至关重要,并且很快将启动正式的 Go 提案。总体而言,专家们强调了可重复构建、清晰的文档、用户友好的界面和社区参与的重要性,以克服采用 Go 的挑战并确保软件开发流程的可预测性。

- [design/vgo](https://go.dev/design/24301-versioned-go) Russ Cox,提案:Go 模块版本化。2018年3月20日。 + [issue/24301](https://go.dev/issue/24301) cmd/go: 像 Go 工具链添加包版本支持。 + [doc/deps](https://research.swtch.com/deps) Russ Cox,我们的软件依赖问题。2019年1月23日。 @@ -1284,7 +1301,8 @@ x/image: - [”我得到的最好的编程建议“,Rob Pike。](https://www.informit.com/articles/article.aspx?p=1941206) - [Mihai Budiu 对 Brian Kernighan 的采访](http://www.cs.cmu.edu/~mihaib/kernighan-interview/index.html) - [语言设计,Brian Kernighan Holiday Repeat By SE Daily](https://softwareengineeringdaily.com/2017/12/28/language-design-with-brian-kernighan-holiday-repeat/) -- [C 编程语言: Brian Kernighan - Computerphile](https://youtu.be/de2Hsvxaf8M) +- [C 编程语言: Brian Kernighan - Computerphile](https://youtu.be/de2Hsvxaf8M)
"C" Programming Language: Brian Kernighan - Computerphile +

Summary:在本期 Computerphile 节目中,Brian Kernighan 教授讨论了《C》编程语言一书的创作。这本书由 Kernighan 和 Dennis Ritchie 共同撰写,是广泛使用的编程语言的综合指南。 Kernighan 解释说,“C”的开发受到 MULTICS 项目的影响,该项目旨在创建一个计算实用程序。参与 MULTICS 的 Ken Thompson 和 Dennis Ritchie 继续开发了 UNIX,一种精简的操作系统。他们尝试了高级语言并创建了 B,它是“C”的前身。 “C”允许用高级语言重写操作系统,使其更容易理解并且可以跨不同体系结构移植。该书于 1978 年出版,包含数学表达式和表格,并经历了多个版本。 Kernighan 还提到,由于市场需求,他编写了编程语言 B 和“C”的教程文档。他说服 Dennis Ritchie 与人共同撰写一本关于“C”的书,将教程文档与 Ritchie 的参考手册结合起来。这本书成为“C”的权威指南,并在该语言的广泛采用中发挥了重要作用。

- [调试Go程序中的性能问题,Dmitriy Vyukov。](https://software.intel.com/content/www/us/en/develop/blogs/debugging-performance-issues-in-go-programs.html) - [我想实现的有趣的论文(或者有部分实现)](https://github.com/dgryski/interesting-papers) - [golang/wiki/ResearchPapers](https://github.com/golang/go/wiki/ResearchPapers)