Подтвердить что ты не робот

Какой худший язык программирования вы когда-либо работали?

Если у вас интересная история share, , пожалуйста, напишите ответ, но не злоупотребляйте этим вопросом для избиения язык.


Мы программисты, и наш основной инструмент - это язык программирования, который мы используем.

Пока обсуждается лучший, , я бы хотел услышать ваши истории о худшие языки программирования, с которыми вы когда-либо работали, и я хотел бы точно знать, что вас раздражало.

Я хотел бы частично собрать эти истории, чтобы избежать общих ошибок при разработке языка (особенно DSL), а частично, чтобы избежать причудливых языков в будущем в целом.


Этот вопрос не субъективен. Если язык поддерживает только одиночные символьные идентификаторы (см. мой собственный ответ), это плохое безрезультатно.


ИЗМЕНИТЬ

Некоторые люди высказывают опасения, что этот вопрос привлекает троллей. Проникнув через все ваши ответы, ясность поняла. Подавляющее большинство ответов подходит, полезно и хорошо написано.

ОБНОВЛЕНИЕ 2009-07-01 19:15 GMT

Обзор языка теперь завершен, охватывая 103 разных языка из 102 ответов. Я решил быть слабым в том, что считается языком программирования и включает ничего разумного. Спасибо David за ваши комментарии по этому поводу.

Вот все языки программирования, охваченные до сих пор (в алфавитном порядке, связанный с ответом, новые записи выделены жирным шрифтом):

ABAP, все языки 20-го века, все языки перетаскивания, все проприетарные языки, APF, APL (1), AS400, Авторские права, Autohotkey, BancaStar, ОСНОВНОЙ, Bourne Shell, Brainfuck, С++, Разработчик Team Centura, Cobol (1), Cold Fusion, Coldfusion, CRM114, Кристальный синтаксис, CSS, Dataflex 2.3, DB/c DX, dbase II, DCL, Delphi IDE, Двери DXL, пакет DOS (1), Excel Macro language, FileMaker, ФОКУС, Четвертое, FORTRAN, FORTRAN 77, HTML, веб-клип Illustra, Informix 4-го поколения, Веб-клип Informix Universal Server, INTERCAL, Java, JavaScript (1), JCL (1), karol, LabTalk, Labview, Lingo, LISP, Логотип, LOLCODE, LotusScript, m4, Magic II, Makefiles, MapBasic, MaxScript, Meditech Magic, MEL, mIRC Script, MS Access, MUMPS, Оберон, расширения объектов до C, Objective-C, OPS5, Oz, Perl (1), PHP, PL/SQL, PowerDynamo, PROGRESS 4GL, prova, PS-FOCUS, Python, Регулярные выражения, RPG, RPG II, Схема, ScriptMaker, sendmail.conf, Smalltalk, Smalltalk, SNOBOL, SpeedScript, Sybase PowerBuilder, Symbian С++, Система RPL, TCL, TECO, Визуальная среда программного обеспечения, Маленькая преданность, TransCAD, troff, uBasic, VB6 (1), VBScript (1), VDF4, Vimscript, Visual Basic (1), Visual С++, Visual Foxpro, VSE, Webspeed, XSLT

Ответы, касающиеся ассемблера 80386, VB6 и VBScript, были удалены.

4b9b3361

Ответ 1

PHP (без особого порядка)

  • Непоследовательные имена функций и порядки аргументов
    • Потому что есть zillion функции, каждая из которых, похоже, использует другое соглашение об именах и порядок аргументов. "Давайте посмотрим... это foo_bar или foobar или fooBar... и это игла, стог сена или стога сена, игла?" Строковые функции PHP - прекрасный пример этого. Половина из них использует str_foo, а другая половина использует strfoo.
  • Нестандартные символы формата даты
    • Возьмите j например
      • В UNIX (который, кстати, является тем, что все остальные используют в качестве руководства для форматов строки даты) %j возвращает день года с ведущими нулями.
      • В PHP date функция j возвращает день месяца без начальных нулей.
  • Поддержка Apache 2.0 MPM
    • Не рекомендуется.
    • Почему это не поддерживается? "Когда вы делаете базовую структуру более сложной, не имея полностью отдельных потоков выполнения, полностью разделяйте сегменты памяти и сильную песочницу для каждого запроса, чтобы играть, ноги глины внедряются в систему PHP". Ссылка Итак... это не поддерживается, потому что это усложняет ситуацию? Потому что только то, что легко, стоит делать правильно? (Чтобы быть справедливым, как отметил , это, как правило, объясняется тем, что плохие сторонние библиотеки не являются потокобезопасными, а ядро ​​PHP - это.)
  • Поддержка встроенных Unicode
    • Поддержка Native Unicode для PHP6
    • Я рад, что мы не жили в глобальной среде, где нам, возможно, придется говорить с людьми на других языках в прошлом, о 18 лет. Подожди. (Чтобы быть справедливым, тот факт, что все не использует Юникод в этот день и возраст, действительно меня раздражает. Могу сказать, что мне не нужно делать какую-либо дополнительную работу, чтобы сделать Unicode. Это не только проблема с PHP. )

У меня есть другие говядины с языком. Это лишь некоторые из них. Jeff Atwood имеет старое сообщение о том, почему PHP отстой. Он также говорит, что это не имеет значения. Я не согласен, но мы здесь.

