質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

3回答

2311閲覧

非汎用言語の汎用的な使用例

argius

総合スコア9390

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2016/05/27 10:09

共通点のある疑問だったので、まとめてしまいましたが、PHPやJavaScriptについてです。
いずれの言語も、汎用ではないプログラミング言語であるという認識ですが、私の知る限りでは、一部で汎用的に使用する例が増えてきたように思います。

とくにNode.jsのように、本来Webブラウザーで使用することに特化したJavaScriptをサーバーサイドで使うという仕組みが登場しています。
もともと、JavaScriptはコマンドラインで実行できる環境は古くからあるのは知っていますが、ただ汎用として使うためのAPIは揃っていないという認識です。Node.jsがどのようなAPI構成なのかは知りません。

PHPの例は特に思いつきませんが、一般的なスクリプト言語の機能は一通り備えているようなことを聞いたことがあります。

...

本題ですが、現状のPHP,JavaScriptでは、たとえばPythonやRubyのように、標準機能で汎用的なスクリプト言語と同等のことができるのか、ということです。
もし標準機能でできなければ、何かを増設することでそれを実現できるのでしょうか。
広く実用のものでなくても、そのような取り組みはあるのでしょうか。

言い方を変えると、PHPerやJSerの皆さんがその言語だけでツール開発などのすべてを賄おうという傾向があるのかどうかを知りたいです。
それとも他の言語で賄っているのでしょうか。

...

特に何かに使いたいというわけではなく、単純に興味本位の質問です。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

改めて言うまでもありませんが、ほとんどのプログラミング言語はチューリング完全なので、その気になれば(プログラムとしては)どんな処理でもできます。

となると、「どういう環境で使われるか」を決めるのは、ライブラリと処理系が大半、ということになります。例えば、Object-CやSwiftは、「iOS環境」で直接動く言語なので、それらの開発に主に用いられます。また、RubyがWeb開発に用いられるのは、Ruby on Railsの大成功があってこそです。

JavaScriptの場合、ブラウザ戦争の結果で高速化したV8エンジンを使って、「非同期な処理を書きやすい」という言語特徴と組み合わせることで、サーバ向けのNode.jsが生まれました。さらにはChromiumでUIを作ったElectronでデスクトップアプリも書けるようになるほか、大量のJavaScriptを書くために必要なプリプロセッサやタスクランナー、パッケージ管理ツールといった周辺ツールもJavaScriptで揃うようになっています。

PHPのコマンドラインツールはcomposerとか、各フレームワークのCLIとかといった開発の補助ツールが中心で、あまり積極的に使われている印象はないです。

CLRとかJVMとかというように共通のフレームワークに乗った言語だと、ライブラリは同様の水準で使えるので純粋に言語として選ぶことになりますが、そうでない場合は周辺環境のほうが選ぶポイントとなります。

投稿2016/05/27 13:00

編集2016/05/27 13:03
maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

argius

2016/05/27 14:42

チューリング完全であることはあまり重要では無く、 「特定の用途に特化しない」という意味で汎用という言葉を使っています。 もともとWebページを生成するのに特化した言語やWebブラウザー上で動作するのに特化した言語が、 今現在、どうやって汎用的なことをしているのか(またはしていないのか)、 というのが質問の意図でした。 うまく説明できていなくて済みません。 > 「どういう環境で使われるか」を決めるのは、ライブラリと処理系が大半 そうですね、ここがいちばん知りたかったところです。 そういう意味では、Swiftも私が思う「非汎用」のグループに属します。 で、これもあくまでイメージでの話ですが、 例えばJavaScriptでは、どこまでが純粋にJavaScriptなのかが分かりにくいというのもあります。 Node.jsは割とJavaScript主体で動くもののように見えます。 でもWebブラウザー上で動作するときにはできなかった処理、 例えばファイルシステムへのアクセスとか、制限されないネットワーク関連を、 どのように組み込んでいるんでしょうか。 PHPは、composerをGitHubで見てみましたが、PHP 100%なんですね。 PHP開発の補助ツールだとしても、PHP 100%で作っているものがある事実が分かっただけでもGoodです。 でもPHPに関係ないところまではサポートしていないということですね。 よく分かりました。
maisumakun

