www.digitalmars.com         C & C++   DMDScript  

D - [Language design] yet another notational error

reply Manfred Nowak <svv1999 hotmail.com> writes:
void main()
{
  char[4] foo= "1234";
  char[]  bar;

  bar.length= 5;
  bar[0..2]= foo[1.3];
  printf("%.*s\n", bar);
}

Would you also recognize it in millions of lines of code?

So long.
Feb 10 2004
next sibling parent reply "davepermen" <davepermen hotmail.com> writes:
use ****ing syntax highlighting!! :D

yes, i can see it definitely

"Manfred Nowak" <svv1999 hotmail.com> schrieb im Newsbeitrag
news:c0bb5v$238e$1 digitaldaemon.com...
 void main()
 {
   char[4] foo= "1234";
   char[]  bar;

   bar.length= 5;
   bar[0..2]= foo[1.3];
   printf("%.*s\n", bar);
 }

 Would you also recognize it in millions of lines of code?

 So long.

Feb 10 2004
parent reply Manfred Nowak <svv1999 hotmail.com> writes:
davepermen wrote:

 use ****ing syntax highlighting!! :D
 yes, i can see it definitely

I do not believe you. Do you know of a system or site where the time between download and upload of files is recorded? If such system or site exist I propose that you are not able to do the following: 1. you download a file that I would have produced in the following way: 1.a. defining a class `C' containing something like opSlice(int, int) and opIndex(real) 1.b. declaring a variable `c' of class `C' in the `main' function 1.c. randomly generating 2 million lines of code containing calls of the form c[int..int] and c[real] in the body of `main' 1.d. changing one call c[int..int] to c[real] _or_ one call c[real] to c[int..int] by inserting or deleting a `.' 2. you find in appropriate time the error, i.e. the line which I have changed in step 1.d., and correct it by either deleting or inserting a `.' 3. you proove the appropriate time of finding the error by uploading the corrected file 4. the file you uploaded and my unmodified randomly generated file are identical So long.
Feb 10 2004
parent reply "davepermen" <davepermen hotmail.com> writes:
if its a real that is used, then its dark yellow, both the numbers, and the
. in between.

if its a slice, its two dark yellow numbers, and two red dots in between.

if i don't know the purpose of the code, then i should not touch it. but
even so. i can quicky seen what is written. it can still take ages to detect
if it's right, or wrong, what is written.

but that can be the case everytime.

fact is, i have no problems determining if its opSlice or opIndex(real).

determining if something is a bug, that is another story. most the time, in
this situation, it will yield a bug, because it simply doesn't work (opIndex
doesn't take a real, returnvalues are different (array against one value)),
but of course, it can be made up to show an example where it does work.

but you're mixing two points:
a) its not visible to determine the difference
b) thus its very difficult to find the bug

a) is not true, i can see it clearly. and if you can't set your dev-env to
make it visible, then you have a serious problem.
b) most the time it isn't difficult to find that bug. but the difficulty of
finding a bug is not depending on the fact of a, the readability. it's only
based on managability.

and now, have fun searching even more such stupid bugs. or get some real
stuff done, and show us examples on what bugs happen, and you have
difficulties to find. trying to solve those directly by the language is more
useful.

oh, and, enable ****ing syntax highlighting.

"Manfred Nowak" <svv1999 hotmail.com> schrieb im Newsbeitrag
news:c0br6p$2ud9$1 digitaldaemon.com...
 davepermen wrote:

 use ****ing syntax highlighting!! :D
 yes, i can see it definitely

I do not believe you. Do you know of a system or site where the time between download and upload of files is recorded? If such system or site exist I propose that you are not able to do the following: 1. you download a file that I would have produced in the following way: 1.a. defining a class `C' containing something like opSlice(int, int) and opIndex(real) 1.b. declaring a variable `c' of class `C' in the `main' function 1.c. randomly generating 2 million lines of code containing calls of the form c[int..int] and c[real] in the body of `main' 1.d. changing one call c[int..int] to c[real] _or_ one call c[real] to c[int..int] by inserting or deleting a `.' 2. you find in appropriate time the error, i.e. the line which I have changed in step 1.d., and correct it by either deleting or inserting a `.' 3. you proove the appropriate time of finding the error by uploading the corrected file 4. the file you uploaded and my unmodified randomly generated file are identical So long.

Feb 10 2004
parent reply Manfred Nowak <svv1999 hotmail.com> writes:
davepermen wrote:

 if its a real that is used, then its dark yellow, both the numbers, and the
 . in between.
 if its a slice, its two dark yellow numbers, and two red dots in between.

You already told about your syntax highlighter. I know that you can distinguish between `.', `..' and `,'. But that does only help you out if you already know, that there is an error. Why do you think dmd is still buggy in version 79? Do you think, that Walter does not use a syntax highlighter?
 if i don't know the purpose of the code, then i should not touch it. but
 even so. i can quicky seen what is written. it can still take ages to detect
 if it's right, or wrong, what is written.

Do I remember the GPL correctly, that it states that the sources realeased under it do not fit for any particular use? Consequently you do not touch any GPL-ed software? [...]
 or get some real stuff done

I see that you are a man of action. But men of action seldomly decide what tools to take, when organizing a team of lets assume 2000 IT professionals. And the management of such a team must be prepared for the simple question of its board of directors or supervisory board "why did you choose this tool" in case something went seriously wrong. A manager might very well get as red as a beetroot if it turns out, that the QA team gave out a warning in time. Last time I did that, Smalltalk was cancelled.
 and show us examples on what bugs happen, and you have difficulties to find.

Are you shure, that you got my messages right? The bugs that are detected by the coder alone are of no problem. Bugs that pass coding, walkthroughs, code reviews, code integration and whatever else is used to assure quality and finally reach the released product are the problem. In my simple example changing the declaration of `foo' to `char[4] foo= "1221";' could render the bug undetected, because then the output `22' would be identical to the expected output. Do you really believe, that the russian aerospace agency did not make any QA for its mars probe that finally crashed in 1971? So long.
Feb 10 2004
next sibling parent reply "davepermen" <davepermen hotmail.com> writes:
 You already told about your syntax highlighter. I know that you can
 distinguish between `.', `..' and `,'. But that does only help you out if
 you already know, that there is an error. Why do you think dmd is still
 buggy in version 79? Do you think, that Walter does not use a syntax
 highlighter?

all i want to state is your problem is a logic error. and those are the errors that can, from time to time, let mars-probes crash. if it's NOT a logic error, but a typing error, i immediately spot the error while typing. that is what the syntax highlighting is made for. i will never have an error like [1.2] instead of [1..2] or vice versa as a TYPO. and thats what you want to warn that could happen to come, and pass because it can get compiled. this, in a good dev-env, will never be a typo. it can still be a logic error, but logic errors can be in every statement. a language cannot prevent all sort of typos. it can prevent most. good dev-tools can help for the rest.
 Do I remember the GPL correctly, that it states that the sources
 realeased under it do not fit for any particular use? Consequently you do
 not touch any GPL-ed software?

or as converted lib, with rewritten d library "headers" (in D). i normally don't work with the actual code of such libs, no. i prefer to bugreport and let the coders that work with the lib daily do the job. they know it bether.
 I see that you are a man of action. But men of action seldomly decide what
 tools to take, when organizing a team of lets assume 2000 IT
 professionals. And the management of such a team must be prepared
 for the simple question of its board of directors or supervisory
 board "why did you choose this tool" in case something went seriously
 wrong. A manager might very well get as red as a beetroot if it turns
 out, that the QA team gave out a warning in time. Last time I did that,
 Smalltalk was cancelled.

notepad. it's their job. and the management doesn't ever need to bother. i don't know of any ide that does not have syntax highlighting. the only case is, if you don't have an ide, and have to use something like notepad. and there, replacing it with a notepad that has colours is something that doesn't mean a lot of change, can be made for free, the management can sure be aranged to support it (just tell it about the big COBOL issue and how syntax highlighting could possibly have prevented it and they will love you). and the ones that use it in your company will hell-fast adopt it. they have now the choise to go to Start->Programs->Notepad, or Start->Programs->TextPad, to do the same, in exactly the same way. one time with, one time without, colours.
 Are you shure, that you got my messages right? The bugs that are detected
 by the coder alone are of no problem. Bugs that pass coding,
 walkthroughs, code reviews, code integration and whatever else is used to
 assure quality and finally reach the released product are the problem.

always can show you that those things don't happen as typos in a normal dev-environment. if it's wrong, then it's a logic error, a.k.a. a REAL error. as such, nothing can prevent it from slipping trough. it can result in no problem, in strange crashes, in wrong data, etc. but thats not a problem of this certain case, but programming in general.
 Do you really believe, that the russian aerospace agency did not make any
 QA for its mars probe that finally crashed in 1971?

show me one place where we use such primitive tools to work with. i know no place where you can't use a windows or linux or mac or what ever gui to work in and develop, and then up/download the compiled code to your prefered device. and for all those platforms with their guis, there do exist (thanks, scintilla:D), syntax hightighting notepads. this is a standard today. you may or may not adopt it. fact is, most people use msvc, and they will never step back to non-coloured coding.
Feb 10 2004
parent reply Manfred Nowak <svv1999 hotmail.com> writes:
davepermen wrote:

[...]
 if it's NOT a
 logic error, but a typing error, i immediately spot the error while typing.

And why do you require, that your coding style is adopted by everyone? Not allowing for example data typists to transfer data from paper directly into code? I am getting tired of this discussion: as far as I understand you, you do not bring up any arguments that the tokenizing of D must stay as it is; you agree, that typos of the form pointed out may happen, but you insist, that other tools surrounding the main tool `dmd' will help to capture them. To me this is like wanting to drive a car built before 1971 with nearly no passive safety but equipping it with an electronic approaching warner and expounding, that the digital display of that device will clearly expose every danger when monitored constantly. So long.
Feb 11 2004
parent reply "davepermen" <davepermen hotmail.com> writes:
i just see no real life situation where this problem can occur, as i see no
point in using non-suitable tools..

there is a reason we can display different fonts, colours, images, etc. they
help us everywhere, as they do in coding.

i don't see your point simply. i simply don't.

if its a typing error you want to prevent, fine. if it's a logic error, you
can't prevent it. they can never be.

but for the typing error i gave you a simple fact. today is not the day of
console based edit, or vi, but the days of emacs, visual studio, textpad,
dide, whatever. that moodens your point. it doesn't make it non-valid. it
just makes it much less important than you may want it to be.

if you get tired, leave, or bring up reasons why it really is a problem. i
still haven't seen a situation where it in fact can be an issue.

and in what way do i force my coding style to everyone?. this is not about
coding style, just about the program you use to edit simple plain text
files. give me one reason to not use a syntax highlighting editor instead of
a non-syntax hightlighting. or places where we could not use one.

this has nothing to do with coding style. it's about proper tools for your
job. as you choose the right language for your task.

"Manfred Nowak" <svv1999 hotmail.com> schrieb im Newsbeitrag
news:c0dash$2drh$1 digitaldaemon.com...
 davepermen wrote:

 [...]
 if it's NOT a
 logic error, but a typing error, i immediately spot the error while


 And why do you require, that your coding style is adopted by everyone?
 Not allowing for example data typists to transfer data from paper directly
 into code?

 I am getting tired of this discussion: as far as I understand you, you do
 not bring up any arguments that the tokenizing of D must stay as it is;
 you agree, that typos of the form pointed out may happen, but you insist,
 that other tools surrounding the main tool `dmd' will help to capture

 To me this is like wanting to drive a car built before 1971 with nearly no
 passive safety but equipping it with an electronic approaching warner and
 expounding, that the digital display of that device will clearly expose
 every danger when monitored constantly.

 So long.

Feb 11 2004
parent reply Manfred Nowak <svv1999 hotmail.com> writes:
davepermen wrote:

[I do not see a problem]