Ответ 2

XSLT.

  • XSLT сбивает с толку, для начала. Метафора полностью отличается от всего, что я знаю.
  • Дело было разработано комитетом настолько глубоко в угловых скобках, что оно отрывается как странный франкенштейн.
  • Странные заклинания, необходимые для указания формата вывода.
  • Встроенные, невидимые правила.
  • Нечетные болтовые вещи, как и скрипты.
  • Зависимость от XPath.
  • Поддержка инструментов была довольно тонкой, до недавнего времени. Отладка XSLT в первые дни была упражнением по навигации в полной темноте. Инструменты меняются, но XSLT по-прежнему соответствует моему списку.

XSLT достаточно странно, что большинство людей просто игнорируют его. Если вы должны использовать его, вам нужен шаман XSLT, чтобы дать вам волшебные заклинания, чтобы все было в порядке.

Ответ 3

Пакетные файлы DOS. Не уверен, что это вообще относится к языку программирования. Это не значит, что вы не можете решить свои проблемы, но если вы привыкли к bash...

Только мои два цента.

Ответ 4

Не уверен, что это истинный язык, но я ненавижу Makefile.

Makefiles имеет значимые различия между пространством и TAB, поэтому, даже если две строки кажутся одинаковыми, они не работают одинаково.

Сделать также полагаться на сложный набор неявных правил для многих языков, которые трудно изучить, но затем часто переопределяются файлом make.

Система Makefile обычно распространяется по многим и многим файлам во многих каталогах. При отсутствии видимости или абстракции изменение файла make несколько каталогов может помешать моему источнику построить. Тем не менее, сообщение об ошибке всегда является ошибкой сложения, а не значимой ошибкой в ​​make или make файлами.

Любая среда, в которой я работал, которая использует make файлы, успешно имеет эксперта по Full-time Make. И все это, чтобы сбрить несколько минут от компиляции??

Ответ 5

Худший язык, который я когда-либо видел, исходит из инструментальной программы, которая является хорошим инструментом анализа звука. Это довольно хорошая работа, пока вы не используете язык script. вздох плохие воспоминания.

Tiny praat script учебник для начинающих

  

Вызов функции

  Мы указали по крайней мере 3 различных синтаксиса вызова функций:   
  •       
  • Обычный

          string = selected("Strings")      

    Здесь ничего особенного, вы назначаете переменной string результат выбранной функции. Не очень страшно... еще.

                
  • "Я вызываю команду GUI с параметрами"

          Create Strings as file list... liste 'path$'/'type$'
          

    Как вы можете видеть, название функции начинается с" Create "и заканчивается"... ". Команда" Создать строки как список файлов "- это текст, отображаемый на кнопке или в меню (я боюсь проверять) на praat. Эта команда принимает 2 параметра liste и выражение. Я буду выглядеть глубже в выражении 'path$'/'type$'

          

    Хм. Ага. Нет пробелов. Если бы были введены пробелы, это были бы отдельные аргументы. Как вы можете себе представить, скобки не работают. На этом этапе описания я хотел бы указать суффикс имен переменных. Я не буду развивать его в этом параграфе, я просто дразня.

                
  • " О, но я хочу получить результат команды GUI в моей переменной "

          noliftt = Get number of strings
          Да, мы можем видеть здесь шаблон, длинное и странное имя функции, это должен быть вызов GUI. Но нет "...", поэтому никаких параметров. Я не хочу видеть, как выглядит парсер.         
    

Невероятная система типов

(AKA Haskell и OCaml, praat приходят к вам)   
  •       
  • Простые туземные типы

          windowname$ = left$(line$,length(line$)-4)      

    Итак, что там происходит?       Теперь пришло время взглянуть на соглашение и типы выражений, поэтому мы получили:       

    •           
    • left $:: (String, Int) → String          
    • lenght:: (String) → Int          
    • windowname $:: String          
    • строка $:: String      
          Как вы можете видеть, имена переменных и имена функций суффиксны с типом или возвращаемым типом. Если их суффикс "$", то он возвращает строку или строку. Если нет ничего, это число. Я вижу точку префикса типа переменной для облегчения реализации, но для суффикса, не жалко, я не могу            
  • Тип массива

          Чтобы показать тип массива, позвольте мне ввести "крошечный" цикл:       
    
        for i from 1 to 4
            Select... time time
            bandwidth'i'$ = Get bandwidth... i
            forhertz'i'$ = Get formant... i
        endfor
        
          

          Мы получили i, который является числом и... (нет, это не функция)
          bandwidth'i'$
          Он создает строковые переменные: bandwidth1$, bandwidth2$, bandwidth3$, bandwidth4$ и дает им значения. Как и следовало ожидать, вы не можете создать двумерный массив таким образом, вы должны сделать что-то вроде этого:       band2D__'i'__'j'$      

          http://img214.imageshack.us/img214/3008/scaredkittylolqa2.jpg            
  • Специальный вызов строки

           outline$ = "'time'@F'i':'forhertznum'Hz,'bandnum'Hz, 'spec''newline$'" outline$ >> 'outfile$'       

              Строки странно (по крайней мере) обрабатываются на языке. '' используется для вызова значения переменной внутри глобальной "строки. Это странно. Это противоречит всем соглашениям, встроенным во многие языки от bash к PHP, проходящим через powershell. И посмотрите, он даже получил перенаправление. Не обманывайте себя, это не работает, как в вашей любимой оболочке. Нет, вам нужно получить значение переменной с помощью '       

                
  • Модель модели Wonderderderfulful

          

    Я собираюсь поставить последний штрих на эту замечательную презентацию, поговорив с вами о модели исполнения. Так как на всех процедурных языках вы получили инструкцию, выполняемую сверху вниз, есть переменные и графический интерфейс praat. То есть вы кодируете все в praat gui, вы вызываете команды, написанные на меню/кнопках.

          

    В главном окне проза содержится список предметов, которые могут быть:       

    •           
    • файлы          
    • список файлов (созданных функцией с длинным длинным именем)          
    • Spectrogramm          
    • Строки (не спрашивайте)      
          Поэтому, если вы хотите выполнить операцию над данным файлом, вы должны программно выбрать файл в списке, а затем нажать разные кнопки, чтобы выполнить некоторые действия. Если вы хотите передать параметры в действие GUI, вы должны следовать графическому оформлению формы для своих аргументов, например," To Spectrogram... 0.005 5000 0.002 20 Gaussian "выглядит так, потому что он следует этому макету:

    http://img7.imageshack.us/img7/5534/tospectrogramm.png

      
      