2016/05/27 15:28

別な回答をするために以前調べてみましたが、Node.jsのファイルやHTTPアクセスといった部分は、V8に組み込むためにC++で書かれていました。 JavaのJNIとか、RubyのC拡張とか、結局は多くの言語で言語外のリソースとのやり取りのためにC言語/C++のインターフェースを使っている印象があります。
argius

2016/05/27 16:03

> Node.jsのファイルやHTTPアクセスといった部分は、V8に組み込むためにC++で書かれていました。 なるほど。ありがとうございます。 先ほどちょっと調べて見つけた記事にNode.jsのAPIが載っていました。 http://yohshiy.blog.fc2.com/blog-entry-310.html const fs = require('fs'); こんな感じで(PythonやGolangで言うところの)インポートして使うのかな。 Node.jsはこれらのAPIを提供していて、裏ではC++で実装されてV8に載っているものが使われているということですね。 Node.jsとV8の境界がよく分かりませんが、これはまた個別に勉強してみます。 > 結局は多くの言語で言語外のリソースとのやり取りのためにC言語/C++のインターフェースを使っている これはそうですね。特にどうしてもネイティブ部分は。 他にもスクリプト言語のGUIは大体外付けTkとかQtになりますし。 ただ質問の意図としては、標準ランタイムに含まれてさえいれば、そこは問いません。 まとめると、すごく大雑把にいって、 "Node.jsは既にサーバーサイドだけではない、ほぼ他の汎用スクリプト言語と同等のJavaScript処理系" であると理解しました。 (「ほぼ」はJS言語が汎用言語として作られたわけではないからという偏見) ありがとうございました。
guest

0

Node.jsに関していえば汎用性がなかったことが、ポイントだったようです。

サーバ間の処理能力を高めるのに、データ読み込みを待たずに処理を並列で動かす非同期通信をしたい。
でも、処理に一か所でも、同期通信があると処理能力が上がらない。
既存のプログラミング言語は、同期通信のモジュールが大量にあるので困った。
ブラウザ上で動いているJavaScriptなら、そもそも外部とのインターフェイスがないので、同期通信をしているモジュールはないぞ。
Googleのjavascriptエンジンに、非同期インターフェイス群を作って、サーバサイトで動くようにできた!

といった内容を東京Node学園祭の1回目で聴いた気がします。(うろおぼえ・・)

チューリング完全な言語なら、汎用性のある言語にできるはずです。
(逆にSQLなどなは難しい。)

投稿2016/05/27 12:53

iwamoto_takaaki

総合スコア2883

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

argius

2016/05/27 13:56

回答ありがとうございます! > Node.jsに関していえば汎用性がなかったことが、ポイントだったようです。 > (中略) > ブラウザ上で動いているJavaScriptなら、そもそも外部とのインターフェイスがないので、同期通信をしているモジュールはないぞ。 なるほど、こういうことだったんですね。 分かりやすい、ありがとうございます。 チューリング完全については、 リソースにアクセスするAPIが用意されていなければ なんでもできるわけではないのでは?というのが私の疑問なので、 ちょっと違うかな?
iwamoto_takaaki

2016/05/27 14:09

言語として汎用性がないのなら、リソースにアクセスできても、なんでもできるわけではないことになります。前提条件ですね。 逆に実行環境がリソースへのアクセスを禁じても、リソースへのアクセスができる実行環境で実行すればいいことになります。 たいへんな作業かもしれませんが・・・ Node.jsの場合はV8があったのでちょうど良かったのかも知れません。
argius

2016/05/27 14:25

> 言語として汎用性がないのなら、リソースにアクセスできても、なんでもできるわけではないことになります。前提条件ですね。 確かに、厳密にいえばそうですね。 そこは当たり前の前提で話してしまっていました。 > 逆に実行環境がリソースへのアクセスを禁じても、リソースへのアクセスができる実行環境で実行すればいいことになります。 たいへんな作業かもしれませんが・・・ 「たいへんな作業かもしれませんが・・・」というところが重要かと思っています。 たいへんな作業で(コストが)見合わないので実装されない、なら今はできないわけです。
iwamoto_takaaki