Not beeing able to recognize a problem is a non argument. Also enforced,
you do not come up with a counter example that requires a call to look
like `(1,2)', a slice to look like `[1..2]' or even an assignment to look
like `v=1'.

If you think accompanying tools can and should take off the burdon
of a proper syntax from a language, then take the following list of error
messages and convince at least Walter to no longer maintain it:

!(TemplateArgumentList) expected following TemplateIdentifier '%s'
#line integer ["filespec"]\n expected
%p has no semantic routine
%s %s is deprecated
%s '%s' is not a variable
%s does not have a boolean value
%s has no value
%s is not a field
%s is not a field of %s
%s is not a template
%s is not a template
%s is not a template declaration
%s is not an expression
%s is not an expression
%s is not an expression
%s is used as a type
%s must be a function
%s must be an array or pointer type, not %s
%s.%s is private
'%s' is not a member of '%s'
'%s' is not a scalar, it is a %s
'%s' is not an arithmetic type
'%s' is not an integral type
'%s' is not an lvalue
'%s' must be an interface
';' expected
';' expected after template instance
';' expected after template instance, not %s
';' expected following module declaration instead of %s
'=' does not give a boolean result
'super' is only allowed in non-static member functions
'this' is only allowed in non-static member functions
'this' is required, but %s is not a base class of %s
(%s) does not match argument types (%s)
(%s) is false
(condition) expected after version
(condition) expected following version
(identifier) following 'out' expected, not %s
) expected instead of '%s'
... not allowed in delete function parameter list
a struct is not a valid initializer for a %s
alias cannot have initializer
align %d must be a power of 2
anonymous classes not allowed
apply() function for %s must return an int
argument expected for switch '%s'
array comparison type mismatch, %s vs %s
array index %lld is out of bounds [0..%lld]
array index [%lld] is outside array bounds [0 .. %lld]
asm statements must end in ';'
at least one argument of type uint expected
bad addr mode
bad operand
bad type/size of operands '%s'
base %s is forward referenced
base classes expected following ':'
base type must be class or interface, not %s
basic type expected, not %s
binary digit expected
binary-exponent-part required
break is not inside a loop or switch
can only * a pointer, not a '%s'
can only catch class objects, not '%s'
Can only concatenate arrays
Can only concatenate arrays, not (%s ~ %s)
can only synchronize on class objects, not '%s'
can only throw class objects, not type %s
can only throw classes, not %s
can't have array of %s
can't have associative array key of %s
can't have associative array of %s
Can't run '%s', check PATH
can't subtract pointer from %s
cannot access frame of function %s
cannot assign to static array %s
cannot cast %s to %s
cannot cast %s to %s since sizes don't line up
cannot cast from %s to %s
cannot change reference to static array '%s'
cannot convert string literal to void*
cannot create instance of abstract class %s
cannot create instance of interface %s
cannot declare template at function scope
cannot delete %s
cannot goto forward into different try block level
cannot goto into try block
cannot have array of %s
cannot have array of auto %s
cannot have out or inout argument of bit in array
cannot have out or inout parameter of type %s
cannot have parameter of type %s
cannot implicitly convert %s to %s
cannot modify const variable '%s'
cannot modify parameter '%s' in contract
cannot modify slice %s
cannot override final function %s
cannot resolve forward reference
cannot return expression from constructor
cannot return value from void function
cannot take address of bit in array
cannot use array to initialize %s
case %s not found
case '%s' is not a string
case not in switch statement
catch or finally expected following try
character entity out of range
character is truncated
class constructor call must be in a constructor
comma expected separating array initializers, not %s
comma expected separating field initializers
command line length of %d is too long
conflicts with %s.%s at %s
constructor calls not allowed in loops or after labels
constructors only are for class definitions
continue is not inside a loop
cyclic constructor call
declaration %s is already defined
declaration %s.%s is already defined
declaration expected following attribute, not ';'
Declaration expected, not '%s'
default not in switch statement
delegates are only for non-static functions
delete does not give a boolean result
destructors only are for class definitions
does not match any template declaration
duplicate case %s in switch statement
duplicate initializations for index %d
duplicate union initialization for %s
duplicate union initialization for %s
enclosing label '%s' for break not found
enclosing label '%s' for continue not found
end of file before closing %c of string
end of file before closing --> of comment
end of file before end of character entity
enum %s must have at least one member
enum member expected
escape hex sequence has %d hex digits instead of %d
expected %d arguments, not %d
exponent expected
expression (%s) has no type
expression expected, not '%s'
field %s of %s already initialized
field not allowed in interface
first argument must be type uint, not %s
Floating point constant expression expected instead of %s
floating point expected
for condition
foreach: %s is not an aggregate type
foreach: %s is not an array of %s
foreach: index cannot be inout
foreach: index must be type %s, not %s
foreach: key cannot be inout
foreach: key cannot be out
foreach: key type must be int or uint, not %s
foreach: value cannot be out and type bit
foreach: value must be type %s, not %s
foreach: value of UTF conversion cannot be inout
forward reference of base class %s
forward reference to template declaration %s
found '%s' instead of array initializer
found '%s' instead of statement
found '%s' when expecting '%s'
found '%s' when expecting '%s' following '%s'
found '%s' when expecting identifier following '%s.'
function %s does not override any
function body is not abstract in interface %s
function expected before (), not '%s'
function expected to return a value of type %s
functions cannot be const or auto
functions cannot return auto %s
functions cannot return static array %s
globals, statics, fields, inout and out parameters cannot be auto
goto case not in switch statement
goto default not in switch statement
Hex digit expected, not '%c'
identifier '%s' is not defined
identifier '%s' is not defined
identifier '%s' of '%s' is not defined
identifier expected following '.' instead of '%s'
identifier expected following '.', not '%s'
Identifier expected following (type).
Identifier expected following cast(type).
Identifier expected following goto
Identifier expected following import
Identifier expected following module
Identifier expected following package
Identifier expected following package
Identifier expected for template parameter
identifier expected not struct
identifier or integer expected, not %s
illegal UTF-16 value
illegal UTF-16 value %04x
incompatible types for ((%s) %s (%s)): '%s' and '%s'
incompatible types for array[range], had %s[]
index is not a type or an expression
Integer constant expression expected instead of %s
integer expected
integer expected, not %s
integer overflow
integral type expected for value-parameter, not %s
interface function %s.%s is not implemented
invalid numeric character reference
invalid UCS-32 char \U%08x
invalid UTF-8 sequence
invalid UTF-8 sequence
invariants only are for struct/union/class definitions
is forward referenced
is in multiple packages %s
is in multiply defined
is not a per-instance initializable field
is not a static and cannot have static initializer
Label '%s' already defined
label '%s' has no break
label '%s' has no continue
label expected
linkage doesn't match interface function
matches more than one template declaration
matching '}' expected, not %s
matching '}' expected, not end of file
member %s is not accessible
members expected
members of template declaration expected
module and package have the same name
multiple constructor calls
multiple declarations must have the same type, not %s and %s
multiple delete's for class %s
multiple delete's for struct %s
multiple destructors for class %s
multiple source files, but only one .obj name
must use body keyword after in or out
need 'this' to access member %s
need size of rightmost array, not type %s
negative array index %s
negative index %lld for static array
new allocators only are for class or struct definitions
new can only create structs, arrays or class objects, not %s's
no allocator for %s
no base class for %s
no case statement following goto case;
no constructor for %s
no definition for static %s
No expression copy for: %s
no identifier for declarator
no identifier for parameter %d of %s
no identifier for template value parameter
no property '%s' for type '%s'
no super class constructor for %s
no [] operator overload for type %s
non-constant expression %s
non-hex character '%c'
nops expected
number is not representable
Octal digit expected
odd length of UTF-16 char source %u
odd length of UTF-32 char source %u
odd number (%d) of hex characters in hex string
one argument of type void* expected
one argument of type void* expected, not %s
only fields allowed in anonymous struct
only one or two arguments for array foreach
only one or two arguments for associative array foreach
opcode expected, not %s
out result %s is already defined
overlapping initialization for struct %s.%s
overloads %s and %s both match argument list for %s
overrides but is not covariant with %s
package and module have the same name
parameter %s.%s is already defined
parameter '%s' multiply defined
parameters must be main() or main(char[][] args)
parenthesized TemplateParameterList expected following TemplateIdentifier
pointer expected before ->, not '%s'
pragma(identifier expected
pragma(identifier expected
PragmaStatement::toCBuffer()
ptr expected
redundant 'in' statement
redundant 'out' statement
redundant storage class '%s'
reference to auto class must be auto
return statements cannot be in contracts
return value expected
return without calling constructor
rvalue of in expression must be an associative array, not %s
semicolon expected
semicolon expected following function declaration
semicolon expected to close %s declaration
semicolon expected, not '%s'
source file name '%s' must have .%s extension
special function not allowed in interface %s
special member functions not allowed for %ss
statement expected to be { }, not %s
string expected for pragma msg, not '%s'
string expected for pragma msg, not '%s'
StringExp::toDt(type = %s)
struct %s is forward referenced
struct member expected
super class constructor call must be in a constructor
surrogate UTF-16 high value %04x at EOF
surrogate UTF-16 high value past end of string
surrogate UTF-16 low value %04x out of range
surrogate UTF-16 low value out of range
switch statement already has a default
synchronized function %s must be a member of a class
template %s is not a member of %s
template identifier %s is not a member of %s
template identifier %s is not a member of %s
template member expected
TemplateIdentifier expected following instance
TemplateIdentifier expected following template
Throw statements cannot be in contracts
too many initializers %d for array[%d]
too many initializers for %s
type %s is not an expression
undefined escape hex sequence \%c
undefined escape sequence \%c
undefined identifier %s
undefined identifier '%s'
undefined label %s
unexpected identifer '%s' in declarator
unknown operand for floating point instruction
unpaired surrogate UTF-16 value
unpaired surrogate UTF-16 value %04x
unrecognized declaration
unrecognized file extension %s
unrecognized pragma(%s)
unrecognized pragma(%s)
unrecognized switch '%s'
unrecognized token
unsupported char '%c'
unsupported char 0x%02x
unterminated /* */ comment
unterminated /+ +/ comment
unterminated character constant
unterminated string constant starting at %s
use '{ }' for an empty statement, not a ';'
UTF-32 value %08x greater than 0x10FFFF
valid linkage identifiers are D, C, C++, Pascal, Windows
variable %s cannot be synchronized
void functions have no result
void has no value
voids have no value
voids have no value
with expressions must be class objects, not '%s'
\%c sequence must be followed by %d hex characters
] expected instead of '%s'
{ enum members } expected

So long.
Feb 11 2004
parent reply "davepermen" <davepermen hotmail.com> writes:
you act stupid.

case closed.

"Manfred Nowak" <svv1999 hotmail.com> schrieb im Newsbeitrag
news:c0e095$hlr$1 digitaldaemon.com...
 davepermen wrote:

 [I do not see a problem]

 Not beeing able to recognize a problem is a non argument. Also enforced,
 you do not come up with a counter example that requires a call to look
 like `(1,2)', a slice to look like `[1..2]' or even an assignment to look
 like `v=1'.

 If you think accompanying tools can and should take off the burdon
 of a proper syntax from a language, then take the following list of error
 messages and convince at least Walter to no longer maintain it:

 !(TemplateArgumentList) expected following TemplateIdentifier '%s'
 #line integer ["filespec"]\n expected
 %p has no semantic routine
 %s %s is deprecated
 %s '%s' is not a variable
 %s does not have a boolean value
 %s has no value
 %s is not a field
 %s is not a field of %s
 %s is not a template
 %s is not a template
 %s is not a template declaration
 %s is not an expression
 %s is not an expression
 %s is not an expression
 %s is used as a type
 %s must be a function
 %s must be an array or pointer type, not %s
 %s.%s is private
 '%s' is not a member of '%s'
 '%s' is not a scalar, it is a %s
 '%s' is not an arithmetic type
 '%s' is not an integral type
 '%s' is not an lvalue
 '%s' must be an interface
 ';' expected
 ';' expected after template instance
 ';' expected after template instance, not %s
 ';' expected following module declaration instead of %s
 '=' does not give a boolean result
 'super' is only allowed in non-static member functions
 'this' is only allowed in non-static member functions
 'this' is required, but %s is not a base class of %s
 (%s) does not match argument types (%s)
 (%s) is false
 (condition) expected after version
 (condition) expected following version
 (identifier) following 'out' expected, not %s
 ) expected instead of '%s'
 ... not allowed in delete function parameter list
 a struct is not a valid initializer for a %s
 alias cannot have initializer
 align %d must be a power of 2
 anonymous classes not allowed
 apply() function for %s must return an int
 argument expected for switch '%s'
 array comparison type mismatch, %s vs %s
 array index %lld is out of bounds [0..%lld]
 array index [%lld] is outside array bounds [0 .. %lld]
 asm statements must end in ';'
 at least one argument of type uint expected
 bad addr mode
 bad operand
 bad type/size of operands '%s'
 base %s is forward referenced
 base classes expected following ':'
 base type must be class or interface, not %s
 basic type expected, not %s
 binary digit expected
 binary-exponent-part required
 break is not inside a loop or switch
 can only * a pointer, not a '%s'
 can only catch class objects, not '%s'
 Can only concatenate arrays
 Can only concatenate arrays, not (%s ~ %s)
 can only synchronize on class objects, not '%s'
 can only throw class objects, not type %s
 can only throw classes, not %s
 can't have array of %s
 can't have associative array key of %s
 can't have associative array of %s
 Can't run '%s', check PATH
 can't subtract pointer from %s
 cannot access frame of function %s
 cannot assign to static array %s
 cannot cast %s to %s
 cannot cast %s to %s since sizes don't line up
 cannot cast from %s to %s
 cannot change reference to static array '%s'
 cannot convert string literal to void*
 cannot create instance of abstract class %s
 cannot create instance of interface %s
 cannot declare template at function scope
 cannot delete %s
 cannot goto forward into different try block level
 cannot goto into try block
 cannot have array of %s
 cannot have array of auto %s
 cannot have out or inout argument of bit in array
 cannot have out or inout parameter of type %s
 cannot have parameter of type %s
 cannot implicitly convert %s to %s
 cannot modify const variable '%s'
 cannot modify parameter '%s' in contract
 cannot modify slice %s
 cannot override final function %s
 cannot resolve forward reference
 cannot return expression from constructor
 cannot return value from void function
 cannot take address of bit in array
 cannot use array to initialize %s
 case %s not found
 case '%s' is not a string
 case not in switch statement
 catch or finally expected following try
 character entity out of range
 character is truncated
 class constructor call must be in a constructor
 comma expected separating array initializers, not %s
 comma expected separating field initializers
 command line length of %d is too long
 conflicts with %s.%s at %s
 constructor calls not allowed in loops or after labels
 constructors only are for class definitions
 continue is not inside a loop
 cyclic constructor call
 declaration %s is already defined
 declaration %s.%s is already defined
 declaration expected following attribute, not ';'
 Declaration expected, not '%s'
 default not in switch statement
 delegates are only for non-static functions
 delete does not give a boolean result
 destructors only are for class definitions
 does not match any template declaration
 duplicate case %s in switch statement
 duplicate initializations for index %d
 duplicate union initialization for %s
 duplicate union initialization for %s
 enclosing label '%s' for break not found
 enclosing label '%s' for continue not found
 end of file before closing %c of string
 end of file before closing --> of comment
 end of file before end of character entity
 enum %s must have at least one member
 enum member expected
 escape hex sequence has %d hex digits instead of %d
 expected %d arguments, not %d
 exponent expected
 expression (%s) has no type
 expression expected, not '%s'
 field %s of %s already initialized
 field not allowed in interface
 first argument must be type uint, not %s
 Floating point constant expression expected instead of %s
 floating point expected
 for condition
 foreach: %s is not an aggregate type
 foreach: %s is not an array of %s
 foreach: index cannot be inout
 foreach: index must be type %s, not %s
 foreach: key cannot be inout
 foreach: key cannot be out
 foreach: key type must be int or uint, not %s
 foreach: value cannot be out and type bit
 foreach: value must be type %s, not %s
 foreach: value of UTF conversion cannot be inout
 forward reference of base class %s
 forward reference to template declaration %s
 found '%s' instead of array initializer
 found '%s' instead of statement
 found '%s' when expecting '%s'
 found '%s' when expecting '%s' following '%s'
 found '%s' when expecting identifier following '%s.'
 function %s does not override any
 function body is not abstract in interface %s
 function expected before (), not '%s'
 function expected to return a value of type %s
 functions cannot be const or auto
 functions cannot return auto %s
 functions cannot return static array %s
 globals, statics, fields, inout and out parameters cannot be auto
 goto case not in switch statement
 goto default not in switch statement
 Hex digit expected, not '%c'
 identifier '%s' is not defined
 identifier '%s' is not defined
 identifier '%s' of '%s' is not defined
 identifier expected following '.' instead of '%s'
 identifier expected following '.', not '%s'
 Identifier expected following (type).
 Identifier expected following cast(type).
 Identifier expected following goto
 Identifier expected following import
 Identifier expected following module
 Identifier expected following package
 Identifier expected following package
 Identifier expected for template parameter
 identifier expected not struct
 identifier or integer expected, not %s
 illegal UTF-16 value
 illegal UTF-16 value %04x
 incompatible types for ((%s) %s (%s)): '%s' and '%s'
 incompatible types for array[range], had %s[]
 index is not a type or an expression
 Integer constant expression expected instead of %s
 integer expected
 integer expected, not %s
 integer overflow
 integral type expected for value-parameter, not %s
 interface function %s.%s is not implemented
 invalid numeric character reference
 invalid UCS-32 char \U%08x
 invalid UTF-8 sequence
 invalid UTF-8 sequence
 invariants only are for struct/union/class definitions
 is forward referenced
 is in multiple packages %s
 is in multiply defined
 is not a per-instance initializable field
 is not a static and cannot have static initializer
 Label '%s' already defined
 label '%s' has no break
 label '%s' has no continue
 label expected
 linkage doesn't match interface function
 matches more than one template declaration
 matching '}' expected, not %s
 matching '}' expected, not end of file
 member %s is not accessible
 members expected
 members of template declaration expected
 module and package have the same name
 multiple constructor calls
 multiple declarations must have the same type, not %s and %s
 multiple delete's for class %s
 multiple delete's for struct %s
 multiple destructors for class %s
 multiple source files, but only one .obj name
 must use body keyword after in or out
 need 'this' to access member %s
 need size of rightmost array, not type %s
 negative array index %s
 negative index %lld for static array
 new allocators only are for class or struct definitions
 new can only create structs, arrays or class objects, not %s's
 no allocator for %s
 no base class for %s
 no case statement following goto case;
 no constructor for %s
 no definition for static %s
 No expression copy for: %s
 no identifier for declarator
 no identifier for parameter %d of %s
 no identifier for template value parameter
 no property '%s' for type '%s'
 no super class constructor for %s
 no [] operator overload for type %s
 non-constant expression %s
 non-hex character '%c'
 nops expected
 number is not representable
 Octal digit expected
 odd length of UTF-16 char source %u
 odd length of UTF-32 char source %u
 odd number (%d) of hex characters in hex string
 one argument of type void* expected
 one argument of type void* expected, not %s
 only fields allowed in anonymous struct
 only one or two arguments for array foreach
 only one or two arguments for associative array foreach
 opcode expected, not %s
 out result %s is already defined
 overlapping initialization for struct %s.%s
 overloads %s and %s both match argument list for %s
 overrides but is not covariant with %s
 package and module have the same name
 parameter %s.%s is already defined
 parameter '%s' multiply defined
 parameters must be main() or main(char[][] args)
 parenthesized TemplateParameterList expected following TemplateIdentifier
 pointer expected before ->, not '%s'
 pragma(identifier expected
 pragma(identifier expected
 PragmaStatement::toCBuffer()
 ptr expected
 redundant 'in' statement
 redundant 'out' statement
 redundant storage class '%s'
 reference to auto class must be auto
 return statements cannot be in contracts
 return value expected
 return without calling constructor
 rvalue of in expression must be an associative array, not %s
 semicolon expected
 semicolon expected following function declaration
 semicolon expected to close %s declaration
 semicolon expected, not '%s'
 source file name '%s' must have .%s extension
 special function not allowed in interface %s
 special member functions not allowed for %ss
 statement expected to be { }, not %s
 string expected for pragma msg, not '%s'
 string expected for pragma msg, not '%s'
 StringExp::toDt(type = %s)
 struct %s is forward referenced
 struct member expected
 super class constructor call must be in a constructor
 surrogate UTF-16 high value %04x at EOF
 surrogate UTF-16 high value past end of string
 surrogate UTF-16 low value %04x out of range
 surrogate UTF-16 low value out of range
 switch statement already has a default
 synchronized function %s must be a member of a class
 template %s is not a member of %s
 template identifier %s is not a member of %s
 template identifier %s is not a member of %s
 template member expected
 TemplateIdentifier expected following instance
 TemplateIdentifier expected following template
 Throw statements cannot be in contracts
 too many initializers %d for array[%d]
 too many initializers for %s
 type %s is not an expression
 undefined escape hex sequence \%c
 undefined escape sequence \%c
 undefined identifier %s
 undefined identifier '%s'
 undefined label %s
 unexpected identifer '%s' in declarator
 unknown operand for floating point instruction
 unpaired surrogate UTF-16 value
 unpaired surrogate UTF-16 value %04x
 unrecognized declaration
 unrecognized file extension %s
 unrecognized pragma(%s)
 unrecognized pragma(%s)
 unrecognized switch '%s'
 unrecognized token
 unsupported char '%c'
 unsupported char 0x%02x
 unterminated /* */ comment
 unterminated /+ +/ comment
 unterminated character constant
 unterminated string constant starting at %s
 use '{ }' for an empty statement, not a ';'
 UTF-32 value %08x greater than 0x10FFFF
 valid linkage identifiers are D, C, C++, Pascal, Windows
 variable %s cannot be synchronized
 void functions have no result
 void has no value
 voids have no value
 voids have no value
 with expressions must be class objects, not '%s'
 \%c sequence must be followed by %d hex characters
 ] expected instead of '%s'
 { enum members } expected

 So long.

Feb 11 2004
parent reply Brad Anderson <brad sankaty.dot.com> writes:
davepermen wrote:
 you act stupid.
 
 case closed.
 

Settle down, girls. Can't you just be okay with disagreeing? I'm wasting time reading these posts. I get it that you two do things differently. Case closed.
Feb 11 2004
parent reply "davepermen" <davepermen hotmail.com> writes:
shall i add a third case closed? :D

no, definitely. i stated manfred is right.

i just think it's not important or dangerous.

the rest was talking besides eachother.

i haven't answered his questions really,
so didn't he replied to mine..

i'm sorry.

sorry manfred
sorry brad

i hope it was at least a good read:D

greetings to all.

i hope we find some midway..

but walter does not want to have warnings in the dmd..

well.. as it can not be an error, what should be done now?
"Brad Anderson" <brad sankaty.dot.com> schrieb im Newsbeitrag
news:c0e2m4$li9$1 digitaldaemon.com...
 davepermen wrote:
 you act stupid.

 case closed.

Settle down, girls. Can't you just be okay with disagreeing? I'm wasting

 reading these posts.  I get it that you two do things differently.  Case

Feb 11 2004
parent reply J C Calvarese <jcc7 cox.net> writes:
davepermen wrote:
[...]
 i hope we find some midway..
 
 but walter does not want to have warnings in the dmd..

Since D has a syntax that's easy to parse, D users can develop their own tools to parse the code and look for Dangerous Situations. We could add our warnings by running a program on the code before we submit it to the compiler (let's call it dcheck). If dcheck rejects the code, we could fix it before we try to compile it. If the person who writes dcheck is worried about nearly everything, dcheck can check many, many possible problems. If someone isn't worried about any of these possible problems, he doesn't have to use dcheck at all. Now everyone's happy. :) -- Justin http://jcc_7.tripod.com/d/
Feb 11 2004
parent J Anderson <REMOVEanderson badmama.com.au> writes:
J C Calvarese wrote:

 If dcheck rejects the code, we could fix it before we try to compile it.

 If the person who writes dcheck is worried about nearly everything, 
 dcheck can check many, many possible problems. If someone isn't 
 worried about any of these possible problems, he doesn't have to use 
 dcheck at all.

 Now everyone's happy. :)

Isn't there something like that for C/C++? Actually I think there's a load of these programs for C/C++ out there. I think there called "code analysers". Anyway good luck to anyone to attempts to make one. -- -Anderson: http://badmama.com.au/~anderson/
Feb 11 2004
prev sibling parent reply Sam McCall <tunah.d tunah.net> writes:
Manfred Nowak wrote:
 davepermen wrote:
 
 
if its a real that is used, then its dark yellow, both the numbers, and the
. in between.
if its a slice, its two dark yellow numbers, and two red dots in between.

You already told about your syntax highlighter. I know that you can distinguish between `.', `..' and `,'. But that does only help you out if you already know, that there is an error. Why do you think dmd is still buggy in version 79? Do you think, that Walter does not use a syntax highlighter?

than . versus ..
Feb 11 2004
parent reply Manfred Nowak <svv1999 hotmail.com> writes:
Sam McCall wrote:

 Um, I think it's because walter has more difficult issues to deal with 
 than . versus ..

I see. Would you have had a look at his code, then you would have noticed, that he codes as if D has already more than the proposed change incorporated: always two spaces around `..' while one space would suffice. Whereas in comments he follows the natural way of specifying slices: mostly without surrounding spaces. And you would have found only three lines, where no spaces are between numbers and `,': | ./phobos/std/date.d: [ 0,31,59,90,120,151,181,212,243,273,304,334 ]; | ./phobos/std/zlib.d: static ubyte[] data = [1,2,3,4,5,6,7,8,9,10]; | ./phobos/std/zlib.d: static ubyte[] data = [1,2,3,4,5,6,7,8,9,10]; As you can see a special case. Why do you think he avoids to run into problems between `.' versus `..' or `,'? So long.
Feb 11 2004
next sibling parent "davepermen" <davepermen hotmail.com> writes:
because he prefers that style?

