Самый умопомрачительный язык программирования? [закрыто]


45

С достаточно общим языком программирования, который вы найдете наиболее галлюциногенными?

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

Что касается меня, то в 90-х годах я занимался некоторым функциональным и логическим программированием (например, Прологом ), поэтому не могу сказать, что нашел там что-то особенное.

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

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


Разве это не может быть ошеломляющим и просто оставить все как есть?

4
Любой язык, где пустое пространство имеет значение!
mootinator

@mootinator - Но работать с Python довольно весело, если ваш текстовый редактор не причиняет вам боль.
rjzii

1
@ Torbjorn Кто-то собирается добавить INTERCAL? APL - это проект для средней школы по сравнению с этим большим отцом.
Марк С

Perl далеко не самый сложный. Мне 12 лет, и я могу довольно легко программировать на Perl.
Динамичный

Ответы:


73

APL

Этот язык является невероятно мощным и очень лаконично, это будет больно ваш мозг.

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

APL клавиатура

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

  • strip_tags()кто-нибудь? (позаимствовано из Википедии)

strip_tags () аля APL


18
+1 за показ клавиатуры
tcrosley

5
@tcrosley: Хорошо, если у вас есть настоящий: wickensonline.co.uk/apl/unicomp-apl-top-large.jpg
Orbling

4
И если это уже не было достаточно умопомрачительно, были некоторые операторы, которым требовалось использовать клавишу возврата / перегрузки. Например, обратная матрица была квадратной рамкой (над клавишей L), зачеркнутой знаком деления (рядом с клавишей backarrow в верхнем правом углу изображения клавиатуры).
Tangurena

2
У меня есть воспоминания о начале 1980-х, когда я делал APL для проведения статистического регрессионного анализа высокого уровня, люди все еще используют это? Shudder.
HLGEM

2
Однажды я делал много APL - он до сих пор остается ностальгическим местом для меня ... Я любил его в то время.
fast_now

56

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

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


7
Я бы тоже сказал Haskell, но не потому, что он загадочный. В то время как это, конечно, может быть трудно понять, умопомрачительная вещь связана с теорией, стоящей за этим. Монада и Стрелы - все еще область, которую я не завоевал :)
Matthieu M.

11
Почему «Очень близко к тому, чтобы быть чисто функциональным»? Это чисто функционально.
dan_waterworth

4
Я хотел бы процитировать себя и добавить к тому, как Haskell согнет ваш разум: «Haskell не позволяет вам совать вещи под ковер, вынуждает вас явно иметь дело со структурой вашей программы, и он учит вас языку для описания этих структур : язык типов. Понимание типов, особенно таких, как Haskell, сделает вас лучшим программистом на любом языке. " programmers.stackexchange.com/questions/28950/…
Waquo

14
Haskell - это чисто функциональный язык программирования. Код, который вы пишете на Haskell, является чисто функциональным (если вы не используете unsafePerformIO и тому подобное). IO-Monad является чисто функциональным, если вы считаете, что иначе, вы не понимаете, как монады используются для моделирования потока управления чисто функциональным способом. Представьте, что ваша программа представляет собой список покупок IO-действий, причем список покупок представляет собой просто структуру данных, без побочных эффектов, а язык выполнения - покупатель, который выполняет побочные эффекты.
Waquo

8
@ Джон, как насчет того, что мы согласны с тем, что язык Haskell является чисто функциональным, а система времени исполнения - нет. Выполнение программы на Haskell нечисто, но сама программа чиста.
dan_waterworth

30

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


2
Я обратился к Прологу как к обратному программированию, желая уже знать свои ответы, а затем запрограммировать, чтобы получить вопросы :)
Jé Queue

1
@Xepoch: Я думаю, что вы можете быть прямо здесь, Пролог формулирует вопрос. Один из единственных правильных языков 5GL в использовании.
Orbling

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

+1 для Пролога, у меня был курс по искусственному интеллекту, который использовал Пролог, и это единственный единственный курс по информатике, в котором я плохо
учился

Пролог не является функциональным языком программирования. Быть испорченным по функционалу Прологом - все равно, что испорчено по процедурному программированию Лиспом.
Просто мое правильное мнение

