Re[12]: Технология
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.11.04 22:32
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>"Докомпиляция" начинается с "до", а не с "де" В данном случае AVC совершенно прав: я имел в виду именно JIT и аналогичные решения.


Да со слипу под вечер не рассмотрел.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Технология
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.11.04 22:32
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Здравствуйте, VladD2, Вы писали:


V>Кстати, у тебя там в первой ссылке какие-то нереальные результаты получились для VB6.

V>По моему опыту он отставал от С++ в обычных вычислениях примерно в 1.2-2 раза, но не в 10

Времени на подгонку результатов небыло. Выдали те что получились. В общем, исходники доступны. Скачай — погляди. Где-то там есть даже в 2 раза (вроде) хотя любому видившему порождаемый ВБ код в общем-то явсно почему он так отстает. Там на каждом шагу КОМ с тучей проверок и хэлпер-функций.

V>за исключением ситуаций:

V>- запуск из среды (это выполнение P-кода вместо компиляции в двоичный код)
V>- использование нетипизированных значений (VARIANT)
V>- забыли поставить ByVal для числового параметра
V>- стоит ByVal для строкового параметра или объектного параметра

Исходники доступны...

V>ну и всю оптимизацию надо включить и вырубить все проверки в релизе.


Я как бы не идиот и все это и сам понимаю. В режиме интерпретации там не 10 раз, а все 100. А оптимизация их мало что дает. Все что можно было включено.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Технология
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.11.04 22:32
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>В модулях оберона находится, к Вашему сведению, не промежуточный код, а уже готовый к употреблению объектный код — машинные команды целевого процессора, быть может слегка разбавленные командами обращающимися к run-time системе (если таковая предусмотрена на данном конкретном оборудовании).


И зачем тогда оберону этот самый джит нужен?

Ну, да не дем хуже для него. Как видишь это большое приемущество (IL в модулях). Те же дженерики без него были бы ограничены компайл-таймом.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Технология
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.11.04 22:32
Оценка:
Здравствуйте, AVC, Вы писали:

AVC>Но в целом за пост спасибо. Он информативен и конкретен. Так и надо!


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

А ято до ткчтоы, то сравни как-нить на досуге qcort из CRT и sort из StlPort. Увидишь насколько С может отставать от С++.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[31]: А вот за язык-то Вас никто не тянул...
От: Дарней Россия  
Дата: 11.11.04 05:10
Оценка:
Здравствуйте, Quintanar, Вы писали:

Q>а если выдумывать языки исскуственно, то кто даст гарантию, что их не кастрировали до состояния полной непригодности?


Есть еще эсперанто, в котором вроде бы ничего нужного не забыли. И все равно ведь почти никто не пользуется
В любом случае — упрощение языка может идти только до какого-то предела. Дальше есть только два пути — или сохранять стабильность, или снова усложняться. Ну а неизменяющийся язык — это крайне редкое явление, насколько мне известно.
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[13]: Технология
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 11.11.04 08:20
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Напиши, пожалуйста.


Дык, ларчик просто открывался. В самом языке таких возможностей нет, но в конкретной реализации на конкретной машине с конкретным процессором всегда есть специальные библиотеки или Compiller Magic. То есть из языка это вынесено в библиотеки. Сами программы написанные на этом языке переносимы между машинами с различными архитектурами, а вот библиотеки низкоуровневого доступа — это уже другой вопрос.

Например, в BlackBox заходим в раздел хелпа под названием Platform-Specific Issues (Windows). Что мы там видим:


Module SYSTEM

Module SYSTEM contains certain procedures that are necessary to implement low-level operations. It is strongly recommended to restrict the use of these features to specific low-level modules, as such modules are inherently non-portable and usually unsafe. SYSTEM is not considered as part of the language Component Pascal proper.

The procedures contained in module SYSTEM are listed in the following table. v stands for a variable. x, y, and n stands for expressions. T stands for a type. P stands for a procedure. M[a] stands for memory value at address a.

Function procedures

    Name    Argument types    Result type    Description
    ADR(v)    any    INTEGER    address of variable v
    ADR(P)    P: PROCEDURE    INTEGER    address of Procedure P
    ADR(T)    T: a record type    INTEGER    address of Descriptor of T
    LSH(x, n)    x, n: integer type*    type of x    logical shift (n > 0: left, n < 0: right)
    ROT(x, n)    x, n: integer type*    type of x    rotation (n > 0: left, n < 0: right)
    TYP(v)    record type    INTEGER    type tag of record variable v
    VAL(T, x)    T, x: any type    T    x interpreted as of type T
    * integer types without LONGINT