2016/05/27 14:53

コストが見合わないのではなく、だれかにとって”コストを払う理由がない。”と私は考えてます。 元SEなので「論理的には可能です。」と言ったりする、ちょっとずれた言い方かもしれませんが、私やargiusさんがやっても出来ない話しではないとおもってます。 言語や移植先の環境にもよる話なので全てが難しいとは一概に言えないと思います。 たとえば、写経ですがlispの処理系は書いたことあります。すごく短くては簡単でした。
argius

2016/05/27 15:09 編集

はい、「論理的には可能です。」という点は理解しています。 ですが、知りたいのは、これからではなく、現状どうなの? という点なのです。 ちょっと脱線ですが、 必要とされている製品なのに、後継開発者が集まらなくて開発が難航している、なんて話も聞きますよね。 今日から使いたい製品なのに、納期が遅れてまだ使えないとかもあるかも知れません。 そういう風な、今使いたいのに無い。今無いと意味のないものもあります。 ともあれ。 質問内容があいまい過ぎて、上手く伝わらなかったかもしれませんが、 有意義な回答をいただきました。 ありがとうございました。 p.s. Lisp処理系は私も(大昔に)書いてみたことがあります。 完成はしませんでしたが...(^-^;
guest

0

適材適所じゃないですかねえ。
自分の場合はPHPで開発やってたんですけど、
ちょっとしたコマンドラインツールとしてもよく使いました。
そのへんの感覚はRubyやPython使ってる人も
似たような感覚じゃないでしょうか。
その昔でいうとPerlくらいしかなかった時代もありましたが、
現在は便利な機能を持つ便利なスクリプト言語が
それなりにありますよね。いい時代になったものです。:-)

投稿2016/05/27 10:37

takasima20

総合スコア7458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

argius

2016/05/27 10:57

回答ありがとうございます! > 適材適所じゃないですかねえ。 私はそう思っていて、わざわざ機能に制限があるものでがんばらなくても良いんじゃないの? でもNode.jsみたいのが生まれた。 この辺の、ユーザーやコミュニティーの考えや背景を少しだけ知りたいと思ったのです。 質問では上手く説明できていないですが... > そのへんの感覚はRubyやPython使ってる人も > 似たような感覚じゃないでしょうか。 PHPと異なると思うのは、 RubyやPython(Perlもですね)だと、比較的大きなツールもそれ自体の言語で作られたりしていますよね? で、PHPやJS(JSだとnpmみたいなのがありますね)もそういうのがあるのかなー、 というのが今回の漠然とした問いです。 (先入観を除くために敢えて調べてないのですが) なので、私の認識自体が間違っていて、当然のようにPHPでツールが作られている可能性もあると思っています。 ツール作るよ! →汎用じゃないからできないことあるよね!? →でもがんばって自己完結したよ!(裏側でゴニョゴニョしててもまあ良し) →そのどう「ゴニョゴニョ」したのか知りたい! みたいな感じです。 > その昔でいうとPerlくらいしかなかった時代もありましたが、 > 現在は便利な機能を持つ便利なスクリプト言語が > それなりにありますよね。いい時代になったものです。:-) そのあたりは同意です。 私もツールとしてPerlばかり使っていたクチですので。 選択肢が増えたのはうれしいことですね。
takasima20

2016/05/28 11:16

余談になります。 他の方の回答コメントにLispの話が出ていましたが、 そういえば、Lispで開発してる知り合いは Gauche使ってちょっとした処理作ってる みたいな話を思い出しました。 多少の難はあるかもしれないけど、 使い慣れた言語でやっちゃうとこある気がします。(^_^;
argius

2016/05/28 12:18

Lispは(今回取り上げた言語に対して)独自の進化を遂げていますからね。 ツールを書くときでも、同じLisp系で、だけどツールとしてより使いやすい(のかな?)Gaucheを選択する、 みたいのはあるのかも知れませんね。 似たようなケースで、 メインシステムはJavaだけど スクリプトやツールとしてはGroovyを使われる方も結構いらっしゃいます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問