Излишне говорить, что мои кошмары наполнены сценариями похвалы, которые танцуют вокруг меня и кричат ​​" DEBUG MEEEE!!".

<суб > Более подробную информацию можно найти на сайте praat под хорошо известным названием "простой программируемый язык сценариев"

Ответ 6

Хорошо, потому что этот вопрос отказывается умирать, и поскольку OP действительно заставлял меня отвечать...

Я смиренно предлагаю вашему вниманию Authorware (AW) как худший язык, который можно создать. (n.b. Я собираюсь вспомнить здесь, это было ~ 6 лет с тех пор, как я использовал AW, что, конечно же, означает множество ужасных вещей, которые я даже не могу запомнить)

ужас, ужас http://img.brothersoft.com/screenshots/softimage/a/adobe_authorware-67096-1.jpeg

Начнем с того, что это продукт Macromedia (-10 баллов), фирменный язык (-50 больше), предназначенный прежде всего для создания программного обеспечения для электронного обучения и кроме того, программное обеспечение, которое может быть создано не программистами и программистами, как реализовано как знаковый язык и текстовый язык (-100).

Теперь, если этот последний оператор не напугал вас, вам не нужно было устанавливать WYSIWYG сгенерированный код раньше (hello Dreamweaver и Frontpage devs!), но главным моментом является то, что AW имел библиотеку около 12 или около того элементов который можно перетащить в поток. Подобно элементам "Страница", "Анимация", "ИФЛАЙД" и GOTO (-100). Разумеется, удаление объектов из потока создало любое количество сломанных соединений и артефактов, с которыми IDE сталкивается с переменными уровнями успеха. Естественно, что встроенные мастера (-10) были основным источником этих данных.

К счастью, вы всегда можете войти в кодовое представление, и в конце концов вам придется это сделать, потому что с ограниченным набором знаковых элементов некоторые вещи просто невозможно в противном случае. Сам язык был на основе TUTOR (-50) - кандидат на наихудший язык, если только у него были амбиции и возможности для достижения глубин, на которые AW стремился бы - о чем говорится в википедии:

... язык TUTOR был непростым учить. На самом деле, было даже предложено что несколько лет опыта работы с язык будет необходим до программисты могли строить программы, стоящие хранение.

Отличная основа, которая была построена в годы, предшествовавшие подъему интернета, ни с чем. Абсолютно нет формы структуры данных за пределами массива (-100), конечно без сахара (настоящие мужчины не используют операторы switch?) (-10) и большой всплеск синтаксического уксуса ( "-" - индикатор комментария, поэтому для вас не действует оператор сокращения) (-10). Языковая справочная документация была представлена ​​в формате бумаги или zip файла (-100), но по крайней мере у вас была поддержка работы группы разработчиков и могла быстро установить решение вашей проблемы - использовать DLL или SWF импортирует функции AW, чтобы вы могли выполнять фактическое кодирование на реальном языке.

AW управлялся потоком (с необходимыми командами ПАУЗА) и поэтому имеет все связанные с ним проблемы линейной, а не на основе событий системы (-50), и, несмотря на прямую маркетинговую ложь документация была не ориентирована на объекты (-50). Все повторное использование кода было достигнуто с помощью GOTO. Нет области, много глобальных (-50).

Это не ошибка языка напрямую, но, очевидно, интеграция управления версиями невозможна, и, конечно же, нет TDD, создания документации или любого другого дополнительного инструмента, который вам может понравиться.

Конечно, Macromedia столкнулась с проблемой, стоящей перед главой интернета, с упорным отказом участвовать в течение многих лет, в конечном итоге создавая кошмар плохого, сложного в использовании, который является Shockwave (-100), по существу сериализовать настольные версии программного обеспечения через необходимый плагин (-10). AS HTML поднялся, поэтому AW застопорился, все еще сохраняя при этом передачу ударной волны даже в условиях стандартов javascript IEEE SCORM.

В конце концов, после многих лет прошения и promises Macromedia объявила о новой радикальной новой версии AW в разработке для решения этих проблем, а через несколько лет отложила развитие и затем отменила проект. Хотя, конечно, Macromedia все еще продает его (EVIL BONUS -500).