Proper procedures
    Name    Argument types    Description
    GET(a, v)    a: INTEGER; v: any basic type,    v := M[a]
        pointer type, procedure type
    PUT(a, x)    a: INTEGER; x: any basic type,    M[a] := x
        pointer type, procedure type
    GETREG(n, v)    n: integer constant, v: any basic type,    v := Register n
        pointer type, procedure type
    PUTREG(n, x)    n: integer constant, x: any basic type,    Register n := x
        pointer type, procedure type
    MOVE(a0, a1, n)    a0, a1: INTEGER; n: integer type    M[a1..a1+n-1] := M[a0..a0+n-1]


The register numbers for PUTREG and GETREG are:
0: EAX, 1: ECX, 2: EDX, 3: EBX, 4: ESP, 5: EBP, 6: ESI, 7: EDI.

Warning
VAL, PUT, PUTREG, and MOVE may crash BlackBox and/or Windows when not used properly.
Never use VAL (or PUT or MOVE) to assign a value to a BlackBox pointer. Doing this would corrupt the garbage collector, with fatal consequences.

System Flags

The import of module SYSTEM allows to override some default behavior of the compiler by the usage of system flags. System flags are used to configure type- and procedure declarations. The extended syntax is given below.
Type     =    Qualident
        | ARRAY ["[" SysFlag "]"] [ConstExpr {"," ConstExpr}]
            OF Type 
        | RECORD ["[" SysFlag "]"] ["("Qualident")"] FieldList
            {";" FieldList} END
        | POINTER ["[" SysFlag "]"] TO Type
        | PROCEDURE [FormalPars].
ProcDecl    =    PROCEDURE ["[" SysFlag "]"] [Receiver] IdentDef
            [FormalPars] ";"
        DeclSeq [BEGIN StatementSeq] END ident.
FPSection    =    [VAR ["[" SysFlag "]"]] ident {"," ident} ":" Type.
SysFlag    =    ConstExpr | ident.

For SysFlags either the name of the flag or the corresponding numeric value can be used.

System flags for record types
Name    Value    Description
untagged    1    No type tag and no type descriptor is allocated.
        The garbage collector ignores untagged variables.
        NEW is not allowed on pointers to untagged variables.
        No type-bound procedures are allowed for the record.
        Pointers to untagged record type or extensions of this
        record type inherit the attribute of being untagged.
        The offsets of the fields are aligned to
        MIN(4-byte, size), where size is the size of the field.
        The size of the record and the offsets of the fields are
        aligned to 32-bit boundaries.
noalign    3    Same as untagged but without alignment.
align2    4    Same as untagged but with
        MIN(2-byte, size) alignment. 
align8    6    Same as untagged but with
        MIN(8-byte, size) alignment. 
union    7    Untagged record with all fields allocated at offset 0.
        The size of the record is equal to the size of the
        largest field.
        Used to emulate C union types.

System flags for array types
Name    Value    Description
untagged    1    No typetag and no type descriptor is allocated.
        The garbage collector ignores untagged variables.
        NEW is not allowed on pointers to untagged variables.
        Pointers to this array type inherit the attribute of
        being untagged.
        Only one-dimensional untagged open arrays
        are allowed.
        For open untagged arrays, index bounds are
        not checked.

System flags for pointer types
Name    Value    Description
untagged    1    Not traced by the garbage collector.
        No type-bound procedures are allowed for the pointer.
        Must point to an untagged record.

System flags for VAR parameters
Name    Value    Description
nil    1    NIL is accepted as formal parameter.
        Used in interfaces to C
        functions with pointer type parameters.

System flags for procedures
Name    Value    Description
code    1    Definition of a Code procedure (see below).
ccall    -10    Procedure uses CCall calling convention.

Code procedures

Code procedures make it possible to use special code sequences not generated by the compiler. They are declared using the following special syntax:

ProcDecl    =    PROCEDURE "[" SysFlag "]" IdentDef [FormalPars]
            [ConstExpr {"," ConstExpr}] ";".

The list of constants declared with the procedure is interpreted as a byte string and directly inserted in the code ("in-line") whenever the procedure is called. If a parameter list is supplied, the actual parameters are pushed on the stack from right to left. The first parameter however is kept in a register. If the type of the first parameter is REAL or SHORTREAL, it is stored in the top floating-point register. Otherwise the parameter (or in the case of a VAR/IN/OUT parameter its address) is loaded into EAX. For function procedures the result is also expected to be either in the top floating-point register or in EAX, depending on its type. Be careful when using registers in code procedures. In general, the registers ECX, EDX, ESI, and EDI may be used. Parameters on the stack must be removed by the procedure.