24

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


2
Def +1 на Perl. Я всегда особенно любил (я полагаю, их называют) «подразумеваемые» переменные. Делает для отличного кода только для записи.
GrandmasterB

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

3
Бах к этому ответу и оба комментария к нему. Хорошо написанный Perl легко читать и писать. Baby-perl, написанный новичками, прост, хотя и многословен. Единственный «нечитаемый» perl либо запутан, либо запрограммирован в одну строку.
Шон Макмиллан

22

Я хотел бы сказать Forth . Обозначение, что все операции являются стековыми манипуляциями. В чистом виде нет локальных переменных для использования.


10
FORTH - замечательный язык Когда я впервые изучал программирование в начале 80-х, у меня был Atari 400, и мой выбор интерпретировался как BASIC, Assembly и FORTH. Я использовал все три широко, но в первую очередь больше, чем любой другой. У меня до сих пор хранятся ультра-классические книги Лео Броди «Старт ФОРТ» и «Думая ФОРТ». На самом деле, если бы меня попросили создать самодостаточный язык с нуля на новой аппаратной системе, я бы без колебаний выбрал FORTH.
Адам Кроссленд

3
@Adam Кроссланд: Мышление ВПЕРЕД большая книга, вы можете быть заинтересованы в этой ссылке: thinking-forth.sourceforge.net
Orbling

1
@ Orbling: великие умы думают одинаково. Не более 10 минут назад я положил PDF на свой Kindle.
Адам Кроссленд

1
@ Adam Crossland: прекрасное место для этого. Эта книга, как правило, полезна для программистов, должна быть в списке чтения для людей, интересующихся FORTH или нет.
Orbling

1
Я полностью согласен. Можно сказать очень много о том, как мы думаем о решении проблем в целом. Броди такой ясный мыслитель и ясный писатель. Его работы радуют меня.
Адам Кроссленд

21

Руби .

Это заставляет меня хотеть убить себя

1.month.from.now()

(Я мог бы иметь неправильный синтаксис, но вы поняли).


23
О, МОЙ БОГ. Кто нибудь думал, что это хорошая идея?
EpsilonVector

8
Смысл ума не в чтении, а в написании. Придумать эту чепуху сложно, а необходимость запоминать / искать все встроенные функции / свойства просто смешна.
Мэтью Прочитал

55
Только я думаю, что это выглядит потрясающе, и, возможно, это хорошая причина для изучения Ruby?
Orbling

9
Это здорово читать, да. Но значит ли это, что я могу написать 3.months.from.last.month.if.it.was.a.leap.year? Нет. Или, по крайней мере, я так не думаю . Если я могу ... RoR может быть первым телепатическим языком когда-либо.
morganpdx

