タグ

golangに関するWindymeltのブックマーク (7)

  • brainf*ckのインタプリタを書いて高速化しよう - Qiita

    なんだこれは 少し前に、Goのプログラムをチューニングして遊びたいなと思い、brainf*ckインタプリタを作って高速化しました。 忘れないうちにそのときのことを書いておこうという記事になります。 高速化!高速化!うおおおおお! できたもの こちらが最終的に完成したものになります。 ベンチマークにはbfでマンデルブロ集合を描画するプログラムを利用しています。 それを私の手元のPCでインタプリタにわせたときの実行時間を減らしていくという形で高速化を進めました。 始めた当初は描画に42.36sかかったところ、最終的には2.271sで描画できるようになりました。ついでにbfをllvm irにトランスパイル?するプログラムも書いていて、それを使ってコンパイルした場合は0.466sでマンデルブロ集合を描画することができます。 皆さんもぜひ高速化を… 途中からは以下のようなルールを設け、友人らと速度

    brainf*ckのインタプリタを書いて高速化しよう - Qiita
  • Task(go-task)を使い始めた - nakaoka3の技術ブログ

    Goで書かれているTaskという名前のタスクランナーを使い始めた。仕事でMakeをタスクランナーとして使っていたところを、Taskに置き換えようという動きがあったので、仕事で使いつつプライベートでも使って慣れようとしている。 Taskでは Taskfile.yml というYAMLファイルにタスクを書いて、task コマンドで実行する。Makefileよりは読みやすいし書きやすそうでいい。 taskfile.dev 補完 taskコマンドの補完が効かなくて不便だと思っていたら、補完のセットアップをしたらできると同僚に教えてもらった。zsh用のセットアップをすると無事補完が効いて、効率的に使えるようになってよかった。 ホーム|タスク #補完のセットアップ task -l と task -a taskコマンドには -l または --list というオプションがあるので、これでタスクの一覧が確認で

    Task(go-task)を使い始めた - nakaoka3の技術ブログ
    Windymelt
    Windymelt 2023/12/28
    Goで書かれたタスクランナーあるんだ
  • 強い思想: Go を Web 開発に採用する上で

    Go は Web 開発に向いているか? 最も向いている領域は「CLI ツール」「ミドルウェア」「マイクロサービス」だと思っている。なぜならそれらはコードベースを比較的小さく抑えることを前提としているからだ。 Go は大きなコードベースを抱えやすい設計の言語になっていない。 ミドルウェアとマイクロサービスに関しては小さく作ることが正義。 CLI ツールに関しては単一責務なツールであれば小さくなるが,複数を束ねるツールであっても Web サービス開発に比べれば考えることは少なくて済む。 Web 業界における「一般的な Web 開発」,すなわちモノリスを基とした中規模以上の開発にははっきりと 向いていない と言うべきだろう。 フラットパッケージは正義か? 私が SNS で何度か言及した以下の記事がある。 フラットパッケージ戦略は,確かに Go文化圏においては一定の支持を集めている。Go

    強い思想: Go を Web 開発に採用する上で
    Windymelt
    Windymelt 2023/09/09
    大規模だとキツそうなのは同意
  • golangのenumは型が違うと違うものとして扱われる - Acme::AnaTofuZ->new;

    タイトルの通りです。 以下のようにint型のFooTypeとBarTypeを宣言して、それぞれ60をenumで持つ値をチェックしてみます package main import "fmt" type FooType int type BarType int const ( Hoge FooType = 60 Nyan FooType = 61 Baz BarType = 60 ) var someTypes = []interface{}{ Hoge, Baz, } func main() { for _, t := range someTypes { if t == Baz { fmt.Println("same") } else { fmt.Println("difference") } } if Baz == 60 { fmt.Println("Baz is 60") } else

    golangのenumは型が違うと違うものとして扱われる - Acme::AnaTofuZ->new;
    Windymelt
    Windymelt 2023/06/13
    Scalaのopaque type aliasに近いなと思ったけど実行時も区別されるのは便利そう
  • CodeReviewComments

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    CodeReviewComments
    Windymelt
    Windymelt 2019/12/12
    Goのreceiverの名前にselfやthisを使ってはいけない。ほぼ他の引数と同様に扱われるからである。他のOOP言語のように特別な意味をGoは与えないからである。
  • Go 言語の値レシーバとポインタレシーバ

    「レシーバ」とはGo 言語はある種のオブジェクト指向プログラミング (OOP) 言語であり、 OOP 言語の慣例通り、メソッドを呼び出される対象のことを「レシーバ」と呼びます。 ちなみになぜ「レシーバ」と呼ぶのかというと、昔の OOP 言語の文脈ではメソッド呼び出しのことを「メッセージの送信」と言い、メソッドを呼び出される側は「メッセージの受信側」だからです。 「値レシーバ」と「ポインタレシーバ」Go 言語では「値」と「ポインタ」が明示的に区別されているため、たとえばある構造体に対してメソッドを定義する場合でも、「値型」に対する定義なのか「ポインタ型」に対する定義なのかはっきりと区別しなければなりません。それぞれについて簡単に説明します。 値レシーバ「値型」に対してメソッド定義されたものが「値レシーバ」です。 Go 言語では構造体は値なので、以下の例では Person という値型に対して

    Windymelt
    Windymelt 2019/05/19
    レシーバなるほど
  • Go言語(Golang) はまりどころと解決策

    Go の言語仕様はシンプルで他の言語に比べてはまりどころが少なくて学習コストが小さめな言語のように思います。しかし、それでもはまるところがないわけではないので、自分がはまって時間を無駄にしてしまったことを書き留めておきます。 念の為誤解のないように追記しておくと、この文書の目的は Go を批判することではなく GoGo であるがゆえに C++/Java/Python など利用者が Go を使い始めるときに困惑あるいは誤解するであろうポイントをまとめておくことで初めて Go を触る人がスムーズに Go を使い始められるようにすることです。私個人は Go はバランスがとれた良い言語でだと思いますし、気に入っています。 目次 interface と nil (Go の interface は単なる参照ではない) 文献 メソッド内でレシーバ(this, self)が nil でないことをチェ

  • 1