タグ付けされた質問 「language-features」

特定のコンピューター言語の特徴的な側面に関する質問。特に、それらの記述方法、またはプログラマーに提供される表現能力に関する質問。

2
Smalltalkの「become:」の用途は何ですか?
become:Smalltalk のメッセージは、1つのオブジェクトを別のオブジェクトに変更し、そのオブジェクトへのすべての参照に影響を与えます。 この言語機能にはどのような用途がありますか?実際のコードで使用されますか?それは単なる好奇心ですか?それを使用するのは良い/悪い習慣と見なされますか?

8
言語コンストラクトにデザインパターンが追加されないのはなぜですか?
最近、同僚と話していて、彼の会社はMVCデザインパターンをPHP拡張機能として追加しようとしていると言いました。 彼は、Controllers, Models and Viewsパフォーマンスを向上させるために言語構成要素に追加するCコードを書いたと説明しました。 MVCはWebアプリケーションで広く使用されているアーキテクチャ設計パターンであることがわかりましたが、たとえばコントローラー用の言語構造を持つ言語に出くわす必要があります。 デザインパターンを言語に統合するIMHOは、優れたオブジェクト指向デザインの重要性を強調できます。 それでは、なぜ最もよく使用されるデザインパターン(MVC、ファクトリ、ストラテジーなど)が言語構成要素に追加されないのですか? 質問が広すぎると思われる場合は、質問をPHPのみに制限できます。 編集: プロジェクトを開発するときにデザインパターンを使用する必要があることを意味するわけではありません。実際、私はそれが機能する限りシンプルに保つ方法論を推進しています。

3
音楽ソフトウェアを設計するための適切なプログラミング言語[終了]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 5年前に閉鎖されました。 私は自分の楽器のソフトウェアをリズミカルなものにしたいと思っています(メロディはありません)。これらのソフトウェアに必要なことは次のとおりです。 ユーザーが音楽を作れるようにする ユーザーが作成したものを再生する そのためには、その楽器の異なる音を録音し、各記号を適切な音と一致させる必要があります。 どのプログラミング言語がこの目的に適していますか?

7
不変の参照またはラベルのみを持つ言語の名前変数の良い代替手段は何ですか?
たとえば、関数型言語では、変数は単一の割り当てであり、値は割り当てられると不変です。そのため、バインドされていない状態とバインドされた状態の2つがあり、一度バインドされると変更できません。 そのようなものに最も適した数学用語や他のコンピューター科学用語はありますか?意味的に分散や可変性を意味しないもの。 termなど存在しない場合、およびそのような構造を持つ言語を設計している場合、これらに使用するのは単語変数以外です。 私はアイデアを投票するつもりはありません。そのようなことに対して受け入れられている業界(業界)の用語があるかどうかを把握しようとしています。

11
プログラミングの特定の部分を理解できないと思われる場合はどうしますか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 8年前に閉鎖されました。 進行中に新しい言語を学び、非常に基本的なプログラムのコードを複数の言語で記述し、クラスに行きます。私は本、記事、レッスン、ビデオを読んだことがありますが、あなたはそれを名付けましたが、特定のもののこつをつかむことができないようです。 例えば、私はポインターを理解していませんでした-それらが得意なもの。(質問の一部ではありません-「ポインタ」でタグを付け直す必要はありません...) しかし、私の質問は、ポインターが何をするかではなく、代わりにそのようなことをどのように理解できますか?プログラミングの特定の部分に関する本または記事を読んだ後、理解できない場合、どうすればよいですか?プログラミングの特定の機能でコードを書くことは確かに役立ちますが、実際にはそれほど理解するのには役立ちません。理論的な部分は理解する上で重要です。

