ニュースレター #3 - 遅れてごめん

2014年9月

Vimのコードベースを刷新することを目指すプロジェクト、Neovimの3回目の(そして遅れた)ニュースレターへようこそ。

次回のニュースレターは11月初旬に発行予定です。Neovimの愛好家を圧倒的な畏敬の念で過負荷にしないように、隔月に変更されました。

一般ニュース

1,000件以上のIssue

GitHubのIssueトラッカーには、現在1,000件以上のIssue/プルリクエストがあります。幸運な1000件目のプルリクエストは、8月直前にオープンされました。

ドキュメントの更新

7月のニュースレターで述べたように、ドキュメントはneovim.io/doc/に正常に移動されました。

開発者やコントリビューター向けのより具体的なレポートだけでなく、一般的なドキュメントへのリンクも含まれています。これらのレポートはすでに、開発者がコードベースに貢献し、改善するのに役立っています

開発ニュース

特に順序はありませんが、過去2ヶ月間のトップニュースは以下のとおりです。

パイプを使用したsystem()の実装

この問題は、6月のニュースレターで、まだ実現していないこととして言及されていました。

@aktauが、一時ファイルにリダイレクトするのではなく、パイプとジョブシステムを使用するようにVimLのsystem()関数の実装を完了しました。この変更により、大幅なスピードアップが実現し、一部のパーミッションの問題(まだサポートされていないWindowsに主に影響します)が回避されます。

system()の古い実装の遅さは、呼び出されたプロセスの出力が大きい場合に特に顕著でした。例としては、system('cat largefile')があります。

注意

新しいsystem()コードに関するバグレポートが1件ありました。それは、Selectaプラグインとうまく連携しないというもので、こちらで説明されています。

より正確なプロファイリング

@aktauは、多くのシステムで高解像度のクロックを提供するlibuvの機能を活用して、このプルリクエストでNeovimのプロファイリング機能を改善しました。

以前の実装ではgettimeofday()を使用していました。この関数はWindowsではサポートされていなかったため(前のセクションで詳述したように)、NeovimをWindowsで実行する際の障壁となっていました。

Vimでのプロファイリングの詳細については、:help profilingを実行してください。

MoonScriptの削除

プロジェクトの開始時に、MoonScriptとLuaの議論は広く議論されました。

ユニットテストの言語として、MoonScript(Luaにコンパイルされる言語)が選択されました。ユニットテストライブラリのBustedを更新した後、一部のユニットテストが失敗していました

したがって、テストを単純化し、抽象化のレイヤーを削除するために、依存関係を削除することが決定されました@tarruda関連する変更とプルリクエストを行いました。

Msgpack RPC

Neovimがmsgpack-rpcの仕様に完全には準拠していないことに関する議論が起こりました

ここ数週間で、@tarrudaが、仕様を完全にサポートするための実装を完了しました

彼はまた、msgpackの使用を最新バージョン2.0にアップグレードする作業も行っており、これはすぐにマージされるはずです。

Pythonクライアント

最初のニュースレターで、Pythonクライアントが最初に議論されました。それ以来、@tarrudaがさまざまな改善のためにリファクタリングしました

Goクライアント

@myitcvは、Pythonインテグレーションが機能する方法と同様の方法で、Goインテグレーションを追加する提案を行いました。この提案は、言語に依存しないことにも触れています。

ここでは詳細を説明するには膨大すぎるため、上記のリンクには、実装に関する詳細と議論も含まれています。

コードの削除の増加

デッドコードまたはサポートされていないレガシーシステム向けのコードが、2つの異なるプルリクエスト(12)で削除されました。

まだコードが残っていたシステムには、SGI IRISBeOSEBCDICが含まれていました。

クロスプラットフォームの一時ファイル名

Neovimで一時ファイルを作成する関数には、libuvにはない機能が必要でした。

Neovimのコントリビューターの1人である@Hiniduが、新しい関数uv_fs_mkdtempを追加するために、プルリクエストをlibuvに送信しました。この変更(現在はlibuv バージョン0.11.27の一部)は、一時的なファイル/ディレクトリの作成を提供するためにNeovimによって使用されており、変更はプラットフォーム間で機能します。

クロスプラットフォームコードがlibuvに提供されたため、すべてのlibuvベースのプロジェクトがこの変更の恩恵を受けることができます。

最初のバウンティが請求されました!

4月9日に、NeovimのBountysource最初のバウンティが作成されました。リクエストは、Christian BrabandtによってVimからNeovimに書かれた既存のパッチを移植することでした。このパッチは、行が折り返されたときにインデントを一致させるbreakindentオプションを提供します。

@fmoralescは、バウンティを請求するためにプルリクエストを作成しました。少し議論が行われ、いくつかの修正が行われました。それ以来、それらはマスターブランチにマージされ、@fmoralescにバウンティが授与されました!

ユニットテストの増加

@war1025が、2つの既存ファイルbuffer.cfileio.cのユニットテストを追加しました。リファクタリングされるにつれて、コードにユニットテストカバレッジを追加することは、Neovimの目標の一部です。

コアサービスプロバイダー

@tarrudaは、msgpack APIを通じてNeovimのコア機能の一部を公開するプルリクエストを行いました。

進化しているのでまだ不安定ですが、このコア機能には以下が含まれます。

埋め込み可能性の進捗

@tarrudaが、Neovimをバックグラウンドで起動し、ヘッドレスインスタンスとして使用できるようにする--embedded-modeフラグを追加しました

技術的には、stdinとstdoutを使用してクライアントと通信するために、msgpack-rpcを使用しています。

Windowsの進捗

Neovimは、Microsoft Visual C++MinGWの両方を使用して、それぞれこのIssueこちらでコンパイルに成功しました。

協力

寄付

開発をサポートしたい場合は、こちらのビットコインで寄付してください:1Evu6wPrzjsjrNPdCYbHy3HT6ry2EzXFyQまたは、Neovim Bountysourceページでチームを支援してください。

貢献

経験豊富な開発者、または経験はないが学びたい場合は、GitHubリポジトリにアクセスし、READMECONTRIBUTINGガイド、そして最後にWikiをチェックして詳細を確認してください。

協力する機会はたくさんあり、やるべきことはたくさんあります。

まとめ

この3回目のニュースレターに関するフィードバックや提案はありますか?Neovim Twitterを通じてお気軽にご連絡ください。

また、RSSフィードを購読して、Neovimの世界で何が起こっているかを常に把握してください。次回のニュースレターは、2ヶ月後の11月初旬にリリースされます。

それでは次回まで。:wq

ニュース

ニュースアーカイブでさらに最新情報をご覧ください。RSSフィードもあります。

Neovimとは?

Neovimは、拡張性使いやすさのために設計されたVimベースのテキストエディターであり、新しいアプリケーションと貢献を促進します。

議論

チームとチャットするには、#neovim:matrix.orgまたはirc.libera.chatの#neovimにアクセスしてください。