"Manfred Nowak" <svv1999 hotmail.com> schrieb im Newsbeitrag
news:c0d8o6$2ab7$1 digitaldaemon.com...
 Sam McCall wrote:

 Um, I think it's because walter has more difficult issues to deal with
 than . versus ..

I see. Would you have had a look at his code, then you would have noticed, that he codes as if D has already more than the proposed change incorporated: always two spaces around `..' while one space would suffice. Whereas in comments he follows the natural way of specifying slices: mostly without surrounding spaces. And you would have found only three lines, where no spaces are between numbers and `,': | ./phobos/std/date.d: [ 0,31,59,90,120,151,181,212,243,273,304,334 ]; | ./phobos/std/zlib.d: static ubyte[] data = [1,2,3,4,5,6,7,8,9,10]; | ./phobos/std/zlib.d: static ubyte[] data = [1,2,3,4,5,6,7,8,9,10]; As you can see a special case. Why do you think he avoids to run into problems between `.' versus `..' or `,'? So long.

Feb 11 2004
prev sibling parent reply "Walter" <walter digitalmars.com> writes:
"Manfred Nowak" <svv1999 hotmail.com> wrote in message
news:c0d8o6$2ab7$1 digitaldaemon.com...
 Sam McCall wrote:

 Um, I think it's because walter has more difficult issues to deal with
 than . versus ..

I see. Would you have had a look at his code, then you would have noticed, that he codes as if D has already more than the proposed change incorporated: always two spaces around `..' while one space would suffice. Whereas in comments he follows the natural way of specifying slices: mostly without surrounding spaces.

Over the years I have slowly gravitated towards putting spaces around operators, and a space following the use of comma. It's just easier to read that way for me. It helps also to use a monospaced font rather than a proportional one, I can't read code in proportional fonts <g>. The problem in your example is one I had not thought of, though it's fixable by not allowing implicit conversions of floating point to ints, which I thought was already there but apparently not. I haven't used color syntax highlighting editors myself, but such should make such errors stand out like a neon sign, and should help a lot in eliminating such coding errors from the start.
Feb 12 2004
parent reply Manfred Nowak <svv1999 hotmail.com> writes:
Walter wrote:

[...]
 I haven't used color syntax highlighting editors myself, but such should
 make such errors stand out like a neon sign, and should help a lot in
 eliminating such coding errors from the start.

The problem is, that the so called syntax highlighters, as far as i have seen them, are only regular expression highlighters. So they can make standout `0..1' to something like `0##1', because the lack of a space to the left or right of `..'. But there is no regular expression to decide whether for example `[ 0.1 ]' is legal. So: if one makes it always standing out like `[ 0#1 ]' one will get false alarms and this will leed to ignoring them hint(chernobyl): | Defects of the system was that the designers did not foresee the awkward | and silly actions by the operators or it is like having no highlight at all. So long.
Feb 12 2004
next sibling parent reply "davepermen" <davepermen hotmail.com> writes:
syntax highlighting is like an enhancement over the actual displayed text.
you see it while you type, and realise if it's the right text. if not, you
correct it. with syntax highlighting, you directly see if the construct
you've written gets interpreted as the statement you wanted, a.k.a. if its
1..2 or 1.2, because you expect it to be eighter yellow, or
yellow-red-yellow, just as you expect to see the actual typing.

it's just enhanced visual control if what you write is what you thought.

thats all.

but thats much.

ever tried to code 100% blindly? i've had to do this once (just as a
test:D). it was rather irritating to not see what you type.

i don't get what you have against syntax highlighting. i simply don't get
it.

you should turn off your screen while you code. you have syntax-visualising
on. thats evil. you don't need that.

"Manfred Nowak" <svv1999 hotmail.com> schrieb im Newsbeitrag
news:c0hk0m$9af$1 digitaldaemon.com...
 Walter wrote:

 [...]
 I haven't used color syntax highlighting editors myself, but such should
 make such errors stand out like a neon sign, and should help a lot in
 eliminating such coding errors from the start.

The problem is, that the so called syntax highlighters, as far as i have seen them, are only regular expression highlighters. So they can make standout `0..1' to something like `0##1', because the lack of a space to the left or right of `..'. But there is no regular expression to decide whether for example `[ 0.1 ]' is legal. So: if one makes it always standing out like `[ 0#1 ]' one will get false alarms and this will leed to ignoring them hint(chernobyl): | Defects of the system was that the designers did not foresee the awkward | and silly actions by the operators or it is like having no highlight at all. So long.

Feb 13 2004
parent reply Manfred Nowak <svv1999 hotmail.com> writes:
"davepermen" wrote: 

[...]
 i don't get what you have against syntax highlighting. i simply don't
 get it.

I dont have anything against highlighting. I use it myself, If you want to see how, then have a look at the attached zipped html. However I do not type and watch as you do. And you have not proven, that everybody except me follows your style of typing. I gave the example of a data typist, who transforms data written on paper directly into code. He does not visually control what he types, thereby reaching for example a speed of 400 chars per minute. You have not argumented against that. I gave the example of randomly generated code, changed by one char at a critical place, which again is randomly choosen, and the unability of highlighting to visualize this change without having the original. You argumented, that you do not touch code, whos purpose is not known to you. I now hold against your argument, that for every maintenance programmer or successor in the job the already generated code is in the beginning nothing more than a bunch of random data, despite of the fact, that the purpose of the code has been made known to him. I extend my examples to the well known assignment statement in an if-clause `if(a=b)'. Hard to find it, once it is there, somebody said in another thread. dmd generates an error for it: `does not give a boolean'. Why this error message? According to your wording such an error message is needless, because highlighting assures that the code is as intended. So why an error message instead of an implicit cast to boolean? I drove this example together with your opinion of the power of higlighting to the limits: cancel all error messages in the compiler, that can be avoided by the suggested power of highlighting. You did not argument against this, but turned personal. Several times in my job I had debates with colleagues that did not lead to a final result. However, because of working for a common goal, i.e. being somewhere in the same hierarchy, we always were able to make up a document stating the different positions, agree about a regulation of the conflict, usually maintaining the status quo, agree about a time span for which this regulation should hold and assign the person/role responsible for the resumption of the whole matter. In the economics it is well known, why companies usual have hierarchical skeletons: partnerships are inefficient when trying to maximize the quotient of input, usual earned money, versus output, usually the work done. Do try to not fall into this hole. So long.
Feb 13 2004
next sibling parent reply "davepermen" <davepermen hotmail.com> writes:
before replying to all parts.. uh, what the *** is that code? is that d? os
the html ***ed? somehow i can't see anything except tons of garbage-tokens..

