Коллеги!
Как вы думаете — есть ли некий теоретический предел повышения уровня языка, при условии, что он остается языком общего назначения, то есть в него не вводятся модели, специфичные для предметных областей? Что бы сузить поле для обсуждения вопросами производительности я сейчас хочу пренебречь. Речь идет только о выразительных возможностях языка.
У меня пока своего аргументированного мнения нет, но есть некоторые соображения. Программист в программе должен сообщить полное и непротиворечивое решение, причем не все что он сообщает можно трактовать как, собственно, решение предметной проблемы.
Часть программы неизбежно занимается системными функциями — "борьбой с машиной". Это может быть управление ресурсами, синхронизация, борьба с API и так далее. Это так называемая "accidential complexity", причем связанная с конкретной реализацией того, на чем мы работаем (машина, платформа). Собственно, эти вещи в первую очередь и абстрагируются и достаточно успешно. Мы забываем про указатели и адресную арифметику, сборщик мусора за нас чистит память, операционная система подсовывает новые страницы по запросу и т.п. Ладно, предположим, что мы доабстрагировались до идеальной машины — процессор супербыстрый (бесконечный цикл за 5 секунд выполняет ), памяти неограниченное количество, ввод-вывод телепатический и т.п. Собственно, на "игрушечных" задачах современные компьютеры уже неплохо аппроксимируют такой идеальный комп.
Следующее направление повышения уровня абстракции меня интересует больше — это применение новых парадигм и моделей вычисления. Даже идеальный комп — это императивная машина, в которой мы вынуждены думать в терминах времени и состояния, даже там, где это нам не нужно. Это тоже "accidential complexity" но вызванная уже не реализацией, а концептуальной моделью, которая определяет то, в каких терминах мы думаем о задаче. Тут нам на помощь спешат другие парадигмы — функциональная, логическая, программирование на ограничениях и т.п. Вот тут, собственно, я и упираюсь в своих размышлениях. Есть ли некий предел, за которым нельзя упростить запись решения, не использовав предметно-ориентированную модель?
Чисто интуитивно, мне думается, что предел есть, поскольку я не могу представить себе вразумительной реализации предельного случая, когда любая программа выражается одним словом Но это из разряда "чую бесовщину, а доказать не могу". И совершено непонятно, насколько мы далеки от этой границы.
Несколько сумбурно вышло, но, надеюсь, суть донес.
Здравствуйте, 0x7be, Вы писали:
0>Коллеги! 0>Как вы думаете — есть ли некий теоретический предел повышения уровня языка, при условии, что он остается языком общего назначения, то есть в него не вводятся модели, специфичные для предметных областей? Что бы сузить поле для обсуждения вопросами производительности я сейчас хочу пренебречь. Речь идет только о выразительных возможностях языка. 0>... 0>Несколько сумбурно вышло, но, надеюсь, суть донес.
самый высокоуровневый язык будет ... это будет наш язык, я точней наши мысли, мы только подумали а компилятор уже наши мысли в машинный код скомпилировал
Здравствуйте, Cris, Вы писали:
C>самый высокоуровневый язык будет ... это будет наш язык, я точней наши мысли, мы только подумали а компилятор уже наши мысли в машинный код скомпилировал
Не пойдет Естественный язык обладает рядом неоднозначностей. Так что потребуется компилятор с ИИ, а это немного другая тема уже.
Здравствуйте, 0x7be, Вы писали:
0>Здравствуйте, Cris, Вы писали:
C>>самый высокоуровневый язык будет ... это будет наш язык, я точней наши мысли, мы только подумали а компилятор уже наши мысли в машинный код скомпилировал 0>Не пойдет Естественный язык обладает рядом неоднозначностей. Так что потребуется компилятор с ИИ, а это немного другая тема уже.
я же дальше конкретизировал, что под языком я имел в виду наши мысли, а так как у людей мозг работает одинаково(почти) то и структура мыслей должны быть одинаковой практически.
и к тому времени когда до такого дойдут я думаю и компилятор с ИИ придумают, или просто ИИ который будет читать наши мысли и делать все что нам только в голову взбредет
Здравствуйте, Cris, Вы писали:
C>и к тому времени когда до такого дойдут я думаю и компилятор с ИИ придумают, или просто ИИ который будет читать наши мысли и делать все что нам только в голову взбредет
Самый высокоуровневый язык при неограниченном количестве памяти и исполнителей-числодробилок — это ассоциативная память. Создаем ассоциации с данными (что хочу) и с алгоритмами (как хочу). Но тут вырастет другой вопрос, творческий — нужен генератор этих "что" и "как". Вот здесь программирование отдыхает (этот вопрос, вроде, затрагивался в книгах Азимова).
Здравствуйте, fin_81, Вы писали:
_>Самый высокоуровневый язык при неограниченном количестве памяти и исполнителей-числодробилок — это ассоциативная память. Создаем ассоциации с данными (что хочу) и с алгоритмами (как хочу). Но тут вырастет другой вопрос, творческий — нужен генератор этих "что" и "как". Вот здесь программирование отдыхает (этот вопрос, вроде, затрагивался в книгах Азимова).
Алгоритмы и структуры данных надо как-то выражать в языке. Об этом я и говорю — есть ли предел в выразительных способностях языка или нет?
Здравствуйте, 0x7be, Вы писали:
0> Есть ли некий предел, за которым нельзя упростить запись решения, не использовав предметно-ориентированную модель?
Че-то я тебя совсем не понял.
Наша цель — коммунизм.
То есть описывать задачу на ПРЕДМЕТНО ориентированном языке.
То есть на языке задачи.
Например англо-русский перевод мы будем описывать в виде грамматических правил.
Распознавание текста — в виде образцов букв.
Шахматную игру — в виде набора правил игры.
Это и есть идеал к которому мы стремимся.
Здравствуйте, 0x7be, Вы писали:
0>Алгоритмы и структуры данных надо как-то выражать в языке. Об этом я и говорю — есть ли предел в выразительных способностях языка или нет?
Мысли (ассоциации) будут сразу отображаться на эту ассоц. память, куда уж выразительнее. Данные — это данные, алгоритмы-числодробилки — тоже данные. Главное знать что мы хотим.
Я не понимаю проблемы (холивары) с языками программирования. Если ты знаешь что хочешь и как хочешь сделать, проблемы с языками (инструментами) нет. Проблема как раз в том, что "что сделать" и "как сделать". Во многих языках зачем-то пытаются реализовать эту творческую часть (парадигмы, метапрограммирование o_O). Ищут "серебряную пулю", которая и задачу придумает и решит. Лучше бы он хорошо выполнял свою основную задачу как "инструмент решения задачи". Шаблоны на с++ — яркий пример того как язык придумывает проблему-задачу, которую должен сам же решить (время компиляции). То же самое можно сделать на обычном си. А клинические случаи лучше и проще решать на языках типа Питона, джаваскрипта. Думаю не спроста эти языки набирают обороты, ядро то у них _ассоциативное_.
C>самый высокоуровневый язык будет ... это будет наш язык, я точней наши мысли, мы только подумали а компилятор уже наши мысли в машинный код скомпилировал
естественный язык очень безобразный, и слабо подходит на роль высокоуровневого языка.
_>Самый высокоуровневый язык при неограниченном количестве памяти и исполнителей-числодробилок — это ассоциативная память.
высокоуровневость языка достигается за счет введения более общих абстракций, и работы с ними.
соответственно, не понятно — как именно ассоциативная память помогает при выделении абстракций, и работы с ними?
Здравствуйте, alpha21264, Вы писали:
A>Че-то я тебя совсем не понял. A>Наша цель — коммунизм. A>То есть описывать задачу на ПРЕДМЕТНО ориентированном языке. A>То есть на языке задачи.
Согласен.
Однако описание DSL + описание решения на этом DSL в итоге дают как минимум столько же информации, сколько и решение этой задачи на языке общего назначения
А вообще у меня скорее теоретический интерес.
A>Например англо-русский перевод мы будем описывать в виде грамматических правил. A>Распознавание текста — в виде образцов букв. A>Шахматную игру — в виде набора правил игры. A>Это и есть идеал к которому мы стремимся.
Верю. Но ведь эти DSL-и надо сначала реализовать
0>Чисто интуитивно, мне думается, что предел есть, поскольку я не могу представить себе вразумительной реализации предельного случая, когда любая программа выражается одним словом
высокоуровневый от низкоуровневого языка отличается не этим.
1 + 1 — пишется именно так почти на всех языках в независимости от уровневости (менять может лишь синтаксис: add(1, 1), add 1, 1 и т.д.)
высокоуровневый язык — позволяет "нативно" оперировать сложными абстракциями.
имхо, высокоуровневость бесконечна — т.к. можно вводить всё более и более сложные абстракции.
в той же математике нашандарашили уже кучу абстракций, а современные языки умеют оперировать только самым мизером математических абстракций.
Здравствуйте, 0x7be, Вы писали:
0>Как вы думаете — есть ли некий теоретический предел повышения уровня языка, при условии, что он остается языком общего назначения, то есть в него не вводятся модели, специфичные для предметных областей?
Можно представить себе чисто декларативный язык. Вместо того, чтобы на нём писать алгоритм сортировки, мы описываем, какой массив считается отсортированным, и что такое перестановка элементов, и просим найти отсортированную перестановку исходного массива, а компилятор уже сам как-то находит эффективный алгоритм для этого. Только пока нет настолько умных компиляторов, которые могли бы решать эту задачу для нетривиальных требований.
Здравствуйте, fin_81, Вы писали:
_>Я не понимаю проблемы (холивары) с языками программирования.
Холиваров я тут затевать не хочу.
А проблема, точнее мотивация, у меня простая — всегда хочется иметь инструмент лучше, чем тот, который есть.
Стало интересно, какие теоретические границы развития есть. Не то, что бы это мне сильно помогло на практике, просто интересно.
_>Если ты знаешь что хочешь и как хочешь сделать, проблемы с языками (инструментами) нет. Проблема как раз в том, что "что сделать" и "как сделать".
Соглашусь, но лишь отчасти. Да, предметная проблема главнее языка.
Но очень хочется, что бы язык как можно меньше мешал её решать
А ещё лучше, что бы немножко помогал
_>Во многих языках зачем-то пытаются реализовать эту творческую часть (парадигмы, метапрограммирование o_O).
А что такого плохого в парадигмах и метапрограммировании?
Вон, в С тоже есть и парадигма и кое-какое метапрограммирование.
_>Ищут "серебряную пулю", которая и задачу придумает и решит. Лучше бы он хорошо выполнял свою основную задачу как "инструмент решения задачи".
Ищу не "серебряную пулю", а молоток получше
_>Шаблоны на с++ — яркий пример того как язык придумывает проблему-задачу, которую должен сам же решить (время компиляции). То же самое можно сделать на обычном си.
Можно. А нужно? Если у меня будет возможность, то я решу эту задачу на C#
Кстати, у С++ тонна недостатков, но шаблоны среди них я не вижу. Шаблоны — сильная сторона этого языка.
В том же C# я бы с удовольствием променял бы дженерики на шаблоны.
_>А клинические случаи лучше и проще решать на языках типа Питона, джаваскрипта.
На них, кстати, решают и "неклинические" случаи.
_>Думаю не спроста эти языки набирают обороты, ядро то у них _ассоциативное_.
А что это дает? В смысле, ассоциативность. Я пока как-то не проникся этой идеей. Можешь получше её расписать?
Здравствуйте, DarkGray, Вы писали:
DG>высокоуровневость языка достигается за счет введения более общих абстракций, и работы с ними. DG>соответственно, не понятно — как именно ассоциативная память помогает при выделении абстракций, и работы с ними?
Выделение абстракций — что-то связать (ассоциировать) с чем-то. Ассоциация — как бы(?) самый высокий уровень абстракции. Я забыл указать основную проблему ассоциативной памяти: чем больше связей (ассоциаций), тем больше время поиска. Современные языки просто ограничивают количество этих связей и сложность (сравнения) ключей, вводя типизацию, ограниченный набор операций, грамматика и тп.
_>Выделение абстракций — что-то связать (ассоциировать) с чем-то.
нет
очень низкоуровневая модель — мало чем помогающая
> Ассоциация — как бы(?) самый высокий уровень абстракции.
нет. ассоциация — одна из элементарных абстракций, реализуется почти всеми современными языками в виде прямых ссылок на объект, а также в виде контейнера dictionary/map
ассоциация — это всего лишь связь между двумя элементами.
но в теории информации — только видов связей штук десять, а еще каждой у связи бывают ее характеристики.
также связи бывает не только элемент<->элемент, но и элемент<->множество элементов, множество элементов<->множество элементов и т.д.
ps
связи(и соответственно ассоциации) бывают следующих видов:
включения,
использования,
обобщения/конкретизации,
наследования,
является,
имеет отношение,
и т.д.
Здравствуйте, DarkGray, Вы писали:
DG>1 + 1 — пишется именно так почти на всех языках в независимости от уровневости (менять может лишь синтаксис: add(1, 1), add 1, 1 и т.д.) DG>высокоуровневый язык — позволяет "нативно" оперировать сложными абстракциями.
Можно попросить тебя ещё написать несколько предложений по этому поводу? Ну, детализировать там, или пример написать что ли.
DG>имхо, высокоуровневость бесконечна — т.к. можно вводить всё более и более сложные абстракции. DG>в той же математике нашандарашили уже кучу абстракций, а современные языки умеют оперировать только самым мизером математических абстракций.
А как быть с тем, что какое-то понятие раньше уже использовалось и обозначает что-то другое? Например, "точка" (геометрическая) — чем дальше развивалась математика, тем большей размерностей (x, y, z, ...) эта точка получала.
Или я не в теме?
Здравствуйте, 0x7be, Вы писали:
0>Коллеги! 0>Как вы думаете — есть ли некий теоретический предел повышения уровня языка
Нет
0>, при условии, что он остается языком общего назначения, то есть в него не вводятся модели, специфичные для предметных областей?
От специфичности вы никак не избавитесь. При достаточном повышении уровня языка он сам по себе становится предметной областью, не менее сложной и специфичной, чем любая другая.
0>Чисто интуитивно, мне думается, что предел есть, поскольку я не могу представить себе вразумительной реализации предельного случая, когда любая программа выражается одним словом Но это из разряда "чую бесовщину, а доказать не могу".
Одно слово, скажем, 10 букв латинского алфавита = 26^10 программ. Плюс-минус. Все известные понятия и программы, вы, наверное, выразите, а вот все возможные — ни за что. Это простейшая математика, никакой интуиции.
Программировать сложно. Но не программировать еще сложнее.
Здравствуйте, DSblizzard, Вы писали:
DS>Одно слово, скажем, 10 букв латинского алфавита = 26^10 программ. Плюс-минус. Все известные понятия и программы, вы, наверное, выразите, а вот все возможные — ни за что. Это простейшая математика, никакой интуиции.