15
Что не так DateTime.Now.AddMonths(1);? Эти функции вряд ли делают код более читабельным. (Я не говорю, что C # имеет лучший синтаксис. Вы можете перенести его на любые языковые соглашения, и он все равно будет применяться.)
ChaosPandion

18

Brainfuck

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

Hello World (указатели слева; объяснение справа):

+++++ +++++             initialize counter (cell #0) to 10
[                       use loop to set the next four cells to 70/100/30/10
    > +++++ ++              add  7 to cell #1
    > +++++ +++++           add 10 to cell #2 
    > +++                   add  3 to cell #3
    > +                     add  1 to cell #4
    <<<< -                  decrement counter (cell #0)
]                   
> ++ .                  print 'H'
> + .                   print 'e'
+++++ ++ .              print 'l'
.                       print 'l'
+++ .                   print 'o'
> ++ .                  print ' '
<< +++++ +++++ +++++ .  print 'W'
> .                     print 'o'
+++ .                   print 'r'
----- - .               print 'l'
----- --- .             print 'd'
> + .                   print '!'
> .                     print '\n'

2
Или как насчет пробела? Все зло Brainfuck в сочетании с невидимым кодом.
Лорен Печтел

17

Лисп - мой последний умопомрачительный язык.

Я взял с собой монады и функциональное программирование из Haskell, и теперь у меня есть макросы для работы. Я только вхожу в CLOS и вообще не касался системы условий.


Мне даже не нравятся Лиспы (за возможным исключением Clojure - я там еще не решил), и я дал тебе +1. Сумасшедшая часть, безусловно, есть, и то, что я узнал от Lisp, даже если я ее не использую, многое рассказал о том, что я делаю на других языках.
ТОЛЬКО МОЕ правильное МНЕНИЕ

14

MUMPS

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

s A="String" F i=1:1:$L(A) W $c($S($A($E(A,i))<91:$A($E(A,i))-52#26+65,1:$A($E(A,i))-84#26+97))

вау, ты не шутишь? Я не спал, и вдруг 1 апреля? Ничто с таким количеством скобок и знаков доллара не должно быть рядом с записями моих пациентов.
dan_waterworth

1
Моя первая работа в программировании была в компании, специализирующейся на MUMPS! К сожалению, я прошел университетский курс по веб-разработке, поэтому меня вместо старых рук поместили в недавно созданную команду ASP компании, но MUMPS был языком, на котором мы обучались в течение наших первых нескольких недель. Может быть, мне посчастливилось сбежать ...
thesunneversets

1
Кто-нибудь писал здесь из Мэдисон, штат Висконсин? Верона, правда?
Ганс Пассант

1
Я верю, что на thedailywtf.com есть целый раздел, посвященный MUMPS. Не похоже на язык, на котором я бы хотел потрогать.
Тианна

1
Я помню, как изучал M в академических кругах и думал, что это было интересно как язык специального назначения. Краткость, которую это позволяет, подобна извращенному виду минимизации. В своей наивности я подумал, что в производственном коде не должно быть никаких крайних сокращений языка. В первый и единственный раз, когда я увидел производственную кодовую базу M, мои внутренности напряглись ... это выглядело так же, как ваш пример. О, ужас!
Ajk

13

Я бы сказал, Coq , или другая реализация теории зависимых типов. Система типов Хаскелла не очень выразительна сравнительно. Переход к более выразительной системе типов (например, исчисление конструкций (CoC)) позволяет вам делать некоторые изящные вещи, такие как проверка свойств программ в языке и встраивание сильных инвариантов в ваши типы, которые можно проверять статически.


2
Любая система / проверяющий / язык зависимого типа, скорее всего, будет более запутанной, чем обычные языки, поэтому +1.
Orbling

1
Официальная проверка программ - это то, с чего я только начинаю. Это, безусловно, изгибает разум и становится все более полезным в реальном мире. +1
dan_waterworth

7

Цель-C . Честно говоря, я изучал его очень кратко и на первый взгляд настолько не любил синтаксис, что отказался от него.

Так как это такой (относительно) общий язык (в основном для разработки под Mac / iPhone / iPad ), я уверен, что он действительно несколько приличный, когда вы к нему привыкнете.


2
Ну, это, наверное, можно назвать немного сногсшибательным, но мне это нравится. Это может помочь, если вы понимаете, что [foo bar]это просто синтаксический сахар, для objc_sendMsg(foo, "bar");которого, в свою очередь, ищется указатель функции (это особая «полоса», а не универсальная). Вы поняли, что это полностью утка?
Пер Йоханссон

Objective-C - это просто огромный синтаксический сахар для функций во время выполнения. Как только вы [receiver doStuff:arg]
привыкните

6

Я выбираю Меркурий .

Меркурий согнул мой разум, показав, что даже чистые языки могут выполнять ввод / вывод .

Это работает так, что функции ввода / вывода в Меркурии принимают значение «состояние мира» и возвращают новое значение «состояние мира». Таким образом, функции ввода / вывода в Меркурии преобразуют мир, и, следовательно, поддерживается чистота.


3
+1 "... ртуть трансформирует мир и, следовательно, поддерживается чистота." - Мне нравится это вне контекста. ;-)
Orbling

Я сейчас пытаюсь пройти курс обучения с Меркурием. Пока это была достойная борьба. Мне это очень нравится.
Просто мое правильное мнение

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

6

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

Хотите остановить на полпути через алгоритм и передать управление кому-то еще? Конечно!

Хотите возобновить одно и то же продолжение несколько раз? Конечно!

Хотите приостановить выполнение алгоритма, переопределить функцию, а затем возобновить выполнение с исходным стеком, но с обновленным глобальным состоянием? Нет проблем! И сделать это несколько раз с различными изменениями глобального состояния, но с одной и той же точкой повторного входа в стек? Для вас, сэр, что угодно!


+1 LOL + "Для вас, сэр, что угодно!" Помимо того, что в песне «Оливера!» Почти есть строчка в песне, это также хорошее стремление к языку.
Orbling

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

4
Возможно, в Haskell он более умопомрачительный, поскольку он (call / cc) реализован как библиотека, а не как языковая функция. Но, возможно, это делает его менее сумасшедшим.
Логан Капальдо

Я думаю, что это одновременно и более и менее сногсшибательно. Хранение этого противоречия в моей голове изгибает мой разум. Так что, в конце концов, Haskell более умопомрачительный. :)
ПРОСТО МОЕ правильное МНЕНИЕ

Крутая вещь в продолжениях Scheme (и Ruby !) Заключается в том, что они встроены в язык. Haskell в основном просто добавляет свой монадический синтаксис к обычному стилю передачи продолжения, что вы также можете сделать в Scheme. Но наличие везде встроенного вызова / cc без необходимости встраивания всего этого в монадическую конструкцию, безусловно, позволяет использовать многие изумительные конструкции.
Дарио

4

Раньше я использовал древний редактор под названием TECO (Text Editor and COmparator), который был очень мощным языком для модификации текста со всеми видами макросов. Я не помню точную известную цитату об этом, но суть была в том, что «любая случайная коллекция из 20 символов почти всегда является законной программой TECO, и она изменит ваш файл (это редактор) принципиально непредсказуемым образом. Я помню, как писал Конвертер Fortran в PL1 примерно на странице кода TECO.


5
«Одна из наиболее интересных игр для TECO - это ввести свое имя в командной строке и попытаться угадать, что он делает. Любая возможная ошибка ввода во время разговора с TECO, вероятно, разрушит вашу программу, или даже хуже… вносить тонкие и загадочные ошибки в некогда работающую подпрограмму ". Человек, это были дни!
Просто мое правильное мнение

1
TECO была также оригинальной базой EMACS. EMACS начинался как просто набор макросов TECO!
Гейб

@ Омега: необходимо сказать, какой TECO вы имеете в виду. DEC TECO, поставляемый с TOPS-10 или MIT TECO, написанным на MIDAS. Этот последний TECO - это то, что EMACS было написано. Это также, как EMACS был расширен. Я использовал взломать EMACS вместо прохождения классов.
Джон Сондерс

Я использовал только DEC TECO. И да, это были дни (чтобы снова быть молодым) ....
Омега Центавра

1
Заставляет меня помнить , набрав в командном режиме Vim
рон

3

Сборка была самым «умопомрачительным» для меня, но я только начинаю это.


что еще хуже, это зависит от операционной системы и аппаратного обеспечения
Дейв

Что насчет этого делает это так? Прямые инструкции без явного порядка группировки? что-то другое?
Jé Queue

ну, в частности, мне не нравится, как непонятно выглядит поток программы. Это не легко читать быстро.
Anto

2
Ах, Cincinnati Milacron 2200B: переменная длина слова в сочетании с модификацией адреса JMP во время выполнения. Это заставило ЛСД выглядеть ручным.
Питер Роуэлл

3

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


3

REBOL

Он построен вокруг понятия кода как данных, как Лисп . Сторонники языка с трудом объясняют, в чем его уникальные преимущества перед другими подходами в этой семье, и, как правило, пожимают плечами и говорят что-то вроде: «Ну, парень, который разработал AmigaOS, придумал его, стандартная библиотека включена и микроскопическая, и как только вы «получите» его, это будет похоже на прием красной таблетки «Матрица», и вы никогда не захотите возвращаться ».

Проблема в том, что он частично причудливый и точно не определил, какие программисты являются его рынком. Но также отчасти потому, что многие из сторонников этого просто отстой в объяснениях . :)

Но Дуглас Крокфорд раньше был фанатом, черпал вдохновение в этом из-за создания JSON и предлагал людям заняться этим уже в октябре 2010 года:

«Тед Ньюард проделал отличную работу по модерации панели« Будущее языков программирования ». В конце панели Тед спросил участников дискуссии, какие языки им следует изучать, чтобы получить новые идеи. Список включал Io (Брюс Тейт), Ребол (Дуглас Крокфорд) , Форт и Фактор (Алекс Пэйн), Схема и Ассемблер (Джош Блох) и Клоюре (Гай Стил). "

Источник: sauria.com

Я думаю, что стоит посмотреть на тех, кто хочет понять, как они думают о языковом дизайне и расширяемости. Теперь, когда это открытый исходный код (после 18 лет разработки), обычные заявления об отказе от ответственности, которые я держал на расстоянии вытянутой руки, больше не применяются ... это стоит посмотреть! Сообщество даже вышло из своей проприетарной программы обмена сообщениями на основе Rebol и начало общаться в Stack Overflow (к моему большому удивлению!)


1
Я избегаю REBOL, потому что его единственная практическая реализация - это нестандартизированное, не открытое программное обеспечение, которое изменяется по прихоти его собственной корпорации. (Rebol 2 против Rebol 3 ...) Если он когда-нибудь будет стандартизирован или открыт, я буду смотреть еще раз, но до этого дня Rebol остается вне моего пояса с инструментами.
ПРОСТО МОЕ правильное мнение

1
@ JUSTMYcorrectOPINION возможно, настал день, чтобы взглянуть еще раз! Rebol 3 теперь является лицензионным программным обеспечением Apache2 . У нас даже есть RebolBot здесь, в чате Rebol и Red на StackOverflow, чтобы помочь нам с демонстрацией языка. ( Red - еще один вариант Rebol с открытым исходным кодом, который показывает очень интересное обещание в виде гибридной скомпилированной версии.)
HostileFork

2

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


SQL, конечно, сгибает разум, но это не помогает мне писать лучший код.
dan_waterworth

4
SQL так же естественен для меня, как BASIC, только для меня. Удивительно, насколько простым может быть приложение с поддержкой БД, когда вы постигаете полную обработку данных в SQL.
Jé Queue

@dan_waterworth, я думаю, что SQL может помочь вам написать меньший и более лаконичный код, добавив больше логики в SQL по сравнению с обработкой большинства условных и последующих запросов в приложении.
Jé Queue

@Xepoch, я думаю, если чему-то научил нас рост ORM, так это тому, что людям не нравится писать на SQL, если они могут этого избежать. Они бы предпочли писать на своем родном языке.
dan_waterworth

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

2

чистый

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


+1 Функциональный означает вектор, исключительно мощный язык, который. Как потомок q (который немного обязан APL) и заимствует тонну у Haskell et al. Это, безусловно, заслуживает упоминания.
Orbling

2

Это может быть не самым изнурительным, но мне было труднее всего учиться (я думал, что Haskell и язык ассемблера были проще!)

Это набор языков HDL , в частности, VHDLVerilog в меньшей степени)

Преодолеть тот факт, что каждая «функция» запускается одновременно, невероятно сложно, и вы не можете избежать перехода к распараллеливанию абсолютно всего. Конечно, это всего лишь пограничный язык программирования.


Я сделал немного VHDL один раз. У меня был настоящий богоявный момент, когда я внезапно осознал, что, когда я добавляю код, эффективно появляется все больше и больше аппаратных средств для реализации этого кода, и все это работает одновременно. Как многопоточное программирование с действительно неограниченным одновременным выполнением потоков; возможно, люди с доступом к неограниченному количеству узлов в EC2 или кластерах с уменьшенным отображением получают аналогичное жужжание. (Но вскоре после этого я пришел к выводу, что это большая боль - реализовать что-то нетривиальное в этих языках, и убежал).
Timday

1
Будучи инженером-электриком, у меня не было особых проблем с одновременностью, на самом деле это было настоящее освобождение. Что касается сложности реализации, то uP - это нишевое решение для конкретных классов задач, которые преобразуют проблему в решение, которое можно описать как алгоритмы - понятие, изначально взятое из математики. Проблема с присущим параллелизмом относится к числу легко решаемых проблем, и VHDL и FPGA пригодятся в то время.

Да, VHDL - это странно, если вы еще не программист и привыкли работать с несколькими одновременными блоками.
Медив

1

Tcl

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


1
Я много программировал на Tcl в 1995-1997 годах без особой на то причины. Когда в 1998 году я начал искать новую работу, каждый рекрутер во всем районе Бэй пытался пригласить меня на собеседование на низкооплачиваемые концерты VIGNETTE с высоким давлением. Я быстро удалил это из своего резюме. Я подумал о том, чтобы дать вам трудное время из-за этого, так как я вспомнил, что Tcl действительно прост, но мне хотелось бы, чтобы я изучил Python вместо этого, задним числом.
Адам Кроссленд

Tcl, безусловно, приобрел вкус. Лично я думаю, что дизайн языка гениален - ни один другой язык не подходит для моего мозга так, как Tcl, но я знаю, что я в меньшинстве. Любите это или ненавидите это, изучение этого требует, чтобы Вы переосмыслили, как должны работать языки.
Брайан Оукли

1

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


6
Я должен возразить, утверждая, что это доказуемо выше. Термин «старший» предлагает учитывать субъективные вопросы. Кроме того, если мы запускаем C на компьютере с бесконечной памятью (что справедливо только потому, что машина Тьюринга работает с бесконечной памятью), они эквивалентны по мощности.
Уинстон Эверт

2
@ Уинстон: Лента машины Тьюринга не должна быть бесконечной. Нужно только иметь фабрику лент на каждом конце, которая может производить дополнительную ленту по мере необходимости :)
Майк Данлавей