hm....

irritated. then again, i'm very tired:D

"Manfred Nowak" <svv1999 hotmail.com> schrieb im Newsbeitrag
news:Xns948EA270627ECsvv1999hotmailcom 127.0.0.1...
 "davepermen" wrote:

 [...]
 i don't get what you have against syntax highlighting. i simply don't
 get it.

I dont have anything against highlighting. I use it myself, If you want to see how, then have a look at the attached zipped html. However I do not type and watch as you do. And you have not proven, that everybody except me follows your style of typing. I gave the example of a data typist, who transforms data written on paper directly into code. He does not visually control what he types, thereby reaching for example a speed of 400 chars per minute. You have not argumented against that. I gave the example of randomly generated code, changed by one char at a critical place, which again is randomly choosen, and the unability of highlighting to visualize this change without having the original. You argumented, that you do not touch code, whos purpose is not known to you.

 now hold against your argument, that for every maintenance programmer or
 successor in the job the already generated code is in the beginning

 more than a bunch of random data, despite of the fact, that the purpose of
 the code has been made known to him.

 I extend my examples to the well known assignment statement in an

 `if(a=b)'. Hard to find it, once it is there, somebody said in another
 thread. dmd generates an error for it: `does not give a boolean'. Why this
 error message? According to your wording such an error message is

 because highlighting assures that the code is as intended. So why an error
 message instead of an implicit cast to boolean?

 I drove this example together with your opinion of the power of

 to the limits: cancel all error messages in the compiler, that can be
 avoided by the suggested power of highlighting. You did not argument
 against this, but turned personal.

 Several times in my job I had debates with colleagues that did not lead to
 a final result. However, because of working for a common goal, i.e. being
 somewhere in the same hierarchy, we always were able to make up a document
 stating the different positions, agree about a regulation of the conflict,
 usually maintaining the status quo, agree about a time span for which this
 regulation should hold and assign the person/role responsible for the
 resumption of the whole matter.

 In the economics it is well known, why companies usual have hierarchical
 skeletons: partnerships are inefficient when trying to maximize the
 quotient of input, usual earned money, versus output, usually the work
 done.

 Do try to not fall into this hole.

 So long.

Feb 13 2004
parent reply Manfred Nowak <svv1999 hotmail.com> writes:
davepermen wrote:

[...]
 somehow i can't see anything except tons of garbage-tokens..

You are right. It is systematically built garbage to test whether the highlighting works the way intended. So long.
Feb 13 2004
parent "davepermen" <davepermen hotmail.com> writes:
uhm.. i normally just take my code:D garbage enough, hehe

"Manfred Nowak" <svv1999 hotmail.com> schrieb im Newsbeitrag
news:c0k7b1$1dmo$1 digitaldaemon.com...
 davepermen wrote:

 [...]
 somehow i can't see anything except tons of garbage-tokens..

You are right. It is systematically built garbage to test whether the highlighting works the way intended. So long.

Feb 16 2004
prev sibling parent reply "davepermen" <davepermen hotmail.com> writes:
 I dont have anything against highlighting. I use it myself, If you want to
 see how, then have a look at the attached zipped html.

there are colours.. don't see much more, but thats enough to believe you:D
 However I do not type and watch as you do. And you have not proven, that
 everybody except me follows your style of typing.

you're actually the first i hear that doesn't look at what he types.. except newbies that have to look onto the keyboard. more in the next parts.
 I gave the example of a data typist, who transforms data written on paper
 directly into code. He does not visually control what he types, thereby
 reaching for example a speed of 400 chars per minute. You have not
 argumented against that.

i had to type from something else directly myself, too. and i was still able to reach high speed and check what i type at least once per line, or so. possibly, thats just me. a quick glance over, and yes, colours and the look as a whole looks correct, so lets go on.
 I gave the example of randomly generated code, changed by one char at a
 critical place, which again is randomly choosen, and the unability of
 highlighting to visualize this change without having the original. You
 argumented, that you do not touch code, whos purpose is not known to you.

 now hold against your argument, that for every maintenance programmer or
 successor in the job the already generated code is in the beginning

 more than a bunch of random data, despite of the fact, that the purpose of
 the code has been made known to him.

uhm.. okay.
 I extend my examples to the well known assignment statement in an

 `if(a=b)'. Hard to find it, once it is there, somebody said in another
 thread. dmd generates an error for it: `does not give a boolean'. Why this
 error message? According to your wording such an error message is

 because highlighting assures that the code is as intended. So why an error
 message instead of an implicit cast to boolean?

because its one of the most well known typos existing. your one isn't. and syntax highlighting normally doesn't highlight different operators in different colours. there would not be enough easy to distinguish colours. but yes, it's sorta "premature optimisation" walter did there. i do agree that there should be no implicit float to int cast for opIndex, possibly. this would be yet another such premature optimisation. but if there is an opIndex(real) and an opSclice(int,int), both statements, . and .. are legal. and it should not result in an error then. but i guess walters reasoning is, if we dissallow it there, technically we forbit ANY implicit casts to functions. operators and functions happen to be in two different places. operators simply get replaced by function calls. and functioncalls allow implicit float - int conversions. a way to do this, would be, to actually provide an implicit opIndex(real) wich throws. and only if you overwrite it, it would work. then again, it should "compile time throw" :D the if(a=b) is much more simple to detect, and much more often to happen, than the . .. issue. i guess thats why walter doesn't care about this one. not entierly fair, but understandable.
 I drove this example together with your opinion of the power of

 to the limits: cancel all error messages in the compiler, that can be
 avoided by the suggested power of highlighting. You did not argument
 against this, but turned personal.

my argument against this is just one: syntax highlighting only highlights correct code properly. incorrect code gets quickly visible. but more quickly, correctly compilable code gets visibly wrong. that means, typing errors that are no code errors. and those will always exist. i can't agrument against it, it is a balance act only.
 Several times in my job I had debates with colleagues that did not lead to
 a final result. However, because of working for a common goal, i.e. being
 somewhere in the same hierarchy, we always were able to make up a document
 stating the different positions, agree about a regulation of the conflict,
 usually maintaining the status quo, agree about a time span for which this
 regulation should hold and assign the person/role responsible for the
 resumption of the whole matter.

uh? :) you talk about an agree-on-disagreement thingy?
 In the economics it is well known, why companies usual have hierarchical
 skeletons: partnerships are inefficient when trying to maximize the
 quotient of input, usual earned money, versus output, usually the work
 done.

uhm i don't get that one.
 Do try to not fall into this hole.

wich one?
 So long.

how long? |-----------------------------------------THAT LONG-------------------------------------------| :D
Feb 13 2004
parent Manfred Nowak <svv1999 hotmail.com> writes:
davepermen wrote:

[...]
 my argument against this is just one:
 syntax highlighting only highlights correct code properly. incorrect code
 gets quickly visible.

Meanwhile Walter has decided to disallow implicit conversion from floatings to integers. Promptly two messages appeared, that such conversions were detected. For me an indication, that at least the used syntax highlighting was not able to prevent a possible desaster. So long.
Mar 09 2004
prev sibling parent "Walter" <walter digitalmars.com> writes:
"Manfred Nowak" <svv1999 hotmail.com> wrote in message
news:c0hk0m$9af$1 digitaldaemon.com...
 The problem is, that the so called syntax highlighters, as far as i have
 seen them, are only regular expression highlighters. So they can make
 standout `0..1' to something like `0##1', because the lack of a space to
 the left or right of `..'. But there is no regular expression to decide
 whether for example `[ 0.1 ]' is legal. So: if one makes it always
 standing out like `[ 0#1 ]' one will get false alarms and this will leed
 to ignoring them

A ".." is eminently recognizable, it will not be confused with a floating point embedded "." to a decent regular expression.
Feb 13 2004
prev sibling next sibling parent reply "C" <dont respond.com> writes:
Im not sure what your trying to change.  Your foo slicing is incorrect, your
saying its easy to overlook that ?  What do u propose ?

C


"Manfred Nowak" <svv1999 hotmail.com> wrote in message
news:c0bb5v$238e$1 digitaldaemon.com...
 void main()
 {
   char[4] foo= "1234";
   char[]  bar;

   bar.length= 5;
   bar[0..2]= foo[1.3];
   printf("%.*s\n", bar);
 }

 Would you also recognize it in millions of lines of code?

 So long.

Feb 10 2004
parent reply Roel Mathys <roel.mathys yucom.be> writes:
C wrote:
 Im not sure what your trying to change.  Your foo slicing is incorrect, your
 saying its easy to overlook that ?  What do u propose ?
 
 C
 
 
 "Manfred Nowak" <svv1999 hotmail.com> wrote in message
 news:c0bb5v$238e$1 digitaldaemon.com...
 
void main()
{
  char[4] foo= "1234";
  char[]  bar;

  bar.length= 5;
  bar[0..2]= foo[1.3];
  printf("%.*s\n", bar);
}

Would you also recognize it in millions of lines of code?

So long.


change? it'll be quite difficult, if I'm not mistaken this will compile, and the 1.3 will be implicitly casted to an int bye, roel
Feb 10 2004
parent "C" <dont respond.com> writes:
Oh i see , yowsa.  I thought the compiler would catch it ... hmm maybe
disallow implicit casting in index's , shrug.

C

"Roel Mathys" <roel.mathys yucom.be> wrote in message
news:c0bi43$2enf$1 digitaldaemon.com...
 C wrote:
 Im not sure what your trying to change.  Your foo slicing is incorrect,


 saying its easy to overlook that ?  What do u propose ?

 C


 "Manfred Nowak" <svv1999 hotmail.com> wrote in message
 news:c0bb5v$238e$1 digitaldaemon.com...

void main()
{
  char[4] foo= "1234";
  char[]  bar;

  bar.length= 5;
  bar[0..2]= foo[1.3];
  printf("%.*s\n", bar);
}

Would you also recognize it in millions of lines of code?

So long.


change? it'll be quite difficult, if I'm not mistaken this will compile, and the 1.3 will be implicitly casted to an int bye, roel

Feb 10 2004
prev sibling next sibling parent reply Juan C <Juan_member pathlink.com> writes:
In article <c0bb5v$238e$1 digitaldaemon.com>, Manfred Nowak says...
void main()
{
  char[4] foo= "1234";
  char[]  bar;

  bar.length= 5;
  bar[0..2]= foo[1.3];
  printf("%.*s\n", bar);
}

Would you also recognize it in millions of lines of code?

So long.

This would be why I was taught to _always_ put spaces between elements (tokens?): bar [ 0 .. 2 ] = foo [ 1.3 ] ; makes the situation much clearer, and bar [ 0 .. 2 ] = foo [ 1 . 3 ] ; is an error.
Feb 10 2004
parent reply Manfred Nowak <svv1999 hotmail.com> writes:
Juan C wrote:

[...]
 bar [ 0 .. 2 ] = foo [ 1.3 ] ;
 makes the situation much clearer, and 
 bar [ 0 .. 2 ] = foo [ 1 . 3 ] ;
 is an error.

This would not help you, when you want to type `[ 1.3 ]', but your keyboard spits out a `[ 1..3 ]' because of a temporary malfunction of the `.'-key. But a requirement of the language, that the `..' has to be preceeded or followed by whitespace would help you out. And in your case this requirement would not be of any hardship. So long.
Feb 10 2004
next sibling parent reply J C Calvarese <jcc7 cox.net> writes:
Manfred Nowak wrote:

 Juan C wrote:
 
 [...]
 
bar [ 0 .. 2 ] = foo [ 1.3 ] ;
makes the situation much clearer, and 
bar [ 0 .. 2 ] = foo [ 1 . 3 ] ;
is an error.

This would not help you, when you want to type `[ 1.3 ]', but your keyboard spits out a `[ 1..3 ]' because of a temporary malfunction of the `.'-key.

