タグ

プログラミング言語に関するsh19910711のブックマーク (428)

  • RとPython両方でJava VMを実装して気づいた言語の違い|igjit

    Java VMを実装したのは5年前にRで書いて以来2度目になる。(Rで実装したときのまとめ: Java VM 自作 方法) 異なる言語で同じものを作る過程で、両言語の違いや特徴を感じる場面があったので記録しておく。 Rではいろいろなものが値を返すRではいろいろなものが値を返す。 例えばRのif文は値を返すので結果を代入できる。 val <- if (cond) 1 else -1Pythonのif文だとこう書くことになる。 if cond: val = 1 else: val = -1Pythonで結果を代入したい場合は条件式 (三項演算子) を使う必要がある。 val = 1 if cond else -1もう一つの例としてswitchを見てみる。 Rの場合、switchの結果を代入できる。 name <- "two" val <- switch(name, one = 1, two =

    RとPython両方でJava VMを実装して気づいた言語の違い|igjit
    sh19910711
    sh19910711 2024/06/06
    "Java VMを実装したのは5年前にRで書いて以来2度目 / 異なる言語で同じものを作る過程で、両言語の違いや特徴を感じる場面があった / Rではオブジェクトシステムが複数存在し、解きたい問題に応じて選択する"
  • Rust製データベースSurrealDBの紹介 - Qiita

    はじめに この資料は、2022年7月に公開されたSurrealDBについてまとめたものです。 SurrealDB歴史 公開されてからの期間は浅いが2016年から開発が始まっている 2016年 Feb GoLangで開発開始 2017年 Jul SaaS のバックエンドDBとして運用開始 2021年 Oct Open Source として公開決定、Rustで再構築 2022年 Jul Beta.1 リリース 2022年 Aug Beta.5リリース 2022年 Oct Beta.8 リリース SurrealDB 社 2021年 Nov SurrealDB Ltd. をロンドンに設立 2023年 Jan DBaaS ために 600万ドル調達 SurrealDBが生まれた背景 大きなトレンド データベースの抽象化、クラウド、サーバーレス DBaaSを採用する企業が増えている MariaDBによ

    Rust製データベースSurrealDBの紹介 - Qiita
    sh19910711
    sh19910711 2024/06/06
    "nom: 関数を連結してインクリメンタルにパーサーを構築できる / GeoJSONの解析には geo を利用 / ローカルファイルをデータストアにするときはRocksDB + 分散DBとしての機能はTiKVやFoundationDB" 2023
  • リンカーを自作した

    自作Cコンパイラではすべて自分で実装してみるというつもりでCコンパイラ、プリプロセッサ、アセンブラを作ってきたが、ついに欠けている最後の要素だったリンカーを作った。 今まではアセンブラですべてのアセンブリコードを受け取って、マシンコード生成とラベルのアドレスを解決して直接ELF形式の実行ファイルを出力していた。 それでほとんど問題はないんだけど、リンカーが使えるとオブジェクトファイルを生成しておくことで分割コンパイルできるようになりコンパイル時間が短縮できたり、 他のコンパイラの出力結果も使用できるようになるという利点がある。 またリンカーがなくてすべてのコードを一緒にアセンブルしていることにより、ソースファイル中の static 変数や関数でも実際には漏れてしまっているため、プログラム全体で衝突しない名前を使う必要があるという欠点があった。 アセンブラからは実行ファイルだけじゃなくオブジ

    sh19910711
    sh19910711 2024/05/27
    "Cコンパイラ、プリプロセッサ、アセンブラを作ってきたが、ついに欠けている最後の要素だったリンカーを作った / 複数のオブジェクトファイルを受け取ってアドレスを計算して実行ファイルを出力するのが主な仕事" 2022
  • Python 構文解析ライブラリLarkを使って簡単な自作言語処理系をつくる - Qiita

    概要 とある目的のためにDSLを作成してみたいと思うことがありました。 そこでまずは基礎知識をつけようということで、簡単な自作言語の処理系を実装してみようと思いたち、ごくごく簡単なプログラミング言語を作ってみました。 環境としてはPython3系を使いました。 処理系の作成 プログラミング言語の処理は、字句解析(トークナイズ)構文解析(パース)実行コード生成という3つ段階があります。 字句解析とはただの文字の並びであるソースコードを読んで、functionとかvarとか19のような終端記号(トークン)の塊の並びに変換することです。ただし、この時点ではそれぞれの終端記号はただの文字列であって意味までは与えられていません。 次の構文解析は字句解析で得られた終端記号の列を読んで、プログラムのコードとしての構造を抽出することです。字句解析の出力からconst hoge = 1 ;というトークンの列

    Python 構文解析ライブラリLarkを使って簡単な自作言語処理系をつくる - Qiita
    sh19910711
    sh19910711 2024/05/27
    "DSLを作成してみたい / Lark: EBNFで文法規則と終端記号の規則を渡すと、字句解析から構文解析まで / 学生時代クックパッドさんでインターンシップに参加した際に、Javascriptのコンパイラを作るという講義をうけた" 2018
  • Lox (Crafting Interpreters)にdefer文を追加する - 井山梃子歴史館

    Crafting InterpretersはRobert Nystromによるインタプリタ方式のプログラミング言語処理系の作り方の解説である。 ハードカバー・電子書籍が発売されているほか、著者のページでWeb版が無料公開されており、自作言語界隈では人気を博している。 Crafting Interpretersでは著者が考案したLox言語のインタプリタを実装していくこととなる。の前半部分ではAST評価器を扱い、後半部分ではバイトコードVMを用いたインタプリタを実装する。 Lox言語はシンプルとはいえ、クロージャやクラスの継承といった高度な機能も備えたオブジェクト指向スクリプト言語であり、読者は小さなインタプリタからステップ・バイ・ステップでだんだんと完全な処理系を構築していく。 Crafting Interpretersの素晴らしいところには次の点が挙げられるだろう: 平易な文章に加えて

    Lox (Crafting Interpreters)にdefer文を追加する - 井山梃子歴史館
    sh19910711
    sh19910711 2024/05/07
    "Web版が無料公開されており自作言語界隈では人気を博している / 前半部分ではAST評価器 + 後半部分ではバイトコードVMを用いたインタプリタを実装 / GitHubリポジトリで網羅的なテストケースを公開" 2021
  • PEG Parser Generator + Packrat Parserを実装してみた

    詳しい解説はネット上に沢山存在するので割愛しますが、ご覧のようにEBNFの表現の一つに(EBNFはいくつかの表現方法があるようです。例えばこれはW3Cが定義しているものです)似ています。違いは先に述べたようにChoiceの働きが異なるのと、文法上に先読みが存在することです。 このPEGを使って四則演算を受理するシンプルなルールを書くとすると、例えばこのようになります。 # expressionからパースが始まるとする expression <- additive additive <- multitive ("+" multitive / "-" multitive)* multitive <- primary ("*" primary / "/" primary)* primary <- "(" expression ")" / number number <- digit+ digit

    PEG Parser Generator + Packrat Parserを実装してみた
    sh19910711
    sh19910711 2024/05/05
    "PEGを知ったのは5、6年前で、CoffeeScriptとかelmとかTypeScriptとか、AltJSが実用的なものとして認知され始めた時期 / PEG.jsを久しぶりに触っているうちにPEG Parser Generatorそれ自体を実装してみたいという気になって" 2018
  • どうやってPureScriptに慣れたのか - oreshinyaのブログ

    はじめに PureScript Advent Calendar 2017 - Qiitaの1日目の記事が埋まっていなかったので大急ぎで書くことにしました。 元々はRubyJavaScriptなどの動的言語をメインでメシをべているプログラミング的ゆとり世代であった私が、 少なくとも一般論としては学習が大変だと評されているPureScriptを、 (上手いか下手かは別として)普通に書けるようになった要因を記憶の限り辿ってみようと思います。 つまり、この記事は、「最初からPureScriptの勉強のためにやっていた」ということではなく、「たまたまそういう道を通ったけど、 あれがよかったのかもしれない」という回想です。 道のはじまり この道のはじまりはHaskellでした。 特に仕事で使うわけでもなく、関数型言語に興味があったわけでもなく、ただなんとなく暇を持て余していたので暇つぶしとして思い

    どうやってPureScriptに慣れたのか - oreshinyaのブログ
    sh19910711
    sh19910711 2024/04/27
    "Haskell: PureScriptよりも親切なエラーメッセージ + 調査に困らないし、コンパイラが勝手に訓練してくれます / Elm: ブラウザという戦場ではどこでどのように型付けしているのか、という世界観をつかむ" 2017
  • えっ!? 1時間でオリジナルのプログラミング言語の開発を構文解析から!? - Qiita

    出来らあ! 1時間で構文解析から評価器まで書けるって言ったんだよ! プログラミング言語を作る。1時間で。 上のエントリは、Lispの『S式』みたいな式で構成されたプログラムを実行するインタプリタを作るというお話です。ストックやブックマークが結構たくさんついていて、みんな自分のオリジナルなプログラミング言語とか作ることに興味があるんだなあって思いました。 元ネタのorelangは、式をJSONのサブセットにすることでJSONパーサを流用し構文解析の手間を省いているところがキモだと思いますが、実は構文解析は案外簡単で、わざわざ避けて通るほどのものではなかったりします。また、S式の範囲に収めるとそれ以上構文の工夫は望めないので、『自分のプログラミング言語を作る』ということの面白みが薄れてしまう気もします。他にも、JSONのパーサを流用すると、構文エラーであるはずのコードまで受理されてしまうという

    えっ!? 1時間でオリジナルのプログラミング言語の開発を構文解析から!? - Qiita
    sh19910711
    sh19910711 2024/04/24
    "面白さを感じるには、やっぱり構文解析からできるようになったほうが楽しい / パーサコンビネータに慣れると、可読性が最低で構文エラーの理由もまともにわからない正規表現なんて使う理由がなくなり" 2016
  • moonbit で json パーサーを書いてみた 感想

    エアプにならないために、実際に moonbit を使ってコードを書いてみた感想を書く。 JSON Parser を書いた パッケージレジストリである https://mooncakes.io を見た限り、使いやすい json parser がなさそうなので、とりあえず自分用のをでっち上げた。 mooncakes.io に publish してあるので、 moon add mizchi/json で使える。品質が良くなくても ネームスペース付きで publish するので別に邪魔にならない気がした。 なんで作ったかというと、公式 example の cloudflare workers の example は単純なフィボナッチを計算するだけで、構造的なデータを返すことができない。 moonbit と js 間の文字列の受け渡しについては、あとで別の記事を書く。 使い方 fn main { l

    moonbit で json パーサーを書いてみた 感想
    sh19910711
    sh19910711 2024/04/21
    "Moonbit: TypeScript を Rust の文法で書いてる感覚 + moon test が十分使いやすい / Copliot: usage.mbt として vscode にピン留め + copilot は補完に開いているファイルをみる + Rust との差分を教えている"
  • コンパイラのための新しい中間表現 MLIR の論文を読む - FPGA開発日記

    LLVM IRについて調べていると、最近よくMLIRという言葉を目にするようになった。MLIRは"Multi-Level Intermediate Representation"の略称であって決して"Machine Learning"ではないのだが、LLVM IRを置き換えるために開発されている新しい中間表現形式である。 LLVM IRももちろん柔軟性のある中間表現形式であるが、より柔軟かつ幅広いDSLの中間表現を受け入れるために開発されているものだ。Googleに在籍していたLLVM CreaterのChris Lattnerによって開発されたものである。ちなみにChris Lattnerは論文が発行されたときにはすでにSiFiveに移っている。 https://arxiv.org/abs/2002.11054 この論文を読みながら、MLIRについて理解を進めていくことにしよう。 ML

    コンパイラのための新しい中間表現 MLIR の論文を読む - FPGA開発日記
    sh19910711
    sh19910711 2024/04/17
    "MLIR: C++コードなどの非常に抽象化されたソースコードの解析はLLVM IRでは非常に難しく、これを解決する / "Multi-Level Intermediate Representation"の略称であって決して"Machine Learning"ではない" 2020
  • LispKit Lisp処理系の実装 序 - Arantium Maestum

    純粋関数型Lisp方言であるLispKit LispのインタプリタとSECD抽象機械の機械語へのコンパイラを作成する。 タネはHendersonの「Functional Programming - Application & Interpretation」で、このに載っているISWIMやPASCALのコードを大体なぞるようにPythonで書いていく。(最近出た「コンパイラー原理と構造ー」でもSECDマシンへのコンパイルの話題が出ているらしいがまだ届いていないので未確認・・・) 例によって長くなるので複数の記事に分ける。 流れとしては以下のようになる: LispKit Lispの紹介 (記事) パーサとAST インタプリタ 前編 後編 SECD抽象機械の実装 1 2 3 SECD機械語へのコンパイラ SECD抽象機械ガベージコレクション LispKit Lisp LispKit Lis

    LispKit Lisp処理系の実装 序 - Arantium Maestum
    sh19910711
    sh19910711 2024/04/11
    "LispKit Lisp: Hendersonが考案したSECD抽象機械にコンパイルできる(=非常に簡単にいろんなアーキテクチャにポートできる)正格評価な純粋関数型のLisp + LandinのISWIMの中間表現のような言語" 2021
  • KMC Staff Blog:return 文に括弧を付ける(た)理由

    2009年08月03日 return 文に括弧を付ける(た)理由 また pre K&R C の話です。 pre K&R C の時代は、return 文が取る式を () で囲むことが文法上必須でした。その時代の習慣を引きずったためか、K&R (第1版) でも return 文の後の式を括弧で囲っていたようです。(私は第2版しか所有していないので確認できないのですが。) そのため、今でも括弧を付ける人もいるようです。一方、括弧を付けると return を retuan のようにタイプミスした時に関数呼び出しとして解釈されてしまい、コンパイルエラーにならない(リンク時にはエラーになる)ために良くないと主張する人などもいるようです。いずれにせよここらへんの話は、IDE やエディタがキーワードをハイライトしてくれるようになった現在では、好みの問題の範囲と言えるでしょう。 http://www.mat

    sh19910711
    sh19910711 2024/04/03
    "この時代の C は、他にも文法上や意味上の不備がいくつかあり (例えば - の代入演算子が -= ではなく、=- だったため、- 単項演算子と区別するために x =- 1 のように空白が必須であった" 2009
  • RubyにlramaがマージされてBison依存がなくなった(RubyKaigi 2023)|TechRacho by BPS株式会社

    こんにちは、hachi8833です。RubyKaigi 2023@松に行ってまいりました。 イベント感想などは他の皆さまが続々ネット上のブログにアップしているのでそちらにおまかせするとして、今回のRubyKaigiのDay1で発表されていたlramaが気になったので手短にメモします(個人的にPEGパーサージェネレータに関心があるので)。 Lramaでリャマと読みます。LALR parser generatorのYaccやBisonの流れをくむものとして、リャマという名前にしました。LR parser generatorなのでLlama (LL)ではなくLrama (LR)と綴ります。 Ruby Parser開発日誌 (5) - Lrama LALR (1) parser generatorを実装した - かねこにっきより lramaパーサーがmasterにマージされた 発表: The f

    RubyにlramaがマージされてBison依存がなくなった(RubyKaigi 2023)|TechRacho by BPS株式会社
    sh19910711
    sh19910711 2024/03/17
    "LramaというパーサージェネレータがRubyのmasterブランチにマージ / これまでBisonのバージョンによって挙動が違うという問題があった / 依存がなくなったことで面倒がひとつ解決 / 発表者によってparserの発音が違っている" 2023
  • Rustにおける「厳密な型付け」という文化 - Qiita

    はじめに Rustの特徴としてはメモリ安全性やGCなしで高速といったことがよく挙げられます。それらもRustの利点ではありますが、個人的に魅力を感じる部分の一つに「厳密な型付けをする文化」があると思っています。それはあまり明文化されておらず、個人的に感じているだけなのですが、Rustを使う動機の1つになりうると思うので、ここで宣伝してみます。 ちなみにこの記事のきっかけの1つが アンサー: なぜTypeScriptの型定義に凝るのか です。これを読んでいて、「自分はRustの型付け方針が好きなんだなぁ」とあらためて気づきました。 技術的な正確性より「気持ち」多めなのでポエムということで。 「厳密な型付けをする文化」とは Rustは静的型付き言語なので、ソースコード上の様々なところで型付けが行われます。これ自体は他の静的型付き言語と同様ですが、Rustではどのような型を付けるかということにつ

    Rustにおける「厳密な型付け」という文化 - Qiita
    sh19910711
    sh19910711 2024/03/13
    "型付けは文化 / 標準ライブラリでよく使われる型をある程度覚える / 型の情報量が豊富なので、慣れてくるとそれだけでだいたいの使い方が分かってきます / 英語の説明を読んだりしなくても、いきなり使えてしまう" 2021
  • clang/LLVMのお勉強 - aster_ismの工作室

    最近、clang/LLVMのお勉強をしている。 が、某きつねさんのは発売から10年以上たっているし、検索してもStackoverflowで同じ質問して解決してなかったりと、自力でお勉強するのはつらい。 どちらかと言えば、clangとかC/C++フロントエンド回りについて知りたかったが、LLVMで自作言語を作るとかの内容は、それなりにヒットするけどclangにはみんな興味ないんですかね? とはいえ、お勉強するには何か取っ掛かりがないとやりずらいし、どうしたものかと。 とりあえず、それなりに新しいLLVMについて書いていそうなを探して読むことにした。 選んだのは、LLVM Techniques, Tips, and Best Practices Clang and Middle-End Libraries | Packt。ついでにPackt Publishing のサブスクリプションを契

    clang/LLVMのお勉強 - aster_ismの工作室
    sh19910711
    sh19910711 2024/03/07
    ハイテクだ / "Packt Publishing: 普通に読んでるだけでCreditが溜まっていったり、Free Learningで無料でepubをDLできる / 今時っぽいのはコードブロックに対して「Explain」ボタンを押すとCode Explainerが起動して対話的にコード解説"
  • コメントを書かない理由 | おごちゃんの雑文

    コードにコメントを書かない事を責められた時の言い訳 私はコードにコメントを書かない。それは面倒だとか、ここに書いてある事情があるとかではなくて、「信念」として書かない。書くべきではないと思っているからだ。コメントを書いたら負けだとさえ思っている。これはもう20年来そうだ。 ちょっとしたメモのようなコメントは、つい書きたくなる。私は「自分のコードは他人も見る」「過去の自分は他人」と思っているので、その時の助けになるようなコメントはむしろ入れたい欲求にかられる。コメントで意思伝達しておけば楽だと思う。が、「コメントを書いたら負け」だと思っているから書かない。 例外的に書くのは、 ファイルの冒頭に書くGNUなヘッダ ヘッダファイルに書く構造体の宣言 コメントアウト くらいで(これらはむしろ積極的に書く)、その書かないっぷりは、gotoよりも少ないくらいだ。 なんでそこまでコメントを嫌うかと言えば

    sh19910711
    sh19910711 2024/03/07
    "コメントは嘘がつけるし、コンパイルエラーは出ない / エラーにならないから、コメントはメンテされない / 「コメントを書かない努力」をすることと「コード品質を下げない努力」というのは一致する" 2007
  • クリックだけでプログラムが作れる夢のプログラミング環境作った - ABAの日誌

    ウソです。いやウソではないか……誇張です。 sarad p5.js demo 上のデモ開いて、左クリックでコード生成、右クリックでコード削除。運が良いと何かのグラフィックスを描くプログラムができる。あまりに何も描かないようだったら一旦右下の[Reset]を押して下さい。グラフィックスAPIはp5.js利用。 左クリックで生成されるコードはRecurrentJSを使ったLSTMで作られている。LSTMやRNNをつかった文書生成はいろんなところでやられていて、有名どころだとThe Unreasonable Effectiveness of Recurrent Neural Networksがある。この記事ではLinuxのソースコードをわせてCのプログラムを作る例もある。ただ、自動生成でできる文やプログラムはいわゆるワードサラダで、文には意味が無いし、プログラムはコンパイルできない。 ならワー

    クリックだけでプログラムが作れる夢のプログラミング環境作った - ABAの日誌
    sh19910711
    sh19910711 2024/02/18
    "生成されるコードはRecurrentJSを使ったLSTMで作られている / 自動生成でできる文やプログラムはいわゆるワードサラダ / ならワードサラダなプログラムでも実行できる処理系を作ればいいんではないか" / 2016
  • inforno :: Scalaでスタック指向言語をサクッと実装する

    Scalaにはご存知のとおり scala.util.parsing.combinator というパーサコンビネータライブラリがある。さらには scala.util.parsing.ast というのもあるわけだけど、これは激しく開発中な感じ。Scalaはバージョンがあがるとこういう開発中ライブラリはごそっと変わったりするので今はおいておく。ちなみに、2.7.1では前のパーサコンビネータは scala.util.parsing.combinatorold といういかにも使いたくない名前にされてしまった。 パーサコンビネータといえば言語処理系だ(そうか?)。というわけで scala.util.parsing.ast は置いておいて、とりあえずASTについてほとんど考える必要がない、簡単なスタック指向言語を実装してみることにする。実行はScala 2.7.1.finalで。 スタック指向言語とは

    sh19910711
    sh19910711 2024/02/18
    "スタック指向言語にはForthやPostScriptやFactorがある / 素晴らしく簡単にいうと「とりあえずスタックがあればなんとかなるよね」 という言語 / Forth: あまり表には見えてこない部分で使用されている" / 2008
  • Lispはなぜ神の言語と呼ばれるのか - SEむううみんのプログラミングパラダイス

    古から存在するプログラミング言語Lisp。その通り名の一つに「神の言語」というものがある。 なんという甘美な響きだろうか。この名前だけで男子中学生は全員習得することを決心するだろう。そのくらいインパクトのある名前である。文部科学省はプログラミング教育を推進するにあたって、この通り名を公式に採用することを真剣に検討されると良いと思う。 さて、「神の言語」の勉強を始めてみて驚くだろう。どのあたりが神なのかよくわからないのだ。たしかに丸括弧は多い。多いが、それと神との関連性はよくわからない。 何か土着の信仰の話なのだろうか?あなたがそう戸惑うのも無理からぬことだ。 私自身、前からこのフレーズは聞いたことがあったが、あまり理解していなかった。そこで今回改めて調べてみたので共有しようと思う。 「神の言語」の由来 そもそも、Lispは神の言語だと誰が言い出したのか?どうやら海外でそのような歌が作られた

    sh19910711
    sh19910711 2024/02/14
    "「神の言語」の勉強を始めてみて驚くだろう。どのあたりが神なのかよくわからないのだ。たしかに丸括弧は多い / 実用Common Lisp: 「解き方がわからない問題」についてどのようにアプローチしていったか" / 2021
  • 100 Days of Codeをやってみた - Arantium Maestum

    ツイッターで100 Days Of Codeというチャレンジがたまに流れていて、面白そうだったのでやってみた。今年も終わりに近づいているので今更ながら振り返ってみる。 100 Days Of Code概要 ルールは簡単: なるべく毎日1時間以上、業務外のコードを書く githubに載せる twitterで進捗をつぶやく 途中で風邪をひいて寝込んだりいわゆるライフイベントが発生したりして合計で5日ほど空いてしまったが、8月14日にはじめて11月26日に終わった。 積ん読していたをある程度消費したい、という欲求もあり、100日間基的にに載っているコードや演習問題、オンラインのチュートリアルなどをやって過ごした。自前のプロジェクトを立ち上げたりしなかったのですこし寂しい気もする。近いうちに自作言語に手を出したい。 やったこと(というか読んだ) Essentials of Programm

    100 Days of Codeをやってみた - Arantium Maestum
    sh19910711
    sh19910711 2024/01/18
    "『Essentials of Programming Languages』: プログラミング言語の基礎概念の多くを実際に自分の手で作っていく / 『500 Lines or Less』: いろんなオープンソースのプログラムの設計思想などをその開発者が解説" / 2018