403

最近、スタック オーバーフローで Perl 嫌いの集団が発生しているので、「好きな言語について嫌いな 5 つのこと」という質問をスタック オーバーフローに持ち込もうと思いました。好きな言語について、嫌いなところを 5 つ教えてください。それらは、あなたを悩ませているもの、認められた設計上の欠陥、認識されたパフォーマンスの問題、またはその他のカテゴリである可能性があります. あなたはそれを嫌う必要があり、それはあなたの好きな言語でなければなりません.

他の言語と比較したり、すでに嫌いな言語について話したりしないでください。好きなことを好きな言葉で話さないでください。私はあなたが嫌い​​だけど許容できるものを聞きたいだけで、他のすべてのものを使うことができます.

誰かが自分の好きな言葉を私に押し付けようとするたびに、そして時にはインタビューの質問として、私はこれを尋ねます. 誰かがお気に入りのツールについて 5 つの不満点を見つけられない場合、その人はそのツールを支持したり、それを使用して大金を稼いだりできるほど十分にそのツールを理解していません。彼はそれを十分に探求するのに十分な異なる状況でそれを使用していません. 彼はそれを文化または宗教として提唱している.

あなたがどの言語を使っているかはあまり気にしません。特定の言語を使いたくないですか?それからしないでください。十分な情報に基づいた選択を行うためにデューデリジェンスを行いますが、それでも使用しませんか? 罰金。場合によっては、「優れたプラクティスと Bar での豊富な経験を備えた強力なプログラミング チームがいる。Foo に変更するのはばかげている」というのが正しい答えです。


これは、コード レビューにも適した質問です。コードベースをよく知っている人は、コードベースについてあらゆる種類の提案をしますが、よく知らない人は具体的でない不満を持っています。「このプロジェクトを最初からやり直せるとしたら、何を変えますか?」などと尋ねます。このファンタジーの世界では、ユーザーとプログラマーは、気に入らないことすべてについて文句を言うことができます。「より良いインターフェースが欲しい」、「モデルをビューから分離したい」、「このモジュールの代わりにこのモジュールを使用したい」、「このメソッドのセットの名前を変更したい」、またはそれらが実際に必要としないものは何でも今の状況は好きじゃない。これが、特定の開発者がコードベースについてどれだけ知っているかを把握する方法です。それはまた、プログラマーの

人々がどれだけ知っているかを理解するのは憎しみだけではありませんが、私はそれがかなり良いものであることを発見しました. 彼らが嫌いなことは、彼らがその主題についてどれだけよく考えているかの手がかりにもなります.

4

182 に答える 182

215

うわー、 SQLがまだここでそれを成し遂げていないことに私は驚いています。それは誰もそれを愛していないことを意味すると思います:)

  • 実装間で構文に一貫性がない
  • 微妙なコードの違いは、一見あいまいな理由でパフォーマンスに大きな影響を与える可能性があります
  • テキスト操作のサポートが不十分
  • 入学費用は簡単ですが、言語を習得するための学習曲線は急です
  • ベストプラクティスのためのコミュニティ全体での最小限の標準化。これには構文スタイルが含まれます。

...そしてそれを嫌ういくつかのボーナス理由、追加料金なしで

  • WHERE句は最後になり、UPDATEまたはDELETEを時期尚早に実行して、テーブル全体を破壊しやすくします。代わりに、WHEREは前もってどこかに行く必要があります。
  • 関係除算を実装することは困難です。
  • 値をNULLに設定することはできますが、NULLとの同等性をテストすることはできません。IS NULLをチェックすることはできますが、それはコードを複雑にするだけです。私の意見では、不必要にそうです。
  • 列にエイリアスを設定してから、エイリアス(またはSORTの場合は列インデックス)でGROUP BYを設定するのではなく、GROUPED列の数式を完全に再指定する必要があるのはなぜですか?
于 2008-11-13T13:38:32.870 に答える
182

私が Java について嫌いな 5 つのこと:

  • ファーストクラスの関数はありません。
  • 型推論なし。
  • グラフィックスなどの正常なデフォルトの欠如。
  • NullPointerException には、null とは何かに関する詳細情報が含まれていません。
  • 無意味に「構成可能な」フレームワーク/サービス プロバイダー インターフェイス/ファクトリ クラス/依存性注入システムの急増。構成可能性はほとんど使用されず、DRY はひどく違反され、コードのサイズは 4 倍になり、読みやすさは半分になります。

Scalaをチェックする必要があることはわかっています。

于 2008-11-24T16:04:07.173 に答える
159

JavaScript :

  1. 最もクールなものはすべて非常に複雑ですが、すべてのクールさも非常に少量のコードにまとめられているため、それに従うのに苦労するのはばかげていると感じます。

  2. '+' は、型付けが弱い言語での連結のための演算子の不条理な選択です。彼らは初心者を怖がらせようとしていたのですか?

  3. これは、クロスブラウザー互換性の地雷原です (オンになっているかどうかは気にしないでください)。

  4. 一般的には信頼されていません - 戻るボタンをブロックしたり、死ぬことのないポップアップなどの卑劣な行為に関連しています.

  5. いくつかの異なるエラー メッセージといくつかの異なるタイプ (Number、String、Object など) しかないため、デバッグすることはほぼ不可能です。

jQuery がなかったら、今でも以前と同じくらい嫌いだったでしょう :)

于 2008-11-12T00:26:19.933 に答える
148

PHP:

1)不要な変数を作成するように強制します:

$parts = explode('|', $string);
$first = $parts[0];

2)ラムダの実装は、使用するのとほぼ同等でeval()あり、ひどく間違っているため、使用したことがありません(http://www.php.net/create_functionを参照)。

3) 発生する可能性のあるエラーの約 80% しか捕捉できない try/catch システム。

4) 正規表現のサポートは、通常の文字列内に記述する必要があるため、ラムダのサポートと同じくらい不十分であり、最も習得が難しいプログラミング ツールの 1 つを約 3 倍難しくしています。そして、PHP は「簡単な」言語であるはずなのですか?!?!?

5) $_POST を 2 回書き込んだり、独自の関数を作成したり、「@」演算子を使用したりしない限り、安全に $_POST からデータを取り出す方法はありません。

$x = isset($_POST['foo']['bar']) ? $_POST['foo']['bar'] : null;

6) おまけの答え: '@'. コードを正しく書くことに煩わされない場合は、「@」を追加してください。後でコードをデバッグする必要がある人にとっては残念です。

于 2008-11-11T23:59:12.047 に答える
135

C++

  • あまりにも簡単にメモリをランダムに破壊し、見つけるのがほとんど不可能なバグを作成します (ただし、Valgrindはこれを修正するのに大いに役立ちます)。
  • テンプレート エラー メッセージ。
  • テンプレートを使用すると、すべてを 1 つのファイルに含める必要が生じやすく、コンパイルに時間がかかります。
  • 標準ライブラリは現代のジョークです (まだデフォルトでスレッドやネットワークはありませんか?)
  • C の厄介な小さなビットがたくさん突き刺さっています (特に、short/int/unsigned/etc の間のすべての変換..)
于 2008-11-11T22:41:21.377 に答える
129

C#/.NET:

  • クラスはデフォルトで封印されるべきです
  • ステートメントはありません。代わりに、特定のロック オブジェクトが必要であり、使い捨てのロック トークンを返すlockなどのメソッドが必要です。Acquire当然のことながら、すべてのオブジェクトにモニターを配置する必要はありません。
  • GetHashCode()Equals()入れるべきではありません-System.Objectすべてがハッシュに適しているわけではありません。代わりに、IdentityComparer同じことを行うを用意し、カスタム比較のためにIComparer<T>IComparable<T>IEqualityComparer<T>およびインターフェイスを保持します。IEquatable<T>
  • 不変性のサポートが不十分
  • 拡張メソッドを発見する貧弱な方法 - 名前空間を使用しているという事実よりも、はるかに意識的な決定が必要です。

それらは私の頭の上から外れていました-明日私に尋ねてください、私は別の5つを思いつきます:)

于 2008-11-11T22:21:00.967 に答える
113

  • 文字列操作。

文字列バッファーを手動で処理する必要があると、エラーが発生しやすくなります。非常に多くのコンピューティングが実際に文字列を移動および変更しているため (コンピューターは、昔の人々が思っていたほど大きな数を処理するために使用されていません)、マネージ言語または C++ の文字列を使用できるのは本当に素晴らしいことです。これらを扱うオブジェクト。ストレートCでやらないといけないときは、流砂を泳いでいるような感覚です。

于 2008-11-11T22:27:42.187 に答える
94

「ある言語について嫌いなこと」リストについて私が嫌う5つのことはどうですか?:D

5-オレンジ色の赤を塗ってもリンゴにはなりません。

言語を設計するとき、設計者は通常、その言語が何に役立つかを念頭に置いています。まったく別の目的で使用することもできますが、そうでない場合に文句を言うのはばかげています。Pythonを取ります。誰かが持っているか、誰かがいつかPythonコードからexeを作成するユーティリティを作成するだろうと確信しています。なぜ神の地上でそれをしたいのですか?それはきちんとしているでしょう—誤解しないでください—しかしそれは役に立たないです。だからそれについて文句を言うのはやめなさい!

適切に設計されたプロジェクトには、複数の言語のコードが含まれている可能性があります。だからといって、1つの言語だけでプロジェクトを完了することができないわけではありません。一部のプロジェクトは、使用している言語の能力の範囲内にある場合があります。

4-あなたは木の足で立っていますか?

プラットフォームは、言語が実行できることに大きな影響を与える可能性があります。最近のガベージコレクター、またはパスカルでさえ「ガベージコレクション」の初期の試みで、記憶の衰退を助けることができます(多分malloc more ram ??)。コンピューターはより高速であるため、もちろん、私たちは言語にもっと多くのことを期待しています。そして率直に言って、私たちはおそらくそうすべきです。ただし、ハッシュテーブルや文字列、またはその他のさまざまな概念を作成するためのコンパイラの利便性には、莫大な代償が伴います。これらのものは、それらが使用されているプラ​​ットフォームに継承されない場合があります。それらを言語に含めるのは簡単だと言うことは、あなたが立つ足がないかもしれないと私に言うだけです。

3-それは本当に誰のせいですか?

バグ。ほら。私はバグが大好きです。なぜ私はバグが好きなのですか。それは私が仕事を続けることができることを意味するからです。バグがなければ、閉店したピザ屋がたくさんあります。ただし、ユーザーはバグを嫌います。しかし、ここに冷たい水の少しのしぶきがあります。すべてのバグプログラマーのせいです。言語ではありません。生成される可能性のあるバグの数を大幅に減らすような厳密な構文を持つ言語は、完全に役に立たない言語になります。その能力はおそらく一方では数えることができます。柔軟性やパワーが必要ですか?バグがあります。なんで?あなたは完璧ではなく、間違いを犯すからです。Cで本当に識別可能な例を見てください:

int a[10];
for (int idx = 0; idx < 15; idx++) a[idx] = 10;

私たちは皆、それが何をするのかを知っています。しかし、おそらく私たちの一部が気付いていないのは、その機能が非常に有益である可能性があるということです。あなたがしていることに応じて。バッファオーバーランは、その機能のコストです。上記のコード。私が実際にそれを一般に公開した場合。それはまた..私とそれを言う..「私のせい」。私にそれをさせてくれたCではありません。

2-それをごみ箱に入れてはいけませんか?

私たちが頻繁に使用せず、それを愚かと呼ぶので、私たちが理解できない言語の機能を指摘するのは非常に簡単です。そこにあると文句を言うなど。後藤はいつも私を楽しませてくれます。人々はいつも後藤が言語であることに不平を言います。それでも、あなたの最後のプログラムには一種のgotoが含まれていたに違いありません。休憩や継続を使用したことがある場合は、gotoを使用したことがあります。それはそれです。確かに、それは「安全な」後藤ですが、それはそれが何であるかです。後藤には用途があります。continueやbreakなどの「暗黙の」gotoを使用するか、明示的なgotoを使用するか(どの言語でも実際のキーワード「goto」を使用)。言語開発者が完璧であるというわけではありませんが、通常は...(その言語の)時間の夜明けから機能が存在していた場合。おそらく、その側面はその言語の明確な品質です。意味..それ」sが使用されており、下位互換性のためにぶらぶらしていない可能性があります。今日使われています。5分前のように。そして、適切に使用されます。まあ..間違いなく誰かがそれを不適切に使用していますが、それは私のリストの#3に関連しています。

1.-すべてがオブジェクトです。

わかりました。これは実際には#2のサブセットです。しかし、これは私が憎しみのリストで目にする最も厄介な苦情です。すべてがオブジェクトであるわけではありません。オブジェクトに属さない、またはオブジェクトである必要のない概念は非常に多くあります。それらが属していない場所に物を置くことは単に醜く、プログラムの効率を低下させる可能性があります。もちろん。言語によってはあまりないかもしれません。これは#5にも関係します。これは...はい。グローバルは大丈夫です。静的メソッドに対抗する機能は問題ありません。オブジェクト指向プログラミングとグローバル関数を組み合わせても問題ありません。さて、それは私たち全員が外に出て、オブジェクトモデルからコードを「解放」する必要があるという意味ではありません。コードのセクションまたはプロジェクト全体を設計する場合、舞台裏で何が行われるべきかそれをまとめるときに考慮されます。その概念がどこにあるかだけでなく、他の多くの要因。目的がないのに、なぜグローバル関数をクラスまたは名前空間の概念内にラップするのですか?静的メンバー変数を取ります。もちろん、言語と実装にもよりますが、一般的に言って、あなたはグローバルを宣言しただけなので、それは私を大いに楽しませてくれます。はい、これらの非OOの概念をOOラッパーでラップする理由はいくつかあります。もちろん、自己文書化コードの1つです。それは理にかなっています。だから..私が言うように。外に出てコードを「解放」しないでください。しかし、優れた現代語には、オブジェクト指向モデリング以外のグローバルな概念があります。はい、私は特に、グローバルな概念のないオブジェクト指向プログラミング言語には重大な設計上の欠陥がある可能性が高いことを指摘することを意味しています。繰り返しますが.. 言語の意図とデザインに依存するので、私は特定の言語を選択しようとはしていません。ここで分析するには多すぎます。誰でも、コードがどこに存在し、最も効果的であるかを検討してください。機能やサポートを追加しないものに大量のフレアを追加すると、キーボードの消耗が早くなります。それは誰にも何の役にも立たない。ええと..あなたがおそらくすべてがオブジェクトであるとあなたに間違って教えた人からのブラウニーポイントが好きでない限り。

要するに、プログラミングは単にキーボードをうっかりタップするだけではありません。どのプロジェクトにも多くの設計上の考慮事項があります。決まり文句だとは思いますが、あらゆる角度から見る必要があります。今日でもタイプセーフな言語です。コードを取り出して、うまく機能することを期待するだけではありません。確かに..それはうまくいくかもしれませんが、それはそれについて行く正しい方法ではないかもしれません。全体として、特定の仕事と環境に最も適した言語と形式を選択してください。しかし、その背後にある考えを取り除く言語はありません。あなたが考えていないなら..あなたはただタイプしているだけです。

于 2009-06-17T05:20:46.963 に答える
88

Java (現在、私のお気に入りの言語)について私が嫌いな 5 つのこと(順不同)。

  1. 私は Java Generics のファンですが、Java Generics の設計方法から生じる多くの奇妙さがあります。そのため、ジェネリックには無数の迷惑な制限があります (そのうちのいくつかは型消去の結果です)。
  2. Object.clone() と Cloneable インターフェースが機能する方法は完全に壊れています。
  3. Sun は、すべてをオブジェクト (別名 SmallTalk) にする代わりに、オブジェクトとプリミティブという 2 つの異なるデータ型のカテゴリを作成しました。その結果、基本的なデータ型と、ボックス化/ボックス化解除、プリミティブをコレクションに入れることができないなどの奇妙な好奇心に対して、2 つの表現が存在するようになりました。
  4. スイングが複雑すぎる。誤解しないでほしいのですが、Swing でできることはたくさんありますが、これはオーバーエンジニアリングの良い例です。
  5. この最後の不満は、Sun と、Java 用の XML ライブラリを作成した人々の責任でもあります。Java XML ライブラリは複雑すぎます。XML ファイルを単純に読み取るために、DOM と SAX のどちらのパーサーを使用しているかについてよく心配する必要があります。それぞれの API も同様に混乱を招きます。XML を簡単に解析/作成するための言語のネイティブ サポートは非​​常に優れています。
  6. java.util.Date は最悪です。不必要に複雑であるだけでなく、すべての便利なメソッドが廃止されました (そして、複雑さを増す他のメソッドに置き換えられました)。
于 2008-11-11T22:38:59.400 に答える
73

Rubyには速度に関連する多くの欠陥がありますが、私はそれらが嫌いではありません。また、コミュニティの伝道が行き過ぎているという欠点もありますが、それはあまり気になりません。これらは私が嫌いなものです:

  • クロージャー (ブロック) には 4 つの異なる作成構文があり、どれも最適ではありません。洗練された構文は不完全であり、ハッシュがあいまいであり、完全な構文は醜いです。
  • コミュニティは実際のドキュメントに反対する傾向があり、「コードを読む」ことを支持します。私はこれが幼稚で怠惰だと思います。
  • 特にライブラリでのメタプログラミングの悪用により、バグを追跡するのは悪夢になります。
  • これに関連して、メタプログラミングが普及すると、包括的な IDE を作成することが、不可能ではないにしても困難になります。
  • 関数へのブロックの受け渡しが行われる方法はばかげています。ブロックがパラメーター リストの外に渡されたり、アクセスするための特殊な構文が奇妙になったりする理由はありません (yield)。私は、ブロックには曖昧さの少ない構文を指定する必要があり (または、ハッシュには別の区切り文字を使用できたはずです。おそらく {} ではなく <>)、メソッドへのパラメーターとしての受け渡しは、他のすべてのパラメーターと同じようにすべきだったという意見です。

    object.method(1, {|a| a.bar}, "blah")
    

    ブロックは最後に渡されるパラメーターでなければならず、複数のブロックを渡すことは構文が長くなると異なるなど、これらの奇妙な点は本当に私を悩ませます。

于 2008-11-11T23:29:13.840 に答える
72