2
言語開発フレームワークの使用はどれくらい簡単ですか?
これは、フレームワークの形式で言語設計で使用される概念を抽象化することを目的とする抽象化プロジェクトと呼ばれるプロジェクトに焦点を当てた一連の質問の一部です。 構造タイピングに関連する別のページは、ここで表示できます。フレームワークに関する質問と投稿する適切な場所に関連するメタトピックは、ここにあります。 言語開発フレームワークを使用するのはどれくらい簡単ですか? 大規模なコード生成フレームワークを作成しました。このフレームワークには、言語固有のコンパイラーに結果を送信する機能も含まれています。使いやすさのトピックは、そのようなフレームワークの例の1つです。CodeDOM、またはCode Document Object Modelです。 マイクロソフトによって書かれたフレームワークであり、一般的なコード構造を記述しますが、一般に多くのことを省き(式強制)、特定の構成体の表現では少し抽象的である傾向がありました。 CodeDOM は、使用されるタイプが汎用インターフェイスである場合、PrivateImplementationTypeonの発行を適切に処理しませんCodeMemberMethodでした。CodeDOMは、最初のコードジェネレーターを作成した最初の理由でした。 フレームワークを簡素化するために私がやろうとしていることの1つは、何かをするために必要な作業量を減らし、アクションとそれらのアクションを構成する特定のタイプに焦点を当てることです。 ここに、私が書いているフレームワークがどのように機能するかを並べて比較します。 //Truncated... /* * * From a project that generates a lexer, this is the * state->state transition character range selection logic. * */ var nextChar = nextMethod.Parameters.Add(new TypedName("currentChar", typeof(char).GetTypeReference())); //... char start = rangeElement.B.Value.Start; char end = rangeElement.B.Value.End; …

6
ほとんどの言語でバインディングがネイティブ機能ではないのはなぜですか?
変数を別の変数または式にバインドするIMHOは、数学の非常に一般的なシナリオです。実際、最初は、多くの学生が割り当て演算子(=)が何らかの拘束力を持つと考えています。しかし、ほとんどの言語では、バインディングはネイティブ機能としてサポートされていません。C#などの一部の言語では、いくつかの条件が満たされている場合にバインドがサポートされる場合があります。 しかし、これをネイティブ機能として実装するIMHOは、次のコードを変更するのと同じくらい簡単でした。 int a,b,sum; sum := a + b; a = 10; b = 20; a++; これに int a,b,sum; a = 10; sum = a + b; b = 20; sum = a + b; a++; sum = a + b; 右側の式に含まれる変数の値を変更するすべての命令の後に、割り当て命令としてバインディング命令を配置することを意味します。この後、冗長な命令のトリミング(またはコンパイル後のアセンブリの最適化)が行われます。 そのため、ほとんどの言語でネイティブにサポートされていない理由。特にCファミリーの言語ですか? 更新: さまざまな意見から、この提案された「バインディング」をより正確に定義すべきだと思います。 これは一方向のバインディングです。合計のみがa + bにバインドされ、その逆はありません。 バインディングのスコープはローカルです。 バインドが確立されると、変更できません。つまり、合計がa …

5
ファーストクラス機能
今週末、私は真剣にLispに目を向け始めました(つまり、Lispを学習しているだけで、C#のプロジェクトに戻らないことを意味します)。私は他の関数型言語(F#、Haskell、Erlang)に手を出したことがありますが、Lispから得られた魅力を感じていません。 Lispを学び続けると、なぜ非関数型言語が一流の関数をサポートしないのか疑問に思い始めました。C#などの言語はデリゲートで同様のことができ、C / C ++の関数へのポインタを使用できる範囲でできることを知っていますが、これがこれらの言語の機能にならない理由はありますか?関数をファーストクラスにすることに欠点はありますか?私にとっては、非常に便利なので、なぜ機能パラダイム以外の言語でそれを実装しないのかが分からなくなっています。 [編集]これまでの回答に感謝します。現在、多くの言語がファーストクラスの機能をサポートしていることが示されているので、言語を実装するのになぜ時間がかかるのかという質問を言い換えます。[/編集]

3
プライベート変数が公的にアクセス可能なヘッダーファイルに記述されているのはなぜですか?
わかりました。したがって、これはプログラマにとって主観的な十分な質問ですが、ここに行きます。私は言語とソフトウェアエンジニアリングの実践に関する知識を継続的に広げています...そして、私にはまったく意味をなさない何かに出くわしました。 C ++では、クラス宣言private:のヘッダーファイルにメソッドとパラメーターが含まれます。これは、理論的には、ユーザーに渡してlibにした場合に含めるものです。 Objective-Cでは、@interfacesはほぼ同じことを行い、プライベートメンバーのリストを強制します(少なくとも、実装ファイルにプライベートメソッドを取得する方法があります)。 私が伝えることができることから、JavaとC#では、すべてのパブリックにアクセス可能なプロパティ/メソッドを宣言できるインターフェイス/プロトコルを提供でき、コーダーが実装ファイル内のすべての実装の詳細を隠すことができます。 どうして?カプセル化はOOPの主要な原則の1つですが、なぜC ++とObj-Cにこの基本的な能力が欠けているのですか?Obj-CまたはC ++で、すべての実装を隠すベストプラクティスの回避策がありますか? おかげで、

5
Pythonスクリプトが同等のC ++プログラムと同じくらい高速になるのを妨げる技術的な制限や言語機能はありますか?
私は長年のPythonユーザーです。数年前、私はC ++の学習を始めて、速度の点でC ++が何を提供できるかを確認しました。この間も、プロトタイピングのツールとしてPythonを使い続けました。これは良いシステムのように思われました:Pythonによるアジャイル開発、C ++での高速実行。 最近、私はますますPythonを使用しており、この言語を使用して以前にすぐに使用した落とし穴とアンチパターンをすべて回避する方法を学びました。特定の機能(リスト内包表記、列挙など)を使用するとパフォーマンスが向上することは私の理解です。 しかし、Pythonスクリプトが同等のC ++プログラムと同じくらい高速になるのを妨げる技術的な制限や言語機能はありますか?

3
コンパイラの作成コンパイラ-使用方法と機能に関する洞察
これは、言語設計で使用される概念をフレームワークの形で抽象化することを目的とした抽象化プロジェクトへの姉妹プロジェクトに焦点を当てた一連の質問の一部です。姉妹プロジェクトはOILexerと呼ばれ、一致時にコードインジェクションを使用せずに、文法ファイルからパーサーを構築することを目的としています。 構造タイピングに関連するこれらの質問に関連する他のいくつかのページは、ここに表示され、使いやすさはここにあります。フレームワークに関する問い合わせに関連するメタトピックと投稿する適切な場所は、こちらにあります。 特定の文法から解析ツリーの抽出を開始するところまで来ています。その後、DFAを使用して順方向パスを識別する再帰的降下パーサーが続きます(ANTLR 4のLL(*)と同様)。私はそれを開いて洞察を得るだろうと考えました。 パーサーコンパイラでは、どのような機能が理想的ですか? これまでのところ、実装されているものの簡単な概要です: テンプレート 特定の時点で何が有効であるかを把握しながら、予測を先読みします。 ルール内のリテラルを取得し、それらがどのトークンからのものであるかを解決するルール「非文字化」。 非決定的オートマトン 確定的オートマトン トークン認識のためのシンプルな字句状態マシン トークンの自動化方法: スキャン-コメントに役立ちます:Comment:= "/ *" Scan( "* /"); 減算-識別子に便利です:識別子:= Subtract(IdentifierBody、Keywords); 識別子がキーワードを受け入れないようにします。 エンコード-ベースN遷移のシリーズXカウントとしてオートメーションをエンコードします。 UnicodeEscape:= "\\ u" BaseEncode(IdentifierCharNoEscape、16、4); 16進数の4遷移を使用して、Unicodeを16進数でエスケープします。これとの違い:[0-9A-Fa-f] {4}は、Encodeを使用した結果の自動化で、許可される16進値のセットをIdentifierCharNoEscapeのスコープに制限します。したがって、\ u005cを指定すると、エンコードバージョンは値を受け入れません。このようなことには重大な注意事項があります。控えめに使用してください。結果として生じる自動化は非常に複雑になる可能性があります。 実装されていないのはCST生成です。これを機能させるには、適切なコンテキストを引き継ぐように決定論的自動化を調整する必要があります。 興味のある方のために、T *y♯プロジェクトの元のフォームをかなり印刷したものをアップロードしました。各ファイルは他のすべてのファイルにリンクする必要があります。それらに従うために個別のルールでリンクを開始しましたが、時間がかかりすぎました(自動化の方が簡単だったでしょう)。 さらにコンテキストが必要な場合は、それに応じて投稿してください。 編集5-14-2013:特定の言語でステートマシンのGraphVizグラフを作成するコードを書きました。 これがAssemblyPartのGraphVizダイグラフです。言語の説明でリンクされているメンバーは、そのルールのダイグラフを含む相対フォルダーにrulename.txtを持っている必要があります。例を投稿してから一部の言語の説明が変更されました。これは、文法に関することを簡略化するためです。これが興味深いgraphviz画像です。

5
なぜfortran標準ライブラリがないのですか?
数学と科学計算に焦点を当てた言語であるために、私は常にFortran標準ライブラリに有用な数学ルーチンがまったくないことに困惑しています。少なくとも標準偏差と平均を計算するルーチンが付いて出荷されることを期待しますが、これは当てはまりません。特にFortran 90の導入とモジュールの追加(したがってネームスペース汚染の低減)により、このサービスの重大な欠如の理由はわかりません。 これが事実である理由についてのあなたの知識を聞きたいのですが。

4
関数内での内部スコープブロックの使用は悪いスタイルですか?
以下のリスクがあるいくつかの(かなりまれな)ケースがあります。 再利用を目的としていない変数の再利用(例1を参照)、 または、別の変数の代わりに変数を使用して、意味的に近い(例2を参照)。 例1: var data = this.InitializeData(); if (this.IsConsistent(data, this.state)) { this.ETL.Process(data); // Alters original data in a way it couldn't be used any longer. } // ... foreach (var flow in data.Flows) { // This shouldn't happen: given that ETL possibly altered the contents of `data`, it is …

4
遅延初期化をJavaに組み込むことができなかった理由はありますか?
私はユーザーの非永続状態がまったくないサーバーで作業しているため、ユーザー関連のすべてのオブジェクトは、すべてのリクエストでロールアウトされます。 その結果、未使用になる可能性のあるオブジェクトのプロパティを遅延初期化していることがよくあります。 protected EventDispatcher dispatcher = new EventDispatcher(); なる... protected EventDispatcher<EventMessage> dispatcher; public EventDispatcher<EventMessage> getEventDispatcher() { if (dispatcher == null) { dispatcher = new EventDispatcher<EventMessage>(); } return dispatcher; } これをJavaに組み込むことができなかった理由はありますか? protected lazy EventDispatcher dispatcher = new EventDispatcher(); 以下のコメントで述べたように、言語は理論的に進化して、必要なほとんどすべてのものを含めることができることを理解しています。可能性の実用的な測定方法を探しています。これは他の機能と競合しますか?実装は、JVMが存在する場合でもうまく機能するように単純ですか?そして、それは良い考えですか?

4
「yield」などのジェネレーター言語機能を使用するのは良い考えですか?
PHP、C#、Python、およびおそらく他のいくつかの言語には、yieldジェネレーター関数の作成に使用されるキーワードがあります。 PHPの場合:http : //php.net/manual/en/language.generators.syntax.php Pythonの場合:https : //www.pythoncentral.io/python-generators-and-yield-keyword/ C#の場合:https : //docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/yield 言語の機能/機能として、yieldいくつかの規則に違反していることを心配しています。それらの1つは、「確実性」と呼んでいるものです。呼び出すたびに異なる結果を返すメソッドです。通常の非ジェネレーター関数を使用してそれを呼び出すことができ、同じ入力が与えられた場合、同じ出力を返します。yieldでは、内部状態に基づいて異なる出力を返します。したがって、以前の状態を知らないで生成関数をランダムに呼び出すと、特定の結果を返すことは期待できません。 このような関数はどのように言語パラダイムに適合しますか?それは実際に慣習に違反していますか?この機能を使用することは良い考えですか?(良い点と悪い点の例を示すために、gotoかつては多くの言語の機能でしたが、現在もそうですが、それは有害であると見なされ、Javaなどの一部の言語からは根絶されました)。プログラミング言語のコンパイラ/インタープリターは、そのような機能を実装するために何らかの規則を破る必要がありますか?たとえば、言語はこの機能を動作させるためにマルチスレッドを実装する必要がありますか、それともスレッド化テクノロジなしで実行できますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.