Seriously... If a person actually has this problem in Windows, he/she might get a benefit from turning on FilterKeys (if you want Windows to ignore brief or repeated keystrokes, or slow the repeat rate). If a person can't see the characters on the screen, he/she may want to adjust the monitor's resolution or change the font size in their editor. (If a person only wants to complain, then they can just complain.)
 But a requirement of the language, that the `..' has to be preceeded or
 followed by whitespace would help you out.
 
 And in your case this requirement would not be of any hardship.
 
 So long.

-- Justin http://jcc_7.tripod.com/d/
Feb 10 2004
parent reply Manfred Nowak <svv1999 hotmail.com> writes:
J C Calvarese wrote:

 Seriously...

 (If a person only wants to complain, then they can just complain.)

http://remus.rutgers.edu/~rhoads/Obfuscated_C/bright How quick can you tell the public, what the meaning of the comments in the example referenced above is? So long.
Feb 10 2004
next sibling parent "davepermen" <davepermen hotmail.com> writes:
uh, yeah, show obfuscated examples to show how stupid the language is.

thats what obfuscation is good for. showing that it doesn't matehr what,
where, how, and how ever the designers tried to prevent it. you can ALWAYS
write unreadable, ugly code.

you're babling.

though its fun babling.

"Manfred Nowak" <svv1999 hotmail.com> schrieb im Newsbeitrag
news:c0c1t1$7v5$1 digitaldaemon.com...
 J C Calvarese wrote:

 Seriously...

 (If a person only wants to complain, then they can just complain.)

http://remus.rutgers.edu/~rhoads/Obfuscated_C/bright How quick can you tell the public, what the meaning of the comments in the example referenced above is? So long.

Feb 10 2004
prev sibling next sibling parent J C Calvarese <jcc7 cox.net> writes:
Manfred Nowak wrote:
 J C Calvarese wrote:

 http://remus.rutgers.edu/~rhoads/Obfuscated_C/bright
 
 How quick can you tell the public, what the meaning of the comments in
 the example referenced above is?

Come on. He didn't even remove the whitespace. Obviously, it's a hex editor. Walter has promised that code like this will be impossible in D due to the lack of a preprocessor. By the way, which year did you win?
 
 So long.

-- Justin http://jcc_7.tripod.com/d/
Feb 10 2004
prev sibling parent reply Richard Krehbiel <rich kastle.com> writes:
Manfred Nowak wrote:
 J C Calvarese wrote:
 
 
Seriously...

[...]
(If a person only wants to complain, then they can just complain.)

http://remus.rutgers.edu/~rhoads/Obfuscated_C/bright How quick can you tell the public, what the meaning of the comments in the example referenced above is? So long.

Oh, be serious. I challenge you to design any kind of language (computer or otherwise) in which it's not possible to obfuscate, either accidentally or intentionally.
Feb 12 2004
next sibling parent Sean Kelly <sean ffwd.cx> writes:
Richard Krehbiel wrote:
 I challenge you to design any kind of language (computer or otherwise) 
 in which it's not possible to obfuscate, either accidentally or 
 intentionally.

How about LOGO? ;) Sean
Feb 12 2004
prev sibling parent reply Manfred Nowak <svv1999 hotmail.com> writes:
Richard Krehbiel wrote:

[...]
 any kind of language

That is easy. For example the languages recognized by the following regular expressions: 1) ^$ 2) ^0|1$ 3) ^1*$ Make a system fool proof, and only fools will use it. Have you obfuscated your own request? <g> So long.
Feb 12 2004
parent reply Richard Krehbiel <rich kastle.com> writes:
Manfred Nowak wrote:
 Richard Krehbiel wrote:
 
 [...]
 
any kind of language

[...] That is easy. For example the languages recognized by the following regular expressions: 1) ^$ 2) ^0|1$ 3) ^1*$ Make a system fool proof, and only fools will use it. Have you obfuscated your own request? <g>

So is describing a language that is resistant to obfuscation, you use *regular* *expressions*? I think your evidence supports my thesis. :-)
Feb 13 2004
parent Manfred Nowak <svv1999 hotmail.com> writes:
Richard Krehbiel wrote:

 So is describing a language that is resistant to obfuscation, you use 
 *regular* *expressions*?  I think your evidence supports my thesis.  :-)

%-6 What thesis? You like RE's? Then fetch this at a glance: ^i?1?[il0]?i+l?i.O*1*(i+[l1].?111[^il0]+O+|111*0[iO1]|i+l.+OO[il01]*1i?[ i01][Oi0]*0+i?|ll?01?.+[^i1]?[i01]*i?1|O?1?0+1?[^iOl]*i1?0?.?i?.|[Ol0]l1 [^Oi]*)*[Ol0]?l+i1?[Ol]+0[il]i?|[Ol0]?O[^i1](i*O1[^il01]O[iOl]*l+[Ol01]? 0?l+[^Ol1].?|lll+.O?iii*1+[^Oi1]?0?|0?[Oi01]?[il0]*|[Ol][i1]?l*.0+[^Oi0] *[i0]?[O01]*[il]([^Oi0]i[Ol01]1ll1l(O[^l01]*.?([^Oi0]+.[i01]?[Ol0]*l+O?[ Oil1]*l*O+i*OO?|.?i?[i1][^Oil]+O+i?0?.[Ol01].+[l01]?[^i0]|O*01?llli+0?.? 1?l+)?[01]?[O01]+[Ol0]*|[O01]*i*[l1]+|.*Ol?iii1*[il0]*0?|.+[^i01][Oi0]+[ Oi1].[^iOl]|[Ol0]+.l*10?([^il0]+0+[iO1]|OOO?l+[iOl][il][il1][il1]*.+|lO. ?[i1]?0?l*.[^l1][Oil]|[O0]*.+[^Oi01]*[iO1]0+[^Oi1]O.i?1O(i?l*0+|.?l.*.?1 *|0.[Oil]+[^iO]?O*00*l[01]+O?|.+[^il0]1?.?[Ol1]*i*|[^iOl]+iO..[Ol0]0O|0+ [^Ol1]O?i*)i*ll?[l01]?)[Ol].?[Oil0].i?l[^Ol01]?.1|0+.?[^il1][Oi0][Oil].O OO+1|1*O?.|111l[i1][l01]?O[Ol]|[O01]+.1.[l01]*.*[iO1][Ol0]?|iO*0?)*[^il0 ]+1[O01]?[^l01]?[iO0]*i*[i01]?[^Ol0]?[^l1]l*.?[^iOl1]+|l.*O0[il1]?.+|[iO l0]l[il]i*|1[iOl]O[^i0][il1]*ii*[l01]O?.[^iO01]i*|[^l01]1+.|O+.[Oi01]1+[ O1][Oil]?i*1*Oi?)+[il0]?O+[^Oi0]?ii*.|.[^i01]*[^i1]?O0+l?|O?[Oi0]+[Ol]+[ Oi1]0?)*[l1]+..+i+O[^Oi0]|i+.*[01]+[iO0](.+l+0(1+O[i1]1[O1][^Ol1]iO+.*.? |0i+[^i01]li*[^iOl1]+[Oi0][i0]+..|[il0][Ol1]?O?[l01][^01]*i*.OO[^il]*|[^ il1]+1+[iOl]il?0[iO1]+1O?0+|[O0][^Oil1]+l+(i[O01]+0?[O01][^O01]l.+1+.|O. ?l?[Ol1][il][iOl]+[^Oi]*1000+1?([^Ol]+l+.?[^l0][^Ol0]+il*0[^il0]+O*|1?[^ Ol]+llO1?|[iOl]1*0.*i[^iO0]*[i0]?[l01]*.[^i0]*1i+|l*[iOl]?.?[^iO]+0[Ol0] .*1+|.i?.*1+|i?0*.?.i|..*0*[^i1]i[Oi1][Oi1]+1?.+l+|O?[iOl1][^il01]+[iO0] ?l*.1*.?l[^O01]+|i*[i01][iO01]O+[01]+[Ol1]?11[iOl]+[O01]+0OO|[Oi01]*[^il 0]?[il1])?l?O0*[^l0]O+0O?1*l+111+00*l|.?1i*0?[Oi0]*O?[Ol1]+.*[Oi]0*[Ol0] +|0O1[iO1]l?[Oi1][Oi1]+|O.+.*10?.[^Ol1]?.[^l0]+(0*O+l?1+00+[^Ol0]*i|i[O1 ]*1*[Oil1]+O*.?ii*[O0]*|.lll.?11+O?.i*1+[iO01]?|.[Ol0]*[il1]+.?1l?[Ol1]1 +.+0+OOO|.Oi1[^l01]+i[il1]*[O01]?1i*(0[Oil0][01]*.?1[O0].*[^Ol1]+[O01][l 1]|[il0]+[l1]?[iO1]?|li+[iO]?|[l0]*.[il1]?l*|[il1]1[i01]*[O01]*.*[Oil]+l O+|l?O0+|[il]+[^iOl0]+l*[^i0]?1*[^Oi]*O[^iO01]?0[^Ol][^O01]*[^iOl]|01?l* [^O01]+0O+l+i*[^i0]*[i1]*1*O+(l[O01]*O?i0+|.+i+[^Oil1]+.|O+[l01]1i?1*.i? [O0]+0+[O01]+O+(O*l*[^Oil0]+1*.?[i01]i?0O|iO?.?iOlll?i?|[i01]+i[Oil]?0l1 |[Oi0]+[O1]O?ill?1+0*i*|i[iO]+1*[Ol01][^l1]+i+[Oi0].?0i*|l1?[Oi1]?.+[O1] [^i01]O?[i01]*l[il0]+)+1?[l0]*[O1]*[iO1]?[Ol1][Ol]?[Oi0]O?|[Oi1]?[^iO0][ iO1][Ol]+1[O01]?0?1?0O*iii|.[iOl]O?1O+[il01]1+i?l|0l?[O0]+|[il0][^Oil]+0 00?|1+.O?.*.*l+0*(.*[Oi1]?[iO0]?[i1]000?.?[Ol0]+|.?0[O01]lO?1*0lO+l+i?[^ iOl]|[iO0]*01?l+O[^O0]?l[^Oi1]?.*O[^Ol0]|i?[il0][iO](l+[^i01].*.?O?[Oi1] *|i+[il01]+[il1]+O?i.|O+l?0?[Oil]|[il]l.?O[Ol0]?|[^il]?[l0][^il01]l*[Oil 1]*i|[O0]+i+1*l+1+0*)*lll1?[^il0][Ol1][il0]?.?l*|l.[^Oi01][iOl1].[Ol0]*O ?[^il]?i1*O*|[il][^il1]+O|0*1+[^il0][^Oi]*|[^01]l?10|l?[iOl0]*[Oil]?111* O[Oi])?iiiO1*|10+i*)O+[O01].+i.+1)[i1]i*0?l0i.+[O01][il0].1*l?|.*l?0*1[0 1]*.?Ol*[i01][O01]|..+[^il1][Ol1]?[^l0]+(.+1?..[Oi01]+[Ol1]*000l*..+O+[^ Ol0]|0?l*0[^Ol0]+[il].*l?O?|[Ol]ii+[i1][iOl][Oi0]*.[i0]+[Oil1][^il0]+11? .|.*[^Oil]+l|O*i*l|[il]+.[01][iOl1]([l1]l?.?O*|[l0]?[O01]*[i01][il1]?|[^ Oil]*[Oil]+.*iiiO?.+.*0?[01]*[iOl1]*i[^Oi1]*(i+O*ll[i1]+O*i(.?[l1]*1?O+[ iOl]+.+[il1]?0?|[O1][i01]+11+0iO[Oil0]i1lll*|.*.+l[i0]?O+[^il0]l[iO1]?i* .+[l01]?|[O01]*li.?[i01].1?[Oil]+.)1[il]*[Oi01]?[Ol0]?l[Oi]?.*|[^l01]*.l +0+[Ol0]i?O[iO]*.*l+.|[^l01]*.+[Ol]*l+.O?0+[iOl1]O[^Oi1][O01]+[il0]|l[^O i0]?[^il01]+1+O*i*[iOl1]+.*|.[Oi1]*[i01]*i*1?[^l01]?OOO+i(O[^l0]*l+ii*[^ Ol0]*10O*[il0]*0*|l*OO+[O01]i(1*[^il1][^Oi]?[^l01]*|i+[Ol1]?[i01]+|[iO0] ?[Oil1].+[iOl0]+.1*[iO0]|0+ll1.*)?.*.[il0][Oi]*l.*1+[l01]*O1.+|[Ol0]+.*. ?[i01]*([il1]?.*O.?|000.[^Oi1]O.*[i0]+[Ol0]?0O[l1]?|0*..?l+[l1]+..?[Ol0] +[O01]?)?[^Ol0]?[Oi0].?|l+O?[^iOl][^l01]1+[O1]+[l0]+OO[Oi1].?|O*1+0+|[Oi 1]?ii?[Ol1]+[^Ol0]*[O01]?l+1+[Ol1]*.+|...?O*0l111*l?[^O01].[^l1]+(i*l.?[ ^iO0][l0]?[^iO0]+|.1+0O+1O*l[O01]|[Oil]?..+O(1+[O01]*l+.?[^Ol01]O.0O*l*1 *0+([iO0][iO0]?O*1?i?l*.?O[01][iO1][i01]|i[^i01]*[iOl0].?[il01]+[l1]1+.? i|[^il01]?[iO1]0[^i01][^Oi01]i+[^Ol1]|i.1?l*O*.*1*i111?|.l+[^i01]*.+O*[0 1]+0+[^Oi1].|.[^Oi0]l*[il01]+.[^Oil]i?[^Ol1]?OOO.|[il1][l01][l01]?[O01]? [^il1]+[il01]0[Ol0]+[^il1]+[^Oi0]i*|ll+O*[^l01]?.?|[^Ol01]+.+[^l0])lll?i [^iOl]+[i01]+0+|O*[iOl]ll*O+1?l[^l01]|i*.?O?i0?.|.*il*..+O+.[i0]?i..|[O0 1]*O[Oi0]+[Oi1]?1?ll[^iOl1]OOO[l01]+1+i(.[Oi01]?iii+[^01]+1*[i01]*i[Ol01 ]*[O0]l?[l0]*|1O?l*OO*l0*[^iO]..?.*i*|O0[^Ol1].+[l01][l01]?[l01]+[il]?[O l0]+lli?|[l1]*i[^Ol1]*1|[^Ol0]?l+Oi.*l[^i01]+.OOl+i?O+|[Oi]iii?[^iO0]OOO 0?[Oi1]1+i+|[iO01][i1][^i01]1i+[Ol1]?0*|.i?[l1]*0?O?.?1+.*l1?|[^O01]?[iO 1]?.?0|[iOl0][Oil]i1..+)*.111?i?l*Oiii*111)*[iOl]O0[i01]+O.0[Oil1]|i?.+. ?OO1?i+[^Oil][il1]?|ll?[^il1]*[^Oil1]?0+[^il0].?[O0].)[^Ol]l*[l01][^il0] +.*0+O)?[iO1]?[^il0]?1+.?.?O*[il1]*l*1+0+l|[^O1]+1l+[^Ol0].[^Ol]+.*O+[iO ]*|0+ii?.*O?[^Oil0]*1[iO0]?.+|.*111[Oi1]i*)*.?1+[iO1]O.*00lll+)+l*[O01]. *|[Ol]O1?illl1|lll?1+[Oil0]?.?[Ol1]*i+0[Oi1]+1*[i1]+l?.)?i+[^l01]+[01]+| [i01]?1?[il1]?l*OO)+.11+0+i1+[l1]i*|0O.|[^Ol01]?i+l?[Oil0]|.+[Ol1]+1*il+ i+..+1+0*[Ol1]1+)1*[l1]?0+[^il01]+[il1]*.[Ol1]?i?)*[i01]*[O01][^Oi]+l?|[ ^iOl1]OOO+[^il0]+1O*[01][Oi0]?i+|0l0[O1]+1+il*[^iO1]0[il0]+|O0?i*011[l1] [l01]?[^iO1]?[Oi01]*O+l|[i01]?O+1*[^il]*|i?.?[^il]+[^l1]+|[O01]+[O01]*OO O[^i0]+.+i+l?0*[01][^01]O[i01]?|[^il0][^i0]11[^il0][iO1]*[^iO1]+[l01].*[ iOl][iO1]0*[^il0]?)+l+[l01]0|[Ol1]+000+i11?iO?.?[il0][i0]+[i01].*(0*[il1 ]?O[Oil]?[iO0]*.?.+[il]?i+O|[i01]0+.l*111?[^i1]+[Oil1]+i*[Oil1]*l[^Ol01] [il1]|1[i0]?l[Oi0]iii+O1?|.?[iOl]i*.?[Oi1]?[^iO1]+|[O1]+[l0][Ol1]O+i[Oi1 ]?0*O+|0l?1+[^Ol0][O01]+[Oi0]+lO*i*lll*)[O0]1il*|[i01]iii*lll*i+.*([iOl1 ]1.i?l?[l0]*i*l.+|[i01]O?[il0]+0?[^i0]|l*1*[Oi0]?0i*.?0+[^i1]+|i1*[^O0]? l?|l+[^il1]?O?[Oil]?0ii?[iO0]?O?([^iOl0]1?[^Ol0]?OOO[Ol01][l01][iO1]?i*l ?[^l01]?|O[iO]*[Ol1]?0([iOl0]i1+|ll[O0]?1?l?OOO+0[^O0]?.+l|O*[^O1]+[iO01 ]*[il1]+[01]0?|l.+O?.+l*i0+[i01].?[iOl0].1|[^il0]?1?[^Ol01].+(0O[Ol0].0? |l0[Oi0].+O*|0+[^i01]?[^il01]?[Oil]+.?l?[O0]1l+[il0]|[^Oil1]?l[iOl0]?|1O [^O0]111[Ol0]*[Ol1]+000|[01][O01][^il01]+[O01]0+[^iOl]*O*[il]+.?0O.|O?[^ l01]+.?[il01].+1+0*|[^i0][O01]?i..O0+[^il1][^l1]l[il0]+|[^il0]*[i01][i01 ]*l0+i111?.+(l*.1O+01O*[Oi0]i?1+|l+0*i.+[^iOl0]0?i*.|[^O01].+[iO1]+i?0*[ ^Ol0]1[il01]i1(.+[i01]11l|[^Ol0]?[O01]?[^Oil]l?.*O+[^Oi]l|1?0*l*[iOl]*[i 1]?[Ol0]?|0i*O+.l+[i0]?[iO01]*1?[^l01]O1?|i+1l+.|O+iO+[l01]i+1[iO]?O[Ol0 ])[l01]+0+.*i*OO*l0*|i[^Oil0]*[i01]?l0?i0*O?|[i01].1?l+[Ol1]+|.[^Ol1]*[O 1]*[^il1]i*[O0]l|[^Ol1]?0[i01]*[^il0]+O?[Ol1][^iO1]?|[i01]i*0?[Oi]+[l0]? 1?[i01]+[^iO]?[^Ol0]+|0.1*.*.*lll*|0l*000?[^O0])?O0?[il0]*11[Ol]+.?[iOl1 ][il0]+[l1]i*)*[Oil1]+[^Ol0]?i[^Oil]+[Ol1].l?OO0?[il]?|[i01]i*l[^Ol1]*|0 0l[^O01].[^il]*[il0]*1*|1*[^O1][Ol]?0?[Ol]*i[il01]+[^i01]O01*|l?[Ol1]*i1 O+1?.|l?.?.?[^i01]+)000+1[^iOl1]?ll*1?[iO1][Ol0].+l[i01]+.*|10O?.+)i?.?[ i01]?O+i?OO?0|.+0?.?li+[^iOl][^O01]*0+.O?0*|[Oi1]?O?1?i*.+.[^01].+[Ol0]* (0?[^Oi0]+l+1|.+i?[il01]O[iO1].+[^iO0][iOl1]?iii*l+i.*|l?i?0?.*.|[^Ol1]0 .[Ol1]*[O01]*O0[il0][iO1]?|i[^O01]?l?1+[iO1]?)?Ol[i01]i[^Ol][Ol1]|[i01]O +li0.)*0O?[O1][^Oi0]+[^il][i0]0?i?.+.+.O|1?l[^O01]i+[01]*[Oi1]+1[il0]?[^ iO]l*(l*i+.[l01]0*[01]?l?|[^l01]+[O0]O*1?i+[^iO0][O01].*[^Ol0]1+lll*([il 0]+.[il1][l01][O1][i01](0+1+..*|..+10?.[01]li?[^i0]*|i+OO+[^il]?([^Ol][^ iO1]*O*0.l?.?[O0]+.|[Ol1]1OOO+1?0*|OO*1*O*[il0][l1]*[^Ol1][^il0]1[01]?|[ il1]?l+.?.[Ol0]0*.|0+i.[^Ol1]?|l*0*.1*0?.[il]?[^l01]+OOO.*[Ol]+|1[Oil]+. *[Oi1][l01]*[il0]?.+.[il01].0*[iO0]*)[^l1][iO0]*i+0OOO[^01]*11|l[iO0][^O l0]?.+[01]?1[l1]*0?11*|1[i01]*[^iOl]?O?.?.l)l1+[^Ol1].*[i01]*l[O0]|.[^i0 ]*.1|1O*i+O?[il0][Ol]+|O1*0+O?1+0+.|[^l01]1*l+[^iO0]i*.1(.+1[Oi0][Ol1][i 01]+[O01]i|.+1*.?|[il1]?.*111O|i*[iO0][O01]*1?l?[^Ol0][^Ol1]*[O1]+1l*i*| [^Oi01]?..[il0]?[il][^iO0]+l?0|.+[O01]+[Oi1][O01]*l?.[Ol0]1*[l0][Oi1]?l? |[^Ol1]?ii?1*|10+[iO1]*l+0.?(l*O[^Ol0]?[^iO0]i+ll[iO1]+O?1[O1]*[iOl0]|[i 01]+[^Oi1]1*0+[O0]?.+l+[iO1]+[Oi0]ii*[^Ol0]?|0*.+.*O1?[^Ol1]?l+O.?..|[i1 ][^l01]*1[i01]?0l*[l01]0l[Ol0]?O[l0]*|1+[iOl][^Ol1]?[01]+0+O+1O?[l01]?l? [^il][Oil]*|.+[Ol1]Ol*O0*[il1]*[Oi1]?[Ol0]*|[il1]O+[il1].?1?O?l+0[O01]+( i*1?[il0]|[il0][i01]+[il]i?.*[Ol1]*0?..*[il1]*|i[i0]?.[l01]0*[Ol0][iO0]( 0l*[^i01]*[iOl]+1i|.*[^Oi1]?1?|i1?[Oi0]l)+.*[i01][iO1]?1?|[^O01]+i+O+[Ol 1][^il1]?l[il][^Ol01]|0?i+0*1*.+|i*l[Ol0][Oil]|[^il01]O*.*[^iO1]+.+i+|0+ O+[^l01]*i.+01[Ol0]?0i?)[^Ol]*.l[iO01]*)i[O01][iOl0]*|.+O?1+[^O0]?[O1][l 01]?.?[Oil]*[iO0]*[l01][^iOl])?[i01]*0i[^l0]0|[^iO]?i+.?[i01]?1?|[01]*0? i[iO0]*[^l0][O1]*.l1*|1+O[il1]*[^O01]+0i+([il01][^il1]?[iO]?O+[^l01]*[O0 ]+1+.il?.|Oiiil[^O0]i+10.?[iO]+l*[O01]+|l*[iO01]O?111+.|[il]il?[^iOl0]+) ?1+[^l01][^Oi0]|i*OO[^Oil]*1+l+00?[^iO1][^01]*([i01]?Oi+[^Oi0]?1|l*O+..? i0+l?|i?[^Ol1]?ll+O?10*[Ol0]?1+[Oi][Oi1]+lOOO|l+0.O|[O1]+li.?0.l?|.[Ol0] +[l1]?110iii+[i01]?[^Oil]O?0O+|O?1l*1|0*i*1[^il1]+|O.?.*ii?O?[^O01]*[Ol1 ]+l?O1|[Ol0]*1+[^il]+.*([^il0][iO01]+0+.iii+0|.*.1*[Oil]0?i*[^i0]*1(O+00 .|[il0]O+[l01]+|0+[Oi0]+.[iO])0?111?[i01]|.*[^i01][^l1]1*[il1]+[^l01]+([ i01]+[^il1]+0?|1*[il1][il0]?[^Ol1].[i01]?i?OO[O01]+|Ol?0|i*0?.[Ol1]+i+1+ .+(.+0.*[l01]?1*O+[il1]*[01]|ll+[Oi01][O01]O*|lll?.*i*lO|.?[^Oi0]+1?[l01 ]+[O1][Oi1][i01][Oil1]?0*|[Ol1]*i*[01]+..+1[iO0]*[^il1].[01][^i01]*[l01] ?(i.+[Ol0][^l1]*|l+0.[Ol0]*O+li01+|lO+[Ol01]?ii[Ol]?[Ol0]+O?[^l0]*.*0?i* |0?iii?[l1]*1[il01]O*(l+[O0]+i?|1lll[iO0]*[^il]?O?l*O?.*l*0|l+OOO?i?[^O0 1][i0]|i[^il1]?l+[i01]?.1i[Oi]*1*[l1]+|[il1]l?1.[Oi1]+[Oil][^il1]+.?|[01 ]1*[iO0]+)..l1110+1*|O[Oi]11?iOOO.*i+1il+|0O.1*[il01]+|[iOl]?[^Ol1]i*[Ol ]*[^Ol01]*.0*.+l[^iOl]*[O0]|1l+i+[i0])O*[01]1|l*.+i+.+[^i01]O?l+i*[il1]l 0|1?i+[iOl]?[Oil]+[il]*|111*O+0*O1+(iO[l0][Ol1]*[iO].?[^O01]00+[l1]*iO[i l]*|[iO1]l*[^il0]?[il]*|l[il0]?[Ol0]?[i01]?.1*[il]|[l1]?O*l*.*[^O0]+i*|O [^il01]*[il0]*i?.[^i01]?[l01]0?l|O[il1]0?[iO1][Ol0]lll0*[^Ol1]lll*|O?i*O *0[Ol0]l*1[Oil]+i?O*|.+l?i+([O01]+[Oi]?.?[il0]+[l1]*|[^O1]+[Oil1]l.+[^il 1]?i*[Ol1]?O*|[^O01]i*[^i01]+[O0]O+[^il0]*.+1?0i?1+|i+ll[^i1]O?[il0]1[^i l0]+[^Ol1]+i+OOO?|1+[il0]?[Ol01]+[Ol0]+[il1]0|00.*1+0)l+[^i1]*[O01]*[Oil ]?[Ol]+[Oil][i01][l01][Oi0]*.*Oi?|[il0]+.?0l?i[il0]+0?[01]*[i0]*.?[Ol1]l *|O?0O*[O0]?[^Oi0]*[l01]+[Oi]l*)?[iO1]+.*[Oil0]?i?OOi.?)1[l0]+[^iO0]i.?[ i0]+O?|[^i01]+01+00?.|[^i01]?O[O1]+0|l+[^i1]*[Oi01])[^il0]+l+[^Ol01]1+|1 0+l.+1+OO[l0][Oil]?[l01]?[^il01]?|O?.[iO1]0+ii?[O01]*[Ol1]1l+.i*)*iO+[i0 ]1[^i0]*l)[l1]?l1?)[Oil0]?i?1?.*[i1]?[Oi0]*|O?0?[il0]+1O+[^i0]+1+i[iOl1] *0+|1?[^il01]?0+1[Oi0]*.+O[Oi1]?|[i1]+l*.[i01]*[l01]0+[il01]+l?.[i1]+|1* [iO1]*i?1*0..[^iOl]*[^iO0]*|[Oi1]i?l*.[l01]+[il0]+0111[il0]?[^i01][l01][ i1]([^Ol1]*[^Oil1]+.?.?[O01]i*l*0.1*0+|ii.*O1*[O0]i[Ol0]+[Ol1]+|[^Ol1]?[ il0]+.?[Oi01]0+|[Ol0]?.[iO1]?1+[O01]|..*O0+[Oi01]+l*[O0]i[^O1]|.?OOO?[Ol 0]+[iO01]+[i01]?1?[^Oi01].*i*1*l?.).*.?[^i1]|[^il1]?.+i?[l0]|..*[i01]?.? .[il0]*O)*[i01]+0+[^il0]?[il01]*|[Oi1]*.?i+.[Oil0]+1+[il0]*.(i+0[^i1]?10 ?O[il0]?l[^i01]+[l01]?|.?[^iO0]+..+OO01*|[Ol]i?lO+.*|l?0+.111O+[^Ol01]+[ Oi01]?|i*[l0]*l+.11+[Ol0][^Oi1]?|l?0+l.?1*00+)+[O01]+O*0+l[l01]i*|li+0+l *.O?.?.0+(i0?[Oi0]*1?[Oil0]+.?.+O?[il0].+1.+|[il1]+.?.?[Ol0]*i?[Ol0]1*|1 ?l.O?[i0]*|l+[Ol0].)?[i01]O11*0*O?0*[Ol1]+O[^O01]?|[Ol0]*i.[^O01]*1*l?[^ il01]+[il1]1O?.+[^il01]*([Ol0]l*O.[01]?l|.Oli[Oi1][il1]1?|i*.[Ol1]?|[i0] 1*i*0.+lO*0+OO*[i01]+|[l01]*.?1O?|[O01]*.+[i0]+O..0|O[l0]*[il1]?..1[^Ol1 ]?[Ol01]l1?|.[^l0]?0l+O*)+[il1]+[l01]?i1*0*l.O[i1]10?.?|[^O0]*i?[^i01]O0 [iOl](.l[O01]?[Oi1]?.Ol+.+01+l([il1]?..+l[O0]1l?.+.i?|i*[i01]+l[^O1]O*[i Ol1]*(l?[l1][il01]*Oi+|[^iOl]+[^Ol0]*O*1?[Ol0]O+[Oil]?[O01]?1i?|i+.+[Ol] [^O01]?[^l01]+0.lll1?[l0]*OOO?1+)+[01].+[Ol1][iOl]?[^iOl]|i[Ol]*.[i0]0+[ i1]+O?.*0*[^iO0]+i*0|[Ol1]+lli?[Oil]O[Ol01]*|0*11i.[iOl]?[iO1]*OOO*.*0[i l0]*O+|1O+i[^O1])*1O+1.*iii.?1|.1?[^il1]?|iii?..?|[O01]?1?[^il0]*[i0]?l? |0*.*l*i?|0+i.[O0]?[i1]+111ll.?|[^iO01]*O*1?0[Ol0]*l?O?[^O1]0.|[iO1]*i?1 O?[O1]?[i01]i?.*lO[i1]+|[^iOl0]+1*iii.?.?l?[O0]+[Ol]*([iO0]*.+[Ol1]?O[Ol 0][Oil][^il1]1?i[^iO01]1?[O0]*([il0]i?O0.|010O0+l|.+[i0]01[^iO][^iO0]*[^ l01][^Oi1]O*[Ol01]|.+O1l[^i01]*.*[iO01]?|[il0]l*[iO1]1?[Ol1][^iOl]+|[iO0 ][^iOl]?i0*[Ol0]*[O1]|.+i*[^i01]*1+0+[Ol1]..l+O+|[il01]+.*[Oi0][^iO0]i|i O[i1]+.*[^Oi0].?[O01]i[i1]|00l1+l?1*i*OO+i*[^Ol1]*[Oi0]*)*[i1]?il[^O01]? 1+.[^Oil1]+[il1]|[O01]?.0*|l+[i01]+i*l?[^il0][l01]+0?O[^iOl1]*|.*1[Oi0]0 ?|[^l01]?O+[^il1][i01]+0+[i01]i0*i[Oil1][Ol0][iO0]+|[^Ol]+i?.+|.0+..*.[O 01][^i01]ll+11[^Ol01]*[Oil0]?|l*[^il0]?.*|l*iO?l+i*[l0][Ol0]+O([Oi01]+.+ [il1]+[^O01]*(1[i01][iO]+O+i*l+|111?i*1+i?[O0]O|.O+i[^Ol01]|[^O0]ii?0[Oi l1]|OO[i0]?l+Ol+[Ol01]+[Oi0][il1]+0?.[l01][^il]+|i+[l0]+0+iO.?|1?[i01].* l[01]?[i0]?1*[O1]+0+li+)+[^i0]?[iO01]+O+l|[^il0]+.[Ol0]+|00+.1*O*.+i1?[O i01]*O0|1*.*[il1][l1]+.*O?|l*[i01]0?[i01]*|O?[iO01]?[i01].*[il1]?[Oil0][ iO01][il1][^O0]i*.+)?[^iO0]?[O0]?[Oi0]llli[^O0]+[^il1]1?[il1]*)?.+[iO0]O +l?)*1[Ol]+O+[Oil]+l+i+l?[iO1]i+[l01]*|[Oi0]iOOOl00l0*[iO1][i1]?O*i.?(O* [il0].*1.+iilO?lll.?[^l1]*1?(.1*[iO01]l.1+l?|[l01]+0[il1]?[^Ol0]?ii0[^il 0]1[^O0][l1][iOl]+|.*O+[Oi]?.[Oi0]?[Ol0]+.l?.?|[l1]?1O+l?1+|[^il1]i*1?0* [^Ol]?)+0O1*.01?|l+0.1[iO0]?0+|l?.?i+[i1]0+[^il]?[O01]?O+[i0][Oi01]*[^iO 1]?1*|[^i01]+[l01]+.O.?0|[O01]*[il1]l?.*.?|.l+[il0]*[il]+i+|0+[01]+[l1]l [Ol0]*O?[il01]*1*|11+..*.i+[Oi]*OO+.+[^Oi0]?)?[iO0].*0?|.[^01]0+[i01]?([ ^Ol1][^il01]1i?O*[O1]+1+|.0lll?.+O*1*|111[^Oil1][iO]l1?ll+[l0]?|[Ol1]?i+ [i01]?[il1]l[^iOl][i0]+1+(i+0?i?0.1[Ol1]?[^iO0]|[Ol1]?l[i01]*O*1[^Oil][i 1]i*11*|[i01]?.?[l01]+[l1]*i+|[^O01]*[il1]*[^O0]?i*[Oil]0l*Ol?1+|[O01][i l01]O[iOl]?i1[Ol1]*|l*iOO1l+1?|[Ol0]*[iOl]?.1+.+[^O01]l+1*Oiii?[Ol1]+|[l 0]*OO*[^O1]*l*O?i+[^i1]?|..?0?[il0]?.+)*[^il0]*[^il1]+1?.li1)1l?O*[il01] *[O01]+|[il01]*0?l?[il1][iO1]i?0.lO1*(O.*00[l1]+lO+l*[il0]+.+|i+[Oi]*[Oi l]+O[^O01]*|iiO+[Ol1]?i*.+.O*i*1?i*|i?0+O+[Oil0]*1+01*O1.+.|[^l01]?.*i+. *.[il1]l+[iO1]*.?[^l01]*i*l?|i[O0]0+[^Ol0]*[O1]*O[^iO1]+.[Oi][^Oil]+0?)[ iOl0]*[i1].*[Ol0]?[^l0]?.?11[il0]+O[Oil][Oil0]|i?1*[l0](00*l+i*[Ol0]O[Ol ].?111[^iO01]|.0+.?[^O01]?[^il0]*l?O?[Ol1]0?|.0.?11*[iOl]O?|[il0]l+[il0] *[Oi01][l01]Ol[iOl0][Ol0]+0[Oi0]?|[l01]+OOO+1+[Ol01]?[iO1][iO0]*[^l01]+O *.+.+i|iii*OO?.[i0].[^iOl]|[Ol01]?0?lil?1?0*.[^O0]*)*O[^l1]+[il0]0?[O0]+ .+1i[Oi1]1[^O0]+[^Oi1]*|iiOOO+.?(lil+|[iOl]?OO+0?l0*O?i[^Oil0]*[^l0][Oil 0]|[^iO0][il1][^O1]+[Oil]*|1+[Oil]*[i01]?O1.l?[il0]1|[Ol]1i[Oil]+|[iO]+. +[il0]?.?i.?0.*.*.?O+)[l01][il1]+[^Ol01]*.*l+[i0].|O+[^iO1][iO0](l*[^iO] *[iOl1]?[O01]*Oi*..*.?l|[^O01]..+[^Ol0]i?l+[01]*i+0*l?|[O01]+0*1l0*O+|[O l1]l[^il0][Ol]+0*[^Oil1]+[^Ol1]+iii1*00+[l01][Ol]?|1.?01O*.?1*.i*l?.+|0? .?[^Oi][Ol1]+Oi[^i0]|[^Ol0][^i01]+[i01][^O0]O*l*.?.[il1]?[^O0].*)*[Oil]+ 0001?i*0+|1+[i01][^iO0]iO*0+O*(i.*O|[^Oi]?l?[O01]?1*ll?.1?[il0].+.?|il+[ i1]i.+00+[^O01]?l*0+1?O([Oil]..?[Ol01].i+[O0]10O+[Oil][Oi1]?|.?1+O*.i[iO 01]l[il0][^Oi0]*[i01]*i0([^O1]+l+..+0*.l+|[iO]?.1O[il0]?l[i0]?i[Ol1]?l+| i+O1*|[Ol0]*00*O?i0?O|.*i1[iO01][^O0]?i[l01]?.+|[Ol01]+[Ol1]+1?O*1*[Oil1 ].[^O01]O|[^Oil0].i+[iOl]O.+.?i*00[^il]+[il0]+l|[i0]0i*.*010+1[Oi]+[l1][ l1][il0]*|.+1O[il01]?|0+.*[^Ol1]?1?.?[l0]+O+)?1?O[^i01]+0[il]?i*|0[O0]+i +|.*[Oil0]*1+[iOl1]l?.*[il0]*0+.?O*.+[^Oil]*|[i01]?[Ol0]*O*[iO]+[Oil1]?. *l[il1]+|[^il1].O+1+[^Ol0]l.[^l01]O[^Oi1]l*0?|...0[iO1]+i*)?[i01]?[il]+l +.+1[iOl].[il]+0?.[^Oi1]*l*|0Olll*|[i1]*1OO*[^Ol0]*[^O0](.*[l01]?1[il1]* .[i01]+i|[O0]+[^i01]+[O0]*[l1][^i1]|[^il1]1.*i1l|[l1][^Oil0]+.+[^Ol01]*0 1i+O|.[Ol1]?.*[Oi1][l1]+.*O[Oi0]?l|OOO?[l01]*[^iOl].+|l?.?[^iO]*[il0]0*i iOl+)?i?0i0?)O.i*[O0].?1+i.*l1?0*O?|l[O0]?[Ol1]+O(1+l.+iii+1ii*1+iO*0+i| .?[i01]+l1li+[il1]l*|O0+iO?.*l000[^Oi1]+1[^i01]?0[^Ol01]([^Ol0]?1+[^Ol0] *.*0i*[il1]|[Oil]*0i[l01]+[Oi1]?[^iO1][il01]*[Ol0]([O01]*0+[iO1]+l+O*[l0 1]?.[^il01]?[l1]+1.+.|[l1]i*[O0]O?0..[^il1][Ol0]*[il0]?1l?|O[Ol1]*000[Ol 1]+[l1]?i[O01]+l[^il1]|O+lO[i0]1*[iO1]?.O+1[Ol1]*|O+[O01]l*.[Oil1]1*[Oi0 ]i*.|[Ol1]?1?.?.i+.+l[O01]+i?|[il0]?[iOl][Ol][i01]?[O0]?[Oi1]*.+O[^il1]+ 1*)*l?.[^il1].?|i?[i01]?O[l01]*0*|[Oil0]10?[Oi][^l0]11*OO[l01]*[il1]*)?[ Ol1]0?O[^O01]*|[^O01]?[Ol1][^il1]O|.[^l01]?[^l01]+[Oi01]?[i0][l0]?[Ol0]* 0?l+([Oi0]*.+[l1]+[^l1]+0[^O0]+[i01]+[iOl]?[il1]*l+i(1?[O01]?[Ol1]?[O01] *[O0]0?[Oi1]([iO01]*[il1][^l01]O1*[l1]l[01]+|..?[Ol01][Ol01]+.i?1*.|[l01 ]*il*i*.O*|iO*0*.?|l+.?.1+[^il0][i1][l0][Oil]+O1*0*)+.i*1+[il01]*[^i1]?i +|[^l1][l01]+[O1]+|O+1[Ol1]?[Oil][i01][^iOl]?.?O|[il1]*[^Ol0]+1?l[il1]?[ O01]0[l01][O0]O|Oi+[Oi1]?1[O01]*[il1]+0?|llOO?[Ol]*lll+).[Oil1]0.l1+0?|l *10?.*1+.[^O0]+0+1[Oil]?i?1*|i[^Ol0]*[^Ol0][^O01]*0?[^i0]1|[Oil0]?1?O[l1 ]?|[O01]?.[Ol0]+.?[^O1][iO1]?)l?i+O|0[^Oil0]+1?i*[O01]+0[^iO01][i01]i?|. [Oi1]*l[iO]|.i+[^Oi1][iOl]1|[01]*.+[^il1][i1]+10i?O+)1[iO0]*[Ol01]i+l[i0 1]i?1*0|O?.lll*.0*[Oi]?l0*[Ol0]*O?[Oi01]([il1]i+.?.*1.*[iOl1]+[iO1]*[l1] .?0*[^Ol0]+(Ol?0*1*[^i0]*.0O[i0][^il1]|[l0]+1O[Oi0]*[^Ol1]?l0O+.?i?|.[il ]?0i?1[il]*[il1]l+0*.*|1*[^il]?.[Ol1]+O?|[^i1]*[il1]1|l.*[Ol0]0*)*[l01]? [O01]+.|[i01]i+.[Oi0]?.*.?O0?[il1]*[^O01]|l+O*.i*[O0]?[il0][Oil0]lll?[^i 0][Ol]?(.l01+l?|0.[iO][O01]|[^Ol1]*[Ol1][Ol1][il0]+[O01]iil?.[^iO1]i+.?0 ?|O+0?[il1].?[^01]*i*1*[^Ol1].+)?[^l1][il1]?l+[Oil1]*1O+[^iO]?[i01]*[l0] 0O*)+.i+0?.*i+OOO+[^i01]1i?[Ol1][^l01]+|lll?O*l1(1?O?i|lO?[il0][Ol0]+[Oi 0][^O0]?.+[l01]*lll?|1+iii*1.?0[O1]*|O+l+[^il1]*0|[^iO]lO?[Oil0]*.?l+.*[ il0]i.?[il1]?[i01]?|.*[^Ol1]+[iOl]?[^il01]?|l+i+0[^i01]+l?O.+l|1[^l0][^i l01]+.|i?[i01]?000+).?1?O?.+l+i?l+[Oil1]*0+i+1?|[^iO01]?[^il0]+0i*01*.O. 1([^Oi0]OOO[O01][^O0][iOl1]+[O0]+[^Ol1]?|l[iOl]?[01]+1.*[^Ol1]+[^Oi0]+[^ iO1]*([iOl].[l1][Ol1]|Oi*l[O1]*.*1O.?[iO0]+[iO0]?|O?i+0l?O*i+[^il1]+|.Ol 1|[^il]...[l1]?[^Ol1]..?OO.*i*|l?i+1*O*i+[^O0]*O0?.*|[Ol0]?O*[Ol1]l[^Ol1 ]+[^iO0]?.+i1(0[Ol1]+.[l01]i+[^l01]*.*1?i*|OO0*.[l0]*[Ol]*[l01]*O1?i[l01 ][O01]|i*[il0]?1.+0?.|.1?.O+i?[Ol01]+.+0|i111+[l1]i*l[^il01][l1][O1]|[l1 ]+00[l01]*O*1l+0+1|l?[Oil0]0+.?Oi*l*O*)[Oil]+1[Oi01]O[i01]?[Ol0]?[Ol0]*1 *[^l1]0?.|O+.i+.+0.O*([^Ol1]O[i0]00*.O[^il0]|1[il1]+[^Oi]+|[Oi0]?[^O01]+ 1*i?[Oi1]?.0?lOl|[^Oil]0+O+|.+[^i1]l[^O01])0?O?[^Oil]?1[il0]+[^iO]0?l?.i *[Oil]+)?[Ol1]+[Ol1][Ol1]l1*O?[Oi1].[Ol1]?0+|[^Ol]?.l?O[^iOl1]+i?|[i01]? i01?.*i+|O1[i01]lll*i+l1*[^Oil]|..*[^iOl]+0[iOl1]?i|..l*1i?[O0]+Oi*(.+[^ i01]+O*[O01][Ol1]?11?.+Oi?|[Oil1]l+.+O0?1*[^iO0]i+[il1]*[Oi1]+[^O1]?|[i0 1][^l01]*1+0+i?.l|OO?01*.*i+O[^Ol]1?0OOO?[iO01]?|[Oi1]?[il0]*[il1]O)+11[ i01][O1]?0+.l+.[^il0][O0]O|10?i?)*[i01]111l?0?|O+0*[O01]+O*[il01]ii[01]? [^il1]0*O.+1*(1+[il0]*0*[^Ol1]*ii*O?|[^iO1]?1*i+l.[^iO0].+[^Oil1]1([il01 ].?OOO+[l01]?[i01]?([^il1].[l0]*1|0+O+[Oil].*0l*[Oil]?|lll?1[^Ol]Olli?|l +.?[^i01]*[iO1]1*0+l0+.+O+1|O?[^iOl1][i1]0+[iO])+0*i+.+1?[iOl1]*[il1]+[i l0]?|i...l*i.OOO?0*|l[O1]*111+l[Oil].*[^il0][^l0]*1|i*[Oi0]*.?l?|01.+[^O 0][l01]+.?[il1]l|1*l*1[iOl]l+|O?1?i?.O*[i01]i?1+[O1]+O+1+|[il0]+[il0]+O? l?.1*i?0[O1]+|[il01].l1[l01]*i[iO0]O+.*0[iO]+OOO?|O?.?[^Ol0]*1l+[Oil1])* i.O*[Ol1]?0*|[^Ol]?O*1i1Ol*0O+l*[^i0]|.?1?l+[O01]*.?111?l(iO+l?[Ol1]+[^i l0]?[Ol1]+|0O?[i0]01*[i01]|.00*l?|.?.[Ol0][l0]O+.|.O[Ol0]*i*l*O|[^Ol0]*. +l.+.i.1+|O+[^il1]1*[^l01]+[i01]?[i01]+0[Ol]*O0.|1110.*1[^Ol1][Ol01]i[O1 ]?[^01]+|..OOO*[i01]*lll?11*)+0*[^iOl]+1+.[il1]|0?1ii+)?Ol0[iOl]?[^l1]l[ i01]*|i+.*[^il0]+l*([il1][l01]+l+i*[Oi0]+|1[^i1]*.[l0]+il*|[Ol01]?Oll?O[ iO0]+0*[^l1]?[il0])*O*[l1]i[^i0]+.*.?0*1|[O1]?[iOl0][^Oil1]*1*[^l0](l.*O |i?[Ol]?l?[O01]|i?l[Ol1]+O1*|l?iii?l.[^iO1][iOl]+O?[O01]*|.*i1+|[^Ol0]*l *[Oi0]?|O+.[l01]1+.+0?.+O|[^O0]+[^il1]ii*OiOi*O0[Oi0]*i.+|[iO0]+0O+[Oi0] ?i?|[Ol01]*ll+1*[il1]*l1+[i01]*)?[^O01]?[^l01]+[Ol01]+[iOl0]1[Ol0]O+[^il 1].*|[^il0]*l*.+[i01]+.?[^i01]*0?l[iO]*[iOl](0*[i01]+.l[O01]O+1+[Ol01].* [i01].+[^01]|i.[i01]+.0+l*|[il01][01]?O+iii*..1[Ol0]?[Ol]|[i01]+[il0]*i? 1?O*[i0]?1[iO]*[O01]?[Ol0][O0]|[iO1]1+0?[^il01]*1[l01])+O*.*i[iO1]?|[l01 ]l?0?1000?O?[^Ol1].?0i?(0[Oi]+[^O0]+1110O+0l?|[Ol0]+[Ol1]?[il]*10?[^O0]+ [Oi]*[^Oi0]*1.|[Oi0]*O+.[^Oil]*[^l01]i[il1]+)?l?[^il]+10[Oi01]O.?|O+l*[^ l01]?i?1?[O01]+([^Ol0]*O*.*ii?[l01]*[^Oi1]+[O0]?1i[^il0]+[^Ol]+|0?[Oil]+ [01]iii1.[O1]l[^Ol1][^i0]+[^l1]+.|O+lO+0[Ol0]*[il1].*.*|O*liOl+)[^l01]*[ Oil]*[Ol1]?[Ol1]1?O.[Oil]lll*O?l*11*|.?i.?[Oil1]?l*.?[il1]*0(iii*[i01]*[ ^Oil1]+|[l0]*[O01]*[il1]*[il0]*|[^Ol1]+000*i[Ol0]?l+[^Ol1]0*|[i0][Ol0]+[ ^l0]?O+1*i*[Oi0].+[Oil]?[il0]*|[^il1]*1?0?1*[il01]l|l*[il][Ol]i?[iO01]+O ..?|..[i1]?1[01])+[il1]?[iO1]*[Ol1]+l*i[^Ol1]+1[il1]+l*[^Ol]11|l1.(1?.?0 00|1[O0]?l+[O1]?.O[^il1]*l+.|Ol?[i01]000+|[il0]+O*[Ol0]i+[^il1]|.?[il0]i [l1]+[Oi1]1+O+0+[Oi0]+.|li0[Ol0]1?|.i0.+O+[i01]1+[01]+l?[il0]0*|l?[^01]+ .)+[l01][Ol1]*[Oi0]|l+i?.+l?10*(.*l+[Ol]*|1?[O01].*0*1*il|[01]?l*i*O11?O [^il0]*|[^iO0]+[i0]?i.0*[^iO][Oil]?[Ol01]?[l0]?1+|O*0+O*1+.O?l?1?|Oi?[O0 ]?0O+l[iO1][l1]+1|[il0]l[^Ol0]+ii[iOl0]?Ol+1?.|[^Ol0][^l0]*[i01][il1]+O+ 1i|i*[01]?1[^l0]*0?O?.[^l01]([Oi1]l*.?1[Oi1]+|1[Ol01]*lllOl?O?|[O1]1[^il 1]*.?i|.[^il1]+0[O0]?i|iO+.[iO1][O1]+.*l[i0]|Oi.111*)+i*.[iO0]+0+[il1][^ Oil]?O?.*l*O.?.|.[^Oi]Ol*0?O?[l1]?.+0+..*.)+0.+O*[^Oil][Ol1]?0+i*O+|i+Ol iO10i+[i1][Ol1][l1]*(1?0*.O?i*.*0?i[Ol1]OOO?0*1|0?1+[^l01]+|[i01].[Ol01] [iO1][il0]*1*.?0[l01]?.[Ol1]|l+[O01][i01]+O[i0]+0+[^iO0]*i+1?[^il1]+l*[^ iO0]+|l*i+1?OO?0+i?|[O1][^i1]+OiO.+0?i+|.[^l1]?[il0]?O*.l*.+i[O0]+[^01]? O?|[Ol]*1?.?[^iO0]+|iii*0iO0[^O01]+1*0?i*0.*[iOl]|1[il]*l)O..?1iO[iO01]? [iO0]*0$ So long.
Feb 13 2004
prev sibling parent reply "Walter" <walter digitalmars.com> writes:
"Manfred Nowak" <svv1999 hotmail.com> wrote in message
news:c0bspq$313t$1 digitaldaemon.com...
 This would not help you, when you want to type `[ 1.3 ]', but your
 keyboard spits out a `[ 1..3 ]' because of a temporary malfunction of the
 `.'-key.

I've had keyboards that started doing the stuttering after years of use. Stuttering makes them unusable for anything, not just D. They go right in the trash, and I pull out a new one (they're $9.95 each). In fact, I keep a couple of new spares in the basement for just such an emergency <g>.
Feb 12 2004
next sibling parent reply "Serge K" <skarebo programmer.net> writes:
 This would not help you, when you want to type `[ 1.3 ]', but your
 keyboard spits out a `[ 1..3 ]' because of a temporary malfunction of the
 `.'-key.

I've had keyboards that started doing the stuttering after years of use. Stuttering makes them unusable for anything, not just D. They go right in the trash, and I pull out a new one (they're $9.95 each). In fact, I keep a couple of new spares in the basement for just such an emergency <g>.

Ok, we can fight ".." problem with syntax highlighting and spare keyboard. But it's not the only critical security hole in the D language specifications. While we at it, let's address another serious problem. In many fonts the glyphs for capital "O" and zero "0" looks exactly the same. The glyphs for capital "I", small "l" and number "1" quite often looks just too damn similar. And the worst part - if those questionable characters are in the identifier's name, even syntax highlighting is powerless to warn you about imminent disaster. One possible solution is to disallow capital "O", "I" and small "l" in the source code. (zero ("0") and one ("1") cannot be removed easily since they are necessary for numeric literals) This would make programmer's life a lot safer, but one would have to rename "Object". Perhaps, Qbject? Than we will have QQ language. More reasonable solution is to disallow overloaded identifiers different only by the questionable characters. The conflicts should be resolved by explicitly qualifying scope, like stream.In(...) and math.ln(...) Now, if the font size is small enough, () and {}may look the same... P.S Hell, I've just tried 4pt size font. I could not distinguish the characters at all! Perhaps, we should switch to writing programs in Morse code. - -- -- --- -- --- - --- -- --
Feb 12 2004
next sibling parent J C Calvarese <jcc7 cox.net> writes:
Serge K wrote:
 P.S
 Hell, I've just tried 4pt size font. I could not distinguish the characters at
all!
 Perhaps, we should switch to writing programs in Morse code.
  - -- -- ---   -- --- -  --- -- --
 

-- Justin http://jcc_7.tripod.com/d/
Feb 12 2004
prev sibling next sibling parent Derek Parnell <Derek.Parnell No.Spam> writes:
On Thu, 12 Feb 2004 21:13:49 -0800 (02/13/04 16:13:49)
, Serge K <skarebo programmer.net> wrote:

 This would not help you, when you want to type `[ 1.3 ]', but your
 keyboard spits out a `[ 1..3 ]' because of a temporary malfunction of 

 `.'-key.

