100言語Spedrdrun :エピソード87:サイド
Sidefはプロトタイププログラミング言語であり、Ruby、Raku、Juliaに触発されている.
Sidefを実行するのは簡単ではありません.これはPerl 5プラットフォームで実行し、CPANを介してインストールすることができますが、深刻な問題に実行されます.
OSXにバンドルされたPerlバージョンは本当に推奨されませんので、私はBREWバージョンを使いました.残念ながら、以下のようにします:
それで、私は2つの追加ステップを必要としました.シンボリックリンク
と編集
これらの手順の後、我々は行く準備ができています.
これは確かにsidefだけで良い処理する必要があります.そして、SASFのためにVSCODE構文を強調していません.多くの場合、非常にまれに使用される言語もある.
こんにちは、世界は全く驚くべきことです.ここの醜いセミコロンでない.
実際には、ルビー、ラク、ジュリアの間の何かのように見える.
範囲 ない
Rubyブロックには特別な場所があり、ブロック引数は通常の引数とは別のものです.そうでない.
Sidefは構文の柔軟性の非常に高いレベルを持っています.
デバッグツールがいくつかあります
と思った
構文の柔軟性の度合いが高いのは、通常のプログラミングでは重要ではありませんが、DSLSがそれらのために働くものを選ぶのを容易にするので、DSLSにとっては素晴らしいことです.
特に
サイドサポート
Sidefは、優先順位規則であまりにかわいいです.
標準演算子優先順位に従うことは最悪の考えです.Smalltalkはそれを試みました、そして、それは言語を殺しました.すべてのSmalltalkの後継者は、この愚かな考えを解くためにすべての痛みを伴うものをしなければならなかった.そして、Smalltalkは少なくとも単純な一貫した規則を持ちました.Sidefは正気ではありません. 空白がなければ、演算子は右から左へ スペースを指定すると、演算子は左から右へ( いくつかのスペースで、演算子はスペースがあるときに右に左に適用され、 これは言語を失望させる.
ここでは、SideFでのワードルゲームです.
いいえ.
私は楽しい実験を支持します、しかし、sidefは数を加えるのと同じくらい単純な何かをする絶対的な最悪の方法を持ちます.
さらに大きな問題は、いくつかのコードを書くとき、Sidefはそれが意味するものを決定し、半分の時間はあなたが何か他の何かを意味したと判断します.エラーメッセージがない、ドキュメントがない、構文のデバッグツールはありません、コードはちょうどそれがどんな感じでもします.時々、コードは何かをします.非常に頻繁にコードだけで何もしないし、それは多くの邪魔です.
私は、それが少なくとも必要であるカジュアルな遊びのためにsidefを使えるようにすると思います: 演算子優先順位を修正 より良いエラーメッセージ いくつかの種類の“印刷方法は、”オプションは、多くの 作業OSXパッケージ これらの問題が修正されて、おそらくSidefは私が週末または2つのためにプレーを勧めることができる何かになる可能性があります.現在の状態では、ちょうどNO .
All code examples for the series will be in this repository .
Code for the Sidef episode is available here .
OSXのインストール
Sidefを実行するのは簡単ではありません.これはPerl 5プラットフォームで実行し、CPANを介してインストールすることができますが、深刻な問題に実行されます.
OSXにバンドルされたPerlバージョンは本当に推奨されませんので、私はBREWバージョンを使いました.残念ながら、以下のようにします:
$ brew install perl
$ cpan Sidef
インストールするsidef
イン~/.cpan/build/Sidef-3.99-0/bin/sidef
, しかし、それはシステムPerlを使用するようにハードコード化されています.それで、私は2つの追加ステップを必要としました.シンボリックリンク
~/.cpan/build/Sidef-3.99-0/bin/sidef
いくつかの場所に$PATH
ライクln -s ~/.cpan/build/Sidef-3.99-0/bin/sidef ~/bin/
.と編集
sidef
からの最初の行を変更するプログラム#!/usr/bin/perl
to #!/usr/bin/env perl
したがって、それはOSXから時代遅れのものではなく、適切なバージョンを使用します.これらの手順の後、我々は行く準備ができています.
これは確かにsidefだけで良い処理する必要があります.そして、SASFのためにVSCODE構文を強調していません.多くの場合、非常にまれに使用される言語もある.
こんにちは、世界!
こんにちは、世界は全く驚くべきことです.ここの醜いセミコロンでない.
#!/usr/bin/env sidef
say "Hello, World!"
$ ./hello.sf
Hello, World!
フィズバズ
実際には、ルビー、ラク、ジュリアの間の何かのように見える.
#!/usr/bin/env sidef
(1..100).each { |n|
if (n % 15 == 0) {
say "FizzBuzz"
} elsif (n % 5 == 0) {
say "Buzz"
} elsif (n % 3 == 0) {
say "Fizz"
} else {
say n
}
}
1..100
から行く1
to 100
...
範囲{|args| ...}
ブロックはRubyのように見えますが、同じ方法で全く使われませんif
elsif
else
必要()
と{}
s ブロック
Rubyブロックには特別な場所があり、ブロック引数は通常の引数とは別のものです.そうでない.
Sidefは構文の柔軟性の非常に高いレベルを持っています.
#!/usr/bin/env sidef
func twice(f) {
say "Running it twice:"
f()
f()
}
var hi = { say "Hi!" }
twice(hi)
twice({ say "Hello!" })
twice { say "This does not work!" }
say ""
say "Iteration:"
{ |i| say "Block got: #{i}" }.each(10..12)
{ |i| say "Block got: #{i}" } << 13..14
for 15..16 { |i| say "Block got: #{i}" }
(17..18).each { |i| say "Block got: #{i}" }
{ |i| say "Block got: #{i+19}" } * 2
2.times { |i| say "Block got: #{i+21}" }
say ""
say "Single argument:"
60 |> { |i| say "Block got: #{i}" }
60 |> :inc |> { |i| say "Block got: #{i}" }
60 |> {|i| i + 2} |> { |i| say "Block got: #{i}" }
60 |> {_+3} |> { |i| say "Block got: #{i}" }
60 |> (:add, 4) |> { |i| say "Block got: #{i}" }
{ |i| say "Block got: #{i}" }(69)
$ ./blocks.sf
Running it twice:
Hi!
Hi!
Running it twice:
Hello!
Hello!
Iteration:
Block got: 10
Block got: 11
Block got: 12
Block got: 13
Block got: 14
Block got: 15
Block got: 16
Block got: 17
Block got: 18
Block got: 19
Block got: 20
Block got: 21
Block got: 22
Single argument:
Block got: 60
Block got: 61
Block got: 62
Block got: 63
Block got: 64
Block got: 69
Rubyスタイル以外のすべての作品twice { say "This does not work!" }
文字通り何もありません、そして、私は理由がわかりません.デバッグツールがいくつかあります
-c compile the code into a Perl program
and -D dump the syntax tree of a program
, しかし、結果は本当に人間に読めません.と思った
-k keep track of potential unsafe parser interpretations
それについて何かを言うかもしれません、しかし、それも何も言いません.構文の柔軟性の度合いが高いのは、通常のプログラミングでは重要ではありませんが、DSLSがそれらのために働くものを選ぶのを容易にするので、DSLSにとっては素晴らしいことです.
特に
|>
コードは非常にかわいいです.フィボナッチ
サイドサポート
is cached
自由のための回想のために、それは私がなぜより多くの言語がこれをしないかについて、わからない一般的な十分なユースケースです.キャッシュをクリアする方法もあります.#!/usr/bin/env sidef
func fib(n) is cached {
return 1 if (n <= 2)
fib(n - 1) + fib(n - 2)
}
(1..100).each {|n|
say "fib(#{n}) = #{fib(n)}"
}
$ ./fib.sf
fib(1) = 1
fib(2) = 1
fib(3) = 2
...
fib(98) = 135301852344706746049
fib(99) = 218922995834555169026
fib(100) = 354224848179261915075
演算子の優先順位
Sidefは、優先順位規則であまりにかわいいです.
#!/usr/bin/env sidef
say(2+3*4+5)
say(2 + 3 * 4 + 5)
say(2 + 3*4 + 5)
say(2+3 * 4+5)
4つの異なる結果を出力します.$ ./math.sf
29
25
19
45
Sidefちょうど演算子の優先順位を持っていない代わりに、いくつかの完全に非常識な方法で何が起こるかを決定するために間隔を使用しようとします.標準演算子優先順位に従うことは最悪の考えです.Smalltalkはそれを試みました、そして、それは言語を殺しました.すべてのSmalltalkの後継者は、この愚かな考えを解くためにすべての痛みを伴うものをしなければならなかった.そして、Smalltalkは少なくとも単純な一貫した規則を持ちました.Sidefは正気ではありません.
2+3*4+5
is 2+(3*(4+5))
) 2 + 3 * 4 + 5
is ((2+3)*4)+5
) 悪化する
ここでは、SideFでのワードルゲームです.
#!/usr/bin/env sidef
var words = File.new("wordle-answers-alphabetical.txt").read.split
var word = words.rand
var guess = ""
while (guess != word) {
print "Guess: "
guess = STDIN.readline
if (guess.size != 5) {
say "Only 5 letter words allowed"
next
}
{|i|
if (word[i] == guess[i]) {
print "🟩"
} elsif (word.include(guess[i])) {
print "🟨"
} else {
print "🟥"
}
} * 5
print "\n"
}
あまり悪くなかった.$ ./wordle.sf
Guess: trial
🟥🟥🟥🟨🟥
Guess: maybe
🟥🟨🟥🟥🟩
Guess: snake
🟨🟥🟩🟥🟩
Guess: chase
🟥🟩🟩🟩🟩
Guess: phase
🟩🟩🟩🟩🟩
あなたはsidefを使うべきですか?
いいえ.
私は楽しい実験を支持します、しかし、sidefは数を加えるのと同じくらい単純な何かをする絶対的な最悪の方法を持ちます.
さらに大きな問題は、いくつかのコードを書くとき、Sidefはそれが意味するものを決定し、半分の時間はあなたが何か他の何かを意味したと判断します.エラーメッセージがない、ドキュメントがない、構文のデバッグツールはありません、コードはちょうどそれがどんな感じでもします.時々、コードは何かをします.非常に頻繁にコードだけで何もしないし、それは多くの邪魔です.
私は、それが少なくとも必要であるカジュアルな遊びのためにsidefを使えるようにすると思います:
()
sと地獄の側があなたがちょうど何を考えたかについて、あなたに話すためにコード
All code examples for the series will be in this repository .
Code for the Sidef episode is available here .
Reference
この問題について(100言語Spedrdrun :エピソード87:サイド), 我々は、より多くの情報をここで見つけました https://dev.to/taw/100-languages-speedrun-episode-87-sidef-164dテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol