Вверх ↑
Этот топик читают: Гость
Администрация
Ответов: 15295
Рейтинг: 1519
#121: 2007-07-03 12:36:58 ЛС | профиль | цитата
Вот именно, что для однопроходного. Впрочем даже за два прохода я не понимаю, как можно правильно привести данные к нужному типу не имея информации о типе верхней точки. К тому же следует разделять понятие пользователь и разработчик. То, что делается пользователя не касается ни в коем разе: ему вообще про типы знать не положено.

Galkov писал(а):
За каким тогда лядом тратить свои мозги и время, чтобы сделать СНАЧАЛА менее качественный, а потом - более

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

Кроме того даже сегодняшнего CG хватает с лихвой на такие пакеты как WEB или проект his пакета Modules. Ну не нужна там более продвинутая технология. Совершенно причем. А значит пользоваться этим возможно уже сейчас и прямо сегодня, а не ждать пока разработчики составят список всех вопросов и потом еще пару месяцев будут добавлять двухпроходность. И отлаживать это еще столько же.

[size=-2]------ Добавлено в 12:26
Мое мнение такое: приоритетная задача это избавление от тормозящего развитие dcc32.exe. Если к тому же мы еще и бонус приобретаем ввиде почти качественного кода - так совсем замечательно. А планировать сейчас разработку сложного двух и более проходного CG - это непозволительная роскошь.

[size=-2]------ Добавлено в 12:36
GCC
С отстрипанными кусками выдает 6Кб на приложение, отображающе стандартное MessageBox. Достаточно неплохо.
карма: 27
0
Ответов: 9906
Рейтинг: 351
#122: 2007-07-03 14:26:59 ЛС | профиль | цитата
Dilma писал(а):
Впрочем, даже за два прохода я не понимаю, как можно правильно привести данные к нужному типу, не имея информации о типе верхней точки

Пример, и разберемся


Dilma писал(а):
То, что делается, пользователя не касается ни в коем разе: ему вообще про типы знать не положено

Может я что-то пропустил, с прошедшего вечера.
Если в свойстве стоит тип Real, то коды с верхней точки придут с конвертором Str2Double
Т.е., пользователям надо дополнительно (ибо сегодня - не надо) заботиться о типе Default-данных, хотя в использование они никогда не попадают.
Как сказано, если им "не пофигу на качество их схемы"



Dilma писал(а):
Мое мнение такое: приоритетная задача это избавление от тормозящего развитие dcc32.exe. Если к тому же мы еще и бонус приобретаем в виде почти качественного кода - так совсем замечательно. А планировать сейчас разработку сложного двух и более проходного CG - это непозволительная роскошь