I've had keyboards that started doing the stuttering after years of use. Stuttering makes them unusable for anything, not just D. They go right in the trash, and I pull out a new one (they're $9.95 each). In fact, I keep a couple of new spares in the basement for just such an emergency <g>.

Ok, we can fight ".." problem with syntax highlighting and spare keyboard. But it's not the only critical security hole in the D language specifications. While we at it, let's address another serious problem. In many fonts the glyphs for capital "O" and zero "0" looks exactly the same. The glyphs for capital "I", small "l" and number "1" quite often looks just too damn similar. And the worst part - if those questionable characters are in the identifier's name, even syntax highlighting is powerless to warn you about imminent disaster. One possible solution is to disallow capital "O", "I" and small "l" in the source code. (zero ("0") and one ("1") cannot be removed easily since they are necessary for numeric literals) This would make programmer's life a lot safer, but one would have to rename "Object". Perhaps, Qbject? Than we will have QQ language. More reasonable solution is to disallow overloaded identifiers different only by the questionable characters. The conflicts should be resolved by explicitly qualifying scope, like stream.In(...) and math.ln(...) Now, if the font size is small enough, () and {}may look the same... P.S Hell, I've just tried 4pt size font. I could not distinguish the characters at all! Perhaps, we should switch to writing programs in Morse code. - -- -- --- -- --- - --- -- --