パール

  • シジルの混合使用

    my @array = ( 1, 2, 3 );
    my $array = [ 4, 5, 6 ];
    
    my $one  = $array[0]; # not @array[0], you would get the length instead
    my $four = $array->[0]; # definitely not $array[0]
    
    my( $two,  $three ) = @array[1,2];
    my( $five, $six   ) = @$array[1,2]; # coerce to array first
    
    my $length_a = @array;
    my $length_s = @$array;
    
    my $ref_a = \@array;
    my $ref_s = $array;
    
    • たとえば、これらはどれも同じではありません。

      $array[0]   # First element of @array
      @array[0]   # Slice of only the First element of @array
      %array[0]   # Syntax error
      $array->[0] # First element of an array referenced by $array
      @array->[0] # Deprecated first element of @array
      %array->[0] # Invalid reference
      $array{0}   # Element of %array referenced by string '0'
      @array{0}   # Slice of only one element of %array referenced by string '0'
      %array{0}   # Syntax error
      $array->{0} # Element of a hash referenced by $array
      @array->{0} # Invalid reference
      %array->{0} # Deprecated Element of %array referenced by string '0'
      

    そのPerl6中には次のように書かれています:

    my @array = ( 1, 2, 3 );
    my $array = [ 4, 5, 6 ];
    
    my $one  = @array[0];
    my $four = $array[0]; # $array.[0]
    
    my( $two,  $three ) = @array[1,2];
    my( $five, $six   ) = $array[1,2];
    
    my $length_a = @array.length;
    my $length_s = $array.length;
    
    my $ref_a = @array;
    my $ref_s = $array;
    
  • 真のオブジェクト指向の欠如

    package my_object;
    # fake constructor
    sub new{ bless {}, $_[0] }
    # fake properties/attributes
    sub var_a{
      my $self = shift @_;
      $self->{'var_a'} = $_[0] if @_;
      $self->{'var_a'}
    }
    

    そのPerl6中には次のように書かれています:

    class Dog is Mammal {
        has $.name = "fido";
        has $.tail is rw;
        has @.legs;
        has $!brain;
        method doit ($a, $b, $c) { ... }
        ...
    }
    
  • 設計が不十分な正規表現機能

    /(?=regexp)/;           # look ahead
    /(?<=fixed-regexp)/;    # look behind
    /(?!regexp)/;           # negative look ahead
    /(?<!fixed-regexp)/;    # negative look behind
    /(?>regexp)/;           # independent sub expression
    /(capture)/;            # simple capture
    /(?:don't capture)/;    # non-capturing group
    /(?<name>regexp)/;      # named capture
    /[A-Z]/;                # character class
    /[^A-Z]/;               # inverted character class
    # '-' would have to be the first or last element in
    # the character class to include it in the match
    # without escaping it
    /(?(condition)yes-regexp)/;
    /(?(condition)yes-regexp|no-regexp)/;
    /\b\s*\b/;              # almost matches Perl6's <ws>
    /(?{ print "hi\n" })/;  # run perl code
    

    そのPerl6中には次のように書かれています:

    / <?before pattern>  /;   # lookahead
    / <?after pattern>   /;   # lookbehind
    / regexp :: pattern  /;   # backtracking control
    / ( capture )        /;   # simple capture
    / $<name>=[ regexp ] /;   # named capture
    / [ don't capture ]  /;   # non-capturing group
    / <[A..Z]>           /;   # character class
    / <-[A..Z]>          /;   # inverted character class
    # you don't generally use '.' in a character class anyway
    / <ws>               /;   # Smart whitespace match
    / { say 'hi' }       /;   # run perl code
    
  • 複数回の派遣の欠如

    sub f(   int $i ){ ... }  # err
    sub f( float $i ){ ... }  # err
    sub f($){ ... } # occasionally useful
    

    そのPerl6中には次のように書かれています:

    multi sub f( int $i ){ ... }
    multi sub f( num $i ){ ... }
    multi sub f( $i where $i == 0 ){ ... }
    multi sub f(     $i ){ ... } # everything else
    
  • 不十分なオペレーターのオーバーロード

    package my_object;
    use overload
      '+' => \&add,
      ...
    ;
    

    そのPerl6中には次のように書かれています:

    multi sub infix:<+> (Us $us, Them $them) |
                        (Them $them, Us $us) { ... }
    
于 2008-11-12T01:10:28.473 に答える
57

ときどき好きなようにPHPをやりますが、Python はやりすぎです。

  • 名前空間はありません。すべてが一種の非常に大きな名前空間にあり、より大きな環境では地獄です

  • 関数に関する標準の欠如: 配列関数は最初の引数として針を取り、2 番目の引数として haystack を取ります ( array_searchを参照)。文字列関数は、干し草の山を最初に取り、次に針を取ります ( strposを参照)。他の関数は異なる命名スキームを使用します: bin2hexstrtolowercal_to_jd

    一部の関数は、通常とは異なる戻り値を持っています。これにより、PHP が型のジャグリングを使用して空の配列を false として効率的に解釈できる一方で、どこからともなく 3 番目の変数を宣言する必要があります。同じことを行う他の機能はほとんどありません。

    $var = preg_match_all('/regexp/', $str, $ret);
    echo $var; //outputs the number of matches 
    print_r($ret); //outputs the matches as an array
    
  • この言語 (PHP6 まで) は、ほぼ遅れた下位互換性を尊重するために最善を尽くしており、必要のないときに悪い慣行や機能を持ち歩いています ( mysql_escape_stringと mysql_real_escape_string を参照してください)。

  • この言語は、テンプレート言語から完全なバックエンド言語に進化しました。これは、誰でも好きなときに何でも出力できることを意味し、それは悪用されます。テンプレート言語用のテンプレートエンジンになってしまいます...

  • ファイルのインポートが苦手です。それを行うには 4 つの異なる方法 (include、include_once、require、require_once) があり、それらはすべて遅く、非常に遅いです。実際、言語全体が遅いです。少なくとも、Python (フレームワークを使用した場合でも) と RoR よりもかなり遅いです。

それでも私はPHPが好きです。これは Web 開発のチェーンソーです。小規模から中規模のサイトを非常に高速に作成し、誰でもホストできるようにしたいですか (構成は異なる場合があります)。PHP はすぐそこにあり、LAMP または WAMP スタックを完全にインストールするのに 5 分しかかからないほどどこにでもあります。さて、私は今Pythonでの作業に戻ります...

于 2008-11-11T23:02:02.240 に答える
50

Java の嫌いな点をいくつか挙げます (Java は私の好きな言語ではありません)。

  • ジェネリック型消去 (具体化されたジェネリックなし)
  • 単一の catch ブロックで (異なる型の) 複数の例外をキャッチできない
  • デストラクタの欠如 (finalize() は非常に貧弱な代用品です)
  • クロージャーや関数をデータとして扱うことはサポートされていません (匿名の内部クラスは非常に冗長な代替手段です)
  • 一般的にチェックされた例外、またはより具体的には、回復不能な例外をチェックする (例: SQLException)
  • リテラル コレクションに対する言語レベルのサポートなし
  • ジェネリック クラスのコンストラクターが呼び出される場合、型推論は行われません。つまり、型パラメーターは「=」の両側で繰り返される必要があります。
于 2008-11-11T22:31:21.350 に答える
40

C++

  1. テンプレートの構文
  2. ダイヤモンドの継承に関する問題
  3. 現代の言語が持っている標準ライブラリの過多/欠如(ただし、ブーストは近づいています)。
  4. IOストリーム
  5. IOStreams で使用される構文

パイソン

  1. スペースには意味があります (場合によっては)
  2. 下線付きキーワード
  3. 限定的なスレッド サポート (少なくとも現在)
  4. 「これ」ではなく「自分」
  5. スペースには意味があります (場合によっては)
于 2008-11-11T22:26:42.467 に答える
37

Objective-C

1) 名前空間はなく、手動の命名規則のみ - クラスの分離に関しては気にしませんが、名前空間内のすべてのクラス定義を 1 行でインポートできるのが恋しいです (import com.me.somelibrary. *))。

2) ライブラリには、正規表現のサポートなどの重要な領域にまだいくつかの穴があります。

3) プロパティの構文は少しぎこちなく、プロパティを宣言するために (2 つの別々のファイルで) 3 行を必要とします。

4) 保持/解放モデルは気に入っていますが、参照を解放して後でそれを誤って使用するのは、本来よりも簡単です。

5)実際には言語機能ではありませんが、XcodeはObjective-Cの使用と非常に絡み合っているため、その側面について考えずにはいられません...基本的にオートコンプリートは非常に疑わしいです。それは、欲しいものが存在することを発見したことに対して報酬を与え、後でそれを選択肢として提示するシステムのようなものです. しかし、私はオートコンプリート エンジンが好きではなかったと思います。

于 2008-11-12T03:01:42.833 に答える
36

C ++

  • 文字列。
    これらはプラットフォーム文字列と相互運用できないため、半分の時間でstd::vectorを使用することになります。コピーポリシー(コピーオンライトまたはディープコピー)が定義されていないため、単純な構文に対してパフォーマンスを保証することはできません。時々、彼らは使用するのがあまり直感的ではないSTLアルゴリズムに依存しています。あまりにも多くのライブラリが独自にロールしているため、残念ながらはるかに快適に使用できます。あなたがそれらを組み合わせる必要がない限り。

  • さまざまな文字列表現
    さて、これはプラットフォームの問題の少しですが、それでも、それほど頑固でない標準の文字列クラスが以前に利用可能であったなら、もっと良かったと思います。私が頻繁に使用する次の文字列表現:

    • 一般的なLPCTSTR、
    • CoTaskMemAllocによって割り当てられたLPC(W)STR、
    • BSTR、_bstr _t
    • (w)文字列、
    • CString、
    • std :: vector
    • 既知の長さの(w)char *バッファに範囲チェックと基本操作を追加するroll-my-ownクラス(sigh )
  • モデルを構築します。
    who-includes-what、前方宣言、プリコンパイル済みヘッダーの最適化、少なくとも増分ビルド時間を耐えられるようにするためのインクルードなどをいじくり回して過ごしたすべての時間にうんざりしています。80年代は素晴らしかったですが、今はどうでしょうか。コードをまとめるには非常に多くのハードルがあり、再利用できるので、お母さんの犬でさえ私に耳を傾けるのに飽きてしまいます。

  • 解析が難しい
    これにより、外部ツールの記述が特に難しくなり、正しく機能するようになります。そして今日、私たちC++の人たちはほとんどツールチェーンに欠けています。私はC#リフレクションとデリゲートが大好きですが、それらがなくても生きることができます。素晴らしいリファクタリングがなければ、私はできません。

  • スレッド化は難しすぎる
    言語は(今では)それを認識すらしていません。コンパイラーの自由は、すばらしいものの、苦痛を伴うものです。

  • 静的およびオンデマンドの初期化 技術的には、ここでごまかします。これは、「再利用のためのコードのまとめ」のもう1つのパズルのピースです。必要なときにだけ初期化するのは悪夢です。他のすべての再試行の問題に対する最善の解決策は、すべてをヘッダーにスローすることです。この問題は、「ニーナー-あなたはできません」と言います。


確かに、その多くは厳密な言語範囲を超えていますが、IMOはツールチェーン全体を判断し、進化させる必要があります。

于 2008-11-15T10:35:47.840 に答える
35

JavaScript :

  • Objectプロトタイプは変更できます。プログラム内のすべてのオブジェクトが新しいプロパティを取得し、何かが壊れる可能性があります。

  • すべてのオブジェクトはハッシュ マップですが、ハッシュ マップとして安全に使用することは困難です。特に、キーの 1 つがたまたま である場合__proto__、問題が発生します。

  • 関数参照時にオブジェクトを閉じません。実際、オブジェクト クロージャはまったくありません。代わりに、this関数がオブジェクト表記またはnew演算子で呼び出されるたびに設定されます。特にイベント コールバックを作成する場合thisは、プログラマが期待するものに設定されていないため、多くの混乱が生じます。

    • 当然の結果: オブジェクト表記または演算子を使用せずに関数を呼び出すと、グローバル オブジェクトと等しく設定され、多くの破損が発生します。newthis
  • 2 つの演算が根本的に異なるにもかかわらず、文字列連結も実行するためにオーバーロードされた加算演算子。数値であると予想される値が実際には文字列である場合、問題が発生します。

  • ==!=演算子は型強制を実行します。異なるタイプ間の比較には、人間が完全に覚えることができない規則のリストが含まれます。これは===and!==演算子の存在によって軽減されます。

  • nullとの両方undefinedが存在し、微妙に異なるが冗長な意味を持っています。なんで?

  • プロトタイプ チェーンを設定するための奇妙な構文。

  • parseInt(s)は C スタイルの数値を想定しているため、先行ゼロの値を 8 進数などとして扱います。少なくとも可能parseInt(s, 10)ですが、デフォルトの動作は混乱を招きます。

  • ブロックスコープなし。

  • 同じ変数を複数回宣言できます。

  • 変数を宣言せずに使用できます。その場合、変数はグローバルであり、おそらくプログラムが壊れます。

  • with { }.

  • JavaDocのようなツールで文書化するのは非常に困難です。

于 2008-12-07T02:16:16.903 に答える
34

パイソン:

  • 静的型付けの欠如
  • デフォルトの引数の処理 (具体的には、将来の呼び出し元のためにデフォルトの引数を変更できるという事実!)
  • 必要なアンダースコアが多すぎます (コンストラクターを呼び出す必要があります__init__)
  • 適切なプライベート メンバーと関数の欠如 (慣例では、アンダースコアで始まるほとんどのものはプライベートであると言われていますが、__getattr__そうでないものはすべて例外です)
  • ファイルへの ing の変な構文print(ただし、Python 3 で修正中)
于 2008-11-11T22:31:35.983 に答える
32

C#

  • switch()どんな型でもできればいいのですが、それcaseはどんな式でもかまいません。

  • 「読み取り専用」フィールド/ private setautoprops でオブジェクト初期化構文を使用できません。一般に、不変型を作成する際に言語のヘルプが必要です。

  • 名前空間クラス{}メソッドプロパティ/インデクサー ブロックマルチステートメント ブロック、および配列初期化子の使用。距離が離れていたり、位置が一致していないと、自分がどこにいるかを把握するのが難しくなります。

  • 私は書くのが嫌い(from x in y ... select).Z()です。クエリ構文に何かが欠けているため、メソッド呼び出し構文にフォールバックする必要はありません。

  • doのようなクエリ構文に関する句が必要ですforeach。しかし、それは実際にはクエリではありません。

本当にここまできています。C# は素晴らしいと思いますが、壊れているところを見つけるのは難しいです。

于 2008-12-22T05:36:30.717 に答える
26

PHP

  1. サーバーを制御しない場合、デバッグ機能はありません。
  2. 悪質な PHP コードが大量に出回っているため、すべての PHP プログラマーに悪評がつきます
  3. 一貫性のない関数名
  4. 必要な場合に静的型付き変数を持つことができない (私は 90% の確率で動的型付けの大ファンです)
  5. REGISTER_GLOBALS は悪魔です
于 2008-11-13T14:37:57.510 に答える
25

C (OK、それは私のお気に入りではありませんが、まだ完了していませんでした。)

  • ソケット ライブラリの構文。
  • 関数のオーバーロードはありません。
  • C スタイルの文字列。
  • バッファ オーバーラン。
  • 不可解な構文。何度、アトイとか調べて、額を叩いて「もちろん!」

編集: より多くのライブラリ コードに頼れば、おそらくもっと思いつくことができます (ソケットで行ったように、しかしそれらは特に悪いです)。 C の良い部分と、死んだ馬を打ち負かすような悪い部分を置き換えます。

于 2008-11-11T22:38:47.593 に答える
24

ブレインファック

  • あなたのハイライトは、チューリングが完了したことです?! Perl の正規表現でもっと多くのことができます!

  • オブジェクトの欠如。さあ、みんな!こんにちは... _

  • ネットワーク ライブラリはありません。私が欲しいのは、Webページをスクレイピングすることだけです.GOSH.

  • ファーストクラスの関数はありません。おめでとうございます — あなたは Java の友人たちと親しくなることができました。

  • ストレージ用の無限テープであり、他には何もありません。これは非常に大げさなので、Lisp を書いたほうがよいかもしれません。

于 2010-05-26T06:33:28.197 に答える
24

一般的な Lisp:

  1. 多くの場合、キーワードは長すぎます。
  2. ライブラリのサポートは残念です。
  3. メモリをより厳密に処理したい OS ではうまく機能しません。
  4. OS とやり取りするための優れた機能がありません。
  5. 「ループ」機能は明確に定義されておらず、確かに Lispy には見えません。
于 2008-11-11T22:50:52.140 に答える
23

JavaScript

  1. 文字列としての数値 - 数値が文字列として解釈されると、数学がイライラすることがあります。5 + 2 = 52? うーん...
  2. 権限 - すべての最高のものには、ユーザーからの許可が必要です!
  3. 画面の更新 - 画面を更新するには、ブラウザが安定した状態である必要があります。スクリプトの途中で画面を強制的に更新する方法はないようです。
  4. 遅い - Google の Chrome は便利ですが...
  5. ブラウザーの違いにより、言語の使用が [検閲済み] になります。
于 2008-11-11T23:44:18.833 に答える
20

PHP:

  • ほとんど一般的な特定の拡張機能がすべての Web サーバーで利用できるとは限りません。
  • 将来のすべてになろうとします(goto、クロージャーなど)
  • 経験の浅いユーザーの多くのセキュリティ リスク
  • より多くの演算子のオーバーロードがいいでしょう
  • それを適切に動作させる方法を学ばず、悪い名前を付けているすべての貧しいプログラマー

それにもかかわらず、PHP は(スクリプト) 言語です。;-)

于 2008-11-11T22:32:36.683 に答える
18

VB6

  1. Windows のみ。
  2. サポートされなくなりました。
  3. 配列は、すべてが 0 に正規化されるのではなく、任意の数から開始できます。
  4. コンパイルされたアプリケーションは、適切に実行するために多くの dll に依存しています。
  5. ブラウザー コントロールや複雑なコードのような多くの複雑なコントロールは、コンパイルされていないコードを実行すると IDE を壊す傾向がありますが、コンパイルすると問題なく動作します。
于 2008-11-12T03:54:41.697 に答える
18

Ruby は私のお気に入りの言語ですが、嫌いな言語は次のとおりです。

  • グリーン スレッド + ブロッキング C ライブラリ = 大失敗
  • SO PAINFULLY SLOW
  • 標準ライブラリ自体は、bang! の使用と矛盾しています。メソッド
  • モジュールのインクルード + 拡張は面倒です。
  • 「Open Classes」はスコープ指定できません - String#dostuff を追加したいのですが、それがすべてのサードパーティ ライブラリに漏れないようにしたいです。
  • バイナリ展開パッケージ ソリューションはありません。
于 2008-11-13T00:09:46.020 に答える
17

デルファイ:

  • IDE は少し不安定です。
  • コードの洞察は時々混乱します。
  • デバッグは時々バグがあります。
  • 複数のプロジェクト ファイルを更新するのは面倒な場合があります。
  • 1 つ以上のパッケージが利用できないときに起動すると、エラー メッセージが数回表示されます。
于 2008-11-11T22:44:07.003 に答える
16

JavaScript

  • すべてのスクリプトは単一のグローバル「名前空間」で実行されます...さまざまなソースからのスクリプトを操作するときに注意する必要があるもの

  • 変数が使用されているが事前に定義されていない場合、それはグローバル変数と見なされます

  • ブラウザー ベンダーは思いのままに標準を作成しており、このような美しい言語を使用する私たち開発者のコ​​ーディングは必要以上に困難になっています。

  • 大文字と小文字の区別 - コンパイル時のチェックを使用して js を開発するためのまともな IDE がないことを考慮して

  • hasOwnProperty単純な操作を実行するための回避策 (メソッドの使用など)。

于 2008-12-07T15:19:00.240 に答える
15

ハスケル:

  1. 遅延評価によるスペース リーク。
  2. 数学的抽象化に関して構築されていない数値階層。
  3. 厳密なモナディック IO は、デバッグを難しくする可能性があります。
  4. 大規模な実装は、標準と完全に互換性がないように見える方法で I/O を処理します。(特に、文字を出力すると、下位 8 ビットのみが出力されます。その後、この仮定を使用してバイナリ I/O を実行するコードがビルドされます。Ick.)
  5. 演算子の($)結合性を変更して、いくつかの式をよりきれいにすることができます。

これらのほとんどは憎しみのレベルに達しておらず、これらのそれぞれに対してしっかりとした回避策を修正または構築しようとしている人々がいます.

編集: ポイント 5 については、いくつかの混乱がありました。特に、一部の人々は、私が引数の順序を意味していると考えているようですが、そうではありません。私が何を意味したかを説明するのではなく、それをうまく表現している 次のリンクhttp://hackage.haskell.org/trac/haskell-prime/wiki/ChangeDollarAssociativityを人々に紹介します。

于 2008-11-12T01:25:07.320 に答える
13

私はパーティーに遅れていることを知っていますが、憎しみは時代を超えています!