Если что-то еще нужно сказать, , это язык, который позволяет пробелы в именах переменных (-10000).

Если вы когда-либо захотите испытать настоящую боль, попробуйте прочитать кого-то еще без комментируемой венгерской нотации на языке, который не чувствителен к регистру и позволяет использовать пространства имен переменных.


Общий аннакатский произвольный балл (AAS): -11300
Скорректированный для личного опыта: OutOfRangeException

(извинения за длину, но это было cathartic)

Ответ 7

Серьезно: Perl. Это просто боль в заднице, чтобы кодировать для начинающих и даже для полупрофессионалов, которые работают с perl на ежедневной основе. Я постоянно вижу, как мои коллеги борются с языком, строя худшие сценарии, например, 2000 строк без учета какого-либо хорошо принятого стандарта кодирования. Это худший беспорядок, который я когда-либо видел в программировании. Теперь вы всегда можете сказать, что эти люди плохи в кодировании (несмотря на то, что некоторые из них использовали perl в течение многих лет, сейчас), но язык просто поощряет все, что завораживает дерьмо, что заставляет меня кричать, когда у меня есть читать script другим человеком.

Ответ 8

MS Access Visual Basic для приложений (VBA) также был довольно плохим. Доступ был совсем неудачным, потому что он заставил вас отказаться от слабой парадигмы и был обманчиво прост, чтобы начать, но кошмар закончить.

Ответ 9

Старые классы BASIC с номерами строк были бы моим выбором. Когда у вас не было пробелов между номерами строк, чтобы добавить новые строки, вам нужно было запустить утилиту renumber, из-за которой вы потеряли любые умственные привязки, которые у вас были к тому, что было где.

В результате вы закончили сжимать слишком много операторов в одной строке (разделенные двоеточиями), или вы сделали goto или gosub где-то еще, чтобы выполнить работу, в которую вы не могли вписаться.

Ответ 10

Пока нет ответа о Коболе?: О

Ответ 11

MUMPS

Я работал в нем пару лет, но с тех пор сделал полную свалку мозга. Все, что я действительно могу запомнить, это не документация (по моему местоположению) и загадочные команды.

Это было ужасно. Ужасный! УЖАСНО!!!

Ответ 12

Есть только два вида языков: те, на кого жалуются, и те, кого никто не использует.

Бьярне Страуструп

Ответ 13

Я еще не работал со многими языками и занимаюсь в основном скриптовыми языками; из этих VBScript - это тот, который мне меньше всего нравится. Хотя у него есть некоторые удобные функции, некоторые вещи действительно меня разозлили:

  • Назначения объектов выполняются с помощью ключевого слова Set:

    Set foo = Nothing
    

    Опускание Set является одной из наиболее распространенных причин ошибок времени выполнения.

  • Нет такой вещи, как структурированная обработка исключений. Проверка ошибок выглядит так:

    On Error Resume Next
    
    ' Do something
    
    If Err.Number <> 0
      ' Handle error
      Err.Clear
    End If
    
    ' And so on
    
  • Приложением параметров вызова процедуры в круглых скобках требуется использовать ключевое слово Call:

    Call Foo (a, b)
    
  • Его англоязычный синтаксис слишком подробен. (Я поклонник фигурных скобок.)

  • Логические операторы являются длинными. Если вам нужно проверить составное условие, в котором последующее условие зависит от успеха предыдущего, вам необходимо поместить условия в отдельные операторы If.

  • Отсутствие параметризованных конструкторов классов.

  • Чтобы завернуть оператор в несколько строк, вы должны использовать знак подчеркивания:

    str = "Hello, " & _
          "world!"
    
  • Отсутствие многострочных комментариев.


Изменить: нашел эту статью: Flangy Guide to Hating VBScript. Автор суммирует свои жалобы как "VBS не Python":)

Ответ 14

Objective-C.

Аннотации сбивают с толку, используя скобки для вызова методов, которые все еще не вычисляются в моем мозгу, а что хуже, так это то, что все функции библиотеки из C вызывается с использованием стандартных операторов в C, → и., и это похоже, единственная компания, которая управляет этим языком, - это Apple.

Я признаю, что я использовал язык только при программировании для iPhone (и смотрел на программирование для OS X), но кажется, что С++ просто разветвляется, добавляет аннотации и заставляет реализацию и файлы заголовков быть отдельными будет иметь гораздо больше смысла.

Ответ 15