По пунктам:
  • совершенно по барабану мне, какой компилятор использовать. Однопроходность, и как следствие - супер-инлайн, останутся под любым компилятором. Разве что, 150М для mingw качать неохота..
    А в том числе и под FASM, между прочим. Ну не потому пакет стоит, что некому элементики наделать. А потому, что ерунда получается.
    Ну, может не ерунда, а "приемлемо", но все равно - не нравится.
    И ничуть не менее приемлемо, мне кажется, чем сегодня у нас в одном проходе.

  • Мне представляется, что планировать работу на корзину - непозволительная роскошь. Потому что уверен абсолютно, если выложить полученное - его серьезный народ обзовет опять "поделушкой". Для маленьких, но быстрых приложений.
    Почему.
    Потому что инлайн он и останется инлайном. Работать будет быстро.
    Вот только "функциональный вызов" был придуман не просто так, а со смыслом.
    Без этого ни одной серьезной программы не напишешь.
    Аксиомы же говорю, вроде...

    Super-Function мы тоже видели - проблем с размерами кода нет, есть другие проблемы.
    Истина - посредине. Крайности - противопоказаны.
    В однопроходном варианте этой середины мы не достигнем.

    Вспомни коллегу Nic-а с его 128-ю панелями (или 64 - не помню точно). Даже представить страшо, чего у него получилось бы в идеологии супер-инлайн.

    Эволюция - это прекрасно
    Вот только, что это "поделушка" - мы не услышим через пару месяцев.
    Позже это будет. И как раз в этот момент серьезного пользователя и потеряем (причем это будет вовсе не потому, что мы используем dcc32, или gcc).
    Потому что скажет это именно серьезный пользователь. Для которого программа на скриптовом языке в 400 строк - вообще не проблема. В 5000 строк скрипта посложней немного разобраться будет. А схемный подход, за базированный интерфейсно на ООП - это серьезная сила.
    Которую мы никак никому продемонстрировать не можем

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


    Все это печальное ИМХО, конечно.
    И дай бог, чтобы оно им и осталось.
    Вот только опасаюсь я, что это не просто ИМХО, а Великая Сермяжная Правда
  • карма: 9

    0
    Администрация
    Ответов: 15295
    Рейтинг: 1519
    #123: 2007-07-03 17:49:29 ЛС | профиль | цитата
    Galkov писал(а):
    Пример, и разберемся

    Add(Button,11036070,168,105)
    {
    Left=100
    Top=20
    Caption="Hello"
    Data=Integer(111)
    link(onClick,3261178:doMessage,[(208,118)(208,160)])
    }
    Add(Message,3261178,217,154)
    {
    Text="Text: Hello"
    }

    Message.ini писал(а):
    [Property]
    Text=|2|

    [Methods]
    doMessage=|1|
    onMessage=|2|
    Text=|4|str
    Caption=|4|


    получаем код:
    MessageBox(0, PChar('Text: Hello'), PChar(111), MB_OK);[/code]
    
    [b]Galkov[/b], я думаю ни к чему в десятый раз повторять то, что мне и так известно. Коротко о главном:
    - все предложененое очень хорошо, здорого и правильно. Двумя руками За
    - заниматься этим сейчас я не буду - причины см. выше
    - довести до ума существующее - в сумме несколько дней
    - боевой пример приложения на базе FTCG в виде движка форума показал очень даже приемлемое качество и никакого суперинлайнинга там нет и не будет.

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

    [size=-2]------ Добавлено в 17:49 [/size]
    === GCC ===
    [tab] Весь дистрибутив, упакованный в rar занимает 14.2Mb. Думаю после чистки будет поменьше. Впрочем это уже не 150 метров...
    [tab] Кроме того видимо придется таки реализовать свой класс string для облегчения жизни cpp разработчика.
    карма: 27
    0
    Ответов: 5446
    Рейтинг: 323
    #124: 2007-07-03 17:54:17 ЛС | профиль | цитата
    Dilma, по GCC: в Сети есть навалом приличных классов для строк, поэтому (как мне думается) изобретать ничего не надо. Через пару часиков подкину ссылку/ссылки на наиболее адекватные (на мой взгляд) варианты классов.
    карма: 1

    0
    Администрация
    Ответов: 15295
    Рейтинг: 1519
    #125: 2007-07-03 19:00:01 ЛС | профиль | цитата
    хорошо жду.
    карма: 27
    0
    Ответов: 9906
    Рейтинг: 351
    #126: 2007-07-03 19:43:36 ЛС | профиль | цитата
    Dilma писал(а):
    получаем код:
    MessageBox(0, PChar('Text: Hello'), PChar(111), MB_OK);[/code]
    [/quote]
    А у меня при этом получается
    MessageBox(frm2.Handle, PChar('Text: Hello'), PChar('111'), MB_OK);[/code]
    В кодах при этом у меня
    func doMessage(_data)
      println('MessageBox(', isset(WIN_PARENT) ? (WIN_PARENT + '.Handle') : '0', ', PChar(', Text, '), ', 'PChar(',e_str(Caption),'), MB_OK);')
    event(onMessage)
    end
    И не вижу я никакой проблемы в том, что автор элемента должен написать явное приведение типа.
    В Дельфи-1 пишется именно явное приведение типа ReadString(_Data,_data_Caption), и как-то я не помню, чтобы именно это вызывало проблемы...

    Более того, мне не кажется правильным приведение по типу св-ва:
    
    ....
    else if (prop <> -1)and((pt = 0) or fData._data_saved_.isEmpty or not cgt.elIsDefProp(el, prop) or (cgt.propGetType(cgt.elGetProperty(el, prop)) = data_comboEx)) then
    begin
    _var_ := readProperty(cgt, cgt.elGetProperty(el, prop));
    end
    else
    begin
    if (prop <> -1){and(fData._data_saved_.GetSubType <> data_null)} then
    begin //!!! ЭТО !!!
    ntype := cgt.propGetType(cgt.elGetProperty(el, prop));
    _var_^ := _toCode(@fData._data_saved_,ntype)^;
    end
    ....
    Если бы было просто
             _var_^ := fData._data_saved_^;[/code]
    То просто в коде пришлось бы писать
    func doMessage(_data)
      println('MessageBox(', isset(WIN_PARENT) ? (WIN_PARENT + '.Handle') : '0', ', PChar(', e_str(Text), '), ', 'PChar(',e_str(Caption),'), MB_OK);')
    event(onMessage)
    end
    И меньше путаницы бы было у автора элемента.
    Но главное - интерфейс совпадал бы с сегодняшним, и заморачивал бы пользователя...

    Исхожу из логики: "никакие богатства мира не стоят слезы ребенка" (может быть слишком вольно, правда...)
    Здесь: "ребенок" - это программист на [b]HiAsm[/b], "богатства мира" - возможность не писать явное приведение типа для автора элемента.
    Если бы не было интерфейсных изменений ("слез ребенка"), то "богатства мира" были бы совершенно уместны.
    Иначе - нет, думается

    Еще значительно более того: плохая эффективность кода - это слезы уже просто грудного ребенка, потребителя трудов программиста на [b]HiAsm[/b]
    Против наших трудов (даже не автора элемента), по созданию компилятора.
    Да ровно в тот момент, когда абсолютно понятно, как все должно работать - это простой кодинг, не программирование даже....

    [quote=Dilma]обсуждать что-то еще в стиле "давай забьем на это все, запасемся терпением на пол годика и приступим к реализации многопроходности" - не хочу больше[/quote]
    Никто и никогда был против изучения обходных путей, более простых за счет качества, эволюционных путей, и т.п..
    О другом совсем речь.
    [b]Чтобы эти поиски "не засыпали" основную трассу[/b]
    Ровно в тот момент как произошли интерфейсные изменения - ДА, засыпаем
    Как только поменялась концепция интерфейса (грубо говоря, она мне сегодня вообще непонятна) - ДА, засыпаем

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

    Пример ??? Пожалуйста
    Вот нет у нас сегодня возможности сделать один код метода для множества элементов
    Прекрасно - инлайн лучше всего, и все в порядке

    Но если представить себе на секунду, что, хоть и потом, но это будет, тогда получается, что св-во элемента уже не есть константа в кодах. А переменная, с разными значениями для разных экземпляров.
    Не считая случаев наличия методов do<Prop>
    Ну и не очень пока я понимаю, впишется ли это с сегодняшнюю концепцию Единого Имени Свойства...

    Пока подозреваю, что дорогу к конечной цели мы все-таки чуток "подзасыпали".
    [b]И вот именно в этом проблема.[/b]
    А при супер-инлайн - да прекрасно все
    карма: 9

    0
    Администрация
    Ответов: 15295
    Рейтинг: 1519
    #127: 2007-07-03 20:58:41 ЛС | профиль | цитата
    Начинаю постепенно терять суть спора. Из сказанного понял только, что автоматическую конвертацию делать нельзя потому что:
    1) Делали раньше ReadXXX, теперь тоже обязаны делать нечто подобное - e_xxx.
    2) Разработчику кодов элемента нужно непременно указывать тип приведение вручную - иначе он запутается.



    Galkov писал(а):
    Ровно в тот момент как произошли интерфейсные изменения - ДА, засыпаем

    т.е. под этим понимается расширение количества типов для точек? Было 5 типов стало 19 - засыпали дорогу. Совершенно глупый вопрос напрашивается: а если бы типов стало 6 это тоже засыпание дороги

    Galkov писал(а):
    И меньше путаницы бы было у автора элемента.

    не доказано и не показано.

    Galkov писал(а):
    Если бы не было интерфейсных изменений ("слез ребенка"), то "богатства мира" были бы совершенно уместны.
    Иначе - нет, думается

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

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

    Galkov писал(а):
    Но если представить себе на секунду, что, хоть и потом, но это будет, тогда получается, что св-во элемента уже не есть константа в кодах

    В каких случаях это не константа?

    Galkov писал(а):
    Не считая случаев наличия методов do<Prop>

    Такие точки должны определяться только для св-тв, являющихся начальными инициализаторами полей объекта. Во всех иных случаях это уже будет комбо элемент с основным ф-лом + встроенной ячейкой памяти.
    карма: 27
    0
    Ответов: 3655
    Рейтинг: 69
    #128: 2007-07-03 23:58:15 ЛС | профиль | цитата
    Первые гибридные автомобили начали делать еще в СССР: они ездили на
    бензине и с помощью такой-то матери.

    карма: 0

    0
    Главный модератор
    Ответов: 2999
    Рейтинг: 396
    #129: 2007-07-04 01:03:22 ЛС | профиль | цитата
    Galkov писал(а):
    или 64 - не помню точно

    Как ты мог забыть? Между прочим, до сих пор пользуюсь, только уже не помню каким вариантом: динамическим или статическим.
    карма: 6
    Дорогу осилит идущий. Install/Update HiAsm.NET
    0
    Ответов: 5446
    Рейтинг: 323
    #130: 2007-07-04 05:14:32 ЛС | профиль | цитата
    Dilma, извини за задержку - надо готовиться к экзаменам (!) по ТБ. Тут с этим серьёзно, а не как в России - пришёл, расписался, ушёл.

    Вот наиболее приятный класс: StdString, базируется на std::string (часть стандартной библиотеки шаблонов C++).

    [size=-2]------ Добавлено в 05:14
    Если не хочется таскать за собой STL - тогда вот: EsString (для скачивания файлов надо зарегистрироваться)
    карма: 1

    0
    Ответов: 9906
    Рейтинг: 351
    #131: 2007-07-04 09:53:15 ЛС | профиль | цитата
    iarspider писал(а):
    надо готовиться к экзаменам (!) по ТБ

    чего там готовиться: основное, и самое надежное, правило защиты - "единица на эр квадрат", всем и так давно известно
    карма: 9

    0
    Администрация
    Ответов: 15295
    Рейтинг: 1519
    #132: 2007-07-04 10:43:44 ЛС | профиль | цитата
    За что всегда СPP любил, так это за отсутсвие простых решений

    StdString - ради одного оператора "+" для строк и избавления от мучений с памятью таскать 130кб кода как-то не хочется

    EsString - это видимо часть чего-то. Простая сборка с include дает более 30 ошибок, разбираться с которыми совершенно не интересно.
    карма: 27
    0
    Ответов: 9906
    Рейтинг: 351
    #133: 2007-07-04 11:14:18 ЛС | профиль | цитата
    Dilma, btw: давай договоримся о терминологии немножко. Например
  • Пользователь 1-го уровня - это автор элемента, который использует наш скрипт, знает целевой язык, и балбесом быть право не имеет по определению.
  • Пользователь 2-го уровня - это программист на HiAsm, который про целевой язык имеет право не знать ничего, но просто обязан уметь работать головой. Потому что программист все-таки.
  • Пользователь 3-го уровня - это пользователь программы, сделанной на HiAsm. К нему требований никаких, естественно. Как и к компьютеру, на котором он запускает программу.

    Dilma писал(а):
    Начинаю постепенно терять суть спора. Из сказанного понял только, что автоматическую конвертацию делать нельзя потому что:
    1) Делали раньше ReadXXX, теперь тоже обязаны делать нечто подобное - e_xxx.
    2) Разработчику кодов элемента нужно непременно указывать тип приведение вручную - иначе он запутается.

    Неправильно понял.
    Не поэтому.

    А потому, что это меняет интерфейс пользователя 2-го уровня (НЕ 1-го). Примерно таким образом:
    Galkov писал(а):
    Есть у элемента IndexToChanel св-во Data
    Во-первых, это какой же тип мы должны назначать при Data=NUL
    И пусть подключена верхняя точка и с нее всегда идет String.
    Оппа, а пользователь забыл, что Data = real(1.0). И что характерно - и не надо до этого ему было помнить.
    Заморочка ведь.

    Опять же - нет для меня догм. Мне думается, что допустимо менять интерфейс пользователя 2-го уровня.
    НО, только если мы получаем какие-то дополнительные качества, недостижимые другим способом, не меняющим интерфейс (пользователя 2-го уровня)
    И кажется мне пока, что эти изменения в интерфейсе - необоснованы просто.
    Некие удобства для пользователя 1-го уровня - не аргумент вовсе.
    Ну, или я не понял наших достижений - так объясни, пожалуйста

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


    Dilma писал(а):
    т.е. под этим понимается расширение количества типов для точек? Было 5 типов стало 19 - засыпали дорогу. Совершенно глупый вопрос напрашивается: а если бы типов стало 6 это тоже засыпание дороги

    Нет, понимается не это
    Засыпание - это изменение интерфейса пользователя второго уровня.
    Раньше работало, а теперь приходится проводить какие-то непонятные действия, чтобы заработало.
    Непонятные, потому что пользователь 2-го уровня имеет право ничего не знать о целевом языке, и какие там возможности приведения типов, и нужны ли они вообще.
    Он (пользователь 2-го уровня) имеет обыкновение говорить: "да мне и HiAsm нравится, потому что языков программирования знать не надо"


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

    Ну вот же, цитата выше - давно уже про это говорю...


    Dilma писал(а):
    В каких случаях это не константа?

    Пусть есть метод элемента, который использует св-во X
    Код этого метода настолько большой, что не вызывает сомнения рациональность функционального вызова при реализации этого метода.
    Если в схеме один такой элемент и этот метод вызывается лишь один раз - инлайнинг оптимален, безусловно, и при реализации метода, вместо св-ва X подставляется ее константное значение.
    Если таких элемента 2, для обоих есть вызов этого метода, и константные значения св-ва X у них РАЗНЫЕ (тоже важно) - это должен быть функциональный вызов метода, для которого X - это переменная.

    Кстати, event-ов это тоже касается. Самым прямым образом. В том числе и тех, чьи имена совпадают с именем св-ва


    Dilma писал(а):
    Такие точки должны определяться только для св-тв, являющихся начальными инициализаторами полей объекта. Во всех иных случаях это уже будет комбо элемент с основным ф-лом + встроенной ячейкой памяти

    Не совсем уловил смысл сказанного.
    Давай конкретно: может ли быть "особачено" св-во, имеющее одноименную верхнюю точку
  • карма: 9

    0
    Администрация
    Ответов: 15295
    Рейтинг: 1519
    #134: 2007-07-04 17:49:41 ЛС | профиль | цитата
    Galkov писал(а):
    Есть у элемента IndexToChanel св-во Data
    Во-первых, это какой же тип мы должны назначать при Data=NUL
    И пусть подключена верхняя точка и с нее всегда идет String.
    Оппа, а пользователь забыл, что Data = real(1.0). И что характерно - и не надо до этого ему было помнить.
    Заморочка ведь.

    До слов "Оппа" понятно дальше нет. Поэтому не могу ничего тут ответить.

    Galkov писал(а):
    Плюс к вышесказанному, это не более чем личное мнение, что в правилах без исключений путаешься меньше, чем в правилах с исключениями.

    Не согласен. Видимо имеет смысл кроме уровней пользователя определить еще и уровень оптимизации, о котором идет речь. Как я уже говорил для "тех кто путается" всегда существует тип TData. Не охото разбираться, вставляем этот тип и все будет прекрасно автоматом во все конвертироваться. Оптимизация же к сожалению вся построена на исключениях и частностях поэтому на данный момент аргумент весомым не считаю.

    Galkov писал(а):
    Засыпание - это изменение интерфейса пользователя второго уровня.

    Видимо этот вопрос стоит обсуждать не ранее, чем будет полностью понятен пример и после слов "Оппа". Иначе боюсь о разных вещах совершенно беседа идти будет.

    Galkov писал(а):
    Если таких элемента 2, для обоих есть вызов этого метода, и константные значения св-ва X у них РАЗНЫЕ (тоже важно) - это должен быть функциональный вызов метода, для которого X - это переменная.

    тоже не уловил смысла проблемы:

    // где-то в коде программы вставлен функциональный вызов метода с данными из потока положим:
      doMethod(s23 + s34);
    ...
    // далее где-то в коде тот же метод со св-ом по умолчанию:
    doMethod('test');
    ...
    // и наконец тот же метод с данными с точки:
    doMethod(res4);

    // в скрипте FTCG стоит:
    println('doMethod(', X, ');')

    // метод реализован так:
    procedure doMethod(X:string);
    begin
    ...
    Message(X);
    ...
    end;

    получаем: да действительно в коде элемента св-во X это переменная. Но с точки зрения программы св-во X в строке println('doMethod(', X, ');') как было константой так ей и осталось. Чему и как это противоречит не понимаю совершенно.

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

    Galkov писал(а):
    Давай конкретно: может ли быть "особачено" св-во, имеющее одноименную верхнюю точку

    Вопрос хороший. Думаю, что нет.

    [size=-2]------ Добавлено в 17:49


    Galkov, нашел действительно реальное практическое исключение из правил при автоматическом кодирование на данный момент времени. Положим реализуя FTCG пакет на базе C++ мы вынуждены ввести некий класс string, который нам предоставит возможность использовать оператор + для обоих операндов при конкатенации строк. Как только мы введем такой класс и условимся, что тип data_str будет иметь внутреннее представление string, то мы сразу же наступаем на грабли:

    func doStrCat()
      event(onStrCat, Str1 & Str2)
    end

    func doMessage()
    println('Message(', Text, ');')
    end

    // положим Str1 - задано по-умолчанию, а Str2 берется с верхней точки. Получаем код:

    Message("text" + int_to_str(i34));

    а должны были бы по хорошему получить string("text").

    Однако это всетаки исключение более высокого порядка, связанное с изначальным нарушением концепции, основанной на том, что типы статических св-в элемента, определяемых в среде тождественно равны типам этих свойств в коде.
    карма: 27
    0
    Ответов: 5446
    Рейтинг: 323
    #135: 2007-07-04 17:59:22 ЛС | профиль | цитата
    Dilma, мне кажется, что линковать STL будет полезно (меньше самодельных велосипедов будет). Вот lightweight обёртка над std::string - lstring. Проверено - mingw32-g++ собирает её без лишних вопросов.
    карма: 1

    0
    Сообщение
    ...
    Прикрепленные файлы
    (файлы не залиты)