April comes early this year ;-) -- Derek
Feb 12 2004
prev sibling next sibling parent Manfred Nowak <svv1999 hotmail.com> writes:
On Thu, 12 Feb 2004 21:13:49 -0800, Serge K wrote:

[...]
 Ok, we can fight ".." problem with syntax highlighting and spare keyboard.

ButUseTheRlghT0ne: hTTp://wWw.kaUfmann.NO/roLanD/DVorak/inDex.html [...]
 The glyphs for capital "I", small "l" and number "1" quite often
 looks just too damn similar.

ThlSIstEchn1qUe2lfR0M; hTtP://minDprOD.cOm/uNmAINnAmInG.HTml
 P.S

  - -- -- ---   -- --- -  --- -- --

S010ng
Feb 12 2004
prev sibling next sibling parent "Walter" <walter digitalmars.com> writes:
"Serge K" <skarebo programmer.net> wrote in message
news:c0hmev$dob$1 digitaldaemon.com...
 In many fonts the glyphs for capital "O" and zero "0" looks exactly the

 The glyphs for capital "I", small "l" and number "1" quite often looks

 And the worst part - if those questionable characters are in the

 even syntax highlighting is powerless to warn you about imminent disaster.
 One possible solution is to disallow capital "O", "I" and small "l" in the

 (zero ("0") and one ("1") cannot be removed easily since they are

Reminds me of somebody's Obfuscated C Code entry <g>.
Feb 13 2004
prev sibling parent reply Karl Bochert <kbochert copper.net> writes:
 
 In many fonts the glyphs for capital "O" and zero "0" looks exactly the same.
 The glyphs for capital "I", small "l" and number "1" quite often looks just
too damn similar.
 And the worst part - if those questionable characters are in the identifier's
name,
 even syntax highlighting is powerless to warn you about imminent disaster.

An obvious help (for Windows, at least) is to use a font designed for programming. See www.catexa.com for a mono-spaced font similar to courier that distinguishes 1, l, 0 O It also has outsize punctuation so that perios, colons, braces etc. are visible Karl Bochert
Feb 15 2004
parent reply Derek Parnell <Derek.Parnell No.Spam> writes:
On Mon, 16 Feb 2004 04:30:07 GMT (02/16/04 15:30:07)
, Karl Bochert <kbochert copper.net> wrote:

 In many fonts the glyphs for capital "O" and zero "0" looks exactly the 
 same.
 The glyphs for capital "I", small "l" and number "1" quite often looks 
 just too damn similar.
 And the worst part - if those questionable characters are in the 
 identifier's name,
 even syntax highlighting is powerless to warn you about imminent 
 disaster.

An obvious help (for Windows, at least) is to use a font designed for programming. See www.catexa.com for a mono-spaced font similar to courier that distinguishes 1, l, 0 O It also has outsize punctuation so that perios, colons, braces etc. are visible

Pity that catexa's been hacked though. -- Derek
Feb 15 2004
next sibling parent Derek Parnell <Derek.Parnell No.Spam> writes:
On Mon, 16 Feb 2004 16:55:03 +1100 (02/16/04 16:55:03)
, Derek Parnell <Derek.Parnell No.Spam> wrote:

 On Mon, 16 Feb 2004 04:30:07 GMT (02/16/04 15:30:07)
 , Karl Bochert <kbochert copper.net> wrote:

 In many fonts the glyphs for capital "O" and zero "0" looks exactly 
 the same.
 The glyphs for capital "I", small "l" and number "1" quite often looks 
 just too damn similar.
 And the worst part - if those questionable characters are in the 
 identifier's name,
 even syntax highlighting is powerless to warn you about imminent 
 disaster.

An obvious help (for Windows, at least) is to use a font designed for programming. See www.catexa.com for a mono-spaced font similar to courier that distinguishes 1, l, 0 O It also has outsize punctuation so that perios, colons, braces etc. are visible

Pity that catexa's been hacked though.

There's another copy of these fonts at http://www.rapideuphoria.com/kfonts.zip -- Derek
Feb 15 2004
prev sibling parent Karl Bochert <kbochert copper.net> writes:
On Mon, 16 Feb 2004 16:55:03 +1100, Derek Parnell <Derek.Parnell No.Spam> wrote:
 On Mon, 16 Feb 2004 04:30:07 GMT (02/16/04 15:30:07)
 , Karl Bochert <kbochert copper.net> wrote:
 
 An obvious help (for Windows, at least) is to use a font designed for 
 programming.
 See
 www.catexa.com
 for a mono-spaced font similar to courier that distinguishes 1, l, 0 O
 It also has outsize punctuation so that perios, colons, braces etc. are
 visible

Pity that catexa's been hacked though. -- Derek

Thanks for the info -- its been fixed. Apparently the Ivision BB has a leak, and I had used identical passwords for it and my site. Live long and learn little Karl Bochert
Feb 16 2004
prev sibling parent Manfred Nowak <svv1999 hotmail.com> writes:
Walter wrote:

[...]
 for just such an emergency <g>.

Yeah. Stomp me into the dust. It was a bad example anyway. Highlighting can make such errors stand out easily. So long.
Feb 14 2004
prev sibling parent "Walter" <walter digitalmars.com> writes:
I've changed the language so that floating point values are no longer
implicitly converted to integral types.

"Manfred Nowak" <svv1999 hotmail.com> wrote in message
news:c0bb5v$238e$1 digitaldaemon.com...
 void main()
 {
   char[4] foo= "1234";
   char[]  bar;

   bar.length= 5;
   bar[0..2]= foo[1.3];
   printf("%.*s\n", bar);
 }

 Would you also recognize it in millions of lines of code?

 So long.

Feb 24 2004