PROGRESS 4GL (видимо, теперь называется OpenEdge Advanced Business Language").

PROGRESS - это язык и система баз данных. Весь язык предназначен для упрощения написания чистых экранов ввода данных с зеленым экраном. (Итак, начните с того, чтобы представить, насколько хорошо это переводится в Windows.) Все, что более привлекательно, будь то красивые экраны, программная логика или пакетная обработка... не так много.

Я последний раз пользовался версией 7, еще в конце 90-х, поэтому смутно возможно, что некоторые из них устарели, но я бы не стал делать ставку на нее.

  • Он был первоначально разработан для экранов ввода данных в текстовом режиме, поэтому в Windows все координаты экрана находятся в "символьных" единицах, которые представляют собой некоторое странное количество пикселей в ширину и различное количество пикселей. Но, конечно, они по умолчанию имеют пропорциональный шрифт, поэтому число "единиц символа" не соответствует фактическому количеству символов, которые будут помещаться в заданное пространство.
  • Нет классов или объектов.
  • Отсутствует поддержка языка для массивов или распределения динамической памяти. Если вы хотите что-то похожее на массив, вы создаете временную таблицу базы данных в памяти, определяете ее схему и затем курсор на нее. (Я увидел немного кода из более поздней версии, где они фактически построили и отправили примитивную объектно-ориентированную систему поверх этих таблиц в памяти. Страшно.)
  • Доступ к базе данных ISAM встроен. (Но не SQL. Кому это нужно?) Если вы хотите увеличить поле Counter в текущей записи в таблице State, вы просто скажете State.Counter = State.Counter + 1. Что не так плохо, кроме...
  • Когда вы используете таблицу непосредственно в коде, то за кулисами они создают нечто похожее на невидимую магическую локальную переменную, чтобы удерживать текущую позицию курсора в этой таблице. Они догадываются, на каком блоке будет помечен этот курсор. Если вы не будете осторожны, ваш курсор исчезнет, ​​когда вы выйдете из блока, а сам reset, без предупреждения. Или вы начнете работать со столом и обнаружите, что вы не начинаете с первой записи, потому что вы повторно используете курсор из какого-либо другого блока (или даже своего собственного, потому что ваша область была расширена, когда вы не ожидали он).
  • Транзакции работают на этих объектах с диким уклоном. Мы еще веселились?
  • Все может быть сокращено. Для некоторых из длительно длинных ключевых слов это может показаться не таким уж плохим. Но если у вас есть переменная с именем Index, вы можете ссылаться на нее как Index или как Ind или даже как I. (Typos может иметь очень интересные результаты.) И если вы хотите получить доступ к полю базы данных, вы можете не только сокращать имя поля, но даже не нужно квалифицировать его с именем таблицы; они угадают и таблицу. Для действительно пугающих результатов, объедините это с:
  • Если не указано иное, они предполагают, что все это доступ к базе данных. Если вы обращаетесь к переменной, которую вы еще не объявили (или, что более вероятно, если вы ошибаетесь в имени переменной), там нет ошибки компилятора: вместо этого она ищет поле базы данных с этим именем... или поле, которое аббревиатура к этому имени.

Угадание - худшее. Между аббревиатурами и полем по умолчанию вы можете получить некоторые неприятные вещи, если не будете осторожны. (Забыл объявить I как локальную переменную, прежде чем использовать ее как переменную цикла. Нет проблем, мы просто произвольно выбираем таблицу, захватываем ее текущую запись и полностью уничтожаем произвольно выбранное поле, имя которого начинается с I!)

Затем добавьте тот факт, что случайный доступ по умолчанию по умолчанию может изменить область действия, которую он догадывался для ваших таблиц, тем самым нарушая некоторые совершенно не связанные части кода. Весело, да?

У них также есть система отчетности, встроенная в язык, но я, очевидно, подавил все ее воспоминания.

Когда я получил еще одну работу с Netscape LiveWire (злополучная попытка на стороне сервера JavaScript) и классический ASP (VBScript), я был на небесах.

Ответ 16

Худший язык? BancStar, руки вниз.

3000 предопределенных переменных, все пронумерованы, все глобальные. Нет объявления переменных, без инициализации. Половина из них, разбросанная по всему диапазону, зарезервирована для использования в системе, но вы можете использовать их на свой страх и риск. Сто или около того автоматически заполняются в результате различных операций, и ни один из них не указан. Все они вписываются в 38k байт, и нет никакой защиты для переполнения буфера. Система будет радостно позволять пользователям вводить 20 байтов в поле из десяти байтов, если вы неправильно указали длину поля ввода. Эффекты непредсказуемы, по меньшей мере.

Это язык, который позволит вам объявить вычисляемый gosub или goto; из-за его ограничений это часто необходимо. Условные обозначения могут быть объявлены вперед или назад. Запишите инструкцию "If", которая заканчивает 20 строк до ее начала.

Обратный стек очень неглубокий (20 Gosub или так), и поскольку нажатие любой функциональной клавиши нажатием любой другой функции запускает другую подпрограмму, вы можете легко перехватить стек. Дизайнеры задумчиво включили команду "Очистить Gosubs", чтобы полностью уничтожить стек, чтобы исправить эту проблему и убедиться, что вы никогда не узнаете, что будет делать следующая программа.

Есть намного больше. Десятки тысяч строк этого ужаса Лавкрафта.

Ответ 17

. язык сценариев bat файлов в DOS/Windows. Бог знает, насколько это немощно, особенно если вы сравниваете его с языками оболочки Unix (которые также не так сильны, но, тем не менее, лучше).

Просто попробуйте объединить две строки или создать цикл for. Нах.

Ответ 18

VSE, среда Visual Software.

Это язык, на котором мой профессор (Доктор Генри Ледгард) попытался продать нас обратно в школе с неполным или градиентом. (Я не чувствую себя плохо в том, чтобы давать его имя, потому что, насколько я могу судить, он все еще большой сторонник и приветствовал бы возможность убедить некоторых людей, что это лучше всего после нарезанного хлеба). Когда я описываю это людям, моя лучшая аналогия заключается в том, что это своего рода ребенок-ублюдок FORTRAN и COBOL, с некоторыми лишними неудачными. Из только реально доступный папка. Я нашел этот материал (там больше всего там, где я не буду ссылаться конкретно здесь):

VSE строится вокруг того, что они называют "Принципом разделения". Идея состоит в том, что данные и поведение должны быть полностью разделены. Представьте требование C, что все переменные/данные должны быть объявлены в начале функции, но теперь переместите это объявление в отдельный файл, который могут использовать и другие функции. Когда другие функции используют его, они используют одни и те же данные, а не локальную копию данных с одинаковым расположением.

Почему так? Мы узнаем, что от Software Survivors, что Правила переменной переменной жесткие. Я бы включил цитату, но, как и большинство дураков, эти ребята навсегда заставляют говорить что-либо. Найдите этот PDF файл для "Quagmire Of Scope", и вы обнаружите истинное просветление.

Они продолжают утверждать, что это каким-то образом делает его более подходящим для сред с несколькими процессами, поскольку оно более тесно моделирует базовую аппаратную реализацию. Riiiight.

Другая тема выбора часто возникает:

INCREMENT DAY COUNT BY 7 (or DAY COUNT = DAY COUNT + 7)
DECREMENT TOTAL LOSS BY GROUND_LOSS
ADD 100.3 TO TOTAL LOSS(LINK_POINTER)
SET AIRCRAFT STATE TO ON_THE_GROUND
PERCENT BUSY = (TOTAL BUSY CALLS * 100)/TOTAL CALLS

Несмотря на то, арифметики отражает обычное использование, то есть любой может читать и понимать он - не зная программирования язык. Фактически, арифметика VisiSoft практически идентичен FORTRAN, включая встроенную сложную арифметику. Это ставит программистов в их профессиональный статус и соответствующая работа легкость.

Уммм, совсем не то, что касается вообще. Одним из ключевых пунктов продажи, которые Билл Кейв использует, чтобы попытаться продать VSE, является демократизация программирования, чтобы деловые люди не нуждались в самостоятельном программировании, которые используют сумасшедшие, тайные инструменты с единственной целью обеспечения безопасности работы. Он использует этот иррациональный страх, чтобы продать свой инструмент. (И это работает - федеральное правительство - его самый большой клиент). Я подсчитал 17 вариантов использования фразы "безопасность работы" в документе. Примеры:

  • ... и подходит только для тех, кто хочет использовать безопасность.
  • Больше безопасности
  • Является безопасностью работы в зависимости от того, что другой парень не может понять, что было сделано?
  • безопасность работы зависит от сложного кода...?
  • Одной из самых сильных сил, влияющих на принятие новой технологии, является восприятие одной безопасности работы.

Он использует эту паранойю для вождения клина между менеджерами, держащими струны кошелька, и техническими людьми, у которых есть знания, чтобы признать VSE для того, что он есть. Так он сжимает его в компании: "Ваши технические люди только говорят, что это отстой, потому что они боятся, что это сделает их устаревшими!"


Несколько дополнительных цитат из обзорной документации:

Еще одно следствие этого подхода заключается в том, что данные отображаются в память на "Что вы видите, что вы получаете" основа, и поддерживается повсюду. Это позволяет пользователям перемещать полный структура как строка символов в шаблон, который описывает каждый отдельное поле. Несколько шаблонов могут быть переопределены для определенного хранилища площадь. В отличие от C и других языков, подструктуры могут перемещаться без проблем несоосности из-за стандарты выравнивания границ слов.

Теперь я не знаю о вас, но я знаю, что подход WYSIWYG к макету памяти находится в верхней части моего списка приоритетов, когда дело доходит до выбора языка! В основном, они игнорируют проблемы выравнивания, потому что только старые языки, которые были разработаны в 60 и 70 годах, заботятся о выравнивании слов. Или что-то типа того. Обоснование - фиктивный. Мне было так мало смысла, что я почти забыл об этом.

В VSE нет определенных пользователем типов. Это далеко идущий решение, которое значительно упрощает язык. Выгода от практического Точка зрения также велика. VSE позволяет разработчику и программисту организовать программу по тому же линии как физическая система, являющаяся смоделированы. VSE позволяет структурам встроенный в легко читаемый, логичный иерархия атрибутов.

Awesome! Пользовательские типы являются хромыми. Почему мне нужно что-то вроде объекта InputMessage, когда я могу:

LINKS_IN_USE INTEGER
INPUT_MESSAGE
   1 ORIGIN             INTEGER
   1 DESTINATION        INTEGER
   1 MESSAGE
      2 MESSAGE_HEADER  CHAR 10
      2 MESSAGE_BODY    CHAR 24
      2 MESSAGE_TRAILER CHAR 10
   1 ARRIVAL_TIME       INTEGER
   1 DURATION           INTEGER
   1 TYPE               CHAR 5

OUTPUT_MESSAGE CHARACTER 50

Вы можете посмотреть на это и подумать: "О, это очень красиво отформатировано, если немного старая школа". Старая школа права. Пробелы значительны - очень значительны. И лишний! 1 должен находиться в столбце 3. 1 указывает, что он находится на первом уровне иерархии. Имя символа должно быть в столбце 5. Иерархии ограничены глубиной 9.

Хорошо, хорошо, но это так ужасно? Просто подождите:

Хорошо известно, что для чтения текст, использование обычных верхних/нижних дело более читаемо. VSE использует все верхний регистр (за исключением комментариев). Почему? Литература в психологии основана на прозе. Программы, просто, не проза. Программы больше похожи на математику, учет, таблицы. Программные шрифты (обычно курьером) почти универсально фиксированный шаг, и для хорошего причина - вертикальное выравнивание среди связанных строк кода. Программы в верхний регистр хорошо читается и, через какое-то время, намного лучше в нашей мнение

Ничего похожего на соблюдение вашего мнения на уровне языка! Правильно, вы не можете использовать строчные буквы в VSE, если это не указано в комментарии. Просто держите свой CAPSLOCK, он застрянет там некоторое время.

Подпроцедуры VSE называются процессами. Этот образец кода содержит три процесса:

PROCESS_MUSIC
    EXECUTE INITIALIZE_THE_SCENE
    EXECUTE PROCESS_PANEL_WIDGET

INITIALIZE_THE_SCENE
    SET TEST_BUTTON PANEL_BUTTON_STATUS TO ON
    MOVE ' ' TO TEST_INPUT PANEL_INPUT_TEXT
    DISPLAY PANEL PANEL_MUSIC

PROCESS_PANEL_WIDGET
    ACCEPT PANEL PANEL_MUSIC

*** CHECK FOR BUTTON CLICK
    IF RTG_PANEL_WIDGET_NAME IS EQUAL TO 'TEST_BUTTON'
       MOVE 'I LIKE THE BEATLES!' TO TEST_INPUT PANEL_INPUT_TEXT.
    DISPLAY PANEL PANEL_MUSIC

Все колпачки, как ожидалось. В конце концов, это легче читать. Обратите внимание на пробелы. Это снова важно. Все имена процессов должны начинаться в столбце 0. Начальный уровень инструкций должен начинаться с столбца 4. Более глубокие уровни должны иметь отступы ровно 3 пробела. Однако это не очень важно, потому что вам не разрешено делать такие вещи, как условные условия гнезда. Вы хотите вложенный условный? Ну, просто сделайте еще один процесс и позвоните ему. И обратите внимание на вкусный синтаксис COBOL-esque!

Вам нужны петли? Легко:

EXECUTE NEXT_CALL
EXECUTE NEXT_CALL 5 TIMES
EXECUTE NEXT_CALL TOTAL CALL TIMES

EXECUTE NEXT_CALL    UNTIL NO LINES ARE AVAILABLE
EXECUTE NEXT_CALL    UNTIL CALLS_ANSWERED ARE EQUAL TO CALLS_WAITING
EXECUTE READ_MESSAGE UNTIL LEAD_CHARACTER IS A DELIMITER

Тьфу.

Ответ 19

Вот вклад в мой собственный вопрос:

Происхождение LabTalk

Моим фаворитом в этом отношении является Origin LabTalk. В LabTalk максимальная длина идентификатора строковой переменной - один. То есть, всего 26 строковых переменных. Хуже того, некоторые из них используются самим Origin, и не ясно, какие из них.

Из руководства:

LabTalk использует обозначение% для определения строковая переменная. Юридическая строка имя переменной должно быть символом% за которым следует единый алфавитный символ (буква от А до Я). Имена строковых переменных: без учета регистра. Из всех 26 строк переменные, которые существуют, сам Origin использует 14.

Двери DXL

Для меня второе худшее, на мой взгляд, Doors DXL. Языки программирования можно разделить на две группы: Те, у кого есть ручное управление памятью (например, удаление, бесплатно) и те, у кого есть сборщик мусора. Некоторые языки предлагают оба варианта, но DXL, вероятно, является единственным языком в мире, который не поддерживает. Хорошо, честно говоря, это верно только для строк, но эй, строки не совсем наиболее часто используемый тип данных в программном обеспечении требований.

Следствием является то, что память, используемая строкой, никогда не может быть исправлена ​​и DOORS DXL просачивается, как сито.

В DXL существует множество других причуд, просто чтобы назвать несколько:

  • <а href= "http://www.smartdxl.com/functions.html" rel= "nofollow noreferrer" > Синтаксис функции DXL
  • массивы DXL

Ответ 20

Холодный фьюжн

Я думаю, это хорошо для дизайнеров, но, как программист, я всегда чувствовал, что одна рука была привязана за моей спиной.

Ответ 21

Худшими двумя языками, с которыми я работал, были APL, который относительно хорошо известен для языков его возраста, и TECO, язык, на котором был написан оригинальный Emacs. Оба они отличаются своим кратким, непостижимым синтаксисом.

APL - это язык обработки массива; он чрезвычайно мощный, но почти невозможно прочитать, поскольку каждый символ является оператором, а многие не отображаются на стандартных клавиатурах.

У TECO был похожий взгляд, и по той же причине. Большинство символов - это операторы, и этот язык специального назначения был посвящен редактированию текстовых файлов. Это было немного лучше, так как он использовал стандартный набор символов. И у него была возможность определять функции, которые давали жизнь emacs - люди писали макросы и только вызывали их через некоторое время. Но выяснить, что сделала программа или написать новую, было довольно сложно.

Ответ 22

HAI
CAN HAS STDIO?
VISIBLE "HAI WORLD!"
KTHXBYE

Серьезно, худшим языком программирования является когда-либо Makefile. Полностью непонятно, вкладки имеют синтаксический смысл и даже не отладчик, чтобы узнать, что происходит.

Ответ 23

Я не уверен, что вы хотите включить языки сценариев, но я видел TCL (что тоже раздражает), но... язык mIRC-скриптов раздражает меня до конца.

Из-за некоторого недосмотра в синтаксическом анализе это пробел является значительным, когда он не должен быть. Условные операторы иногда выполняются, когда из-за этого они должны быть пропущены. Открытие инструкции блока не может быть выполнено на отдельной строке и т.д.

Кроме того, это просто полный беспорядочный, непоследовательный синтаксис, который, вероятно, был разработан таким образом, чтобы сделать очень простой материал простым, но в то же время сделать что-то более сложным, едва читаемым.

Я потерял большинство своих скриптов mIRC, или я мог бы, вероятно, найти хорошие примеры того, какой ужасный беспорядок он заставляет вас создавать: (

Ответ 24

Visual Foxpro

Ответ 25

Регулярные выражения

Это язык записи, и трудно проверить, правильно ли он работает для правильных входов.

Ответ 26

Я не вижу необходимости использовать VBScript/Visual Basic 6.

Я использую в первую очередь С++, javascript, Java для большинства задач и баловства в ruby, scala, erlang, python, ассемблер, perl, когда возникает необходимость.

Я, как и большинство других разумно мыслящих полиглотов/программистов, сильно чувствую, что вам нужно использовать правильный инструмент для работы - это требует от вас понимания вашего домена и понимания ваших инструментов.

Моя проблема с VBscript и VB6 заключается в том, когда я использую их для script окон или офисных приложений (для них правильный домен) - я нахожусь в стороне от языка (они не подходят для правильного инструмента).

Отсутствие в VBScript простых в использовании встроенных структур данных (таких как ассоциативные контейнеры/карты) и другие причуды (например, набор для назначения объектам) - бесполезное и неприятное раздражение, особенно для языка сценариев. Контрастируйте его с Javascript (который я теперь использую для программирования окон wscript/cscript и скриптов автоматизации ActiveX), что гораздо более выразительно. Хотя есть некоторые вещи, которые лучше работают с vbscript (например, передача массивов назад и вперед из объектов COM немного проще, хотя легче передать обработчики событий в COM-компоненты с помощью jscript), я все еще удивляюсь количеству кодеров, которые по-прежнему использовать vbscript для окон script - я уверен, что если они написали одну и ту же программу на обоих языках, они обнаружат, что jscript работает с вами гораздо больше, чем vbscript, из-за собственных типов хеш-данных и закрытий jscript.

Vb6/VBA, хотя и немного лучше, чем vbscript в целом, по-прежнему имеет много аналогичных проблем, где (для своего домена) им требуется гораздо больше плиты котла для выполнения простых задач, чем то, что я хотел бы видеть и видел на других языках сценариев.

Ответ 27

Дважды мне приходилось работать на "языках", где вы перетаскивали модули на страницу и связывали их вместе с линиями, чтобы показать поток данных. (Один из них утверждал, что он является RDBM, а другой - для сбора данных общего назначения и для обозначения количества слов).

Просто думать об этом заставляет меня задушить кого-то. Или блевать. Или и то, и другое.

Хуже того, вы не открыли текстовый язык, который можно было бы взломать напрямую.

Ответ 28

Я не могу поверить, что никто этого не сказал:

LotusScript

Я думаю, что это намного хуже, чем php.

Разве не о самом языке, который следует за синтаксисом, подобным Visual Basic, является тот факт, что у него, похоже, есть много функций для чрезвычайно неиспользуемых вещей, которые вы никогда не используете (или один в миллион раз), но поддержка вещей, которые вы будете использовать каждый день.

Я не помню ни одного конкретного примера, но они были такими:

"Хорошо, у меня есть событие, чтобы проверить, находится ли указатель мыши в верхнем углу формы, и у меня нет события двойного щелчка для формы!!?? WTF??"

Ответ 29

TCL. Он только компилирует код прямо перед его выполнением, поэтому возможно, что если ваш код никогда не спускался с ветки A во время тестирования, и однажды, в поле он будет вниз ветвь A, у него может быть ошибка SYNTAX!

Ответ 30

В течение более чем 25 лет компьютерного программирования, самое худшее, что я когда-либо испытывал, было производным от MUMPS под названием Meditech Magic. Это гораздо больше зла, чем мог бы надеяться PHP.

Он даже не использует '=' для назначения! 100 ^ b присваивает значение от 100 до b и считывается как "100 переходит в b". В принципе, этот язык придумал свой собственный синтаксис сверху донизу. Поэтому, независимо от того, сколько языков программирования вы знаете, Magic станет для вас полной тайной.

Вот 100 бутылок пива на стене, написанных в этой мерзости языка:

BEERv1.1,
100^b,T("")^#,DO{b'<1 NN(b,"bottle"_IF{b=1 " ";"s "}_"of beer on the wall")^#,
                          N(b,"bottle"_IF{b=1 " ";"s "}_"of beer!")^#,
                          N("You take one down, pass it around,")^#,b-1^b,
                          N(b,"bottle"_IF{b=1 " ";"s "}_"of beer on the wall!")^#},
END;