ジャワ

  • ランタイム.exec()。 では、STDOUT および STDERR バッファを手動でクリアしないと、コードがハングするのでしょうか? わお。死んでください。
  • Null ポインターの例外。 責任あるプログラミングとは、ほとんどのオブジェクトを不発弾のように扱わなければならないことを意味します。これは、オブジェクト指向言語の一種の小便です。そして、避けられないことが起こったとき、どのオブジェクトが私の顔に爆発したかを知る必要がありますが、Javaはどうやら私が不正行為をしていると言っているように感じます.
  • ファイル I/O。 ダンテキストファイルを読むために、なぜこれほど多くのフープを飛び越えなければならないのですか? また、ファイルをコピーするときに、ソース ファイルをコードに流し込み、出力バイト バッファーを手動で処理する必要がありますか? 本気ですか?
  • プリミティブとプリミティブ ラッパー。 Java には、プリミティブとそのラッパー オブジェクトをある場所では交換可能であるが、他の場所では交換できないものとして扱うことができる多くの機能があることに注意してください。心配する必要はありません。どちらがどちらであるかはコンパイラが教えてくれます。これは、根本的に壊れやすい設計上の決定を回避するためのハックのように感じます。そしてそうです。(編集: 実際には、コンパイラは私が思っていたよりもはるかに安っぽいセーフティ ネットです。特に等価性チェックを行う場合はそうです。「a」と「b」が整数の場合、「a == b」は、少なくともそのうちの 1 つは int 型です。両方とも Integer 型の場合、そのステートメントは、2 つの数値が -128 から 127 の間にある場合にのみ、あなたが考えていることを実行します。 Integer a = 1000; Integer b = 1000 ; return a == b;` は `false` を返します。本当に。)
  • XML。 作成する必要があるこの非常に単純な小さな XML ファイルがありますが、何をしなければなりませんか?
于 2009-04-09T16:23:32.147 に答える
13

スモールトーク

  • もう Java、Delphi、C#、または Ruby で開発したくありません (私の会社の主要な開発言語は C#、Delphi、および Java であるため、これは非現実的です)。
  • 左から右への評価。
  • クラスのコメントはありますが、メソッドのコメントはありません (少なくとも Squeak では)
  • 実際の標準ライブラリはなく、詳細に多くの違いがあります
  • 名前空間の欠如
于 2008-11-11T22:48:39.803 に答える
12

ルア

私はこの言語が大好きですが、何年もの間私を悩ませていることがいくつかあります!

  • 二項演算の(組み込みの)サポートはありません(5.1の時点では、5.2に付属している可能性があります)。
  • 組み込みのバイナリバッファ実装が必要です。たとえば、長い文字列の連結を適切に行うことができます。
  • 構文にうまく適合しないことはわかっていますが、longVariableName++またはverboseVariableName+=5が見当たらない場合があります。
  • リファレンスはCの知識を前提としており(私はそれを持っていますが、初心者にとってはマイナスです)、Cリファレンスの助けをいくらか延期します!そして時々それはあまりにも簡潔です。
  • たくさんの図書館ができ始めていますが、いろいろな場所から入手する必要があります。一方、ダウンロードは非常に小さいです!;-)
于 2009-01-09T16:25:59.333 に答える
11

Python

  • 1-3:パッケージング/ビルド/ドキュメント化システム(PerlやRubyなど)の明確な選択肢はありません。cpanPODgemrakerdoc

  • 4:Python 3.0は互換性がないため、Pythonプロジェクトごとに2つのソースブランチ(2.xと3.x)が必要です。しかし、Python3.0はそれを正当化するほど互換性がありません。ほとんどのpy3kの利点は微妙すぎます。

  • 5:Jython、IronPython、CPythonには互換性がありません。

于 2008-11-26T19:26:10.480 に答える
11

VB.NET

  • AndAlso/OrElseAnd/の動作Orは逆のようです。おそらく、それらを切り替える必要があります。
  • When例外のキャッチにのみ使用できます。条件付きを実行する機能は、When他のいくつかの場合に役立ちます。
  • C# のように、VS IDE にはひどいリファクタリングはありません (実際には言語のせいではありません)。
  • Not <obj> Is Nothing. はい、これは によって修正されましIsNotたが、何らかの理由で がNot Is頻繁に使用されています。(英語を第 2 言語として話す開発者によく見られますが、その角度から見れば意味が通じますか?)
  • ()onToString()および most 関数は必要ありません。(ずさんなコーディング習慣につながります)
  • _改行時にしなければならないこと。
  • オプションのパラメーターを使用できます。(ずさんなコーディング習慣につながります)
  • 配列の宣言はUpperBound、容量ではなく容量によって行われます。「Dim arr(2) as String」は、実際には 3 つの要素を保持します。
  • =比較および代入演算子であること。
于 2008-11-13T13:00:22.557 に答える
10

目的 Caml

  1. 非同時ガベージ コレクタ。 マルチスレッド プログラムを 1 日中作成できますが、一度に取得できるのは 8 つのコアのうちの 1 つだけです。これは私を悲しくさせます。

  2. 型クラスはありません (またはそれらの道徳的等価物)。 古瀬さんのGCamlがありますが、A) 型クラスほど良くはなく、B) INRIA ディストリビューションにはありません。

  3. Cocoa ブリッジがどうしても必要です。 真剣に。DNAベースの生命体への実際のインターフェースを備えたコードをもっと書いたら、おそらく自分で分解して、いまいましいものを書くでしょう. なぜまだ誰もこれを行っていないのですか?

  4. ファンクターは忌まわしい。 真剣に、モジュールは第一級の値であるべきです。関数は 1 種類だけである必要があります。これで私を炎上させる前に、モンタギューとレミーを読んでください。

  5. バックエンドには LLVM を使用する必要があります。 私のばかげた小さな ARM6 コア用に OCaml をコンパイルするには、誰を殺さなければならないのでしょうか?

ええ、私にはいくつかの問題があります。私はまだ言語をバラバラに愛しています。それは完全に素晴らしいです。

于 2009-05-27T04:25:07.077 に答える
9

私自身のトップ5「C++で本当に嫌いなものは何ですか」:

[5]コンストラクタ、デストラクタ、および代入演算子の自動生成。男、私がクラスで何かを宣言しないときはいつでも、それは私がそれを忘れたのではなく、私がそれを必要としないことを意味します。コンパイラー、聞こえますか?!

[4]テンプレート構文。ああ、クラス本体から定義を抽出することにしたときはいつでも、これらすべての「<」と「>」を本当に入力する必要がありますか?

[3]文字列。うわあ、私は「const char *」にうんざりしています。NULLの状況を処理する必要があり、その長さを取得するためにO(N)を浪費する必要があり、concat操作用のバッファーを割り当てる必要があります。

[2]マクロ処理。コンパイラで何が起こっているのかわからないときはいつでも、マクロを探し始めます。

[1]演算子のオーバーロード。「A+B * C」というコードが表示されますが、実際のA、B、Cのタイプが表示されるまで、このコードが何であるかはわかりません。

于 2009-06-16T13:27:33.883 に答える
9

VBA (MS Office IDE を含む):

1) 貧弱なドキュメント
2) 貧弱なエラーメッセージ
3) 不適切な配列操作ルーチン
4) DIM ステートメントの型を繰り返さ
なければならない 5) カラーで印刷されない (サードパーティのアドインを購入する必要がある)

于 2008-11-11T23:03:05.267 に答える
8

Delphi (別名 Object Pascal) です。.NET ではなく、ネイティブ バージョンについて話します。

  • バーブロック!
  • この言語のインターフェイスは、COM の使用を念頭に置いて設計されているため、C# や Java よりも複雑です。すなわち。明示的に無効にしない限り、参照カウントが含まれます。
  • いいえtry except finally end;
  • オブジェクトの作成が明示的すぎます:

    var obj: TMyObject;
    ...
    obj := TMyObject.Create;
    try
      ...
    finally
      obj.Free;
    end;
    

代わりに次のようなもの

auto obj: TMyObject; // compiler adds the default constructor call and the destructor call in a try/finally block. 
  • OK、言語はとても優れているので、これ以上考えられないので、ここで力を入れています: 文字列、整数..、または列挙型などの組み込み型にはメソッドが必要です。すなわち。i.ToStringの代わりにIntToStr(i)
于 2008-11-14T00:59:57.003 に答える
7

  1. パラメトリック ポリモーフィズム(つまり、C++ テンプレート) はありません。再利用可能なデータ構造とアルゴリズムを書くのが苦痛になります (そして静的チェックはほとんどありません)。たとえば、qsort と bsearch のコンパレータ引数を参照してください: コンパレータは void ポインタを取ります :(
  2. データ構造のライブラリはありません。私は自分のハッシュテーブルを書くのが本当に嫌いです。また、再利用可能なデータ構造のライブラリを求めて Web を探し回るのも本当に嫌いです。特に不完全であることが判明した場合。
  3. ストリングス。表現が非効率的で、まともに扱えない、文字列を安全に入力するのが難しすぎる。の標準はありませんsnprintf。でフォーマット文字列を作成するのが難しすぎるのでsprintf、それを使用しsprintfて安全な方法で文字列を再度作成してください。
  4. レキシカル マクロのみ。異なるコンパイラが異なる場所に関数注釈を期待している場合、同じものHAS_NO_SIDE_EFFECTSを異なる場所に配置する必要があります。関数を取得し、コンパイラの種類を切り替えて、マクロ呼び出しによって適切な場所に挿入できないのはなぜですか?
  5. 一般的な機能のためのポータブル ライブラリはありません。ソケットとスレッドには、SDL を使用します。これは、つまらないゲームライブラリです。ubuntu用にパッケージ化された唯一のライブラリである.iniスタイルのパーサーについて、毎日のwtfに投稿しました(ハッシュ値の配列を計算し、それを線形スキャンします...)

C++

  1. テンプレートの構文は重くて扱いにくいです。見てみましょうfor(map<string, int>::const_iterator it = mymap.begin(); it != mymap.end(); ++it)
  2. STL の設計エラー。ベクターの割り当て戦略を変更すると、本当にそのタイプを変更する必要がありますか?
  3. 過度に複雑な型システム。型 T1 には convert-to-T2 メソッドがあり、T2 には暗黙の from-T1 コンストラクターがあります。どれが呼ばれますか?オーバーロード、オーバーライド、多重継承はどのように相互作用しますか? 悪い、私は推測します...
  4. テンプレートからの信じられないほど長く扱いにくいエラー メッセージ。私の言っていることが分かるよね...
  5. 参照は、呼び出しサイトで出力パラメーターを表示できないことを意味します。C では、変更できるものとできないものを推測foo(bar, &baz)できます。
于 2009-05-28T09:21:41.607 に答える
7

ルア:

  • 理由はわかりますが、真剣です。変数は、デフォルトでglobalキーワードを使用してローカルにする必要がありますが、その逆ではありません。
  • 私は一般的に、do/end スタイルのセマンティクスの大ファンではありません。私は C スタイルの中かっこの方がずっと好きです。
  • 動的型付け。私は知っています、あなたの中には「え?」と言う人もいます。しかし、特定の変数に含まれるデータの型を正確に知ることで、私は完全に甘やかされてしまいました。一定if (type(var) == "string") then stuff() endは苦痛です。
  • 変数は、使用する前に定義する必要はありません。タイプミスの危険を冒して、私が「奇抜な豆」と呼んでいるものを引き起こす危険を冒すよりも、自分がやろうとしていることをはっきりと示したいと思います。

PHP:

  • 繰り返しますが、動的型付けです。
  • 閉鎖の欠如。できます$function($arg);が、それはカウントされません。
  • 繰り返しになりますが、変数は定義する前に使用できます。私には、変数を使用する前に常に既知の値に変数を明示的に初期化するという個人的なポリシーがあり、それを私が何らかの形で制御できるベスト プラクティス ドキュメントに拡張しています。

C/C++:

  • ヘッダー = 首の痛み。
  • 閉鎖のサポートはありません。(私はそれらを備えた C++0x に興奮しています。)
  • 静的型付け。「待って」とあなたは言います。「動的型付けが嫌いだって言ったでしょ!」はい、そう言いました。しかし、静的な型付けも厄介な問題になる可能性があります。(選択肢があれば、静的型付けを選択します。) 最適には、デフォルトで静的型付けされ、動的型もサポートする言語が必要です。(それと、ポニーと 500 億ドルと世界もお願いします。)
于 2009-01-12T00:47:42.737 に答える
7

ルビー:

  1. めちゃくちゃ遅い
  2. 利己的なコミュニティ
  3. それはかなりスモールトークではありません
  4. Objective C のように nil を返すだけでなく、nil でメソッドを呼び出すとエラーが発生する
  5. 非ネイティブ スレッド
于 2009-01-12T00:50:58.253 に答える
6

Haskell:

  • スペースリーク-デフォルトで怠惰のために支払われる価格-多分高すぎる価格?
  • のような純粋関数でさえhead、あなたtailを呼び出しerrorて起動することができますIO
  • failからMonad-持ち帰りますMonadZero
  • Numクラス-は、または類似(+)している必要があります。AdditiveGroup
  • それMonadはではありませんApplicative
于 2009-07-07T07:45:57.203 に答える
6

多くのPerlモジュールを作成し、特にMooseに取り組んだ人の観点から、Perl5についてもう少し説明します。

  1. 変数のオーバーロードと結び付けである恐ろしい破損。これらの機能は両方とも、組み込み型への透過的な拡張を許可する試みに失敗しました。

    どちらもさまざまな方法で失敗し、私のようなモジュールの作成者は、それらをサポートするために恐ろしいハックを実装するか、「オーバーロードされたオブジェクトをfoo()メソッドに渡さないでください」と言う必要があります。どちらの選択肢も実際には受け入れられません。

  2. コンパイルプロセスとメタモデルへの適切なフックの欠如。一般にMoose、特にロールの使用法は、Perlコアがメタモデル(パッケージ、クラスなど)にフックできる健全なAPIを介してコンパイルプロセスに影響を与えることを可能にした場合、はるかに安全になります。

  3. 言語に組み込まれている名前付きパラメーターの欠如。代わりに、誰もがこれを再発明します。気に障る。

  4. 同様に、オプション型の欠如。静的言語は必要ありませんが、特に関数/メソッドのパラメーターで型と制約を指定できる機能は素晴らしいでしょう。Perl6はこれを正しく行います。タイプはオプションですが、非常に豊富であり、組み込みタイプとユーザー定義タイプの間に基本的な違いはありません。

  5. 下位互換性ポリシー。これはもっと文化的な問題です。Perl 5は下位互換性に非常に強いコミットメントを持っているため、上記の問題の多くは実際には修正できません。したがって、タイとオーバーロードである現在のたわごとのボールを効果的に置き換える何かが追加されたとしても、それらの機能が削除されることはありません。もちろん、下位互換性もPerl5の最大の強みの1つです。

  6. ボーナス嫌い:Perlの組み込みの例外メカニズムは冗談です。例外が文字列またはオブジェクトである可能性があるという事実は、厄介な例外キャッチコードの永遠を生み出し、言語構文にキャッチがないことは、いぼのいぼです。

于 2010-05-25T20:19:00.570 に答える
6

Python

  • __init__
  • smtplibのように、いくつかのライブラリは扱いにくいです
  • 'self'はメソッド宣言に含まれている必要があります!!!
  • (3.0より前の場合)Unicodeのサポートがやや貧弱
  • インライントライキャッチの欠如
  • 「this」/現在のモジュールへの直接参照はありません(代わりにを使用する必要がありますsys.modules[__name__]
于 2008-12-05T18:18:36.680 に答える
6

アクションスクリプト / AS3

  • 抽象クラスなし
  • プライベートコンストラクターはありません(シングルトンはハックです)
  • FP10 より前の型付き配列はありません
  • Flash IDE でのコンパイル/パブリッシュ時間がばかばかしいほど遅い
  • 組み込み関数 (Math など) のパフォーマンスが遅い

それ以外の点では、実際には優れた言語です。一般的な考えに反して、JavaScript よりもはるかに優れており、PHP などよりも 100 万倍も優れています。

于 2008-12-08T15:29:46.723 に答える
6

コールドフュージョン

  1. 大きな Flash フォームのコンパイル時間。
  2. 動的変数の型 (時々嫌いです。)
  3. CFScript の機能の欠如。
  4. CFTable (正しく表示されることはありません)。
  5. CFChart から除外されたチャート タイプの欠如。
  6. NTLM サポートの完全な欠如 (エンタープライズ対応 - そうです)
  7. CFC での Moronic var スコープ
  8. 真の NULL の概念はありません - あなたの変数は消えてしまいます!
  9. 特定のものの存在をテストする方法がない (スコープ、その中のメンバーなど)
于 2008-11-11T23:34:47.883 に答える
6

JavaScript

  1. 関数オブジェクトの構文:

    f = new Function( "foo", "bar", "return foo+bar;" );
    

    (n個の引数を取ります。最初のn-1個は関数の引数で、n番目は文字列形式の実際の関数です。これはばかげています。)

  2. 関数の引数は繰り返すことができます。

    f = new Function( "foo", "foo", "return foo;" );
    

    ただし、これまでに使用されたのは最後の繰り返しだけです。

    f( "bye", "hi" ) // returns "hi"
    f( "hi" ) // returns undefined
    
  3. E4Xは死ぬべきです。私のユーザーは、思ったように機能しないといつも不満を言っています。セッターに1ページ半の疑似コードが必要な場合は、物事を再考する時です。

  4. stdin/stdout/stderr (およびファイル!) の標準的な概念があればよいでしょう。

  5. null != 未定義

    それらの両方を処理する必要があるのはイライラします。便利な場合もありますが、ほとんどの言語は 1 つにうまく対応できます。

于 2008-11-26T20:04:12.993 に答える
6

パイソン。

Python がスコープを処理する奇妙な方法については言及されていますが、それの最悪の結果は、これが有効であることだと私は感じています。

import random

def myFunction():

    if random.choice(True, False):
        myString = "blah blah blah"

    print myString

つまり、if ブロック内は関数の残りの部分と同じスコープです。つまり、変数宣言は条件付き分岐内で発生し、それらの外でアクセスできます。ほとんどの言語は、これを行うことを防止するか、少なくともある種の厳格なモードを提供します。

この関数は成功する場合もあれば、例外をスローする場合もあります。これは不自然な例ですが、微妙な問題が発生する可能性があります。

于 2009-01-08T15:29:46.023 に答える
6

私の常用言語は Java です。これが私がそれについて嫌いなことです:

5.) ポインターの欠如
4.) 例外
のキャッチ 3.) ブール型
2.) BigDecimal 型
1.) C# ファンボーイと Java ファンボーイ

Booleannull にすることができます。これは直感に反すると思います。

BigDecimalライブラリであり、言語機能ではありません。私のイライラBigDecimalExceptionキャッチは、主に、実際の作業を完了するために一連のフープを飛び越えなければならないテストクラスを作成することに起因しています。私はこれらのことに腹を立てていることを明確にしておく必要があります.私は変更を求めてロビー活動をするつもりはありません.

于 2008-11-11T22:24:56.357 に答える
6

パイソン:

  1. 遅すぎる!
  2. リスト操作はリストを返さないため、list.append(4).append(5) は実行できません。(コピーではなく、同じリストへの参照を意味します)。これはちょっとした不満です。数回しか出てきません。
  3. ステートメントは値を返しません (if、print、while、for など)。これは、ラムダを扱う場合にのみ問題になります。
  4. ラムダは 1 つの式のみです。他のすべての点で関数と同等であるため、この制限は実際には必要ありません。2 つの関数を呼び出すボタン プレス イベントが必要な場合はどうすればよいでしょうか。その機能をアクション リスナーに提供するには、名前付き関数を作成する必要がありますが、「lambda: f1(); f2()」を実行しても害はありません。
  5. 標準の a-zA-Z_0-9 のみを名前として付けることができます。「本当?」のような機能を持つ。そして「+」は素晴らしいでしょう。もちろん、これはひどい難読化につながる可能性がありますが、すべての関数の名前をすぐに "p@$%3" に変更すると言っているわけではありません。"dec2bin" と "dec->bin" のどちらが読みやすいですか? (「store_results」または「storeResults」) または「store-results」?
于 2008-11-11T22:26:52.390 に答える
6

C#

特に LINQ では優れた言語ですが、ジェネリックのサポートはC++ に比べて貧弱です。非常に多くの可能性がありましたが、現在の実装は、厳密に型指定されたコレクションや同様の些細なことにのみ役立ちます。落ちる場所の例:

  • ジェネリック引数を列挙型に制限することはできません (クラスまたは構造体のみ)。
  • ジェネリック引数を静的クラスにすることはできません。なんで?これは完全に人為的な制限のようです。
  • インターフェイスにコンストラクターを持つことはできないため、ジェネリック型に特定のシグネチャを持つコンストラクターが必要であると指定することはできません。なぜだめですか?これは、特別な名前「.ctor」を持つ別のメソッドです。
  • 同様に、ジェネリック型に静的メソッドが必要であることを指定することはできません。これは、これらもインターフェイスで宣言できないためです。のようなものstatic T Parse(string s)がしばしば役に立ちます。
  • コンパイラーは、プログラマーが実際に機能することを知っているいくつかのキャストを禁止することに熱心すぎるため、次のような醜さを必要とします(TheRealType)(object)value
  • 共分散なし。に変換できますが、IList<string>に変換できません。(ただし、Microsoft は C# 4.0 でこれを修正している可能性があります。)IList<object>string[]object[]
于 2009-01-04T01:33:35.633 に答える
6

Groovy/Grails

  1. ダックタイピング
  2. コンベンションを知っていると仮定して、設定より規約
  3. あなたが春について嫌いなすべて
  4. Hibernate の嫌いなところ
  5. [Groovy] コレクション全体の共通操作はそうではありません (ただし、最近のリリースではこれが改善されています)
于 2008-11-11T22:40:53.140 に答える
5

パイソン:

  • 通常、ファイルの最後にプログラムのエントリ ポイントがあります。(モジュールで定義された関数を呼び出す場合は、ソース内のそれらの関数の後に発生する必要があるためです。) プログラムのエントリ ポイントを探すのに時間を費やす必要がある場合は嫌いなので、常に次のような単純なmain.pyファイルを用意しています。 :

    def main():
        ...
    
    if __name__ == '__main__':
        main()
    
  • 例外が発生すると、メインスレッドによってのみキャッチできます。またはそのようなもの。

  • Python で記述した場合、デストラクタはガベージ コレクション IIRC を壊す可能性があるため、まったく役に立ちません。

  • Python 2 で相対インポートがどのように機能するかはわかりませんでした。

  • 標準ライブラリのコレクションをもっと増やしてほしいです。例: リンクされたリスト、スレッドセーフなコレクション、...

于 2010-06-01T12:34:23.927 に答える
5

PHP

  1. コンストラクターのオーバーロードなし
  2. 関数の命名に一貫性がない (str_replace、ただし strtolower)
  3. define() は、C++ のように文字通りグローバル変数を置き換えません。
  4. XHTML と組み合わせる場合、XHTML のインデントの一貫性を保つために XHTML がインデントされていても、if ステートメントなどのステートメントはインデントなしで開始する必要があります。

元:

次のように入力する必要があります。

<?php
if($x == NULL)
{
?>
                     <p><?= $x . ' is null' ?></p>
<?php
}
?>
  1. エラーキャッチがひどい

(SOが#5を再び#1に変更した理由はわかりませんが、何でも)

于 2009-01-04T01:46:34.000 に答える
5

Perl 5最も煩わしいものから順に。

1.)下位互換性ポリシー. はい、バックコンパットは強みですが、Perl 5 は行き過ぎです。今では、明示的に有効にしない限り、私たちの言語で新しい機能を取得することさえできません。新しい機能が問題を引き起こした場合は、それを無効にするか、古い動作を強制させてください。たとえば、perl 5.10 が追加されました。自分で実装した場合は、配置する必要があるか 、5.8 が機能したが 5.10 が機能しなかった場合に使用しsayたいと思います。5.8 までの機能のみを使用するようにコードを制限する必要があります。定義されていない場合は、実行中のバージョンにデフォルト設定する必要があります。必要な場合を除き、制限しないことをお勧めします。no feature 'say'sayuse feature 'say';use 5.010;use 5.008;use version;

2.)過剰なボイラープレート

#!/usr/bin/perl
use strict;
use warnings;
use utf8;
use autodie;
use English '-no_match_vars';
use 5.010;
package Package::Name;

BEGIN {
    Package::Name::VERSION = 0.1;
}

sub somesub {
    my $self = shift;
    my ( $param1, $param2 ) = @_;
}
1;

これで、コーディングを開始できます。これは#1のために変更されません。もちろん、このようなものへのショートカットuse common::sense;use modern::perl;、上記を短縮するショートカットがあり、わずかに異なるモジュールやプラグマが必要になる場合があります。しかし、#1のため、これを減らすことはできません。

#!/usr/bin/perl
package Package::Name 0.01;

sub somesub ( $param1, $param2 ) {
}

use 5.012;いくつかのモジュールはこれを助けており、5.0.12 には新しいパッケージ バージョンがあり、最初に必要だと思いますがMethod::Signatures、完全に解決されることはありません (言語で)。

3.)不適切な変数の選択

ファイルを丸呑みする

#!/usr/bin/perl
use strict;
use warnings;
open my $fh, "< foo" or die $!;
local $/; # enable localized slurp mode
my $content = <$fh>;
close $fh;

wtfと$!$/?読みやすいように書き直します。

#!/usr/bin/perl
use strict;
use warnings;
use English '-no_match_vars';
open my $fh, "< foo" or die $ERRNO;
local $INPUT_RECORD_SEPARATOR; # enable localized slurp mode
my $content = <$fh>;
close $fh;

'-no_match_vars'パフォーマンスに影響を与えたくない場合は、そこにある必要があることを忘れないでください。

匿名のスカラーを作成する直接的な方法がないのはどうですか?

#!/usr/bin/perl
my $scalar_ref = \do{ my $anon_scalar };

彼らは何かを思いつくことができなかったのですか?

#!/usr/bin/perl
my $scalar_ref = <>;

ああ、どのように perl がスレッドフレンドリーでないかというと、すべての変数 (特殊変数を含む) がデフォルトでグローバルだからです。少なくとも今ではmy $_;、それを字句スコープに使用localし、他のスコープに使用できます。

4.)本当に醜い構文

MooseX::Declare は、より優れた構文です。また、 -> を に置き換えたいと思います。(個人の好みはあまり関係ありません)

5.) TIMTOWTDI が多すぎる、またはベスト プラクティスが多すぎる物事をどのように行うべきかを理解するために、3 ~ 5 冊の本を読む必要があるようです。

6.) 以前 (もはや適用されません)。正気でないリリース。5.10.0 には機能がありました。5.10.1 には機能がありました。次のリリースまで時間は設定されていません。現在は、四半期ごとの更新を伴う年次機能リリースになっています。

7.)象牙の塔の視点。コミュニティの問題として、多くの開発者は参入障壁を高くしたいと考えており、n00bs (または実際には彼らに同意しない人) を無礼に扱っても問題ないと考えています。

8.)非常識なバージョン番号/文字列 Perl には浮動小数点のバージョン番号があり、見苦しいです。ああ、開発者は、すべてのダウンストリームがバージョン比較を同じように扱っているわけではないことを知りません。言語の問題ではない

0.012 # simple
5.012001 # semantic 
4.101900 # time based + version (for multiple versions in a day)
0.035_002 # prerelease

perl のすべての有効なバージョン.. そのまま使えませんか...

0.12 # simple
5.12.1 # semantic
20100713 # time based (just use the date and be careful not to need to release more than 1 a day)
0.35-beta2 # prerelease

添加

9.)アップグレード後にすべての XS モジュールを再インストールする明確な方法がない

于 2010-07-16T03:37:30.217 に答える
5

C++

  • char* と std::string に関連するライブラリの矛盾。すべての C++ ライブラリは std::strings を取る必要があります。

  • iostream に関しては、文字はバイトではありません。私はバイト指向の仕事をたくさんしています。「バイト」タイプと「文字」タイプを使用すると、大幅に簡単になります。それもまた、Unicode へのスケーリングをいくらか容易にするでしょう。

  • 値に対するビット操作は簡単でなければなりません。AND/OR ダンスをプレイせずに、値の n 番目のビットにアクセスして設定できるはずです。

  • GUI の標準化されたインターフェイスの欠如。これは、Microsoft が C# でうまく位置づけることができた場所です。OS メーカーが提供する標準のインターフェイス バインディングは、私の仕事にとって非常に役立ちます。

于 2008-11-26T19:46:32.373 に答える
5

F#

  1. 型推論は制限されています。

    1. 前方のみに伝播します。

    2. F# は、使用されているメソッドとプロパティに基づいてオブジェクトの型を推測しようとしません。手がかりがない場合、「不確定なオブジェクト型のルックアップ」エラーが発生します。

  2. float と int を混在させることはできません: 1 + 2.3 は型エラーです。

  3. モナドや計算式を定義するためにビルダーオブジェクトを作成しなければならないのは少し厄介です。Haskell または Scala では、モナド オブジェクトに対して直接モナド操作を定義できます。

  4. #light 構文が好まれますが、インデント ルールが直感的でなかったり、扱いにくくなったりすることがあります。

于 2008-12-04T08:42:50.573 に答える
5

パイソン (3.1)

  • T if C else F条件ステートメントの構文が奇妙で順不同です。
  • bytesリテラルはリテラルに似すぎていstrます。x'414243'の代わりに次のようなものを用意する必要がありましたb'ABC'
  • str一部のプラットフォームでは UTF-16 であり、他のプラットフォームでは UTF-32 です。(少なくとも、2.x 文字列よりは改善されています。)
  • 加算と連結に同じ演算子を使用します。これは、 のような型では問題numpy.arrayです。
  • ゆっくり走る。
于 2010-08-20T04:21:48.827 に答える
5

ドイツ人

私の母国語...クリンゴン語よりも美しく聞こえるかもしれませんが、それは文法の地獄です...

  1. 活用: 通常の動詞でさえ、人や時間ごとに形が異なります (例外はほとんどありません)。 du siehst, er/sie/es sieht, wir sehen, ihr seht, sie sehen.
  2. 礼儀正しい話し方: 三人称複数形、中年には二人称複数形に等しい... 私は「デュ」と「シー」を区別する概念が本当に嫌いです。私の哲学は、すべての人間は平等であると見なされるべきであるということです。それに値する敬意の量で(つまり、悪口とは何ですか?)
  3. 句読点: コンマを定期的に使用する言語を教えてください!
  4. 適切な単語がありません: 例: 「便利さ」に相当するドイツ語や、この単語の派生語はありませ...ほとんどの場合、別のドイツ語に翻訳して意味を維持することはできません...代わりに、サブセット全体を作成する必要がありますそれをある程度適切に説明するには...
  5. Anglicisms and Denglish : 確かに、英語には「Kindergarten」または「Poltergeist」がありますが、ドイツ語には誰も必要としない英国主義があふれています... さらに悪いことに、私たちは採用するいくつかの単語を再定義します。ドイツ語で「ハンディ」は携帯電話を意味し、英語の形容詞とは何の関係もありません...文法にも流入があり、「デングリッシュ」表現につながります(ウィキペディアのリンクされた記事を参照)もっとありますが、私はこれを誇張したくないのですが、これらは私がドイツ語について嫌いなことの個人的なトップ5です...
于 2010-05-26T16:10:06.587 に答える
5

子:

  • 関数ポインター (実行可能) とデータ ポインター (実際には実行したくない) の区別の欠如。
  • 極度の読解力。コードが実行しているように見せることは、そもそもタスクを実行させるよりも桁違いに困難です。
  • Lisp-think に対する明確なサポートの欠如。かろうじて機能的なことを行うことは可能ですが、明確ではありません。
  • エラー コードがどのように返されるかについて、ライブラリ間で重大な矛盾があります。
  • 時代遅れの文字列処理。文字列は文字列ではなく、null で終わる blob です。これはあらゆる面でひるむ価値があります。

舌足らずの発音:

  • () は、シフト キーを押す必要があります。Lisp をたくさんやるたびに、それと [] を入れ替えます。
于 2009-01-12T02:43:48.943 に答える
5

私はSNOBOLのあらゆる種類のプロジェクトを調査した本を持っています。最初の章では、SNOBOL プログラミングと言語にまつわる歴史と文化を探究し、優れたプログラマーは欠陥があるからではなく、欠陥があるにもかかわらず言語を好むという議論に時間を割きます。

好きな言語はIcon / Uniconです。しかし、それについて私を悩ませていることはまだあります:

  1. あまり知られていないか、あまり人気がありません。
  2. PHP、Perl、Java などに比べてはるかに小さいライブラリを持っています。データベースへのアクセスは ODBC 経由で行われますが、これは実際には非常に面倒です。
  3. explode()それ以外の点では優れたリスト処理ですが、PHP の組み込みのandが恋しいimplode()です。
  4. テーブル定数はありません。リスト、はい、テーブル、いいえ。
  5. それはコンパイルされた (実際に翻訳された) 言語です。
于 2008-11-11T23:04:27.290 に答える
4

C#(まあ、その一部はVisualStudio IDEだと思います):

  • タイプがタイプから派生している場合でもClass<D>、の代わりに使用できないような共分散は(まだ)ありません。 Class<B>DB
  • グラフィックデザイナーは、ジェネリックベースの継承(または抽象クラスからの継承)をサポートしていませんが、継承レベルを追加してデザイナーの問題を回避すれば、継承自体は問題なく機能するため、デザイナーは常にコードの具体的な非ジェネリックバリアントを見ることができます。 。
  • コンストラクターの継承なし
  • ジェネリック型パラメーターのwhere句にコンストラクターはありません
  • VisualStudioは、ファイルが実際には変更されていないように見えても、ソリューションを開くときにファイル(プロジェクトファイルや単体テスト定義など)を不思議にチェックアウトする傾向があるようです。

明日また私に聞いたら、別のリストになるかもしれません。共分散と設計者の問題は、それらが解決されるまで私のトップ5に含まれますが(C#4.0に分散が追加された場合、これは少なくとも1つで発生したようです...)。

于 2009-01-08T19:32:09.933 に答える
4

Emacs Lisp

  • elispフルタイムでコーディングするのに十分な商業市場はありません
  • GNUEmacsとXEmacsの非互換性
  • Schemeの入れ子関数はきちんとしていて、elispにコンセプトがあったらいいのにと思います[1]
  • リストを単純にループするためのdoループまたはその他の機能は標準ではありません(もちろん、ラムダを使用してmapcを実行できます)[1]
  • (function(lambda(...)))[1]の省略形があるはずです。

[1]もちろん、Lispのすばらしい点の1つは、ワンライナーを使用して独自のコードでこれらのことを修正するのは難しくないということです。それでも、それが組み込まれていないのは私を苛立たせます。

良い質問; 嫌いなものを思い付くことができなかったのは少し恥ずかしいですが、正直なところ、あなたの名誉、嫌いなものはあまりありません。

于 2009-01-08T07:27:34.967 に答える
4

Haskell。

  1. プレリュードはデフォルトでインポートされます。
  2. 型クラスの範囲は普遍的です。
  3. モジュールはファーストクラスではありません。
  4. タイプは値に依存できません。
  5. モナドはファンクターと統合しません。
于 2009-06-16T01:48:09.600 に答える
4

Python

  • Errors/Exceptions are vague when debugging
  • I don't use it at work
  • using __init__, __repr__, __str__, etc in classes
  • Can't simply compile an executable (.exe or otherwise)
  • Some other thing that I haven't tried doing yet, but I'm sure will bug me

And to all those C-ish language programmers, self makes more sense to me than this, because the object is referring to its self

于 2008-11-14T20:45:55.283 に答える
4

C++:

1: ヘッダー ファイル。

コードをリンクすることは、コンパイルするよりも困難です。また、その翻訳単位に完全なソースを含めるというテンプレートの要件はばかげています。そこにある別のファイルで終わりです.. 2 秒前にコンパイルしたファイルです。そこを見てください。愚かなコンパイラ。

2: 標準ライブラリを空にします。

つまり、はい、C++0x には std::thread がありますが、std::socket などはありません。クロスプラットフォーム コードがない主な理由は、複数のプラットフォームで実行する機能ごとに新しいライブラリを学習する必要があるためです。標準として提供される OS ヘッダーまたは OS 関数がない場合、C++ はビットをプッシュするのにのみ適しています。

3: 複数の戻り値または戻り値のオーバーロードはありません

double x, int y, char z = func(); void func(double x, int y, char z); と同じくらい有効です。お願いします。戻り値のオーバーロードがない唯一の理由は、あいまいなコードを書く可能性があるからです。そうかもしれない!以前ではなく、実際にあいまいなコードを書いたときに悲しんでください。

4: 反射なし

リフレクションをコンパイル時に実行しても問題ありません。本当にそうです。何も持っていないと、多くのライブラリを作成するのが難しくなり、せいぜい、私をひどく悩ませます。私はプリプロセッサを悪用することができましたが..

5: テンプレートのダックタイピング

ヤーグ。コンセプトと適切なテンプレート エラー メッセージをお願いします。Boost のようなライブラリを使用することは事実上不可能です。間違っていると、暗闇で撮影することになるからです。

于 2010-05-04T10:09:15.113 に答える
4

ジャワ

  1. チェックされた例外
  2. タイプ消去
  3. 演算子のオーバーロードがありません (例: BigInteger/BigDecimal の場合)
  4. 正規表現/日付/期間/複雑なリテラルがありません
  5. 不変性のサポートが不十分
于 2009-04-09T23:57:54.257 に答える
4

ルア:

  • メタテーブルは、「クリック」するまで非常に混乱します
  • 代入演算子の欠如はa += 20苦痛です
  • 統合されたオブジェクト指向ソリューションがないということは、誰もが自分の味を使うことを意味します。
  • コメント化に使用される構文 ( --) は、前後のインクリメント/デクリメント演算子の可能性を排除します
  • C 側をハッキングせずに、プリエンプティブなマルチタスキング システムを持つことは不可能です。
于 2010-06-02T05:27:04.880 に答える
4

自己

  • 実際のコード ブラウザはなく、何百もの小さなウィンドウが飛び回っています。
  • 研究プロジェクトのみで、十分に安定しておらず、活発なコミュニティもありません。
  • Linux または Windows 用の十分に高速なバージョンはありません。Mac OS X のみ。
  • 標準のキーボード コマンドはサポートされていません。
  • おー!そして、ネイティブ プラグインの作成に関するドキュメントは古くなっています。
于 2009-01-08T15:09:33.083 に答える
4

D

  • in 演算子がありますが、!in 演算子はありませんか?
  • 動的配列の「長さ」プロパティ - できること

    array.length += 512;

  • exit ステートメントはありません - Python の sys.exit() などのように。確かに、C の exit を呼び出すことはできますが、フラッシュされていない出力はフラッシュされません。
  • 連想配列リテラル + 文字列リテラルは最悪

    連想配列リテラル内にある文字列リテラルは、静的として解釈されるため、この

    char[][char[]] hash = ["hello":"world","goodbye":"angels"];

    a
    . 静的配列として解釈されるように要求しませんでした
    b. いずれにせよ、静的配列は連想配列では許可されていません

  • 循環依存は許可されていません (その Java ライブラリを移植したいですか? クラス階層の再設計を楽しんでください)

誰かがこれらについて私をチェックしてください。それらがすべてまだ関連しているかどうかはわかりません。

于 2009-02-19T23:41:17.527 に答える
4

信じられない、私のお気に入りの Python ペットのおしっこはまだ言及されていません。

  1. (3.x より前) 相対インポートは絶対インポートのように見えます。

    import foo
    

    これは、あなたが立っているディレクトリから、またはsys.pathからfooをインポートしますか?

  2. 圧縮された卵、シテでいっぱいの sys.path につながります。grep圧縮された卵は、 andを使用できないことを意味しますfind(とりわけ、問題 1 をデバッグするため)! 幸いなことに、ピップがあります。ピップを使用します。
  3. 付属の電池の一部は非パイソンです。それらを使用することをお勧めします。
  4. ディストリビューションとパッケージャーのせいかもしれませんが、それでも、インストール/コンパイル時に sourcefile-encoding を fscking ASCII に設定します。なんてこと?つまり、これまでに作成したすべての .py に「# コーディング: UTF-8」のようなものを入れなければなりません。

Py3k は、たとえば、文字列は Unicode であり、8 ビットのものは別の方法で処理されると主張することで、私の他のペットの不満のいくつかを修正します...

于 2009-10-30T14:10:09.957 に答える
4

Oracle SQL

  1. DUALテーブル 。

  2. GROUP BYエイリアスはできません。

  3. 私は分析関数の構文を思い出せないので、それらを忘れたり、使用するのが面倒です。

  4. 複合演算子LIKEIN条件演算子がありません。(ただし、10g 以降REGEX_LIKEでは、このトリックを実行できるオペレーターが存在します。)

  5. 厄介な連結構文。

SQL は私のお気に入りの言語ではありませんが、毎日使用する言語のトップ 3 の 1 つです。おそらく他にもあると思いますが、これらは私の心の一番上にあるものです。

にはたくさんの問題がありSQL*PLUSます。コマンドラインからやりたいことを実行するPerlの代替品を書き、インタラクティブなセッションに使用sql.elしています。これらのツールは、問題を回避するのに役立ちます。EmacsSQLSQL*PLUS


それについて言えば:

パール

  1. perl「 Perlのみを解析できます。」(しかし、これは主に構文の強調表示の問題であり、どの言語でもあまり使用したくありません。)

  2. 私は時々、「単純な (しかし時として驚くべき) ルール...: 関数のように見えるから、関数であり、優先順位は問題にならない」ということに驚かされることがあります。(からperlfunc(1))

  3. 複雑なデータ構造を逆参照すると、混乱することがあります。これが Perl の本当の欠陥なのか、それとも非常に強力なデータ構造機能を備えていることの結果なのか、私には判断できません。いずれにせよ、私は通常、自分が何をしているのかを考えるのに数分かかることで、正しく理解できます。

  4. DBI モジュールのように、システム コールにエラーを発生させるオプションはありません。(brian d foy のおかげで、CPAN のモジュールがこれを行うことがわかりましたautodieが、組み込みたいと思います。)

  5. スクリプトでは、デフォルトでは有効になっていない警告と制限。(この-eオプションは、コマンド ラインで使用するためにそれらをオフにします。)

繰り返しますが、もっと多くのものがあるはずですが、これらは私が最近気づいた問題です. =overand=backの風変わりなL<...>構文の必要性を追加しますがPOD、おそらくそれは別のリストにする必要があります。


三連勝の場合:

コーンシェル

  1. 引数を使用してファイルを取得すると、親スクリプトの引数の値が置き換えられます。(実行すると. file arg1putsが挿入arg1され$1ます。)

  2. kshは理想的なインタラクティブ シェルではなく、デフォルトviではemacs. (私の解決策はbash、インタラクティブシェルに使用することです。)

  3. 一般的なユーティリティ ( などgrep) は、プラットフォームごとに異なる方法で実装されているため、完全な移植性が妨げられています。一部の便利なコマンドは、一部のプラットフォームにインストールする必要があり、他のプラットフォームでは OS コアの一部です。

  4. 条件文の構文は重すぎます。( if [ ... ]; then ... fi)

  5. チューリング完全ですが、最終的には Perl のような表現力の高い言語に移行したいと思うでしょう。

#4 の 1 つの解決策は、短絡評価に慣れることです。

[ ... ] && ...
于 2009-02-19T08:22:36.890 に答える
4

初めての投稿なので、気楽にどうぞ :) ... すばらしいコミュニティ サイトです。

私は重複しないように、他のすべてのC#の返信を読んでみました

C# ... 順不同:

1) switch ステートメントのケースのフォールスルーはありません。そして、フォールスルーがない場合...なぜ明示的に入力する必要があるのですか break; とりあえず?それは休憩を持たない能力を意味するので、単に遅れて混乱しています; !!!

2) 子スコープで同名の変数を宣言することはできませんが、クラス変数と同じ名前で変数を宣言できますか? 両方を許可するか、両方を禁止します。そうでなければ意味がありません。

3) 関数にオプション/デフォルトのパラメータがない

4) finally{} の例外は、行ごとに暗黙的にキャッチする必要があります。または、少なくとも NullReferenceException 例外だけです。たとえば、データベースにアクセスした後は、常にクリーンアップする必要があります。したがって、finally ブロックは次のようになります。

finally
{
  if(par1 != null)
    par1.Dispose();
  if(comm != null)
    comm.Dispose();
  if(conn != null)
    conn.Dispose();
}

次のように記述できれば、非常にきれいになります。

finally
{
    par1.Dispose();
    comm.Dispose();
    conn.Dispose();
}

しかし、いいえ... nullオブジェクトにアクセスしているかどうかを確認する必要があります。そうしないと、finallyブロックからNullReferenceExceptionがスローされる可能性があります..とにかく、finallyブロックで本当に例外が必要な人はいますか?

5) ジェネリック: new() を指定してジェネリック オブジェクトをインスタンス化できますが、そのオブジェクトにはデフォルトのコンストラクターが必要です。代わりに署名を指定できないのはなぜですか。空のコンストラクターをまだ持っていない場合は作成する必要がなく、持っているコンストラクターを使用するだけです。

于 2009-06-16T01:12:23.553 に答える
4

パイソン:

  • 数値処理が遅い。それ以外は特に問題ないのですが…
  • インポート時に自動的にコンパイルされる C コードをプログラムに含める簡単な方法はありません。
  • py3k が引き継ぐまでは、愚かな整数除算のルールを適用する必要があります。
  • py3k が引き継ぐまで、imap や izip などの優れた機能を別のモジュールに配置する必要があります。
  • py3k が引き継ぐ前に、多くの作業を行う必要があります。
于 2008-11-24T04:24:58.210 に答える
3

私がすべての言語について嫌う5つのこと(少なくとも私が知っていること):

  1. 私が言っていること/タイプしていることをします、私が言っていることではありません
  2. 間違いなく、言語の専門家だと思っている人に会うでしょうが、それを台無しにするだけです(たとえば、コメントや未使用のローカル変数を削除すると、プログラムの実行時間が短縮されると主張する人)
  3. 言語が時代遅れにならない限り、おそらく進化し続け(実際の言語、またはそれを効果的に使用するための背後にある概念のいずれか)、遅れないように積極的に開発する必要があります。
  4. レクサー/コンパイラーを変更できません(独自の状況依存文法を追加してください)
  5. 完璧な言語はありません(すべての言語には、通常はシミュレーションが不可能であるか、醜いインターフェースが避けられないか、実装して正しく実行するのに非常に長い時間がかかる、ある種の便利な機能が欠けています)
于 2010-05-26T16:39:26.973 に答える
3

アーランはこのリストに含まれていません。私の好きな言語の中で、しかし確かにいくつかの欠陥:

  • 構文。これには、3つの終了トークン(、;。)と美学が含まれますが、より一般的には、コードの意味的意味がテキストでどのように表現されるかについてです。例として、すべての小文字のトークンがアトムである方法があります。そのため、関数を参照するには、名前を付けるだけでなく、、、およびを使用する必要がfun my_function/1あり?PRECEDE_CONSTANTS_WITH_QUESTION_MARKSます。Scheme、Haskellなどから来ているので、名前を使用できればいいのにと思います。

  • ライブラリのサポートは不十分です。これは主に外部ライブラリですが、古い標準ライブラリですらあります。新しいバージョンのErlangには賢明なPOSIX正規表現がありますが、古いバージョンには基本的な文字列操作用のかなり恐ろしいライブラリがありました。また、いつ値を取得しているのかもわかりません{ok, Value}

  • 関連:構築および配布のための不均一なツール。RubyにはRSpecがgemあります。rakePerlにはCPANがあります。私はErlangでまともな同等物を知りません。

  • いくつかのErlang固有のツールはかなり奇妙です。Mnesiaは優れたデータベースですが、SQLを使用することで、学ぶべき些細なことがたくさんあります。@spec署名を説明する奇妙な方法があるドキュメントと同じです。

  • ほんの少しの突然変異が必要な場合、機能パラダイムが痛むことがよくあります。ハッシュテーブルが必要だとすると、SchemeやSMLのようにハッシュテーブルをハックすることはできません。 ets痛みの一部をdets軽減しますが、それほどではありません。

第六に、ボーナス:

  • importモジュールのインポートおよびエクスポート構文は、Javaの80行以上のステートメントとは異なり、失敗の山です。

そうは言っても、Erlangは喜びです^ _ ^

于 2010-05-25T20:16:38.113 に答える
3

C#

  1. 列挙されているコレクション内のオブジェクトが変更されると、foreachコマンドが爆破されます。
  2. 間違ったスレッドでアクセスされたため、UIコントロールがダミーを吐き出します。確かに、すべてのdispatcher.invoke呼び出しは、CLR配管に移動できます。
  3. PInvoke、マーシャリングなど、
  4. 私がリモーティングを学ぶのに費やした無駄な2年間、
  5. Rubyほどセクシーではありません。
于 2009-03-13T05:54:45.867 に答える
3

Scala は私のお気に入りの言語です。嫌いな5つのこと?簡単:

  1. 正しく学ぶには長い時間がかかります。Scalaを「より良いJava」として書くことができることを私は知っています。これは、C++ と C についても私たちがよく言っていたことです。私はこれが言語の深い考えの必然的な結果であることに同意します. それでも ...

  2. メソッド対関数:def f(x: Int) = x*x関数 f ではなく、メソッド f を定義します。メソッドは関数ではありませんが、初期の Scala チュートリアルの資料の多くは区別を曖昧にしています。関数が期待されるいくつかの場所でメソッドを指定すると、それが受け入れられるため、言語もそれをぼかしようとします。メソッドと関数の両方が必要ですか? はい、基本です。しかし、最初は戸惑いました。

  3. 「ケーキ」パターンでミックスインからクラスまたはオブジェクトを作成すると、NPE が発生しやすくなります。たとえばtrait X { val host: String; val url = "http://" + host }、クラス宣言内の位置に応じて、インスタンス化時に NPE を実行する mixin であるかどうかが決まります。コンパイラは、失敗するかどうかを通知できますが、そうではありません。(とにかく 2.7 で。) 複雑な継承グラフの問題を診断するのは困難です。

  4. 2.8 の配列は、メインの scala コレクション型と噛み合うために暗黙に依存しています。しかし、暗黙はどこにでも適用されるわけではありません。ArrayaSeqが期待される場所にanを指定できます。ただし、が期待Option[Array]される場所に を指定することはできませんOption[Seq]。Java配列を処理する完全に「正しい」方法はないことを私は知っています。

  5. タイプ消去。十分に言った。

于 2010-05-26T03:11:37.077 に答える
3

Objective-C / ココア / ココアタッチ:

  • 名前空間の欠如
  • 分散オブジェクト、通知、KVO など、Cocoa の興味深い強力な手法でプリミティブ値を使用するのが難しい
  • プロパティにアクセスするためのショートカット ドット構文の使用との矛盾。多くの場合、完全な長さのアクセサーを使用する必要があります。
  • iPhone には GC はありません。一般に、GC は非常に動的な言語にかなり遅れて登場しました。
  • 少なくとも Cocoa Touch では、一貫性のないライブラリ サポート。いくつかの非常に基本的なことは、オーディオ処理など、最近高レベルのサポートを得たばかりです。
  • ブロック不足!
于 2009-07-22T21:37:33.317 に答える
3

パール5:

  1. 最近の本当に優れたものはすべて mod_perl を必要とするようですが、どこに行っても可用性が低いです。
  2. いくつかの非常に素晴らしい機能をモジュールにカプセル化することができますが、内部にあるものは脆弱で恐ろしいものであることがよくあります: ソースフィルター、型グロブ、Moose が行っていることは何でも...
  3. DateTime は優れていますが、依然としていくつかの非常に悪い設計上の決定を下しています ( 2 つの DateTime オブジェクトを減算するときにストップウォッチの期間を返さない)
  4. コア内と CPAN 上の二重化されたモジュールは依然として競合を引き起こします
  5. モジュールの作成者は、モジュール構成スクリプトにインタラクティブなものを入れて、自動的にインストールできないようにしています
于 2008-12-05T17:32:47.867 に答える
3

私のお気に入りは本当に C# ですが、C# については既にたくさんの回答があるので、次の "お気に入り" を使用します。

T-SQL

  1. ステートメント、およびあらゆる種類のGODDL/DML スクリプト作成に必要であるという事実、およびトランザクションのセマンティクスを壊すという事実により、実際に必要なアトミック スクリプトを記述することが必要以上に困難になります。本番データベースをアップグレードするために必要です。
  2. 一貫性のないセミコロンのセマンティクス。構文の 99% はそれを必要としません。MERGEステートメントはそれで終了する必要があります。ステートメントはそれでWITH開始する必要があります... 決心してください!
  3. WITH CHECK CHECK/ WITH NOCHECK CHECK. ぐうぐう。
  4. UDF のオプション パラメーターは、実際にはオプションではありません。呼び出し元が指定する必要があります(代わりにDEFAULT使用しようとしないでください)。完全にオプションであるNULLSP と比較してください。
  5. 「...サイクルまたは複数のカスケード パスが発生する可能性があります。」 嫌い嫌い嫌い嫌い嫌い嫌い嫌い嫌い嫌い嫌い嫌い嫌い
于 2009-12-28T02:13:39.747 に答える
3

アーラン

  • Haskell に見られるような静的な推論型付けはありません。これは実行時エラーにつながる可能性があり、コードを慎重に記述したり、 dialyzer(1)不一致を発見するために使用したりする必要があります。動的型付けも遅いと見なされます。
  • C、Javaなどと比較してほとんど知られていません。
  • lists(3)モジュールは非常に無駄がなく、リスト処理に役立つ関数が不足している場合があります (Data.Listたとえば、Haskell のものなど)。
  • ,句内のすべてのステートメント.の最後と、後者の最後に私を置きます。
于 2010-05-23T15:47:08.523 に答える
3

C/C++

  1. 不可欠な SWAP 機能の欠如
  2. テンプレートの構文
  3. #define を #define することはできません (マルチパスなし)
  4. コンパイラ間の構造パッキングの非互換性
  5. char は署名されていますか、または署名されていませんか?

ジャワ

  1. エッジでの不変性
  2. C# のような ref キーワードがない
  3. どこでもブロックを試行/キャッチ
  4. 実行時のパフォーマンスが低い
  5. すべての文字列関連のもの

パイソン

  1. 「メイン」なし(私はそれに慣れています!)
  2. 下線付きキーワード
  3. 制限付きスレッドのサポート
  4. 「これ」ではなく「自分」
  5. C/C++ のような構文の欠如
于 2008-11-12T06:41:12.843 に答える
3

.NETフレームワーク (ライブラリ)

  • ネストされた型はめったに使用されません (例:MessageBoxButtonであるべきですMessageBox.Button)
  • 可変構造体 ( Rect, Point)
  • System名前空間の要素が多すぎる
  • 平等の概念が多すぎる( Object.Equals, Object.ReferenceEquals, operator ==, operator !=)IComparable.CompareTo() == 0
  • 配列には変更可能なメンバーがありますが、長さは変更できません。

そしてもう1つ:

  • XmlSerialization は不変型では機能しません
于 2008-12-22T05:18:42.877 に答える
3

Haskell (基本的な Haskell'98 仕様だけでなく、すべての GHC 拡張を使用)。

私がそれについて嫌いなことが 1 つあります。それは、主流ではないということです。

于 2009-10-09T20:39:51.623 に答える
3

C++

(ラムダ関数を除いて、Cpp0Xで利用できるものは避けました)

  • メンバー変数にアクセスするために "this" を使用することを強制しません。::GlobalFunction を使用してグローバル名前空間にアクセスします。
  • のすべて (より具体的には、アルゴリズムにラムダ関数がないことは、0x thou で修正されます)
  • 依存関係/ヘッダーとソースファイルの世話
  • 基本的なデータ型のばかげた名前 (uint8、int16 などの名前にする必要があります)
  • const_cast 機能
于 2009-12-28T13:34:45.970 に答える
3

TCL

これは、ほとんどすべてを行うための私の絶対的なお気に入りの言語です。何年にもわたって、私を悩ませているほとんどのものに対処するために(ゆっくりと、非常にゆっくりと)進化してきました. また、この言語は非常に柔軟であるため、いまだに私を悩ませていることをカバーするために構文シュガーを簡単に実装できます。しかし、簡単に変えることができない言語については、その禅を壊すだけのものがあります:

  • 配列 (Perl がハッシュと呼ぶ連想型の配列) には、適切な値のセマンティクスがありません。これにより、関数への受け渡しが面倒になります。また、これはネストできないことを意味します。このため、辞書 (ディクショナリ) が発明されましたが、遅すぎました。素晴らしい配列アクセス構文です。

    $array($foo)

    下位互換性のために愚かな配列によって永久に使用されるようになりました。私たちは今行き詰まっています:

    dict get $dict $foo

    これははるかに冗長で、私には読みにくく感じます。

  • 本当の閉鎖はありません。グローバルまたは名前空間によってある程度エミュレートできますが、それはそもそも閉鎖の理由を無効にします。とはいえ、純粋な値のセマンティクス システムでクロージャをどのように実装できるかは、今のところよくわかりません。

  • Teacup は使いにくく、他のすべてのリポジトリ ツールと比較して直感的ではありません。これは tcl-core よりも ActiveState のせいであり、コーディング時に tcl の Zen を実際に壊すことはありませんが、それでも非常に厄介です。

于 2009-12-28T05:32:21.030 に答える
3

ここで C++ にもう 1 票... C と Python のいくつかの親しいフォロワーを持つ私のお気に入りです。これが私の現在の嫌いなリストです。順不同です。

  • C から継承された過剰な整数型 - 符号付きと符号なしの間違いによって引き起こされる問題が多すぎる
  • コンストラクターと代入演算子をコピーする - コンパイラーは一方から他方を自動的に作成できないのはなぜですか?
  • 可変引数の狂気 - va_list はオブジェクトでは機能せず、sprintf()、snprintf()、vsnprintf()、およびそれらの関連すべてで生じる問題にうんざりしています。
  • テンプレートの実装は、コンパイル時に完全に見えるようにする必要があります - 「エクスポート」実装または少なくとも使用可能な実装が不足していると考えています
  • プロパティのサポートの欠如 - "ax" のような読み取り専用メンバーが必要です。これはパブリックに読み取り可能で、内部でのみ割り当てられます。「val=obj.getX()」と「obj.setX(val)」は本当に嫌いです。アクセス制御と一貫した構文を備えたプロパティが本当に必要です。
于 2008-11-29T05:44:01.233 に答える
3

C#

私の不満のほとんどは、C++ の規則が自動的に C# の最適な選択であると仮定することに関係しています。

  • クラス インターフェイスでは静的は許可されません。それはまだクラスの一部です。インターフェイスの一部にできないのはなぜですか?! このために、私はそのようなばかげたハックのような回避策を作成しなければなりませんでした。
  • 大文字と小文字の区別。この時点でレガシーアプリが台無しになることはわかっていますが、大文字と小文字を区別しないことが最初からルールではなかったのはなぜですか

.NETのボーナス 1 (C# 固有ではない)

  • コンパイラが十分にスマートではありません。.NET 3.x では、コンパイラはコンパイル時に "var" を把握できるので、他の一般的な最適化を行わないのはなぜでしょうか? 私たちは皆、文字列と StringBuilder / 不変と可変のことを知っています。多くの場合、StringBuilder が複数の concat.s よりも優れていることが明らかな場合に、コンパイラがそれを変換しないのはなぜですか? コンパイラーがデフォルトで (上書きするオプションを使用して) 実行できる最適化が他にもたくさんあると確信しており、時間を大幅に節約できます。
于 2008-12-22T05:47:11.117 に答える
3

C#.

私が最も嫌いなこと:

  1. 多重継承なし - GUI フレームワークの基本クラス (コントロール、ウィンドウなど) を MVC で提供できると想像してください - 関連するものなど... フレームワーク/基本クラスに依存しません!

  2. 「友人」キーワードはありません... RAD - 被害者はあらゆる種類の悪臭を放つコードや陽気な不正行為のためにそれを悪用しますが、OOD - みんながデメテルの法則を施行するのはいいことです

  3. 言語に統合された DBC 機能はありません。コントラクトはありますが、汎用の「!」スタイルの Spec# が必要です。- 後置演算子

  4. AOP なし (わかりません... この言語には属性があります。コンパイラに傍受コードを追加するのはとても簡単でした!)

  5. 弱いイベント デリゲートはありません - オブザーバー パターンは、現在のようにメモリ リークのおとりにすぎません... :-(

于 2010-05-26T08:16:45.817 に答える
3

R

私の好きな言語ではありませんが、私はそれをよく使います。不満はたくさんあります...

  • S3 オブジェクトは美化されlists、S4 クラスは引き続きすべてのデータをユーザーに公開します
  • 代入演算子は<- ->またはにすることができます。Mike Dewar の暴言=を参照してください。
  • my.varオブジェクト指向言語の非常に紛らわしい変数命名規則です。Google のスタイル ガイドを参照してください。
  • ループを使って後悔する必要はありません
  • 不可解なエラー メッセージ
于 2010-05-25T21:09:38.153 に答える
2

C

  1. ビットフィールド-それらは言語によって適切に指定されておらず、それらがどのように機能するかはコンパイラに依存し、アーキテクチャに依存します。
  2. 大量のコード、特に特定のシンボルがどこで定義されているかを見つけるのは難しいことがよくあります。そのシンボルがマクロによって生成された場合。それは私に思い出させます...
  3. プリプロセッサはかなり醜いハックであり、あらゆる種類の悪用に適しています。
  4. 標準サイズの整数の欠如(最近uint * _tによって修正されましたが、DWORD、WORD、BYTEなどのカスタムtypedefまたは#definesを使用した古いコードがたくさんあります)
  5. Perlのcpan.orgに似たものがない(それについては間違っていると思います)。

編集:CのCPANについて考えているときに、私は...そのようなことを何と呼ぶか​​を考え、「ccan」について考え、それをグーグルで調べて、これに出くわしました:http: //ccan.ozlabs.org/

しかし、まだ初期段階のようです。

于 2009-02-20T03:55:34.293 に答える
2

C

  • それは非常に柔軟で強力なので、本当にひどい、またはまったく危険なコードを書くのは本当に簡単です(または、必要に応じて、「大きな力には大きな責任が伴います」)。
  • 割り当ての場合は「=」、平等の場合は「==」。'if'ステートメントで混乱しやすい。
  • 言語のいくつかの基本的な部分の実装は、コンパイラーに依存します。たとえば、基本タイプのサイズ、ビットフィールドのビットの順序、パディング、ユニオンのバイト順序。
  • ビットフィールドはパラメータ化できません(つまり、intの配列は使用できますが、ビットの配列は使用できません)。
  • 文字列の処理を改善できます。
于 2009-03-13T18:04:16.487 に答える
2

C++について私が嫌う5つのこと

  • リンク時間。分散ビルドを使用すると、リンカーの実行と同時にプロジェクト全体を再構築できます。
  • メモリ操作の並べ替えを防ぐ標準的な方法はありません。書き込み結合メモリを使用するには、通常、volatileキーワードを悪用する必要があります。読み取りの並べ替え(SIMD数学パイプラインを処理する際の最適化にとって重要な場合が多い)の防止は、通常、ルーチンの途中でnullASMブロックを挿入することで実現されます。
  • 文字列化の問題を回避するためのマルチステップマクロ:
#define STR_LINE2(x) #x
#define STR_LINE(x)   STR_LINE2(x)
#define LINE_NUMBER STR_LINE(__LINE__)

  • 文字列の操作を行うのは一般的に苦痛です。
  • 標準化されていないprintfバリアントの急増(vsnprintf_sと_vsnprintf_s)。
于 2010-05-25T20:24:25.573 に答える
2

Python:

私はまだPythonの適度なユーザーなので、私の不満は知識のロックや誤用かもしれません。コメントは大歓迎です。私はこの言語が大好きです。

  1. 不十分なスレッドサポートとGIL。マルチコアプラットフォームを利用したい場合、ほとんどのPythonプログラマーは、おそらくマルチプロセッシングまたは何らかの種類を推奨します。スレッド化は使用しないでください。それはあなたが期待するパフォーマンスをあなたに与えないでしょう。
  2. インスタンス変数のプロパティのみ。_class_var = property(classmethod(some_method))は機能しません。プロパティでラップされたクラス変数を取得するにはどうすればよいですか?
  3. アクセス制御なし。すべてのアクセス制御は構文マングリングです。privateは__private、protectは_protectedなどのように...そして、すべてのプログラムpythonが命名規則に従うことを願っています。さあ、私たちはそれよりもうまくやることができます。
  4. 私は、単純で明確な構文であるというPythonの哲学に同意しますが、サポートされていないいくつかの単純で明確な構文は、良い判断の鍵となるようです。a ++、++ a、a--、-a、自己デ/インクリメントなど、これらの何が問題になっていますか?foo =(a> b?a:b)単項演算、それらの何が問題になっていますか?(py2.6にも同様の機能が導入されていることは知っていますが、これらの単純な構文に対する他のほとんどすべての言語の大規模なサポートを考えると、なぜ車輪の再発明を行うのですか?ベストプラクティスに従わないのはなぜですか? "形"?)
  5. インターフェースするプログラム。Pythonにはインターフェースや抽象クラスの概念がなく(py3kにはabcと呼ばれるものがあります)、すべてが具体的です。クラススケルトンを構築し、クラスの継承と拡張を保護するために「interface」または「abstract」キーワードを提供することは、悪い考えではないと思います。トップダウン設計に役立ちます。現在、各メソッドにNotImplementedErrorを入力する必要がありますが、これは非常に面倒な作業です。
  6. これを追加する必要があります。3.x未満のバージョンには、str型とunicode型があります。これは本当の悪夢です。これにより、ASCIIと非ASCII / Unicodeの混合が失敗する可能性が最も高くなります(悪い、悪い)

私は人々がスピードについて不平を言うのを見ました。わかりません。そのインタプリタ言語、実行時までマシンコードにコンパイルされないコード、それはまさにその性質です。通訳言語とコンパイル言語の速度を比較することはできません。私が見る限り、解釈/スクリプト言語の中で、Pythonは遅くありません。

于 2009-06-16T03:34:47.627 に答える
2

Python:

  1. グローバルインタプリタロック-これに対処すると、並列処理が複雑になります。
  2. Lambdas関数は少し不格好です。
  3. 組み込みの順序付き辞書タイプはありません。
  4. Pythonのコンパイル方法に応じて、内部UnicodeエンコーディングにUCS-2とUCS-4のいずれかを使用できます。多くの文字列演算子と反復子は、デフォルトの幅を超えるマルチバイト文字に対して予期しない結果をもたらす可能性があります。文字列のスライスと反復は、文字をチェックしてカウントするのではなく、ビット幅に依存します。(他のほとんどのプログラミング言語も同様のことを行い、これらの文字に対して同様に奇妙な動作をします。)
  5. PythonのGUIフレームワークを取り巻く矛盾があります。
于 2008-11-14T06:27:52.567 に答える
2

Perl

私はこの言語が大好きで、すでに使用されているものを追加したくありませんが、まだ誰もこれについて言及していないので、ポットに入れます。この機能を使用したとき、それが私の人生で最も恐ろしい経験であることがわかりました(そして私はアセンブリ言語で作業しました):

  • およびwrite()関数format()

それらは、想像できる限り最悪の、最も醜い、最も恐ろしい構文を持っていますが、それでも、いくつかの(無限にきれいな)作業ですでに達成できる以上の機能を提供することはできません。これらの2つの関数がどれほど悪いかという理由だけで、これら2つの関数を使用して出力を実行しようとすることはできませprintf()

誰かが同意しないと確信していますが、彼らが私の問題を解決することを期待して彼らを調べたところ、彼らは「痛みの世界」(ビッグ・リボウスキを引用)であることがわかり、Perl6がどちらかを廃止したことを願っていますそれら、またはより良いことに、それらを完全に書き直して、いくらか使いやすく便利なものにしました。

于 2009-02-19T07:24:03.177 に答える
2

VBA(言語が悪いと思ったため)

  1. 行内の空白は厳密に適用されます。
  2. ステートメントは終了したばかりで、次の行に分割するには「_」が必要ですが、すべての行を分割できるわけではありません。
  3. ++、-、+ =、-=ステートメントはありません。真剣に?
  4. 配列は、0だけでなく、任意のインデックスで開始できます。
  5. 一部のタイプ(つまり、固定小数点の「10進」値)は、Variantのサブタイプである必要があり、独自のタイプとして使用することはできません。
  6. !=および<>。
  7. 「=」は、「=」と「==」に分割する代わりに、コンパレータと割り当ての両方として使用されます。
  8. 「オプション明示的」。
  9. UIは2000年以降更新されていません。
  10. Office2k7はVB.NETにアップグレードしませんでした
  11. ほとんどのオブジェクトモデルは無意味で、過度に冗長です。
于 2009-06-05T17:35:45.077 に答える
2

C ++

  • テンプレートが含まれている場合の不可解なエラーメッセージ
  • テンプレート制約の欠如(多くの場合、テンプレートメタプログラミングで回避できますが、これにより、ほとんどの場合、(少なくとも平均的なプログラマーにとっては)コードが読み取れなくなります)
  • メンバー関数構文へのポインター
  • c ++標準委員会は、公式標準をより頻繁にリリースする必要があります(または、少なくとも標準ライブラリ自体に個別の更新をリリースする必要があります)。つまり、実際にはTR1が2005年にリリースされましたが、標準ライブラリには、shared_ptr、bindなどがありません。
  • -
于 2010-05-25T20:34:45.823 に答える
2

図式:

  • ユーザーの不足/小さなコミュニティ
于 2008-11-15T10:48:55.880 に答える
2

C ++:

  • シンボリックインポートの欠如。
  • C互換性への過度の執着。
  • 途方もなく複雑なプリプロセッサ。
  • テンプレートエラーはほとんど理解できません。
  • ガベージコレクションはありません。
于 2009-01-03T03:08:09.563 に答える
2

クロージャ

  • 関数定義でのオプションおよびキーワード パラメータの組み込み構文の欠如。もちろん、簡単に追加することはできますが、それはライブラリの作成者がそれを使用しないことを意味します。パーベイシブ デストラクチャリングは、まだ優れた代替手段であることが証明されていません。
  • メソッドの組み合わせの欠如 (Common Lisp に見られる種類のメソッドの前/後/前後)
  • Java 相互運用性への依存度が高すぎる (組み込みのファイル IO がないなど)
  • 静的型付けが必要な場合があります。これは純粋な憎しみではありません。私は通常動的を好みますが、2 つを混在させる試みはほとんど満足のいくものではありませんでした
  • 組み込みのデータ構造用の組み込みの高速バイナリ シリアル化形式はありませんが、人々がそれに取り組んでいると聞いています。
于 2010-05-23T12:46:35.457 に答える
2

Common Lisp

  • インターフェイスはほとんど同じですが、条件はクラスではありません (クラスは後で登場したため)。
  • flet / labels (唯一の違い: スコープ)、defvar / defparameter (唯一の違い: 既に定義されている場合の動作)、または任意のビット操作関数 (dpb、ldb など) など、いくつかの名前は単に奇妙です。
  • パッケージは...正しく理解するのが本当に難しいです-私がそれらを理解していると思うたびに、それらは私が望むことをしません
  • 組み込みのデータ構造と関数は可能な限り汎用的ではありません (たとえば、独自のハッシュ関数を移植可能に定義できないのはなぜですか?)
  • 関数、変数などのための複数の名前空間 (私は原則としてこれに反対しているわけではありませんが、CL はそれを複雑にしすぎました。Norvig は仕様からは判断できないと述べていますが、少なくとも 7 つの名前空間があるようです)
于 2010-05-23T18:01:53.157 に答える
2

PHP

  • ほとんどすべての標準関数はグローバル スコープにあります
  • 関数の引数の順序が矛盾しています
  • 一貫性のない関数名
  • 大文字と小文字を区別しない関数
  • php.ini ファイルによってスクリプトの動作が異なる場合があります
  • 未定義の変数を使用できるようにする
  • 場合によっては、結果を関数で使用する前に変数に代入する必要があります

そして、はるかに主観的に:

  • 動的型付け
于 2009-09-10T08:55:18.250 に答える
2

PHP:

  • 不条理な assert() 関数...内部のコードで eval() を実行します
  • ?> タグは、それに続く改行をすべて削除します ?!
  • 数値文字列の奇妙な処理 (配列キーとして試してください)
  • PHP 6 で解決されると思われる厄介な Unicodeサポート
  • 参入コストが低いということは、95% が PHP プログラマーに恐ろしい名前を付けることを意味します。
于 2010-05-26T00:37:18.520 に答える
2

c#:

1) 静的メソッドはクラスのメンバーでなければなりません

2) 静的拡張メソッドは静的クラスにのみ追加できます

3)インターフェイス関数の実装は、それらが基本クラスまたはインターフェイスからのものであることを示すために「オーバーライド」のようなものでマークされていません(コードレビューだけで、期待するメソッドを(正しい署名で)オーバーライドしていることを確認するのが難しくなります) .

私はちょうど3つ持っています。それはかなり良いと思います。

于 2009-06-12T23:25:49.107 に答える
2

パイソン

  • sに記載はありませんlambda。ぐらぐら
  • foo( a for b in c if d )うまくいかないたびに驚かされます。そうあるべきではありfoo( (a for b in c if d) )ませんか?
  • 私は辞書の理解を持つことができますか?
  • map および filter 演算子は、リスト内包表記で特別な構文を持っています。またはソート?
  • ステートメントを入れるだけyieldで、関数は魔法のようにジェネレーターに変換され、そのインターフェイスは完全に変わります。また、そのジェネレーターは、最初のnext(). 少なくとも、ジェネレーターを返す関数を使用しないわけではありません。

JavaScript

  • モジュール コード ライブラリを作成するための簡単な構文はありません。パブリック メソッドの辞書を返す関数を呼び出す必要があります。そして、モジュールのインターフェイスを変更するたびに、(少なくとも) 2 つの場所でそれを編集する必要があります。
  • クロージャーを作成するには、('sup dog) yo' 関数から関数を返す関数からそれを返す必要があります。乱雑!
  • for each ( foo )構文と動作は後付けのように感じます。
  • コードが実際に実行されるタイミング (および実行順序) を知ることは、より暗い芸術です。確実に正しくする唯一の方法は、すべてを (そうです、それも) 1 つの大きなファイルに入れることです。それでも document.onload を待つ必要があります
  • 何か不足していますか?手で構築せずにjsonのシリアル化された値を取得する簡単な方法はありませんか? (はい、jQueryはこれを行うことができます)。
于 2009-04-10T12:45:34.800 に答える
2

C++には優れたリファクタリング ツールがなく、チェック例外もありません

Javaテンプレートの欠如、constキーワードの欠如

于 2009-07-13T06:32:59.260 に答える
2

なかなかフルタイムで使えないのでギリギリですが、とにかくやってみます!

パール6

  1. func("フリュー") != func ("フリュー")
    • それは私を悩ませますが、それには正当な理由があります。Perl 5 print (5 + 6) * 10 では、時々私を取得します
  2. 多くの場所で Perl 5 よりも解析しやすいかもしれませんが、それでも時々エディターが強制終了されます
  3. 多くの人を怖がらせる Perl 5 の回線ノイズがまだたくさんあります。それは、彼らを興奮させるのが難しいことなどを意味します.
  4. ライブラリはまだありません。
    • Perl 6 が実際に Perl 5 をサポートすることになる場合、これは問題にはなりませんが、それは負担に値しない負担になる可能性があります。
  5. REPL、または ruby​​ist が irb と呼ぶものはありません。
    • タブ補完、色分けなどを備えた堅固なインタラクティブな Perl 6 は、それを使用して学習するのに非常に便利です。
  6. 現在、ドキュメントは基本的に英語仕様です。正確に読むのは簡単ではありません。
  7. 私はそれがばかげた決まり文句であることを知っていますが、まだ出ていません!
    • (私は助けているので文句を言うことが許されています:-P)

最初の 3 つは言語です。残りは実際には言語そのものではなく、まだ出ていないという事実です。

于 2009-02-23T04:43:35.590 に答える
2

図式

  • 静的型付けの欠如
  • フィールドアクセサーの長い名前につながる静的関数のオーバーロード(上記による)はありません
  • 統一オブジェクトシステムなし
  • ちょっと遅い
  • 比較的小さなコミュニティ
于 2008-12-10T01:53:22.300 に答える
2

EL - 式言語、JSP ページおよび JSF 2.0 Facelets の${...}and#{...}であり、基盤となる Java コードからデータを取得するために使用されます。

  • パラメーターを使用したメソッド呼び出しや注釈ベースの命名など、楽しいことはすべて、Glassfish v3 でのみ利用可能な Java EE 6 の EL にのみ存在します。
  • 1) 以前の Servlet 2.5 コンテナーに適した jar を取得すること、および 2) コンテナーで使用可能な以前の実装に干渉することなくそれらを機能させることは非常に困難です。
  • 1.2 のような以前のバージョンの JSF しかないため、メソッド呼び出しが不要になり、f:setPropertyActionListener で作業する必要があります - http://weblogs.java.net/blog/2009/07/22/say-sayon ​​ara-spal - これは、これについて私を信じてください、あまり良くありません。
  • EL パーサーは、解析して解釈するスニペットがどこから来たかわからないため、少なくともどのタグが不機嫌になったかを特定できるように、すべてに ID を与える傾向があります。
  • Eclipse は JSF 1.2 であるため、EL メソッド呼び出しのたびに警告を出します。あまりにも。
于 2010-09-09T17:06:57.373 に答える
2

パイソン

  1. Python 3 用の Django はありません。
  2. 静的型付け。はい、動的型付けは素晴らしいことですが、静的にしたい場合もあります。
  3. 適切な Unicode サポート (Python 3 で修正済み)
  4. コンストラクターの命名。私は自分のコードの __in__ の下線がすべて嫌いです。
  5. スレッドはあまり効率的ではありません
于 2010-05-26T01:53:17.677 に答える
2

C#

  • 参照型はデフォルトで null 可能です。言語内の null キーワードは型指定されていません。
  • 差別された組合の欠如
  • Exceptions as default、非例外的なエラー処理方法 - 代替手段はあまりありません。
  • 古い switch ステートメントの構文と制限事項
  • コンストラクターと静的メソッドの不要な区別
  • 静的メソッドをインターフェースの一部にすることはできません
  • 明示的なインターフェイスの実装ではなく、形状によるインターフェイスの実装の欠如 - linq クエリ構文、foreach、コレクション、オブジェクト初期化子などの多数の言語設計ハックにつながります。これらはどれも柔軟に再利用できません。たとえば、オブジェクト初期化子の構文は優れているかもしれませんが、不変オブジェクトではうまく機能しません。
  • 実装とは独立してクラスの「インターフェース」を継承することはできません。コードの重複と、インターフェース、抽象基本クラス、いくつかの一般的な実装を提供するコードのオーバーアーキテクチャにつながり、使用するそれぞれのビットを選択して選択する方法がありません。また; インターフェイスではなく実装タイプを明示的に参照することが一般的であるため、特定の実装に密接に結合されたコードが多すぎます。
  • クラスの「インターフェース」はその実装に密接に結合されているため、合成による多重継承はできません。ミックスインの効果的な欠如。
  • 上記のインターフェイスの制限により、どのような種類の階層でも自然に重複しない、実質的に同一のインターフェイスが急増します。 IComparablevs. IEquatablevs. vs. IComparable<T>object.Equals vs. operator == など。拡張すると、これらすべてを満たすカスタム型を作成するのは、必要以上に手間がかかります (特にコレクション クラスの場合)。明らかに、言語設計者はこれを認識しているため、linq、foreach、コレクション初期化子など、インターフェイスではなく形状ごとに機能するさまざまな回避策があります。
  • レイアウトは構造ではなく、括弧と中括弧の冗長な使用。
  • 戻り値は無視される可能性があり、型推論の有効性が制限されます。
  • 列挙型は通常の型ではなく、メソッドを持つことはできません。また、列挙値はタイプセーフではなく、値が 0 でなくても 0 に初期化される場合があります。フラグ付き列挙型とフラグなし列挙型をまとめて比喩を混ぜ合わせる。
  • 適切な値の型がサポートされていません。値の型は継承できず、コンストラクターのセマンティクスが異なり、CLR の制限によりパフォーマンスが低下します。また、値の型に関する紛らわしいセマンティクス: 一部の値は実際には値であり (変更できません)、他の値は実際にはエイリアスがなく、null 以外の参照 (変数) です。これは、次の問題に関して特に混乱を招きます。
  • フィールドとプロパティのセマンティックな区別、特に可変修飾子の欠如との関連 (ala C++ のconst)
  • ジェネリックを特化できない
  • デフォルトのジェネリック型パラメーターを提供できません (例: ファクトリー ジェネリック)
  • typedef がないため、ジェネリックスを使用するのが苦痛になります (usingは限定的ではありますが、知っておくと便利な代替手段です!)
  • 型以外のもの (関数、単純な値、名前など) を一般化することはできません。これは、依存関係プロパティの一般的な実装を作成するようなことはできないことを意味し、結果として、依存関係プロパティやコードスニペットの乱用や読みにくいコードなどの厄介な実装につながります。
  • int、double、および bigint の両方を使用するジェネリック sum メソッドなど、ジェネリック型の要件を指定する機能が制限されています (トリッキーでしばしば遅いハックは必要ありません)。
  • インターフェイス メソッドの実装または仮想メソッドのオーバーライドは、より具体的な型を返すことも、より一般的な型を受け入れることもできません。つまり、C# 4 でも限定的な共変/反変のサポートです。
于 2010-05-23T12:07:39.710 に答える
2

Nemerleで私が憤慨している 5 つのこと:

  • ローカル関数は生成できません
  • ラムダをコンパイルする能力は、インライン化されるかどうかに依存することがあります
  • タプルの一貫性のない値/参照型のセマンティクス
  • 配列インデックスと型引数の間の時折のあいまいさ
  • 一般的な採用の欠如
于 2010-05-23T12:08:59.633 に答える
2

C#

  • メソッド引数の実行時の型に基づく複数のディスパッチの欠如。dynamicこれのほとんどを解決する必要がありますが、まだリリースされていません。
  • インターフェイスの実装は、構造的ではなく宣言的です。Google のGo言語の型 のやり方が本当に好きです
  • 非同期メソッド呼び出しを行うのは非常にかさばります (そして、すべてのスレッドが軽量スレッドではなく OS スレッドであると確信しています)。
  • マクロシステムはありません。ここでは、C スタイルのマクロについて話しているわけではありません。LISP/Scheme スタイルのマクロについて話している
  • 演算子は静的メソッドであり、その署名は過度に制約されています (また、新しいものを作成することはできません)。

  • 于 2010-03-22T17:58:56.880 に答える
    2

    R (統計の R プロジェクト)

    1. ひどい、ひどい文字列サポート
    2. クロス集計などの単純な記述タスクでは驚くほど難しい
    3. 大規模なデータ セットの操作はメモリ内で行われます。
    于 2009-01-06T19:09:21.463 に答える
    2

    ルア

    私は Lua でのプログラミングが大好きですが、ここに私を悩ませているものがあります。

    1. API を言語で書き留める方法はありません。C の .h ファイルや Java インターフェイスのようなものではありません。
    2. この言語には一流の機能がありますが、ライブラリを設計した人々に伝えるのを忘れていた人がいます。
    3. 関数を書くための構文はあまりにも重いです。
    4. 構文はステートメントと式に分かれています。
    5. 表現形式が貧弱です: 'let' 形式がなく、真の条件式がありません...

    にもかかわらず、私は Lua がとてつもなく素晴らしいと主張します :-)

    于 2008-12-04T08:17:58.033 に答える
    2

    C# について:

    1. Java のように、メソッドからスローされる例外を指定するキーワードがないのが嫌いです。XML コメントを使用するよりも、例外を文書化するためのはるかに優れた方法です。
    2. また、制約の oring や anding などの一般的な制約については、より優れた構文が必要です。
    3. メソッドが複数の値を返せないのはなぜですか?
    4. 言語でのアスペクト指向プログラミングのサポートの欠如。
    5. プロパティアクセサーのそれぞれに属性で注釈を付けられないのはなぜですか?
    6. perl のような組み込みの正規表現サポートの欠如。
    于 2010-05-25T20:47:35.757 に答える
    2

    パイソン

    1. 標準ライブラリは、多くの場所で独自のスタイル ガイドラインに従っていません。(PEP-8)
    2. Py3k の super キーワードは不要な魔法でいっぱいです (別の名前に割り当てることはできず、selfなしで機能します。なぜこの明示的なパラメーターがあるのでしょうか?)
    3. Py2k では Unicode のサポートが不完全で、Py3k ではうまくいきません (Unicode では標準入力、バイナリ データはありません! WTF? 新しい WSGI 標準を作成するのはハックです。)
    4. ギル。非常に限定的なマルチスレッド サポート (CPython を使用)
    5. PyPI (Python Package Index) は最悪です。rubygems に羨望の眼差し
    于 2010-05-25T22:25:40.410 に答える
    2

    ハスケル

    1. 型システムが後ろ向きに感じることがあります。コンパイラに変数の型を推測させたくない場合はどうすればよいですか? 上記の変数の制約チェックを行う反対が必要な場合はどうすればよいですか? たとえば、リストの要素の型を推測する代わりに、それらがすべて特定の型クラスに属していることを確認します。これは微妙ですが大きな違いであり、UI のプログラミングを難しくしています。それはできますが、他の言語よりも手間がかかります。Haskell は、UI 以外の部分には優れていますが、UI は型指定されていない言語に任せています。

    2. 無限値の構築を許可すると、非常にイライラするエラーが発生することがあります。

    3. NoMonomorphismRestriction。

    4. バイト文字列の処理はときどき頭を悩ませますが、プログラムがクラッシュするまで、バイト文字列を不適切に混同したために、それを知ることはできません。これを防ぐべき型情報が失われている場合、ここで何かが間違っています。

    5. 型クラスは、witness 型などの些細なケースに対して自動的に派生する必要がありますが、そこで悪用される可能性が高くなります。

    于 2010-05-25T18:35:50.847 に答える
    2

    Python、再び:

    1. スイッチ キーワードはありません。いいえ、辞書はそれに代わるものではありません。たくさんのelifステートメントさえありません。

    2. 一貫性のない改行処理。できる理由:

       test = (1,
               2,
               3)
      

      そしてそうではありません:

      from itertools import cycle,
                            islice,
                            izip
      

      できない理由:

      if stuff \
         and foo \
         or bar:
          return "Formated string with %(arg)s" % \
                 {'arg': "bloody slash"}
      

      スラッシュを使わずに?

    3. それを行うための明白で唯一の方法はありません。Java が「一度書けばどこでも実行できる」で失敗したように、Python はそのモットーで失敗します。

      # what somebody from an another language would do
      if not test.has_key('foo'):
          test['foo'] = 0
      n = test['foo'] = test['foo'] + 1
      

      # what an agnostic beginer would do 
      try:
          test['foo'] += 1
      except KeyError:
          test['foo'] = 1
      n = test['foo']
      

      # what you end up after looking for dictionary default value in the python doc
      test.setdefault('foo', 0)
      n = test['foo'] = test['foo'] + 1
      

      # what I would do
      n = test['foo'] = test.get('foo', 0) + 1
      

      そして最悪なのは、まったく同じことをしていないことです。微妙な違いがあります。

    4. スペースとタブの選択。選択の余地はありません。選んで、それを石に置き、戦いをやめてください。

    5. なぜそれができるのか:

      test = {}
      test['foo'] = 0
      

      だがしかし:

      test = []
      test[] = 0
      

    PS:" ".join(l)いい人です。それについて不平を言うのはやめてください。明らかではありませんが、反復子パターンを念頭に置いて、それを行うのにちょうどいい方法です。

    于 2010-05-23T13:27:45.457 に答える
    2

    私は Java を使用していますが、私の最大の問題は、文字列操作の非効率性です。+ 演算子を使用する場合。真剣に、コンパイラは、追加している文字列の数を把握して、バックグラウンドで StringBuffer のものを生成することはできませんか?

    + を使用するコードは、一連の StringBuffers 操作よりも読みやすいことがよくあります。

    また、ネイティブ配列とコレクション フレームワークの間の冗長性も嫌いです。.toArray() の構文は非常に醜いです。

    于 2008-11-11T22:35:19.097 に答える
    2

    目的 Caml

    1. 名前空間機能の欠如。
    2. 冗長なクラスとオブジェクトの表記。
    3. 複雑なビルド システム。
    4. 中置するのが不便。
    于 2008-11-14T00:00:49.870 に答える
    2

    私が好きな言語について最も嫌いなことは、私の選択が変わり続けることです. The Oneを見つけたと思うたびに、5 つ (またはそれ以上) 嫌いなところが見つかります。そしたら向こうの芝生が青く見える…

    于 2011-01-27T04:44:15.547 に答える
    2

    C#

    (int)私はそれがばかげていることを知っていますが、私が追加したり何かを追加したりすることなく、データ型を自分で必要なものに変換したいと思いConvert.ToInt32ます。時間を節約するだけです。そして、 を出力するために何かを書いたint後、 が必要であることが判明した場合long、それを機能させるために行ったことすべてを実行して変更しなければならないことがよくあります。私のためにそれをしてください!

    申し訳ありませんが、5つ思いつきませんでしたが、私はそれが初めてなので、後で戻ってきてさらに追加するかもしれません:P

    于 2010-05-25T18:41:19.447 に答える
    2

    Javascript;

    1. 「this」の動的バインディングは、何をしているのか正確にわからない場合、非常に混乱し、危険です。
    2. 関数宣言にはキーワード「関数」が必要です。私が反対するのはタイピングではなく、ちょっと賢いことをしたいときに読むことです。うーん、それはプラスかもしれないと思います。私が賢いことをするのを思いとどまらせます。
    3. 番号 2 の結果として、コード セグメントを関数として宣言するよりも、コード セグメントをコピー/貼り付けする方が (文字数に関して) コードが少ないことがよくあります。残念ながら、これは特に私自身のコードで悪い習慣を助長します。
    4. Javascript は、ファースト クラスの関数とクロージャを持つことによって関数型言語であることを示していますが、実行時またはコンパイル時に関数の参照透過性を検証する方法はありません。これがないと、一部のアーキテクチャは危険またはかさばります。
    5. その素晴らしく評判が悪いため、笑わずに「私はjavascriptでプログラムしています」と誰にも言えません。
    于 2009-01-03T13:33:55.837 に答える
    2

    Common Lisp

    • より最新の機能 (ソケット、スレッドなど) の標準ライブラリの欠如
    • ネイティブ ウィンドウ システムにマッピングされる標準化された UI を使用できる
    • ラムダ式を変数に代入し、その変数を関数呼び出しとして直接使用する Scheme の機能は、FUNCALL の APPLY よりもきれいに見えます。複数の名前空間を持つことの副作用だと思います
    • 複数の実装から簡単に使用できるように、ライブラリの標準化されたソースレベルのパッケージング システム

    強く型付けされた Lisp はどのようなものになるのだろうか

    于 2009-10-09T19:59:12.220 に答える
    1

    MEL(マヤ表現言語):

    • 単一次元配列: 2つ以上のリストを手動で同期するか、区切り文字列を使用してより複雑なデータ構造をシミュレートするように強制します。当然、それらも不変です。
    • シングルスレッドで低速:タスクの完了中にMayaアプリケーション全体がハングします。長い操作を強制終了できず、代わりにMayaを閉じて再度開く必要がある場合のボーナスポイント。
    • スクリプトソーシングパスは再帰的ではありません。つまり、スクリプトを保存するすべてのディレクトリをスクリプトパスに追加する必要があります。
    • 名前空間なし:グローバルプロシージャが衝突しないように、命名規則の一貫性のない使用を強制します。
    • モーダルコマンド: 各コマンドはモーダルです。つまり、作成、変更、およびクエリの操作はすべて、フラグを設定することによって処理されます。これにより、開発者はほとんどのコマンドで配列を返すようになりました。
    • 一貫性のないコマンドスタイル:ほとんどの配列コマンドは実際には配列を返しますが、Tokenizeコマンドは、配列を吐き出すのではなく、配列を参照として取得し、それを入力する必要があります。これは他の矛盾の中でもとりわけです。

    これらおよび他のいくつかの理由により、AutoDeskはPythonを二次スクリプト言語として採用しました。これにより、他のいくつかの厄介な要因が発生します。

    • すべてのMELコマンドがサポートされているわけではありません。ほとんどがサポートされていますが、時々、mel()関数を使用して任意のコードを実行する必要があります。さらに悪いのは、あなたがそれにしなければならないすべての厄介な脱出です。
    • モーダルコマンドスタイルを継承します。同じcreate=True、query = True、edit=Trueのものを使用する必要があります。
    于 2008-12-17T03:40:18.323 に答える
    1

    REBOL

    REBOL is among my favorite languages. I can't say that I have a favorite, though Haskell ranks pretty high as well.

    1. Its odd syntax scares off many developers before they even give it a try.

      use [email rules url] [
      
      
      ; A small DSL that sends email to people about URLs.
      rules: [
          some [
              into [
                  set email email!
                  set url url!
                  (send/subject email url reform [ "Check Out" url ])
              ]
          ]
      ]
      
      ; Global context
      notify: func [ [catch] dsl [block!] ] [
          unless parse dsl rules [
              throw make error! "You screwed up somehow."
          ]
      ]
      
      ] notify [ [ a@b.com http://www.google.com ] [ b@c.com http://www.yahoo.com ] ]
    2. Recursive dialects are very easy to validate with PARSE but very difficult to evaluate. (Stacks can be helpful here.)

    3. REBOL has very poor integration with many popular technologies, particularly XML. I suspect this is partly arrogance, because the REBOL BLOCK! datatype can do almost everything XML can do. However, the real world has XML in it.
    4. No Unicode.
    5. Thanks to AltMe, REBOL's user community is very insular. I can understand why they want to use AltMe. It's written in REBOL and shows off its strengths. Unfortunately it also puts them off on their own little island.

    The upcoming REBOL 3 will hopefully fix many of these issues, except for the last one.

    于 2009-06-12T23:18:11.137 に答える
    1

    Java-言語レベルでの構成はサポートされていません

    于 2010-05-26T08:30:07.713 に答える
    1

    スカラ:

    • 標準ライブラリの奇妙さ: 常にベスト プラクティスを示すとは限らず、文書化が不十分です
    • ハードコーディングされた FunctionX、TupleX クラス
    • プロパティの欠如: ゲッターとセッターが分離されているため、DRY に違反し、FRP などをほぼ不可能にします
    • プロパティを初期化するには = _ が必要
    于 2010-02-16T12:50:21.917 に答える
    1

    C#

    1. 型が数値かどうかを確認する簡単な方法はありません
    2. これは、Microsoft スタック、IIS、および MSSQL のほとんどを使用している可能性が高いことを意味します。
    3. C# は、特定の問題に特化したツールではなく、あらゆるパラダイムに対応する言語になろうとしています。
    4. コミュニティの欠如。確かに、C# 用のオープンソース フレームワークとライブラリが登場し始めています。Java 開発者が何年も利用できるものと同じものです。
    5. 良い助けを見つけるのは難しい。インターネットには、C# で問題を解決する方法の貧弱な例が散らばっています。これは問題 3 に戻ります。
    于 2010-05-25T19:05:44.247 に答える
    1

    パイソン3

    • タブとスペースの両方でインデントを許可
      そして、人々は過去 (Makefile) から学ぶと思うでしょう。スペースを選んでタブを禁止するだけです。YAMLはそれを正しくしました。
    • 人気のあるサードパーティ ライブラリ
      の欠如 標準ライブラリは優れていますが、Python 2 を非常に強力にする多くの要因はサードパーティの領域にあります。Python 2 はこれを正しく行いました :-)。
    • IEEE 浮動
      小数点数 プログラミング言語の浮動小数点数は、数学で使用する方法とは異なるため、混乱を招きます。代わりに、数値演算は、必要な場合 (つまり、画面への出力) にのみ小数点形式に変換される式として表示する必要があります。Maple と Mathematica はこれを正しく行ったと思います。
    • 識別子の文字セットが制限されすぎているか、
      list.empty?よりも優れています。同様に、よりも優れています。Ruby と Lisp はこれを正しく理解しています。list.is_emptylen(list) != 0process.kill!process.kill
    • 関数を呼び出すときは、常に括弧を書か
      なければなりません 。明確な場合に括弧を省略できればいいのにと思います。またどうですか?dict.itemsまたはdict.items()Rubyもこれを正しく理解しました。
    于 2010-05-25T22:06:21.207 に答える
    1

    Delphiの私の5:

    1. プロシージャーと関数は、パラメーター化されていない場合、必ずしも変数と区別されるとは限りません (たとえば、 x := GetPositionOnScreen(); の代わりに x := GetPositionOnScreen; などのステートメントを使用できます)。
    2. Try/Finally と Try/Except はネストする必要があります (前に 1 回述べましたが、これも私のものです)。
    3. 大文字と小文字を区別しません。
    4. 同じ名前の複数のオブジェクト(関数、グローバル変数、ローカル変数)を持つことができ、Delphi は喜んであなたの意図を理解しようとします。名前は一意である必要があります。
    5. 条件規則の場合は奇数です。単一の条件付きチェックでは、それを () で囲む必要はありませんが、複数のチェックを行う場合は、それぞれを () で囲み、より大きなチェックのためにネストされた複数のセットが必要になる場合があります。
    6. 継承されたインクルードはありません。基本フォームと継承フォームで Windows ユニットの機能を参照する必要がある場合は、両方に Windows を含める必要があります。
    于 2010-03-23T17:09:28.893 に答える
    1

    JavaScript

    ECMAScript 5 仕様から:

    • 7.6.1.2 今後の予約語:

      クラス、列挙型、拡張、スーパー、const、エクスポート、インポート

      厳格モード: implements、let、private、public、interface、package、protected、static、yield

    • 11.9.4 厳密な等号演算子 (===) と 11.9.1 の TheEqualsOperator(==) の比較
    • 11.9.6 厳密等価比較アルゴリズム (NaN === NaN は偽)
    • 8.5 数値型 - 実数の整数はありません。すべてが float です。
    • 4.2.1 オブジェクト - プロトタイプの継承

    わかりました、最後の方はちょっと楽しいですが、7 種類でややこしいです

    于 2010-05-25T20:30:30.913 に答える
    1

    もう少し考えてから書き直しました...

    PHP は好きだけど嫌いな 5 つのこと (順不同):

    • 組み込み関数の命名とパラメーターの順序に一貫性がありません。
    • SPL のおかげで配列に対するオブジェクト指向のアプローチが可能になりましたが、残念ながら文字列には (まだ) 対応していません。
    • PHP 自体には実際の同時実行性はなく、ホスティング Web サーバーのマルチプロセッシングを介してのみ実行されます。
    • JavaScript のような非同期呼び出しはありません
    • 拡張機能を介したオペコード キャッシングのみ。悪くはありませんが、ただ迷惑です。

    これらは私を悩ませている言語機能 (または欠如) ですが、より大きな問題は、これらのより多くの人々/コミュニティ関連のものです。

    1. PHP を使用している多くの人が、プログラミングや一般的な優れた実践について何も知らず、非常に厄介なコードを生成しているという事実。JavaScript にも同じ問題があります。

    2. 本当に悪い習慣やスタイルを教える膨大な量のチュートリアル/本。これが 3 の主な原因かもしれません。

    3. それが開発した悪い評判は、主に#3と#4が原因です。

    于 2010-05-23T11:21:20.230 に答える
    1

    ルビー。

    1. 奇妙なスコープ規則 - 変数、定数、およびメソッドはそれぞれ、互いに異なる動作をします。ルールは、クロージャの作成に使用したキーワードによっても異なります。または、クラス、固有クラス、オブジェクト、モジュール、またはモジュールの自己にいるかどうかについて。次に、ルールを別のルール セットに変更する instance_eval があります。そして、モジュールが「含まれる」または「拡張される」と、それら自体がスコープに対して異なることを行うと、再び変更されます。また、一部のルール セットはメタプログラミングではエミュレートできないため、eval を使用する必要があります。これらすべてが異なる Ruby 1.9 を使用している場合を除きます。
    2. 名前空間は基本的に役に立ちません。Foo::File がある場合、stdlib ファイルはおそらくすべての Foo で壊れています。
    3. require ステートメントが壊れています。2 つのファイルが相互に必要な場合、それらのファイルの動作は、どこから最初に読み込まれるかによって劇的に変わる可能性があります。
    4. ライブラリは API を劇的かつ突然変更するため、すべての依存関係に特定のマイナー リビジョン番号を要求する必要があります。システム上のすべての Ruby アプリケーションに対して。
    5. rubygems パッケージ システムは、検索パスにファイルを配置するのではなく、"require" をオーバーライドします。なぜなら、システムを置き換えることができるのに、なぜシステムを使用するのでしょうか?
    于 2010-05-25T21:22:51.993 に答える
    1

    パイソン

    私が理解していないもの...

    • math.ceil()整数ではなく浮動小数点数をmath.floor()返します (おそらく、基になる C 関数での整数オーバーフローを回避するためですが、Python の long にキャストしないのはなぜですか?)
    • len()メソッドではなく関数です
    • reload()非常に制限されており、10 回のうち 9 回はモジュールをリロードせず、インポートされたラベルがモジュールである場合にのみリロードします。つまりfrom bar import foo; reload(foo)、foo 自体がモジュールでない場合は実行できません。
    • 変更可能なデフォルト引数には単一の参照があります (関数呼び出しごとに新しいインスタンスを作成しないのはなぜですか?!)
    • これらの下線付きの変数はすべて、非常にプライベートなものであるのに、組み込みの変数がコードに多く含まれているのはなぜでしょうか? 名前空間を手に入れよう!
    • 文字列は可変ではありません - これには正当な理由があるかもしれませんが、特定の文字を微調整したい状況に何度も遭遇しました...

    実装上は理にかなっているものの、煩わしいもの...

    • array.sort()配列を返しません(インプレースで発生すると思います)
    • リスト/ジェネレータ内包表記は新しいスコープを定義しません (forループの構文糖衣に過ぎませんよね?)

    および Python 3 で修正されたカップル

    • デフォルトで整数除算
    • global最上位の名前空間のみを参照できます
    于 2010-02-07T21:23:28.320 に答える
    1

    VB .NET、ただしVB6が全世代のプログラマーを毒殺したから

    私は以前VB6ショップだったVB .NETショップで働いており、VB6開発者だったここで働くすべての人は頑固に.NETについて学ぶことを拒否しています。彼らはまだVB6であるかのようにコーディングし、彼らのアプリはVB6アプリと同じようにうまくいきません。私の上司は、LINQ を他の人が理解するのは難しすぎるのではないかと恐れているため、積極的に LINQ の使用を思いとどまらせています。

    MS が C# を採用していれば、私たち全員がもっとうまくやっていただろうと思います。中括弧は VB の冗長な締めくくりのステートメントよりもはるかに劣っていると思うので、これを言うのは私を殺します。

    于 2010-05-25T20:38:42.987 に答える
    1

    クエンヤ

    • コミュニティが小さすぎる。近くに別のスピーカーを簡単に見つけることができない場合、優れた言語イマージョン プログラムを実行することはほぼ不可能です。
    • 不規則動詞。はい、私は英語とスペイン語もそれらに言及したことを知っていますが、Quenyaは発明されました. なぜまだ不規則動詞が必要なのですか?
    • Unicode はサポートされていません。ほとんどのメッセージを読むには、コンピューターに 3 つの異なる Tengwar フォントをインストールする必要があり、そのうちのいくつかはカーニングが不十分です。ローマ字表記が存在することを考えると、これは実際には大きな問題にはなりませんが、Tengwar は非常に美しいので、使用したくありません。
    • Quenya ではすべての概念を簡単に参照できるわけではなく、わずらわしい回りくどい話につながったり、シンダー語、ヌーメノール語、または (マンウェは私を救ってくれた) クリンゴン語に訴えたりして、私の主張を理解することができます。

    于 2009-11-25T07:17:56.597 に答える
    1

    C#

    私は C# にとても満足していますが、次の 2 つは本当に私を悩ませます。

    • 不変クラスのコンストラクターベースの初期化は、不便で直感的ではなく (コードを読んだときに、何を何に割り当てているのか理解できません)、インライン オブジェクトの初期化よりも IDE のサポートが少なくなります。これにより、必然的に可変クラスに傾倒します。これは以前にも言及されていることは知っていますが、不変クラスの初期化構文には厳密に問題があります。

    • switch冗長すぎます。switch が適切な状況を見たときはいつでも、if..else if..より簡潔であるという理由だけで、 を使用する傾向があります (入力が約 30% 少なくなります)。breakスイッチのフォールスルーがあってはならず、暗示されるべきでありcase、コンマ区切りの値のリストを許可する必要があると思います。

    于 2010-05-23T14:59:59.260 に答える
    1

    多くの人によると Java は遅いですが、ある程度の使用には同意します。

    Java は劇的です。やりたいことのためにたくさんのクラスがあります。しかし、あなたは柔軟性の特性 XD を知っています。

    Java は最初は難しいですが、いつものように楽しいものです。

    「Hello,World!」を出力するための簡単なコードを書いているとき。Java は使用しないでください。XD私は正当化されていると確信しています。

    Java は混合物であるため、純粋に OOP 言語であるとは言いません。

    他にもたくさんありますが、私は 5 つの XD に制限されています。ありがとう!

    于 2010-05-23T16:54:33.900 に答える
    1

    C#

    C# のこれまでで最も嫌いな点は次のとおりです。

    (1)イベントはすべてのリスナーへの強力な参照を持っているため、イベントをリッスンするあらゆるもののガベージ コレクションを防ぎます。これが引き起こした問題を確認したい場合は、何らかの「弱い参照イベント ハンドラ」を作成して問題を解決しようとしたすべての人をネットで検索してください。

    (2)呼び出す前にイベントが null に等しいかどうかを確認する必要があるのは、言語で処理する必要があるようです。

    (3) XML シリアライザーには、XML ファイル内のコメントを読み書きする方法がありません。XML ファイルが手作業と C# で記述されたツールの両方で変更される環境では、あまり適していません。生の XmlDocument を使用するだけで回避できますが、それをクラスに抽象化できる方がよいでしょう。

    (4)ビルド プロセスでは、xsd ファイルなどに直接アクセスすることはできません。代わりに、C# 部分クラスを作成する中間ステップが必要です。これにより、XAML ファイルで問題が発生し、変更を適切に処理するために 2 回再構築する必要が生じることがあります。

    (5) MMX や SSE 1、2、3、4 などの CPU 組み込み関数はサポートされていないため、C# アプリの実行時にこれらの貴重な CPU 機能が利用されません。

    私のトップ5に入らなかった他のもの:

    (6)フィールドをプロパティとしてタグ付けすることはできません。すべてのプロパティは最初から明示的に実装する必要があります。

    例えば、現在持っている:

    public class MyClass {
        private int someInt;
    
        public int SomeInt {
            get {
                    return someInt;
            }
            set {
                    someInt = value;
            }
        }
    }
    

    したい

    public class MyClass {
        [IsProperty(public, get, set)]
        private int someInt;
    }
    

    (7)複数の戻り値はサポートされていません。例:

    public int, string, double MyFunction()
    {
        ....
        return x,y,z;
    }
    
    
    public void TestMyFunction()
    {
        int x, string y, double z = MyFunction();
    }
    

    (8)共変の戻り値の型はサポートされていません

    ジェネリックの実装については不満がありますが、ここでは割愛します。C# は、すべての GUI、ネットワーク、および構成の配管を行うための優れた言語であり、長期的にサポートできる方法で物事を迅速に開始するための私の一番の言語だと思います。

    于 2010-01-02T08:27:14.147 に答える
    1

    ジャワ:

    1. 非常に一貫性がありません。
    2. グラフィック API を使用するのが面倒な場合がある
    3. NullPointerExceptions は何が null かを教えてくれません
    4. 私が書いたプログラムは、別の JVM では動作しないことがあります。これは大きな苦痛であり、Java の「一度書けばどこでも実行できる」という声明に反します。
    5. スイングは思うように上手くなりません。
    于 2010-05-29T18:57:57.027 に答える
    1

    私たちは言語を持っていると仮定しなければなりません。私たちですか?

    于 2010-05-23T12:15:35.217 に答える
    1

    Python 用にもう 1 つ追加できます。

    リストが与えられたl = [l1, l2, ..., ln]場合repr(l) = [repr(l1), repr(l2), ..., repr(ln)]、 、しかしstr(l) != [str(l1), str(l2), ..., str(ln)] (str(l) = repr(l)). これは、「ユーザーを混乱させる可能性がある」のような不明瞭なエントリがリストに含まれる可能性があるため決定されましたただし、リストは「読み取り可能な形式でデータをダンプするだけ」を強制終了するため、データをダンプするだけでは使用できません。オー!l = ["foo], [bar,", "],["]str(l)"[foo], [bar, ], []"str

    于 2008-12-07T02:33:46.680 に答える
    1

    パイソン:

    1. 標準の GUI ツールキットはありません (コミュニティはこれについてぐるぐる回っていますが、何も解決していないようです)。

    2. Python アプリとライブラリを配布およびインストールするためのツールと方法の進化は、うまくいきませんでした。(最近では、これは修正に近づいているようですが。)

    3. CPython は、インタプリタが進むにつれてまだ遅いです (ただし、PyPy は最近ではかなり良さそうに見えますが、「標準」の Python になれば、この問題は解消されます)。

    4. 多くのメソッドをオーバーライドせずに組み込みクラス (list や dict など) をサブクラス化することはできません。イベントへの単純なフック (たとえば、追加または削除されるアイテムへのフック) だけを行う場合でも同様です。リストからdelitem 、append、extend、insert、pop、および removeをオーバーライドする必要があります。サブクラス化可能な「変更」イベント通知も、上記のすべてのメソッドで使用される共通コードを除外する「保護された」メソッドもありません)。

    5. virtualenv が発明されるまでは、1 台のマシンでさまざまな目的のために別々の Python 環境を維持するのは本当に苦痛でした。

    于 2010-05-26T00:03:02.190 に答える
    1

    ルビー

    1. 型推論なし
    2. メソッド/関数はファーストクラスのオブジェクトではありません
    3. ブロック変数のスコープはレキシカルですが、変数のスコープはレキシカルではありません
    4. デフインサイドデフ
    5. スーパーとスーパー()の違い
    于 2008-11-15T08:18:54.793 に答える
    1

    Cは私のお気に入りですが、ひどいものでもあります。

    • これまでで最悪のプリプロセッサを搭載しています。なぜ彼らはm4のようなものを使わなかったのですか?
    • ヘッダーとソース ファイルのモデル全体が壊れています。パスカルは単位でそれを正しく理解しました。
    • switch ステートメントでケース範囲が必要です。
    • void* からの共用体とキャストは、型システムを壊します。これにより、ガベージ コレクターが不可能になります。
    • ネストされた関数はありません。GNU C にはこれがありますが、標準である必要があります。
    • 割り当てられたメモリの境界チェックはありません。これを発見するツールはありますが、コードの一部がアドレスを誤って計算し、まったく関係のない割り当てられた領域に書き込むエラーは検出しません。私はポインター演算全体が嫌いです。
    • 配列の境界チェックはありません。
    • 移植性に関する問題が多すぎます。wchar_t でさえ、プラットフォームによって異なります。
    于 2009-01-03T14:09:53.097 に答える
    1

    C++

    1. 単純なコード スニペットを作成するには、非常に時間がかかります。
    2. for(std::vector::const_iterator iter = [...]
    3. vector.remove() は削除しません。
    4. vector.push_front() は存在しません。
    5. ヘッダファイル
    6. ラムダなし
    7. 少なくとも 1 つの仮想関数がある場合、自動空の仮想デストラクタはありません。
    于 2008-11-12T01:14:31.897 に答える
    1

    パイソン:

    • 速度
    • 静的分析 (欠如)
    • 1 つの式に限定された無名関数
    于 2008-11-14T00:24:12.567 に答える
    1

    ルビー:

    • 重要な空白。インタプリタの場合、行末 = 文の終わりです。ただし、文が継続する必要があるように見える場合 (または明示的に改行をエスケープする場合) を除きます。
    • 遅い
    • オンライン ドキュメントは Python ほど良くありません (防御としては、Python は優れています)。
    • 私は遅いと言いましたか?
    于 2008-11-14T01:13:38.880 に答える
    1

    Python: 配列の部分選択では、要求したものが得られません。

    a[1] は 1 つの要素を与えます
    a[1:2] は 1 つの要素を与えます [ a[1], a[2] ] ではなく
    a[1:3] は 2 つの要素を与えます

    私はそれが嫌いですが、それは私が主に Verilog で作業しているからかもしれません。

    于 2008-11-11T22:52:34.333 に答える
    1

    C#

    • ジェネリック パラメーターは不変です。C# 4.0 では、ジェネリック型の共分散と反分散が導入されました。
    • オーバーライド可能なクラス メンバーは、明示的に仮想としてマークする必要があります

    ジャワ

    • 符号なし数値データ型の欠落
    • プリミティブ データ型はオブジェクトではありません
    于 2008-11-12T08:54:43.963 に答える
    1

    好きな言語を選ぶのは不可能だと感じています。動的型付けと静的型付けはまったく比較できないので、どちらを使用しているかをリストします。

    C++:

    • テンプレートのメタプログラミング構文は醜いです。暗黙的::valueにすると、はるかに簡潔になります
    • ->.コンパイラが私がやっていることを理解できないのはなぜptr.thingですか->?
    • 私は空白が嫌いです。そのため、全体vector<vector<int>>vector<vector<int> >私を不安にさせ、そのコード行を見るたびに集中できず、使用方法int[][]などを理解しようとすることになります
    • マクロ。私は個人的にマクロの概念が大好きです。しかし、C++ では、システムはハックだと思います
    • 私はの嫌いです;

    パイソン:

    • 文字列は不変です。string[4]="b" だけを実行できないようにします
    • 参照によって暗黙的にコピーされるリスト。[[0]*幅]*高さの問題に漏れるもの
    • 末尾再帰の欠如 (再帰関数のタイプミスのたびに何千ものエラー メッセージを吐き出さないように、IDLE を装備する必要がありました)
    • リスト/辞書を受け入れない辞書キー
    • 深いスコープの欠如。リスト内包表記を行うとき、その中の変数が外側のスコープに影響を与えたくない
    于 2008-11-24T04:12:33.617 に答える
    0

    HyperTalk:

    • ずっと前に亡くなりました
    • 簡単な割り当てはありません(あなたはただ言うことはできませんa := 3、あなたは言わなければなりませんput 3 into a
    • 入れ子関数はありません
    • 実際のデータ構造はなく、文字列だけです。「リスト」を作成するには、アイテムをで区切り、itemDelimiter手動でエスケープします。次のような行や単語も取得できますget word 2 of line 5 of txt

    余談ですが、HyperTalkに固有の最も優れた機能の1つは、特別なit変数です。

    ask "How many years old are you?"
    answer "You are " & it*12 & " months old."
    
    于 2010-05-04T07:57:12.257 に答える
    0

    Lua:

    • 内蔵のエラーシステムは絶対に恐ろしいです

      Luaインタープリターを変更することで、try-catchシステムを実装できます。ただし、組み込み関数によってスローされるエラーとの互換性はありません。

    • セッターとして__setindexの代わりに__newindexを持っているという事実

      ...および__newindexは、キーがまだ存在しない場合にのみ起動されます。含まれている場合、メタメソッドはまったく呼び出されません。

    • 良い型比較システムはありません。

      type()関数がありますが、基本的な型のみを処理します(すべてのテーブルはテーブルです)。型比較のためのメタメソッドが本当に必要です。以前、これを「is」演算子と__typeメタメソッドを使用して実装しましたが、非常にうまく機能します。

    • 新しいキーワードを定義するのは雌犬です。

      あなたはそれを行うことができますが、Lua内のコードは十分に文書化されていないので、あなたが望む結果を得る方法を見つけるのは一種の試行錯誤です。これは、私が上で述べたものを自分で実装したい場合の大きな問題です(ただし、__ setindexはそれほど多くありませんが、簡単に変更できます)。

    • Webブラウザでは使用できません。

      ええ、言語自体には実際には問題はありませんが、くそー、Javascriptの代わりにLuaを使用できるようにしたいと思います... :)

    于 2011-01-22T12:06:51.960 に答える
    0

    • 文字列の扱い
    • メモリ管理 (誰が割り当て、誰が解放するかを決定する)
    • 名前空間なし (最大)
    • 標準ライブラリにリスト/配列およびその他の基本的な DS はありません


    JavaScript

    • var なしで変数を使用すると、自動的にグローバルになります
    • セミコロンは必須ではありません
    • 比較演算子「==」と「===」、およびそれらの使用法に関する混乱
    • バイナリ データを操作するための適切なサポートがない
    • 繰り返します..名前空間はありません
    • 変数にはブロック スコープがありません。(Cの世界から来てかなりイライラ)
    于 2011-01-26T11:23:22.770 に答える
    0

    ルア

    • foo.bar(1,2) を実行すると、「self」は bar メソッド内で nil になります。代わりに foo:bar(1,2) を実行することを忘れないでください。私はむしろそれを切り替えたいと思います(「:」演算子を使用するか、メソッドではない関数を呼び出さない限り、デフォルトで「自己」が定義されている必要があります)。
    • 変数はデフォルトでグローバルです。「ローカル」キーワードをやめて、代わりに「グローバル」キーワードを使用したいと思います。
    • 宣言されていない変数には nil が割り当てられます。エラーメッセージを受け取りたいです。グローバル環境のメタテーブルを操作することでこれを回避できますが、デフォルトで実装して非アクティブ化できるようにしたいと思います。
    • パラメータの複数の戻り値は、うまく処理されません。1,2,3 (3 つの値) を返す関数 foo() があり、bar() が 4,5 (2 つの値) を返すとします。print(foo(),bar()) を実行すると、「1,4,5」が得られます...「最後の」タプルのみが呼び出しで展開されます。
    • # (テーブル長) 演算子は、連続する整数でインデックス付けされたテーブルでのみ機能します。テーブルがそうではなく、要素の数を知りたい場合は、ループで解析するか、要素を挿入/削除するたびにカウンターを更新する必要があります。
    于 2010-05-04T09:39:28.760 に答える
    0

    C#

    • 参照を作成できません (var &t = struct)
    • ローカル スコープ デストラクタはありません (IDispose は近いですが、同じではありません)
    • ToString、私はすべてのオブジェクトがそれを持っていることをほとんど嫌いますが、string.format のようにそれを使用するすべてが嫌いであることがわかりました。私はむしろ、特定の型 (int、float、text、chars のみなど) を受け入れるものを持っています。したがって、オブジェクトを渡す代わりに、暗黙的な型キャストまたはインターフェイスを使用して何かを渡す必要があります。私はhtmlのテキストを安全にエスケープするためにこのようなものを書いてしまいました。
    • 仮想型キャスト (blah)obj は使用できません。obj が blah のインターフェースを継承していない/持っていない場合は機能しません。簡単な回避策は、インターフェイスに convert 関数を提供することです。
    • ローカル作成はありません。var o = new Item(); と書く代わりに 私は(何かのような)書きたいと思います(あるItem o()場合は自動破棄で)。
    于 2010-05-08T21:37:48.807 に答える
    0

    C# でジェネリック メソッドを作成するときに、Enum を型制約として使用できないことを発見しました。

    マイクロソフトはその理由について十分な説明をしていますが、それでもなお. 私が怒ってんだ

    public static T MyFunc<T>(string arg) where T:Enum //wont work :(
    
    于 2010-05-04T10:13:49.573 に答える
    0

    パイソン

    • 名前空間はありません。
    • 疑似プライベート属性/名前マングリング (主に getattr を使用)。
    • ファイルパスの操作は、複数のモジュールに分散されています。os.path 呼び出しをつなぎ合わせるのは見苦しく、読みにくく、ほとんどの場合 DRY に違反します。一般的なファイルパス操作には、ディレクトリ内のファイルのリストを取得するなどの便利な機能がまだありません。これpathを修正する - タイプのモジュールは拒否されました。

    ( [f for f in os.listdir('/file/path') if os.path.isfile(os.path.join('/file/path', f))])

    • Python ドキュメンテーション (ドキュメンテーションが存在し、非常に適切にフォーマットされていることに非常に感謝していますが、特定のモジュールの個々の関数ドキュメンテーションを見つけるために、5000 行のクイック スタートの使用例を探し回るのが嫌いです (私は'あなたの optparse とログを見ています))。組み込み型は、10 近くの異なる場所で断片的に文書化されています。
    于 2010-05-04T08:53:05.133 に答える
    0
    • length プロパティは簡単に length() 関数と混同されます。代わりに size() を使用してください
    • セレクター string('" +$.month+ "') で変数を補間する構文が臭い
    • $(event.currentTarget) は、バブリングとキャプチャで常に機能するとは限りません
    • 属性構文 ("[class='foot']") は、セレクター構文 (".foot") が何も返さない場所で機能します
    • セレクター ([class~=done]) を含むと、JavaScript (this.className.search("done") > 0) が機能する場所で失敗することがある
    于 2010-05-25T17:56:11.840 に答える
    0

    C#

    5. null 合体演算子

    ?? 演算子を使用すると、次のように記述できます。

    x = y ?? z;
    

    それ以外の:

    x = (y == null) ? y : z;
    

    この演算子は気に入っていますが、別の演算子が必要です。

    x = y ??? y.foo() : z.foo();
    

    それ以外の

    x = (y == null) ? y.foo() : z.foo();
    

    == null私はいつもこの種のものを使用していますが、その部分を入力するのが面倒です。


    4. Equals のサポートを改善する必要があります

    すべてEquals(object obj)のメソッドを次のように開始する必要があります。 MyClass other = obj as MyClass; if (other == null) は false を返します。

    次のように書くだけです。

    public override bool Equals(MyClass other) {...}
    

    そして、言語はEquals(object obj)メソッドの提供を処理する必要があります。
    注: other は null でないことを保証する必要があります。


    3. 異なる型の三項演算子は使用できない

    これはコンパイルできません。

    string foo = "hello";
    int bar = 4;
    object baz = foo == null ? foo : bar;
    

    2.名前空間のプライベートの欠如

    私はinternal保護が好きですが、まったく同じ名前空間内からのアクセスのみを許可する保護があればいいのにと思います。これは、大規模なクラス ライブラリでのアクセスをより適切に制御するのに役立ちます。


    1.多重継承なし

    私は実装 (クラス) の継承のみをインターフェイスの既定の実装に使用していますが、それを実行したい場合はたくさんあります。

    于 2009-11-25T07:13:12.530 に答える
    0

    パイソン:

    • ブロックの終わりを知らせる区切り文字がない場合、あいまいさが生じ、フォーマットが不十分なコードでは自動インデントが機能しません。
    • マクロなし (デコレータはカウントされません)
    • haskell の cabal や perl の CPAN のようなライブラリの自動フェッチはありません
    • 変数 const を宣言することはできません (そうです、独自のロールを作成することは可能ですが ...)
    • メタプログラミングが弱体化している
    • グローバルインタープリターロックをほとんど忘れていました
    于 2010-05-26T05:31:06.500 に答える
    0

    JavaFX

    • 型推論は期待どおりに動作しないことがあるため、多くの場合、型を明示的に宣言する必要があります。
    • def は C では const のように動作し、Java では final ではありません
    • インデックス>= seq.lengthにアクセスすることで、シーケンスに値を挿入できます。これにより、実際にはコンパイラエラーがスローされます(参照によると)。
    • null を文字列に割り当てると、デフォルトで "" になります。null を Integer に割り当てると、コンパイラ エラーがスローされます (リファレンスの内容とは対照的です)。
    • RuntimeExceptions と同じ方法で CheckedExceptions を処理する
    于 2010-05-04T11:46:27.410 に答える
    0

    パイソン:

    1) 行継続構文: "...\" は機能しますが、"...\ " は機能しません。また、末尾のスペースは通常、エディターによる異常な eol マークがなければ見えません。
    2) スタック トレースは以前に発生した例外のように見えるため、ベア 'raise' はスタック トレースでは見えません。
    3) 遅い
    4) Web サーバーへの統合が不十分です (mod_python: デッド、mod_wsgi: 操作の範囲が限られています)。これは 3] によって複雑になり、適切に実行するにはデーモン化またはある種のメモリ永続性が必要になります。
    5) タブとスペースの混在に過度に寛容であり、フローを制御するための変更が隠されていることがあります。(最近のバージョンでは修正されているかもしれません)

    于 2010-05-27T18:51:59.293 に答える
    0

    パイソン:

    1) これはスクリプト言語であり、完全にコンパイルされた言語ではありません (バイナリをコンパイルできるようにしたいのですが、バイトコードは気にしません)。非常に多くのライブラリを使用しなければならない場合、これは非常に厄介です (つまり、私のプログラムを使用するすべての人がすべてのライブラリをインストールする必要があります。つまり、これは基本的に、通常の人が適切にセットアップできない、またはセットアップする忍耐力がないことを意味します。私は不必要な仕事をたくさんしています)。バイナリを作成する方法は知っていますが、常にそうとは限りませんとにかく、バイナリにインタープリターをバンドルしていると思います(そして、私はそれを望んでいません)。今、インポートしたすべてのファイル (およびそれらのみ) のコピーを含むバイトコード コンパイラをプログラムのフォルダーに配置できる場合、それは適切な妥協点になる可能性があります (そうすれば、誰も余分なライブラリをダウンロードしてファイルをダウンロードする必要がなくなります)。そのような)。また、コンパイル済みの python ファイルを 1 つのファイルに圧縮し、そのファイルをプログラムを実行するファイルとして指定してから実行するとよいでしょう。

    2) 時々、少しバグがあるように見えます。特に「from moduleX import *」などに関連するコードやその他のインポート関連の問題、および関連するいくつかの問題がありました。グローバル変数とローカル変数に。

    3) 最大再帰深度はより高くなる可能性があります。もっと上に行く必要があると感じたことが少なくとも一度はありました。

    4) switch ステートメントはありません (数値、文字列、および範囲を許可するステートメントは言うまでもありません)。

    5) 新しいバージョンの Python では、多くの便利な文字列操作が廃止されているようです。また、それらを使用せずに同じことを行う方法についての簡単なドキュメントもないようです。

    6) 強制的な自動ガベージ コレクション (手動でできるようにしたいのですが強制的に行う必要はありません)。

    7) GUI を使用せずに事前に作成されたタイマー クラスはありません (まあ、あるかもしれませんが、私が行ったすべての検索の後で、見つけるのは確かに便利ではありません!実際に何かを見つけましたが、それはありませんでした。タイマーとは、指定された機能を x 秒ごとに実行し、必要に応じてオフにする機能などを意味します。

    8) 例を挙げているコミュニティの人々は、どのモジュールをどのようにインポートしたかをほとんど教えていません。

    9) Lua との統合はあまりサポートされていません。

    10) 必要な関数を持つオブジェクトを使用してそのクラスにオブジェクト変数を動的に追加しない限り、(クラス全体ではなく) クラスの特定のインスタンスに特別な関数を追加する方法はないようです。 (ただし、そのためだけに別のクラスを作成する必要があります)。

    于 2009-05-28T08:52:52.803 に答える
    0

    C# のプリプロセッサの欠如。

    一部の人々がそれを乱用する可能性があるため、彼らがそれを除外したことは知っていますが、彼らは赤ちゃんを風呂水と一緒に捨てたと思います. コード生成は良いことだと考えられており、C++ ではプリプロセッサが最初のコード ジェネレータでした。

    于 2008-11-24T15:18:20.277 に答える
    0

    Objective-C 2.0

    ライブラリではなく、特定の順序ではなく、言語とランタイムに厳密に固執します。

    1. cVar の欠如。
    2. モジュールなし。私は名前空間が不足していることにそれほど不満はありませんが、モジュールがあると便利です。
    3. Ivar ベースのプロパティ構文では、3 つの場所で変数名を使用して宣言する必要があります。それはかなり恐ろしいです。
    4. C遺産。OO と GC を除いて、C 言語の嫌いなところはすべて存在します。
    5. オブジェクトはスタック上に存在できません。Obj-C の問題ではなく、他の言語でのプログラミングの実践に影響を与えます。たとえば、C++ でスタック上の戻り値を取得すると、奇妙に感じます。コードを書くときにライブラリのドキュメントを実際に見ていなければ、すべての関数がポインタを返すと仮定します。
    于 2010-05-26T19:30:29.933 に答える
    0

    オブジェクト パスカル:

    • インターフェイスと実装は 2 つの部分に分割されていますが、同じファイルに詰め込まれているため、編集中のファイルを何度も行ったり来たりしています。
    • 配列の動的インデックス付けでは、文字列は 1 から始まります。固定配列を宣言するときに開始インデックスを指定すると、動的に割り当てられた配列は常に 0 から始まります。
    • クラスとオブジェクト (インターフェイスは言うまでもありません) は言語の上にボルトで固定されており、特にレコードのようにスタックを割り当てることはできません。
    • パラメーターなしで関数を呼び出す場合、() はオプションであり、関数ポインターを処理したり、関数名を使用して関数の結果を参照しようとしたりするときに、多くの苦痛をもたらします。
    • パラメーター リストは、外部の型定義がない固定配列型または関数ポインター型を処理できません。

    これは単なる言語です。標準ライブラリと不安定な IDE の申し訳ない言い訳は、独自のリストに値します。

    于 2010-05-26T08:22:09.737 に答える
    0

    私は1つしか持っていませんが、共有する価値があると思います。

    CSharp/.NET

    配列の要素数を取得する Length プロパティと、コレクションの要素数を取得する Count プロパティがあります。CLR が裏で IList、ICollection、IEnumerable を 0 から始まる 1 次元配列に自動的に追加するという事実を考慮すると、さらに奇妙に見えます。

    CLR チームと BCL チームは、この件について議論するのに苦労したと思います ;)

    于 2010-05-26T08:08:32.970 に答える
    0

    VB.NET

    1) If Not x Is "foo" (<> "foo" の代わりに)
    2) "OrElse" と "AndAlso" の短絡 (単に "Or" と "And" の代わりに)
    3) 何もない (代わりに) Nullの)

    于 2008-11-14T00:29:15.770 に答える
    -1

    C#4.0

    「動的」キーワード、悪用に熟している。Reflectionを使用したい/使用する必要がある場合は、Reflectionを使用して、使用していることを明確にします。動的に偽装しようとしないでください。

    于 2010-05-26T19:43:32.900 に答える
    -1

    VB.NET

    • デフォルトでは弱いタイプ(Option Strictはこれを修正しますが、デフォルトではオンになりません)
    • メソッドに括弧は必要ありません(myFunction()の代わりにmyFunctionなど)
    • 配列の定義/使用に括弧を使用しますか(myArray [12]の代わりにmyArray(12))
    • 直接インクリメントをサポートしていません(i ++)
    • レガシーOn ErrorキーワードとVB6全体をサポートします-名前空間
    于 2010-01-19T12:12:48.620 に答える
    -1

    パイソン

    • スロー
    • ようやくprint文に慣れてきて、こんな印刷機能が???(py3k)
    • py2exeまたはcxFreezeが機能したことはありません
    • 標準化されていない (些細な問題)
    • 再帰の深さのみ 100 (iirc)
    于 2009-02-19T06:48:55.353 に答える
    -2

    SAS

    • 自分の考えを持っていることはありません(すべてのものが借りられます)。

    • 巨大なデータセットに貪欲。

    • Javaを使用しますが、オブジェクトであることが何であるかを学習したことはありません。

    • Perlを盗みますが、データステップで非表示にします。

    • 常に統計家と嘘をつきましょう!

    于 2010-05-25T20:27:01.480 に答える
    -2

    私がPythonについて嫌いなこと:

    • コンパイラがない
    • それは真剣に受け止められていません

    Python について私を悩ませていること:

    • (self,
    • 番号private
    • 互換性の破壊


    PHP について私が嫌いな 5 つの点:

    • 明らかにバグの場合は「意図したとおりに機能する」
    • 番号goto
    • バグのある参照 ( foreach $arr => &$val... foreach $arr => $val)
    • 多重継承なし
    • 暗黒の神に子羊を犠牲にせずに本当に動くコンパイラはない
    于 2010-05-04T08:21:37.747 に答える
    -7

    Perl は恐ろしい言語です。

    1. 「パブリック」または「プライベート」または「保護された」宣言/定義はありません。
    2. 「私の $variable_name;」サブルーチンの外でグローバルを宣言しません。
    3. 「私の $variable_name;」サブルーチンによってアクセスされますが、「use strict;」または他の「使用」は警告を作成します。
    4. 関数のプロトタイプは、説明されていない、実証されていない、不要な、またはその他の言い訳になります。
    5. 記号のグロブを読み取る際に、過度に熱心に記号を使用すると、最終的には「クールで迅速」になります。
    6. 人が熱くなると、彼らは暑いままでいるのが好きで、冷やす必要はありません。
    7. Perl を 1 週間使用した後、関数を作成してプロトタイプを作成することができなくなりました。
    8. モジュールとは正確には何ですか?実際には「.pm」拡張子が必要ですか?
    9. パブリック変数を作成し、サブルーチン内からアクセスしたい場合、警告を作成せずにこれを達成するにはどうすればよいでしょうか?
    10. きちんとした Perl を教えてくれるきちんとしたスクリプトはどこにありますか?
    于 2008-12-19T23:43:25.893 に答える