«Превосходно превосходящий» по определению является объективным термином. Это означает, что любой язык может быть реализован на машине Тьюринга, но не каждый язык может реализовать машину Тьюринга. Конечно, это также верно для таких языков, как C, с бесконечной памятью и бесконечным стеком.
user12667

BrainFuck, как уже упоминалось в вопросе, и это в значительной степени машинный язык Тьюринга.
Mchl

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

1

С

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


Извините меня. С - это язык ассемблера. Конечно, у него нет таких вещей.
Питер Роуэлл

2
Языки ассемблера сногсшибательны.
david4dev

-1

JESS (Java Expert System Shell). Эта адаптация CLIPS, встроенная в среду Java, является языком экспертной системы на основе функциональных правил. Попытка отобразить реальные объекты Java как факты и найти правильные вопросы, чтобы задать ожидаемые результаты, является настоящей проблемой. Меньше, если вы знакомы с теорией экспертных систем, но когда вы исходите из чисто ООП мышления, это не подходит. ПРИМЕЧАНИЕ: CLIPS - это не Lisp, а выглядит так. Еще один изумитель ума.

Как только вы пройдете начальную кривую обучения, он станет достаточно мощным и чертовски быстрым, чтобы найти ответы.


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

Хорошо, я исправлен. haskel.com/corp/details/0,10294,CLI1_DIV139_ETI9759,00.html Тем не менее, он требует совершенно другого мышления от языка, на котором он встроен.
Берин Лорич,


-1

CIL

CIL, общий промежуточный язык, к которому компилируются все программы .NET , своего рода объектно-ориентированная сборка. Мне интересно попробовать написать или прочитать в нем код и сравнить его конструкции с C #, которые я уже знаю. Это хороший способ узнать больше о том, что делает .NET за кулисами. И это может быть полезно для таких вещей, как динамическая генерация кода или перезапись существующего скомпилированного кода с использованием Mono Cecil .


2
или байт-код в этом отношении тоже?
Jé Queue

Если вы имеете в виду байт-код Java, то у меня нет никакого опыта с ним, поэтому я не могу рекомендовать его как умопомрачительный.
svick

Я бы не стал сравнивать Java-Bytecode и CIL, так как Java-Bytecode уже скомпилирован, а CIL будет скомпилирован во время выполнения (Just-In-Time-Compiler of .net)
basti

@chiffre В большинстве случаев байт-код Java и CIL работают совершенно одинаково. В обоих случаях у вас есть исходный код (C # или Java), который компилируется в двоичный язык-посредник во время компиляции (CIL или Java Bytecode), который затем компилируется в реальный машинный код во время выполнения посредством JIT компилятор.
свик
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.