Examples
    PROCEDURE [code] Sqrt (x: REAL): REAL        (* Math.Sqrt *)
        0D9H, 0FAH;            (* FSQRT *)

    PROCEDURE [code] Erase (adr, words: INTEGER)    (* erase memory area *)
        089H, 0C7H,            (* MOV EDI, EAX *)
        031H, 0C0H,            (* XOR EAX, EAX *)
        059H,            (* POP ECX *)
        0F2H, 0ABH;            (* REP STOS *)

Re[11]: Технология
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 11.11.04 08:23
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Сергей Губанов, Вы писали:


СГ>>В модулях оберона находится, к Вашему сведению, не промежуточный код, а уже готовый к употреблению объектный код — машинные команды целевого процессора, быть может слегка разбавленные командами обращающимися к run-time системе (если таковая предусмотрена на данном конкретном оборудовании).


VD>И зачем тогда оберону этот самый джит нужен?



Какой еще джит в Обероне????????????
Re[7]: Сложность современных средств разработки ПО
От: alexeiz  
Дата: 11.11.04 08:23
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Здравствуйте, alexeiz, Вы писали:


A>>Меня все таки интересует обобщенная сортировка написанная с применением только тех возможностей Оберона, которые описаны в книге. В C, который OOP никакой особой поддержки не оказывает, это возможно.


СГ>Ну, хорошо, уговорили. Приводите пример исходного кода на Си, а я его постараюсь переписать на обероне.


Условие: применять только те возможности Оберона, что описаны в книге Вирта.

#include <stdio.h>

void swap( char * p, char * q, size_t size ) {
    char t;
    while ( size-- ) {
        t = *p;
        *p++ = *q;
        *q++ = t;
    }
}

void sort( void const * start,
           size_t num,
           size_t width,
           int ( *comp )( void const *, void const * ) ) {
    char * p, * max, * begin = ( char * ) start, * end = begin + num;

    while ( end != begin ) {
        max = ( char * ) start;
        for ( p = begin + width; p < end; p += width ) {
            if ( comp( p, max ) > 0 )
                max = p;
        }

        swap( p, end, width );
        end -= width;
    }
}

int int_comp( void const * a, void const * b ) {
    int const * ia = ( int const * ) a;
    int const * ib = ( int const * ) b;

    return *ia > *ib ? -1 : ( *ia < *ib ? 1 : 0 );
}

int main() {
    int arr[] = { 5, 7, 2, 1 };
    int size = sizeof( arr ) / sizeof( int );
    int i;

    sort( arr, size, sizeof( int ), int_comp );

    for ( i = 0; i < size; ++i )
        printf( "%d ", arr[ i ] );
}
Re[8]: Сложность современных средств разработки ПО
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 11.11.04 08:55
Оценка: :)
Здравствуйте, alexeiz, Вы писали:


A>Условие: применять только те возможности Оберона, что описаны в книге Вирта.


В Обероне нет адресной арифметики, поэтому написать предложенную Вами функцию нельзя.
Re[9]: Сложность современных средств разработки ПО
От: alexeiz  
Дата: 11.11.04 09:00
Оценка: :))
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Здравствуйте, alexeiz, Вы писали:



A>>Условие: применять только те возможности Оберона, что описаны в книге Вирта.


СГ>В Обероне нет адресной арифметики, поэтому написать предложенную Вами функцию нельзя.


Какая жалость
Re[10]: Сложность современных средств разработки ПО
От: Sinclair Россия https://github.com/evilguest/
Дата: 11.11.04 09:20
Оценка: 2 (2)
Здравствуйте, alexeiz, Вы писали:
A>Какая жалость
Не плачь — ты не первый, кто просил Сергея написать сортировку на Обероне. Вариант из С++ он тоже переписать не сумел. Вместо этого он развернул полемику на сотню постингов о том, что Оберон содержит ровно необходимый и достаточный набор средств для написания произвольных программ. А если какие-то функции не поддаются переписыванию на Оберон, то тем хуже для них .
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[26]: А вот за язык-то Вас никто не тянул...
От: Quintanar Россия  
Дата: 11.11.04 09:48
Оценка:
Здравствуйте, GarryIV, Вы писали:

GIV>Я не специалист в истории языков но как-то давно смотрел передачу Гордна посвященную этому вопросу. Так его гость (кто именно не помню) вполне убедительно (для меня) показывал методику по которой можно сравнить родство языков. АФАИР там учитывалось количество общих слов в языках (исключая заимствованные). И на этой основе делался вывод о близости (родственности) языков.


