На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (31) « Первая ... 11 12 [13] 14 15 ...  30 31  ( Перейти к последнему сообщению )  
> идеальный язык программирования , каким он должен быть?
    Цитата AndNot @
    не появились ли в С подобные возможности манипуляций с объектами

    таких манипуляций нет, потому что в них нет необходимости на С++

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


    PS свой список я опубликую чуть позже, свободного времени мало
    Сообщение отредактировано: impik777 -
      В споре и появляются новые идейки. А насчет списка, в принципе можно. Только попозже. Надо обдумать ;)
      Только вот наврятли получится составить общий список.
        Цитата impik777 @
        кстати, было очень бы хорошо, что бы идеальный язык поддерживал идеологию MVC(Model-View-Controller)

        А это что такое?

        Цитата impik777 @
        хорошая книжечка по теории проектирования
        "Приемы объектно-ориентированного проектирования. Паттерны проектирования"
        Э. Гамма, Р. Хелм, Р. Джонсон, Д. Влиссидес

        А её нет в электронном виде?

        Цитата mo3r @
        Про шаблоны где почитать не знаю.
        Страуструп есть здесь.
        В лисп, по-моему, неплохое введение «Practical Common Lisp» (сам я по нему изучаю).

        А на русском языке есть? Всё-таки моё знание английского недостаточно для чтения мегабайтов информации. То есть в общем я понимаю, о чём идёт речь, но происходит это в несколько раз медленнее, чем на русском. Придётся, видимо, отовариваться. :'(

        Цитата mo3r @
        Рекурсивные функции бывают примитивными (строятся на основе двух элементарных функций (константа 0, прибавление единицы) с помощью операции рекурсии), которые определены всюду; бывают частично рекурсивными (включают в себя примитивно рекурсивные, а также функции, получаемые из примитивно рекурсивных с помощью операции минимизации, т.е. нахождения минимального решения уравнения f(x_1,x_2,..,x_(n-1),y)=x_n относительно y), и определены они не всюду.

        Ничего не понял.

        Цитата mo3r @
        Это безымянные функции, которые передаются по значению. Лямба-функции — это основа лямбда-исчисления Чёрча.
        Вот пример из яваскрипта (где такие функции присутствуют):

        function greet(greetings_function,name)
        {
        alert(greetings_function(name));
        }

        greet( function(name) {return 'Hi, '+name+'!';}, 'mo3r');
        greet( function(name) {return 'Hello, '+name+'!';}, 'mo3r');

        Таки асилил предлагаемую статью, несмотря на английский язык. На моём Форте это выглядело бы приблизительно так:

        ExpandedWrap disabled
          : greet ( name function -- ) call alert ;
           
          " mo3r" :: s" Hi, " 2swap str+ " !" str+ ; greet
          " mo3r" :: s" Hello, " 2swap str+ " !" str+ ; greet

        Я не понял только одного: зачем использовать безымянные функции, когда можно использовать именованные функции?

        ExpandedWrap disabled
          : greet ( name function -- ) call alert ;
           
          : hi s" Hi, " 2swap str+ " !" str+ ;
          : hello s" Hello, " 2swap str+ " !" str+ ;
           
          " mo3r" ' hi greet
          " mo3r" ' hello greet

        А вообще мне идея понравилась, особенно про вынос цикла for в отдельную функцию.

        Цитата mo3r @
        делегирование функций

        Что это такое?

        Цитата mo3r @
        Разница большая — значительно сокращается время тестирования, ведь компилятор будет ловить больше ошибок.

        Не знаю как насчёт С++, но по сравнению с паскалём у меня время тестирования сильно уменьшилось именно за счёт того, что я могу во время выполнения ввести какое угодно выражение на Форте и посмотреть, что оно выдаёт.

        Цитата impik777 @
        в Форте вообще есть различия между одно-байтным целым, двух-байтным и т.д. ???
        т.к во многих языках это имеет важное значение

        Конечно! В стеке все числа одного размера (для 32-битных систем - dword), а в памяти ты можешь их записывать и читать как двухбайтные и однобайтные.

        Цитата impik777 @
        Ну, Форт одновременно низкоуровневый и высокоуровневый, однако образует целостную, непротиворечивую и, что немаловажно, простую концепцию.


        С++ она то же очень проста, просто надо её понять,

        Я меряю сложность концепции количеством информации, которое нужно рассказать, чтобы её объяснить, и количеством кода, необходимым, чтобы её реализовать. С этой точки зрения Форт проще минимум раз в 10.

        Цитата AndNot @
        Посмотри FASM. Там мощнейший макроязык. И он постоянно совершенствуется

        На фасме у меня написано ассемблерное ядро форт-системы (единственный файл из ретрофорта, который я не переделал так, что родная мама не узнает, изменил там процентов 30). Видел там макросы, особо не вникал, но сомневаюсь, что они могут сравниться с Фортом.

        Цитата AndNot @
        Ну а после DOES> можешь вставить что угодно, у того же Броуди есть пример, где при обращении к массиву по индексу проверяется его диапозон, или например работа с частями массивов при нехватке памяти. А можешь и без DOES> обойтись.

        У меня create есть, does - нет. У меня другой прикол: когда я, скажем, задаю тип массива, у меня задаётся не одно слово, а несколько с различными функциями, например:

        mas - адрес массива
        mas[] - индексация массива
        mas+, mas- - переход к следующему или предыдущему элементу
        mascell - размер элемента

        и т. п. does> в такую концепцию не укладывается.

        Цитата impik777 @
        особенно, если учесть, что числа с плавающей занятой считаются в несколько раз медленней, чем целые
        (именно это учли производители первого Doom, не используя дробные числа)

        Числа с плавающей запятой хранятся в отдельном стеке (по крайней мере, у меня так).

        Цитата impik777 @
        список(в идеале) - это цепь из однородных элементов(узлов)

        Что такое список, я знаю.

        Цитата impik777 @
        конструкция
        template<class T> class BasicList

        Понятно, а где здесь язык программирования, исполняемый во время компиляции?

        Цитата impik777 @
        я выбираю нужную прогу или либу по документации, но никогда не изменяю ее сам,
        на крайний случаю я пишу свою библиотеку

        Это потому что у тебя нет такой возможности: исходники или закрыты, или в них чёрт ногу сломит.

        Цитата AndNot @
        а если бы это было написано на Форте, но сорци, все равно неизвестны - это тебе бы помогло

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

        Правильно. Только в стандартном Форте, насколько я знаю, есть такое средство, как целевая компиляция, которая действует приблизительно так же, как в С++, то есть исходники становятся недоступны. Так что если производитель программы хочет скрыть исходники, он это сделает. Другой вопрос, если исходники всё-таки открыты, насколько сложно в них разбираться. Поскольку Форт благоприятствует хорошему стилю программирования, программы на нём, как правило, значительно меньше весят и лучше понимаются, плюс для изменения исполняемого кода отпадает необходимость в наличии компилятора - сам исполняемый файл программы является компилятором.

        Цитата AndNot @
        Сколько бы она не занимала, Форт предоставляет удобные средства проверки. Ты можешь проверить на вшивость только что определенное слово. И без напрягов. Просто сразу проверяешь то что написал, по ходу составления программы. Потому в нем хоть и отсутствует какой либо контроль за программистом (а кому как не ему знать что он творит?), ошибок в программах на порядок меньше, чем уменя к примеру было в Паскале и С и Асме (Бейсик 8-ми разрядных машин не считаю). Просто сам убедился в этом.

        :yes: :yes: :yes: :yes: :yes: :yes: :yes:

        Цитата AndNot @
        И не пойми не правильно, я не заядлый фортер, приходится в основном кодить на асме.

        А почему не на Форте? Интересно получается: говоришь, что Форт может полностью заменить ассемблер, а сам пользуешься ассемблером? Вот я, например, с тех пор, как сделал свой Форт, пишу только на нём.

        Цитата impik777 @
        30000 - 50000 строк это довольно средненький проект, без графики и анимации, интернет связи и т.д.

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

        Цитата impik777 @
        концепция модулей тестирования на С++

        Это что за зверь?

        Цитата AndNot @
        30000 - 50000 строк это довольно средненький проект, без графики и анимации, интернет связи и т.д.

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

        :yes: :yes:

        Цитата impik777 @
        таких манипуляций нет, потому что в них нет необходимости на С++

        Никогда не говори никогда! 8-)

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

        :yes: Поддерживаю. Мой идеальный язык не сильно отличается от моего Форта, для счастья мне не хватает самой малости: ООП (вроде уже придумал, как реализовать, скоро, наверное, реализую), нормальной поддержки строк (если кто знает нормальную библиотеку работы со строками, просьба поделиться) и поддержки многозадачности. Насчёт контроля типов - я думаю, он всё же будет не к месту. Если надо, могу подробнее расписать, что мне нравится в Форте, хотя вряд ли у меня это получится лучше, чем у Броуди.
          Цитата wormball @
          Ничего не понял.

          Возьмем, например, функцию целочисленного деления: div(x,y) --- это такое z, что z*y=x. Т.е., z является решением уравнения y*z=x. Эта функция получается с помощью операции минимизации функции умножения mul(x,y) относительно y.
          Цитата wormball @
          Я не понял только одного: зачем использовать безымянные функции, когда можно использовать именованные функции?

          Чтобы можно было их генерировать по ходу действия программы.
          Цитата wormball @
          Что это такое?

          Передача информации о том, что нужно сделать. Так как функции можно передавать по значению, то, например, управление удаленной системой можно максимально упростить: по сети передается функция, которую вычисляет удаленная система. Или другой пример: в программах, которые используют GUI, было бы гораздо проще присваивать кнопкам и другим объектам те функции, которые они выполняют. Обработка событий с применением лямбд гораздо упрощается.
          Цитата wormball @
          Понятно, а где здесь язык программирования, исполняемый во время компиляции?

          В приведенном примере вычисляемая функция --- константа (правда, нечисловая). Вот другой пример:
          ExpandedWrap disabled
            template<int a, int b>
            struct a_pow_b {
              enum { value = a_pow_b<a,b-1>::value*a };
            };
            template<int a>
            struct a_pow_b<a,0> {
              enum { value = 1 };
            };
             
            int m = a_pow_b<3,4>::value;//m = 81

          Этот шаблон позволяет вычислить значение a^b во время компиляции. С помощью подобной техники можно делать более сложные вещи.
            Цитата wormball @
            Видел там макросы, особо не вникал, но сомневаюсь, что они могут сравниться с Фортом.

            А я разве утверждал это? Он мощнейший среди асмов. К примеру позволяет узнать какой опкод будет скомпилирован для какой-либо команды и, если надо, заменить его. Вообще он сам по себе напоминает ЯВУ. К слову, все высокоуровневые определения FASMа (if,while,proc,segment и тд.) - это именно макросы. Можно даже команды процессора заменить. Недавно видел такой пример:
            ExpandedWrap disabled
              mov ah,09
              mov dx,"this string is test!",13,10,"$"
              int 21h

            Согласись, что красиво.
            Цитата wormball @
            У меня create есть, does - нет. У меня другой прикол: когда я, скажем, задаю тип массива, у меня задаётся не одно слово, а несколько с различными функциями
            mas - адрес массива
            mas[] - индексация массива
            mas+, mas- - переход к следующему или предыдущему элементу
            mascell - размер элемента

            и т. п. does> в такую концепцию не укладывается.

            Охренеть. А как это реализовано? Ну нет сейчас времени разбираться с твоим языком. Можешь в двух словах? А как насчет избыточности кода решил? Может все-таки проще завести отдельный словарь с подобными методами, которые и юзают массивы.? Или я не въехал в прикол?
            Цитата wormball @
            Числа с плавающей запятой хранятся в отдельном стеке (по крайней мере, у меня так)

            А чем ариф. стек не устраивает. Какие выгоды от отдельного стека? Или по аналогии с вещественными числами?
            Цитата wormball @
            А почему не на Форте? Интересно получается: говоришь, что Форт может полностью заменить ассемблер, а сам пользуешься ассемблером? Вот я, например, с тех пор, как сделал свой Форт, пишу только на нём.

            По работе приходится использовать асм. Причем в основном для DOS Prot Mode 32bit. А вот нормальный Форт для этого еще не встретил, самому писать некогда. Хотя, если время появится, напишу. Тогда и пересяду окончательно :yes:
            Цитата wormball @
            нормальной поддержки строк (если кто знает нормальную библиотеку работы со строками, просьба поделиться)

            Могу поделиться, правда на асме, и только С-аналоги, но как образец для встроенного асма сойдет. Или посмотри SPF4, там много интересного, как на асме, так и на Форте.
            Цитата wormball @
            Насчёт контроля типов - я думаю, он всё же будет не к месту

            Это было бы ограниченяе программера, что в корне не соответствуе основному приципу Форта. Да и практика показывает, что и без него можно обойтись. Росли бы руки в правильном месте ;)
            Цитата wormball @
            и поддержки многозадачности

            Практически в любом более-менее нормальном Форте она встроена.
            Цитата mo3r @
            Чтобы можно было их генерировать по ходу действия программы.

            Если я правильно понял, то это все равно что на Форте определяешь слово(через CREATE) с помощью которого в дальнейшем и создаешь уже именованные слова. Ничего нового. Я уже приводил пример для массивов.
            Цитата mo3r @
            Или другой пример: в программах, которые используют GUI, было бы гораздо проще присваивать кнопкам и другим объектам те функции, которые они выполняют. Обработка событий с применением лямбд гораздо упрощается.

            Старые песни о главном. Только обозвали по новому ;)
            Цитата mo3r @
            Этот шаблон позволяет вычислить значение a^b во время компиляции. С помощью подобной техники можно делать более сложные вещи.

            А в качестве A и B какие данные могут использоваться. Только константы?
              Цитата AndNot @
              Старые песни о главном. Только обозвали по новому ;)

              :yes: Ну, так сколько этому уже десятилетий? Много. PS: Лямбды (если точнее, лямбда-исчисление) появились в 30-х годах (а лисп — в 50-х), что, я думаю, пораньше, чем форт.
              Цитата AndNot @
              Если я правильно понял, то это все равно что на Форте определяешь слово(через CREATE) с помощью которого в дальнейшем и создаешь уже именованные слова. Ничего нового. Я уже приводил пример для массивов.

              Практически, да, ничего нового. Только не надо определять слов — функции можно просто лепить на лету.
              Цитата AndNot @
              А в качестве A и B какие данные могут использоваться. Только константы?

              Все, что вычислимо на момент компиляции. Вообще, обычно используются функции не на целых числах, а на типах — это позволяет делать многие полезные штуки.
                Цитата mo3r @
                Возьмем, например, функцию целочисленного деления: div(x,y) --- это такое z, что z*y=x. Т.е., z является решением уравнения y*z=x. Эта функция получается с помощью операции минимизации функции умножения mul(x,y) относительно y.

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

                Цитата mo3r @
                Я не понял только одного: зачем использовать безымянные функции, когда можно использовать именованные функции?

                Чтобы можно было их генерировать по ходу действия программы.

                Ну, в Форте и так все функции генерируются по ходу выполнения программы. Кстати, для того, чтобы генерировать функцию по ходу выполнения, надо, чтобы в программу был включён компилятор? Или иты имеешь в виду что-то другое?

                Цитата AndNot @
                Недавно видел такой пример:

                mov ah,09
                mov dx,"this string is test!",13,10,"$"
                int 21h


                Согласись, что красиво.

                :yes:

                Цитата AndNot @
                Охренеть. А как это реализовано? Ну нет сейчас времени разбираться с твоим языком. Можешь в двух словах? А как насчет избыточности кода решил? Может все-таки проще завести отдельный словарь с подобными методами, которые и юзают массивы.? Или я не въехал в прикол?

                Реализовано просто: есть слово, которое должно обозначать будущий массив, к нему прибавляются различные окончания и образованные таким макаром слова записываются в словарь, и каждому слову сопоставляется соответствующее действие. Получилось очень забавно: мне пришлось писать слова, которые будут по параметрам компилировать компилирующие слова. Зверская гимнастика для мозгов и, кстати, очень хороший пример мощности Форта. Приведу полный текст реализации массивов (не чтобы ты в нём разбирался, а просто чтобы ты и другие заценили количество кода, которое для этого потребовалось):

                ExpandedWrap disabled
                  | n-dimensional arrays
                   
                  loc:
                   forth
                   : literal,, ( l -- ) literal, c: literal ; | 2nd generation literal!!
                   : addstring ( ad nd as ns -- a n' ) >r >r >pad 2dup + r> r@ rot swap move r> + ;
                   : forthentry ( a n -- ) entry as .forth ;
                   : macroentry ( a n -- ) entry as .macro ;
                   : constentry ( c a n a n -- ) addstring entry as .data last @ cell+ ! ;
                   : addentry ( ad nd as ns -- ) addstring macroentry ;
                   : add[] ( a n -- ) s" []" addentry ;
                   : add+ ( a n -- ) s" +" addentry ;
                   : add- ( a n -- ) s" -" addentry ;
                   : compilecell ( cell a n -- a n ) s" cell" constentry ;
                   : compilesize ( size a n -- a n ) s" size" constentry ;
                   : compile+ ( size a n -- ) add+ literal,, mc: + m: ;; fast ;
                   : compile- ( size a n -- ) add- literal,, mc: - m: ;; fast ;
                   : compile[] ( nk . . n0 k a n -- memsize ; ; ik-1 . . i0 a -- a ) add[]
                     for dup mc: swap literal,, mc: * mc: + * next m: ;; fast ;
                   : compilearray ( size a n -- ; -- a ) forthentry literal, c: getmem m: ;; ;
                   : 3dup >r 2dup r@ -rot r> ;
                   : arraytype ( nk .. .. n1 n0 k ) over wsparse 3dup 3dup 3dup compile+ compile- compilecell
                     rot drop 2dup >r >r compile[] r> r> 3dup compilearray compilesize ;
                   ' arraytype
                  ;loc alias arraytype

                Можно задавать многомерные массивы. В предыдущем посте я немного ошибся: название типа массива выполняет функцию создания нового массива.

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

                Цитата AndNot @
                А чем ариф. стек не устраивает. Какие выгоды от отдельного стека? Или по аналогии с вещественными числами?

                Я всё время думал, что вещественные числа и числа с плавающей точкой - одно и то же.

                Цитата AndNot @
                По работе приходится использовать асм. Причем в основном для DOS Prot Mode 32bit. А вот нормальный Форт для этого еще не встретил, самому писать некогда. Хотя, если время появится, напишу. Тогда и пересяду окончательно

                А что, до сих пор остались области, где нужен дос? Под дос вроде есть фасм - портируй мой форт под дос и программируй на нём! Правда, там нет встроенного ассемблера, я смотрю все интересующие меня опкоды в фасме и дизассемблере.

                Цитата AndNot @
                и поддержки многозадачности

                Практически в любом более-менее нормальном Форте она встроена.

                А как она реализована, не подкинешь статью? На самом деле, поскольку я пишу под windows, многозадачность (точнее, многопоточность) я возьму готовую из виндовса. Проблемы начинаются тогда, когда у функции слишком много промежуточных переменных и приходится создавать "локальные" переменные. Поскольку я ещё не придумал, как делать локальные переменные в стеке, я их создаю там же, где обычные переменные. А теперь, если два потока одновременно вызовут одну и ту же функцию, их промежуточные значения смешаются, и, понятное дело, их результат будет далёк от истины. Одним словом, надо придумать, как хранить именованные переменные в стеке.
                  Цитата wormball @
                  Реализовано просто: есть слово, которое должно обозначать будущий массив, к нему прибавляются различные окончания и образованные таким макаром слова записываются в словарь, и каждому слову сопоставляется соответствующее действие.

                  Т.е. насколько разобрался получается, что на каждый массив добавляются слова:
                  name[],name+,name-,namesize, etc.
                  Но ведь получается избыточность. Зачем определять новые слова делающие одну работу, но вся разница которых только в адресе массива. Делай проще. Словарь со словами реализующими любые нужные тебе операции с массивами. Далее для каких либо действий с массивом передаешь этим словам адрес любого блока памяти и все. Получится покомпактнее :) Да и мозги не расплавятся :)
                  Цитата wormball @
                  Зверская гимнастика для мозгов

                  :yes: :yes: :yes:
                  Цитата wormball @
                  Я всё время думал, что вещественные числа и числа с плавающей точкой - одно и то же.

                  Сорри, почему то засели в мозгах fixed числа, и плавающую прочитал как фиксированную :wall: Вот и удивился. Бывает, когда в программе смотришь на ошибку и в упор ее не видишь, т.к. мозги ожидают увидеть там другое :)
                  Цитата wormball @
                  А что, до сих пор остались области, где нужен дос?

                  Ну загнул конечно насчет в основном. Но приходится. DOS понятие растяжимое. Особенно если кодишь аппаратуру. Или какое нибудь старье :yes: У нас в стране его навалом. Да и есть задачи, где надежность винды оставляет желать лучшего.
                  И кстати полазай по инету и поймешь, что ДОС жил,жив,и будет жить, назло всем виндам :tong:
                  Цитата wormball @
                  Под дос вроде есть фасм - портируй мой форт под дос и программируй на нём!

                  Гляну.
                  Цитата wormball @
                  Правда, там нет встроенного ассемблера

                  Он обычно пишется на Форте, поэтому его портировать нетрудно.
                  Цитата wormball @
                  А как она реализована, не подкинешь статью?

                  Могу только кинуть GP Forth или Astro Forth в которых это все реализовано, там и доки есть. Правда под ДОС и 16 бит, но главное концепция. Особо не вникал, но вроде как c каждой задачей связываются свои локальные области для стека данных и стека возвратов. И вроде как вводится понятие USER областей. Текущее состояние задачи определяется значением указателя интерпретации и указателями вершин локальных стеков. Каждой задаче выделяется квант времени, но она может досрочно передать управление. В Astro Forth кстати при запуске выполняется три процесса - MAIN(собственно Форт), CLOCK(выводит часики) и PRINT(печать).
                  А под винду видел опять же в SPF.
                    Цитата AndNot @
                    Т.е. насколько разобрался получается, что на каждый массив добавляются слова:
                    name[],name+,name-,namesize, etc.
                    Но ведь получается избыточность. Зачем определять новые слова делающие одну работу, но вся разница которых только в адресе массива. Делай проще. Словарь со словами реализующими любые нужные тебе операции с массивами. Далее для каких либо действий с массивом передаешь этим словам адрес любого блока памяти и все. Получится покомпактнее

                    Там прикол, во-первых, в быстродействии, а во-вторых в компактности записи. У массива, помимо имени, есть ещё куча параметров: размер элемента, количество измерений, размер по каждому измерению. Если это всё передавать во время исполнения, получится медленно. А места в словаре мне не жалко - всё равно данных будет больше. Хотя.... я подумаю.

                    Цитата AndNot @
                    Да и мозги не расплавятся

                    Вряд ли это будет сильно проще - всё равно для быстродействия гадо будет функции инлайнить. К тому же все необходимые слова у меня уже есть.

                    Цитата AndNot @
                    Гляну.

                    Если соберёшься портировать - пиши мне на мыло, чем смогу, помогу. Хотя бы документацию напишу. :wall:
                      Цитата wormball @
                      помимо имени, есть ещё куча параметров: размер элемента, количество измерений, размер по каждому измерению. Если это всё передавать во время исполнения, получится медленно

                      Не надо этого передавать. В явном виде. Смотри:
                      ExpandedWrap disabled
                        : MAS ( кол_измерений размер_1измерения [размер_2измерения] -- )
                            CREATE (дальше выделяешь память и перво-наперво прописываешь параметры массива)
                            DOES> (здесь можешь вставить проверку на выход за пределы массива)
                        ;

                      Далее определяешь слова для работы с массивами.
                      ExpandedWrap disabled
                        : MAS[] ( индекс [индекс] -- )
                           (здесь вычисляешь адрес элемента, согласно данным сохраненным при создании массива)
                        ;
                        etc.

                      Т.е. этим словам в качестве параметра будет передаваться только адрес массива, ну и специфические типа индекса, присваемого значения и т.д. Зависит от назначения слова. По быстродействию ненамного будет отличаться от твоей версии.
                      Цитата wormball @
                      Вряд ли это будет сильно проще - всё равно для быстродействия гадо будет функции инлайнить.

                      Лично для меня это будет проще :yes: И инлайн здесь не при чем, подобную оптимизацию обычно применяют на этапе целевой компиляции.
                      Цитата wormball @
                      К тому же все необходимые слова у меня уже есть.

                      Да их переделать будет не трудно.
                      Цитата wormball @
                      Если соберёшься портировать - пиши мне на мыло, чем смогу, помогу. Хотя бы документацию напишу.

                      Дока в любом случае не помешает. А вообще еще не просмотрел добром :( Да и страшно. Там же и асм и паскаль и собственно Форт ;) Хорошо хоть компактный :yes:
                      ЗЫ: На увеличение скорости очень сильно влияет выравнивание данных и оптимизация условных переходов! Не проще ли это реализовать? И ты сам убедился, что и малый размер кода тоже ;)
                          Я конечно Форт не знаю, но читая тему на предмет комментариев о красотах C++. Так же и аргументы в защиту Форта. Решил найти краткое описание Форта, но об этом немного позже.
                          В принципе и C++ особо не знаю. Для повседневной работы на протяжении нескольких лет, мне оказалось достаточно мало мальки понять, что красота и понятность кода это очень важно. Выполняя реальные задачи, приходится копаться в коде других людей. И благо, C++ поражает своей ясностью. И почему то все независимые программеры пытаются писать более или менее в одном стиле. Может философия языка такая, может людей так или иначе тянет к гармоничному. А конструкции на C++ можно строить самые умопомрачительные. За 6 лет знакомства с C++, до сих пор для меня некоторое не читаемо.
                          Так как я сторонник промышленного программирования, просто не представляю пока более идеального языка чем C++. На практике оказывается, для реальных задач, просто не возможно жить; без типов определенных пользователем языка, операторов определяемых пользователем; иерархии классов; шаблонов; встроенных возможностей обработки исключений программы; проверки соответствия типов; использование одного имени для операций с различными типами. Но и это еще не все, есть еще и философия языка о которой пишет создатель C++
                          Цитата
                          Язык программирования служит двум взаимосвязанным целям: он предоставляет программисту инструмент для описания подлежащих выполнению действий и набор концепций, которыми оперирует программист, обдумывая, что можно сделать.

                          То есть, изучая тот или иной язык, я формирую свое сознание соответствующим образом, буду знать что смогу сделать средствами языка. Более того, при богатом наборе концепций, я смогу рассматривать большее количество возможных путей для решения задачи. На начальном этапе решения задачи, я смогу оперировать только лишь одними концепциями, реализацию же, оставить на потом или доверить другим людям. Смогу средствами C++ вести чисто архитектурные описания будущих конструкций. То есть смогу в масштабе организации распределить иерархию ответственности, на программистов разрабатывающих типы и методы, формирующих взаимодействие и связи между объектами. И на программистов занимающихся реализацией отдельных методов. Одним словом C++ довольно хорош своей философией для того что бы считаться близким к идеальному. По крайней мере в моем понимании.
                          Из этого делаю вывод: - идеальность языка заключена больше всего в наборах концепций которыми может оперировать человек использующий язык, и чем больше эти концепции отражают реалии наших задач, принципы реального мира, тем более идеальный язык программирования.
                            Цитата Maksim @
                            И благо, C++ поражает своей ясностью.

                            Это С был понятен даже тем, кто его не знал. А вот С++ , по моему, этим уже не блещет. Слишком много наворотов, причем не всегда ясных. Например:
                            ExpandedWrap disabled
                                std::cout << g(t) << std::endl;

                            Что такое '<<'? Ведь логически это обозначает только сдвиг. И человеку не знакомому с С++ не понять, что это всего лишь вывод (на экран, файл или куда угодно). Выбивается эта конструкция из ряда логичных. И подобного хватает.
                            Цитата Maksim @
                            А конструкции на C++ можно строить самые умопомрачительные

                            Точнее не скажешь :) От чужих сорсов действительно можно умом тронуться (для тех кто С++ плохо знает)
                            Цитата Maksim @
                            без типов определенных пользователем языка, операторов определяемых пользователем; иерархии классов; шаблонов; встроенных возможностей обработки исключений программы; проверки соответствия типов

                            Идеология С++ - как ни крути а сводится к удобной работе с указателями. А если есть указатели, то возможны очень мистические глюки. И проверка типов здесь отдыхает. Угадай почему?
                            Цитата Maksim @
                            Из этого делаю вывод: - идеальность языка заключена больше всего в наборах концепций которыми может оперировать человек использующий язык, и чем больше эти концепции отражают реалии наших задач, принципы реального мира, тем более идеальный язык программирования.

                            А вот одна из концепций С заключается в том, что дуракоустойчивость программы должен обеспечивать сам программист. И в результате сегодня мы имеем проблему переполнения буферов. Ну нет удобных средств для контроля. Кто там приводил козырь, мол сейчас почти весь софт пишется на С++, но забыл упомянуть, что сейчас уже никого не удивляет, если после выхода программы следом выходит патч, привыкли. А когда то это было дикостью.
                            Цитата Maksim @
                            То есть, изучая тот или иной язык, я формирую свое сознание соответствующим образом

                            Именно! А подавляющее количество программеров начав изучение С++ привыкают писать на авось. Мол нахрена мне проверять длину буфера перед передачей scanf, авось никто его не переполнит. Да и геморойно повсюду такие проверки писать.
                            А если уж не отвлекаться от темы, то в С++ действительно много хорошего. Те же макросы (как их не хватало в паскале!). Неплохое ООП. И удобная работа с указателями. Но сегодня слишком много разноплановых задач. И под каждую лучше подбирать свой язык.
                            Цитата impik777 @
                            предлагаю каждому участнику составить список пунктов, без которых идеальный язык не сможет быть идельаным

                            1. Малый размер компилятора (чтоб свой проект всюду таскать с собой на дискетке).
                            2. Компактный синтаксис. Т.е. что бы на экране увидеть как можно больше, а не убивать жизнь, листаю сорсы вверх-вниз.
                            3. Расширяемость синтаксиса. Должна быть возможность создавать свой, для каждой конкретной задачи, и убирать ненужный.
                            4. Средства для тестирования, как на уровне модулей, так и отдельных подпрограмм (для этого лучше интерпритатора еще ничего не придумали).
                            5. Удобные средства обработки ошибок времени исполнения программы (которыми можно удобно управлять, изменять, добавлять, убирать).
                            6. Возможность использовать наработки с других языков.
                            7. Хорошая документация, с примерами ;)
                            Жалобы, предложения, пожелания?
                              AndNot
                              Твои познания о С++ устарели лет на 10 как минимум: как о языке, так и способах проектирования/программирования на нем. Какие ещё scanf и сплошные указатели?
                                Цитата Hryak @
                                сплошные указатели?

                                А ты хочешь сказать что в С++ нет указателей???? Да вся работа с объектами ведется через указатели. И явно и косвенно.
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (31) « Первая ... 11 12 [13] 14 15 ...  30 31


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0774 ]   [ 14 queries used ]   [ Generated: 19.07.25, 03:40 GMT ]