アカウント名:
パスワード:
あと10年か20年すればJavaもこういう扱いになるのだろう…
Javaとより近代的なプログラミング言語の間にパラダイムシフトと呼べるほどの差があるかどうかですかね…?
# 正直ここ10年くらいで「プログラミング言語」って進歩してる??
10年前のJavaと今のJavaを比べてみてください。理想を諦めて現実に妥協した歴史が見られるのではないでしょうか。
理解。シンタックスシュガーばかりでパラダイムシフトはしてないってことね…
LISPerが言ってそうなセリフだ
言語史に置けるレベルの変化では無いが、Java的にはLambdaが入ったのはパラダイムシフトだよ。単なるシンタックスシュガーでは無い。ちょっと古いがGenericsが入ったのも大きな転換。
このレベルをシンタックスシュガーでありパラダイムシフトじゃ無いというなら、そもそも同じ言語の中でパラダイムシフトは起こせないね。言語の意味変わっちゃうから。
20年弱前にSchemeやPrologを習ったけど、LISPで何かパラダイムシフトが起きたの?
なんというかJavaが最先端で先進的な言語だったのは短い間だけだったんだよなと改めて実感するコメントですな
> ifもforもwhileもgotoのシンタックスシュガー
gotoだけでは、条件分岐もループもできないですよ。
まてよ、古のfortranには計算型goto文ってのもあったか。あれは現代的にはcase文相当ということになりますね。
どちらも馬鹿だな言語のあたらしい概念はシンタックスシュガーで実装したり、プリプロセッサで実装したり、あるいは実装まるごと変えたりする必要があったりする
お前らは概念とその実装の区別がついていないCOBOL爺以下だよ
> ラムダは短く簡潔に書けることにこそ意味があるので
違うね新しい概念の導入だ
言語としての限界は変わらなくとも実用的に書ける領域が広がるなら、プログラマからみて言語の進化といっていいのでは。シンタックスシュガーであることと(プログラマから見た)パラダイムシフトは両立しうるよね。
馬鹿は「何を追加しようとしているのか?」を考えられなくて、「どうやって追加するのか?」しか考えられない
匿名クラスとどこが違う概念なの?
ラムダ式は概念で(これは概念の話)Javaだと(x) => { return x+x; }と書くのかな、他の言語だと(lambda (x) (+ x x))とかfun x->x+xとか書く(これは記法の話)Javaではラムダ式を匿名クラスを使って実装している(これは実装の話)ぜんぶ別の話だよスラド民はまともな教育を受けてないのか、ここの区別が本当に苦手
でも、Javascriptでは、Lispのやり方をまねたFunction() {}の書き方はだめで、() => {}の書き方がより良いと言われている。
Javaのラムダ式はJavascriptでより良いとされている(古いJavaScriptには無い)クラスを使ったやり方で実装しているとの事ですが、
これらから類推すると、昔ながらのLispの(define (lambda ()と、Javaの() => {}は、「同じ類」では無く、「古い方とより良い方」の関係に思えてなりませんが、どうなのでしょうか?
Javaの場合は、無名クラスと違いコンパイル後に$とか付いた変わった名前のクラスファイルができない気がするな。確認してないが。
そのクラスファイルの存在について、project jigsawのモジュール化の議論の時にアクセス権に関する何かのデメリットが語られていた気がするが、私の記憶も知恵も追い付いておらずわからない。
良いクロージャは{ var a = 0; f = function() { a++; }; g = function() { a *= 2; }; f(); f(); g(); /* ここでa==4 */ }と局所変数を共有して読み書きできるのだが、Javaの実装ではたしか局所変数は読出し専用になる悪いクロージャ言語の互換性を維持したためと思われるなぜなら良いクロージャを実装するにはは普通には局所変数をヒープに取る必要があるから、スタックに取るそれまでのJavaとはやり方が違う
JavaScriptとJavaの()=>{}は書き方が同じでも、それ以外に共通点は何もないよ
ですからーJavascriptとかで、varだとか、function(){}だとかは、不味い、つまりクロージャ自体が悪いそうじゃないですか?
クロージャ自体が悪い以上、良いクロージャも人類にとっては悪ではないのですか?クロージャにまとわりついている環境変数が混ざり合って訳が分からなくなるからだめだと見たことが有ります。
Javascriptの()=>{}はクロージャとは別物(良いクロージャとも別物)に見えます。
C#というか.NetのLinqは劇的な発明だったと思うけどなコードを書く際の考え方やスタイルまで変わったし
LINQってメソッドチェーンと何が違うの?
LINQ ⊂ メソッドチェーン
メソッドチェーンはただの形式。そう書けるメソッドをつなげて書いたら、なんでもそう。
LINQは「統合言語クエリ」。何かの順序集合を加工するためのモジュール。
https://docs.microsoft.com/ja-jp/dotnet/standard/using-linq [microsoft.com]
遅延評価とかクエリ式とか
LINQ がメソッドチェーンとか、、、どんな発想した、そんな理屈につながるんだか。
そこは、ニヤリとするところだと思ってみる。合っているけど、ずれているので。
ちょっとおしゃれな感じにしただけで、大した変わらないと思う。
ターゲットが何かを気にしなくてもいいところ。オブジェクトの取得もXMLの解析もデータベースへの問い合わせも同じ構文が使えてあとはコンパイラやライブラリがいいようにしてくれる。
ラムダ式もね。
SQLのチューニングが面倒なのでLinq嫌い
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
普通のやつらの下を行け -- バッドノウハウ専門家
一時はCOBOLも花形だった (スコア:2)
あと10年か20年すればJavaもこういう扱いになるのだろう…
Re:一時はCOBOLも花形だった (スコア:0)
Javaとより近代的なプログラミング言語の間にパラダイムシフトと呼べるほどの差があるかどうかですかね…?
# 正直ここ10年くらいで「プログラミング言語」って進歩してる??
Re: (スコア:0)
10年前のJavaと今のJavaを比べてみてください。
理想を諦めて現実に妥協した歴史が見られるのではないでしょうか。
Re: (スコア:0)
理解。シンタックスシュガーばかりでパラダイムシフトはしてないってことね…
Re: (スコア:0)
LISPerが言ってそうなセリフだ
Re: (スコア:0)
言語史に置けるレベルの変化では無いが、Java的にはLambdaが入ったのはパラダイムシフトだよ。単なるシンタックスシュガーでは無い。
ちょっと古いがGenericsが入ったのも大きな転換。
このレベルをシンタックスシュガーでありパラダイムシフトじゃ無いというなら、そもそも同じ言語の中でパラダイムシフトは起こせないね。
言語の意味変わっちゃうから。
Re: (スコア:0)
多少のパラダイムシフトじゃ言語の意味が変わらないから。
S式のパラダイムを超える何かを発明しない限りはね。
Re: (スコア:0)
20年弱前にSchemeやPrologを習ったけど、LISPで何かパラダイムシフトが起きたの?
Re: (スコア:0)
なんというかJavaが最先端で先進的な言語だったのは短い間だけだったんだよなと改めて実感するコメントですな
Re: (スコア:0)
> ifもforもwhileもgotoのシンタックスシュガー
gotoだけでは、条件分岐もループもできないですよ。
まてよ、古のfortranには計算型goto文ってのもあったか。
あれは現代的にはcase文相当ということになりますね。
Re: (スコア:0)
どちらも馬鹿だな
言語のあたらしい概念はシンタックスシュガーで実装したり、プリプロセッサで実装したり、あるいは実装まるごと変えたりする必要があったりする
お前らは概念とその実装の区別がついていない
COBOL爺以下だよ
> ラムダは短く簡潔に書けることにこそ意味があるので
違うね
新しい概念の導入だ
Re: (スコア:0)
Re: (スコア:0)
言語としての限界は変わらなくとも実用的に書ける領域が広がるなら、プログラマからみて言語の進化といっていいのでは。
シンタックスシュガーであることと(プログラマから見た)パラダイムシフトは両立しうるよね。
Re:一時はCOBOLも花形だった (スコア:1)
Re: (スコア:0)
馬鹿は「何を追加しようとしているのか?」を考えられなくて、「どうやって追加するのか?」しか考えられない
Re: (スコア:0)
匿名クラスとどこが違う概念なの?
Re: (スコア:0)
ラムダ式は概念で(これは概念の話)
Javaだと(x) => { return x+x; }と書くのかな、他の言語だと(lambda (x) (+ x x))とかfun x->x+xとか書く(これは記法の話)
Javaではラムダ式を匿名クラスを使って実装している(これは実装の話)
ぜんぶ別の話だよ
スラド民はまともな教育を受けてないのか、ここの区別が本当に苦手
Re: (スコア:0)
でも、Javascriptでは、Lispのやり方をまねたFunction() {}の書き方は
だめで、() => {}の書き方がより良いと言われている。
Javaのラムダ式はJavascriptでより良いとされている(古いJavaScriptには
無い)クラスを使ったやり方で実装しているとの事ですが、
これらから類推すると、
昔ながらのLispの(define (lambda ()と、
Javaの() => {}は、
「同じ類」では無く、「古い方とより良い方」の関係に思えてなりませんが、
どうなのでしょうか?
Re: (スコア:0)
Javaの場合は、無名クラスと違いコンパイル後に$とか付いた変わった名前のクラスファイルができない気がするな。
確認してないが。
そのクラスファイルの存在について、project jigsawのモジュール化の議論の時にアクセス権に関する何かの
デメリットが語られていた気がするが、私の記憶も知恵も追い付いておらずわからない。
Re: (スコア:0)
良いクロージャは
{ var a = 0; f = function() { a++; }; g = function() { a *= 2; }; f(); f(); g(); /* ここでa==4 */ }
と局所変数を共有して読み書きできるのだが、
Javaの実装ではたしか局所変数は読出し専用になる悪いクロージャ
言語の互換性を維持したためと思われる
なぜなら良いクロージャを実装するにはは普通には局所変数をヒープに取る必要があるから、スタックに取るそれまでのJavaとはやり方が違う
JavaScriptとJavaの()=>{}は書き方が同じでも、それ以外に共通点は何もないよ
Re: (スコア:0)
ですからー
Javascriptとかで、varだとか、function(){}だとかは、不味い、
つまりクロージャ自体が悪いそうじゃないですか?
クロージャ自体が悪い以上、良いクロージャも人類にとっては悪では
ないのですか?
クロージャにまとわりついている環境変数が混ざり合って訳が分からなく
なるからだめだと見たことが有ります。
Javascriptの()=>{}はクロージャとは別物(良いクロージャとも別物)
に見えます。
Re: (スコア:0)
C#というか.NetのLinqは劇的な発明だったと思うけどな
コードを書く際の考え方やスタイルまで変わったし
Re:一時はCOBOLも花形だった (スコア:1)
LINQってメソッドチェーンと何が違うの?
Re:一時はCOBOLも花形だった (スコア:2)
LINQ ⊂ メソッドチェーン
メソッドチェーンはただの形式。
そう書けるメソッドをつなげて書いたら、なんでもそう。
LINQは「統合言語クエリ」。
何かの順序集合を加工するためのモジュール。
https://docs.microsoft.com/ja-jp/dotnet/standard/using-linq [microsoft.com]
Re: (スコア:0)
そのドキュメントもAsParallel()が出てきた瞬間にクエリ式って何?になってるのが笑える
Re: (スコア:0)
遅延評価とかクエリ式とか
Re: (スコア:0)
LINQ がメソッドチェーンとか、、、どんな発想した、そんな理屈につながるんだか。
Re:一時はCOBOLも花形だった (スコア:2)
そこは、ニヤリとするところだと思ってみる。
合っているけど、ずれているので。
Re: (スコア:0)
ちょっとおしゃれな感じにしただけで、大した変わらないと思う。
Re: (スコア:0)
ターゲットが何かを気にしなくてもいいところ。
オブジェクトの取得もXMLの解析もデータベースへの問い合わせも同じ構文が使えて
あとはコンパイラやライブラリがいいようにしてくれる。
Re: (スコア:0)
ラムダ式もね。
Re: (スコア:0)
SQLのチューニングが面倒なのでLinq嫌い