Да, есть. Но найти общий язык, из которого развились, например, индоевропейские и тибетско-китайские языки никому пока не удалось.
На самом деле родство языков очень забавная вещь, в том же русском и английском полно общих слов с очень древней историей, которые даже произносятся непохоже.
    *  be - быть,
    * nose - нос,
    * goose - гусь,
    * eat - есть,
    * brow - бровь,
    * crook - крюк,
    * beat - бить,
    * cheek - щека,
    * widow - вдова,
    * talk - толковать,
    * beard - борода,
    * stream - стремнина,
    * grab - грабить,
    * deal - дело,
    * pastor - пастух, пастор,
    * three - три,
    * dale - дол, долина,
    * stall - стойло.

Одни из самых древних — это, конечно, числительные. Из первых десяти явно совпадают 0, 1, 3, 5, 6, 7.
Re[32]: А вот за язык-то Вас никто не тянул...
От: Mamut Швеция http://dmitriid.com
Дата: 11.11.04 10:05
Оценка:
Здравствуйте, Дарней, Вы писали:

Д>Здравствуйте, Quintanar, Вы писали:


Q>>а если выдумывать языки исскуственно, то кто даст гарантию, что их не кастрировали до состояния полной непригодности?


Д>Есть еще эсперанто, в котором вроде бы ничего нужного не забыли. И все равно ведь почти никто не пользуется

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

Язык неизменяющийся == язык умирающий
... << RSDN@Home 1.1.4 beta 3 rev. 185>>


dmitriid.comGitHubLinkedIn
Re[11]: Сложность современных средств разработки ПО
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 11.11.04 11:13
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Не плачь — ты не первый, кто просил Сергея написать сортировку на Обероне. Вариант из С++ он тоже переписать не сумел.


Сортировку я написать на обероне могу. Но я не могу написать функцию оперирующую с адресами и размерами объектов. Адресов и размеров объектов в обероне нет, равно как нет адресного пространства как такового. Аналогично я не могу написать шаблонную сортировку, так как нету шаблонов.
Re[12]: Сложность современных средств разработки ПО
От: Sinclair Россия https://github.com/evilguest/
Дата: 11.11.04 12:07
Оценка: +1
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Сортировку я написать на обероне могу. Но я не могу написать функцию оперирующую с адресами и размерами объектов. Адресов и размеров объектов в обероне нет, равно как нет адресного пространства как такового. Аналогично я не могу написать шаблонную сортировку, так как нету шаблонов.
Ну то есть нет никакой возможности написать полиморфсную сортировку, так? Для каждого конкретного типа надо писать отдельную сортирующую функцию. Я правильно понял?
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[13]: Сложность современных средств разработки ПО
От: Дарней Россия  
Дата: 11.11.04 12:30
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Ну то есть нет никакой возможности написать полиморфсную сортировку, так? Для каждого конкретного типа надо писать отдельную сортирующую функцию. Я правильно понял?


вероятно, через отражение или нечто подобное все-таки можно — если в Обероне есть "мать всех объектов"
со всеми вытекающими последствиями этого метода
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[14]: Сложность современных средств разработки ПО
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 11.11.04 13:40
Оценка:
Здравствуйте, Дарней, Вы писали:

Д>Здравствуйте, Sinclair, Вы писали:


S>>Ну то есть нет никакой возможности написать полиморфсную сортировку, так? Для каждого конкретного типа надо писать отдельную сортирующую функцию. Я правильно понял?


Д>вероятно, через отражение или нечто подобное все-таки можно — если в Обероне есть "мать всех объектов"

Д>со всеми вытекающими последствиями этого метода

В Component Pascal есть ANYREC и соответсвующий ему ANYPTR — для них можно. В Active Oberon есть OBJECT — для него можно.
Re[12]: Технология
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.11.04 13:52
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Какой еще джит в Обероне????????????


Возможно я не прав. Но мне казалось, что оберон основан на компиляции в промежеточный код. Давно я про него читал...
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: Сложность современных средств разработки ПО
От: Дарней Россия  
Дата: 11.11.04 13:53
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>В Component Pascal есть ANYREC и соответсвующий ему ANYPTR — для них можно. В Active Oberon есть OBJECT — для него можно.


все равно, здесь будут обычные неприятные последствия такого метода — падение скорости на порядки, и плюс к этому вероятность поймать runtime-exception
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[16]: Сложность современных средств разработки ПО
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 11.11.04 14:08
Оценка: :))) :))) :))
Здравствуйте, Дарней, Вы писали:

Д>Здравствуйте, Сергей Губанов, Вы писали:


СГ>>В Component Pascal есть ANYREC и соответсвующий ему ANYPTR — для них можно. В Active Oberon есть OBJECT — для него можно.


Д>все равно, здесь будут обычные неприятные последствия такого метода — падение скорости на порядки, и плюс к этому вероятность поймать runtime-exception

Д>

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