473,839 Members | 1,542 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

Boost process and C

Hi,

Is there any group in the manner of the C++ Boost group that works on
the evolution of the C language? Or is there any group that performs an
equivalent function?

Thanks,
-vs

Apr 29 '06
335 11909
Paul Hsieh wrote:
Well, there is also no group for discussing the *practice*
of C programming,
If your OS conforms to POSIX, then you can discuss it in
comp.unix.progr ammer

If your OS is Linux, then also try comp.os.linux.d evelopment.apps
the implementation of C compilers/libraries,
You can discuss this in comp.compilers and on the GCC mailing list.
common C compilers and their extensions,
You can discuss this in your platform's group, e.g. comp.unix.progr ammer
and comp.os.linux.d evelopment.apps
algorithms in C or C variants either.


comp.unix.progr ammer, comp.os.linux.d evelopment.apps , comp.programmin g

Paul, could you stop sounding like you have no clue about Usenet?
(I know it's not the case.)
May 1 '06 #101
On 2006-05-01, Keith Thompson <ks***@mib.or g> wrote:
"Herbert Rosenau" <os****@pc-rosenau.de> writes:
On Sat, 29 Apr 2006 13:05:21 UTC, jacob navia <ja***@jacob.re mcomp.fr>
wrote: [...]
The problem with ultra FAT languages like C++ is their incredible
complexity!

Constructors and destructors?

Who needs them?


YOU, because you needs operator overloading, that requires constuctors
to define the operators to overload and destructors to undefine them.


Not at all. Operator overloading is (or can be) nothing more than
syntactic sugar, allowing an operator symbol to be used as a function
name.


This is true, but you do need to predefine what's I suppose a template
for the prototype of the function it's syntactic sugar for. Probably:

struct T operator+(struc t T a, struct T b);
struct T operator=(struc t T a);

For something like struct Complex this would be fine, but for a large or
complex T, or one which is subject to some specialized kind of
memory-management, you might not choose to define your functions like
this, but more likely like this:

void operator+(struc t T *result,
const struct T* a, const struct T *b);

With operator overloading supported in the language you lose the ability
to distinguish... until you put that ability back by letting you
redefine constructors and destructors, and adding references to the
language.
There no necessary connection to constructors and destructors. (The
1983 version of Ada had operator overloading but did not directly
support object orientation.)
I'm not familiar with Ada, but I think the key point is whether the
language has explicit or implicit memory management.

In C, builtin types are passed around by value and space for them
doesn't need to be allocated or freed. Operators work well with such
types.

The easiest way to "bolt on" operator overloading is to stick with C's
current system in which values of variables of user-defined types are
entire instances that are implicitly "memcpy"d.

But often C programmers implement their own reference-counting systems,
garbage collectors, specialized allocators, etc., and manage pointers to
objects using functions into these explicit memory managers. How do you
fit this under the very strict interface of overloaded operators? The
same way you fit anything under a strict interface-- with callbacks,
i.e. "constructo rs". Suddenly you're reinventing C++.

In languages with automatic memory management in which the values of
variables are consistently references to automatically allocated and
de-allocated objects, user-defined types already behave a lot more like
builtin types, and so operator overloading fits in much more easily.
I believe that, theoretically, a form of operator overloading could be
added to C without bringing in any of the other baggage of C++.


You are right, it could, but it would be of limited utility. The most
common use I've ever found for operator overloading is for matrix
arithmetic, where the matrices are potentially very large, or may be
stored in unusual ways (storing two triangular matrices in one square
array is common for example). For this the code that adds and multiplies
the matrices has to be dovetailed in with the code that knows how to
allocate, deallocate, and find the data. You need a similar level of
automation for both kinds of activity for operator overloading to be
really useful.
May 1 '06 #102
On 2006-04-30, jacob navia <ja***@jacob.re mcomp.fr> wrote:
Ben C a écrit :
Some of the side-effects are less agreeable though.

You end up needing something like C++ references, in order to provide a
way of overloading the operators in expressions like a = b = c.

In expressions like a = b + c, where a, b and c are all large instances,
you really want to copy the result of b + c directly into a. What you
end up with is operator+(b, c) returning an instance, and then
operator=(a, b) copying the instance into a. Compilers have clever ways
to work around this, while still having to call the constructor for the
temporary b + c and a's assignment operator (or copy ctor if it's an
initialization) , as if it were doing add followed by copy, since those
could have arbitrary sideeffects.

Since there are no constructors neither copy constructors in C the
optimization is muc h simpler than in C++.

True, we need the references, what is a good improvement anyway.


Not at all! In C the fact that variables always "refer" directly to
values (and so we use pointers explicitly) is a good, consistent system.

References in C++ are a necessary evil introduced in the first place, as
far as I can see, to support operator overloading.

I disagree here by the way with the advice of the C++ FAQ (which IIRC
says "use references where you can, pointers where you have to").

[snip
In "higher-level" languages
which are further abstracted from the implementation, it's attractive to
remove this distinction-- Python for example achieves this well. But I'm
not convinced of the wisdom of the hybrid, C with operator overloading.

I am certain that the conservative option just puts brakes to the
development of the language


I agree. You need brakes.

Having said that I'm all for trying these things out in projects like
lcc-win32.

In the case of C, whenever I think about something "why didn't they do
it this way instead?", I invariably come to realize eventually that they
knew what they were doing and did it the right way in the first place.
It's well-designed. I'm not saying take it for granted, but don't assume
it's /easy/ to improve it.
May 1 '06 #103
Ben C a écrit :
On 2006-05-01, Keith Thompson <ks***@mib.or g> wrote:
"Herbert Rosenau" <os****@pc-rosenau.de> writes:
On Sat, 29 Apr 2006 13:05:21 UTC, jacob navia <ja***@jacob.re mcomp.fr>
wrote:
[...]
The problem with ultra FAT languages like C++ is their incredible
complexit y!

Constructor s and destructors?

Who needs them?

YOU, because you needs operator overloading, that requires constuctors
to define the operators to overload and destructors to undefine them.


Not at all. Operator overloading is (or can be) nothing more than
syntactic sugar, allowing an operator symbol to be used as a function
name.

This is true, but you do need to predefine what's I suppose a template
for the prototype of the function it's syntactic sugar for. Probably:

struct T operator+(struc t T a, struct T b);
struct T operator=(struc t T a);

For something like struct Complex this would be fine, but for a large or
complex T, or one which is subject to some specialized kind of
memory-management, you might not choose to define your functions like
this, but more likely like this:

void operator+(struc t T *result,
const struct T* a, const struct T *b);


lcc-win32 does this automatically already. It converts all functions
that return a sructure by value from:
TYPE fn(...)

to

void fn(TYPE *result,...);

The only thing is that the user has no access to "result", the first
argument that is automatically supplied by the system. Workarounds
exists but they are not pretty (in the existing implementation)
With operator overloading supported in the language you lose the ability
to distinguish... until you put that ability back by letting you
redefine constructors and destructors, and adding references to the
language.

There no necessary connection to constructors and destructors. (The
1983 version of Ada had operator overloading but did not directly
support object orientation.)

I'm not familiar with Ada, but I think the key point is whether the
language has explicit or implicit memory management.

In C, builtin types are passed around by value and space for them
doesn't need to be allocated or freed. Operators work well with such
types.

The easiest way to "bolt on" operator overloading is to stick with C's
current system in which values of variables of user-defined types are
entire instances that are implicitly "memcpy"d.


lcc-win32 ofers a second alternative: the garbage collector, where all
this problems of allocation/deallocation are solved automatically. This
may or may be not a good solution, depends on your memory usage. In any
case it should be considered when speaking about memory allocation issues.
But often C programmers implement their own reference-counting systems,
garbage collectors, specialized allocators, etc., and manage pointers to
objects using functions into these explicit memory managers. How do you
fit this under the very strict interface of overloaded operators? The
same way you fit anything under a strict interface-- with callbacks,
i.e. "constructo rs". Suddenly you're reinventing C++.

No, we do not need constructors if overloaded operators receive an
already built object, and receive a pointer to the result.

Note that operator overloading is needed for two main applications:

1) Defining a new kind of numeric types.
2) Defining access for a new kind of array.

Period. Other usage is possible, but it is not the main thrust of the
implementation.
In languages with automatic memory management in which the values of
variables are consistently references to automatically allocated and
de-allocated objects, user-defined types already behave a lot more like
builtin types, and so operator overloading fits in much more easily.


lcc-win32 does not allow operator overloading for operations that are
already "taken" by the language. For instance pointer subtraction is
well defined in C, so it is not possible to define:

TYPE operator-(TYPE *a,TYPE *b);

You have to either define:

TYPE operator-(TYPE a,TYPE b);

or

TYPE operator-(TYPE &a,TYPE &b);

if you accept references into the lanuage.

I believe that, theoretically, a form of operator overloading could be
added to C without bringing in any of the other baggage of C++.

You are right, it could, but it would be of limited utility. The most
common use I've ever found for operator overloading is for matrix
arithmetic, where the matrices are potentially very large, or may be
stored in unusual ways (storing two triangular matrices in one square
array is common for example). For this the code that adds and multiplies
the matrices has to be dovetailed in with the code that knows how to
allocate, deallocate, and find the data. You need a similar level of
automation for both kinds of activity for operator overloading to be
really useful.


There is a work around for this problem that is also used in C++:

All operators for the elementary operators return a dummy result that
just records the type of operation and the arguments in a list.

The overloaded operator assignment then, parses the whole expression and
directs the operations to be realized.

But those are very sophisticated usages. Much simpler is the ability to
add numeric types into the language without so much pain as in C right now.

And, above all, keeping the whole stuff SIMPLE.

jacob
May 1 '06 #104
Chris Hills schrieb:
In article <4b************ *@individual.ne t>, Ian Collins <ian-
ne**@hotmail.co m> writes
Richard Heathfield wrote:
jacob navia said:

We had this discussion already. I started yet another discussion about
the need for a portable standard container library several times and the
answers were:

<various answers snipped>

The standards comitee doesn't even accept simple data structures like
strings. Lists, flexible arrays, stacks, queues, etc etc must be done
over and over, and are kept OUTSIDE the standard library.

Why?

Well, okay, let's just say for the sake of argument that we're going to add
standard data structure APIs to C.

First step - decide what's in and what's out. Let battle commence.

When you eventually get the blood out of the carpet, the second step is to
agree on an interface. That will take forever and a day.

Third step - get people to use your shiny new standard container library.
Except that they won't, of course, because they will all just carry on
using whatever it is that they're using right now.


The C++ committee did it, is it too hard for C to do the same?


Most users of C want a compact and efficient language. Many have
complained that they don't want all the "new" features in C99 hence the
reason why 7 years on there have been very few implementations of 99

I can't understand why people want to add a lot of C++ features to C. If
you really need those features use C++


IMO, a feasible way to go are _additional_ libraries not belonging to
the standard library as such but standardised and respected by further
language development nonetheless. I do not know if and how to
subdivide into packages giving enough freedom to the user or how to
make enough people agree on one API (in a more civilised way than a
cudgel with nails driven through) but I think that enough people
will migrate to the standardised container or standardised better
string libraries -- if these are well-tested and widely available.
The cost of porting to the next version of your library of choice or
another platform where this library is not available or does not
work as expected due to non-portable assumptions probably will even
bring new versions of existing software to use these libraries.

New language features are a completely different things.
I have seen some useful suggestions from Paul Hsieh, Jacob Navia, and
others which at least give ideas what to discuss or at least what to
provide a standardised/uniform way for to handle language extensions
in these directions -- this is IMO within the role of the committee
and certainly more useful than just ignoring such suggestions.
I am not sure whether I like the idea of a plethora of TRs describing
how to extend C in this direction or that but this at least provides
a way for the language to grow in an orderly way. If every compiler
provider builds his or her own baroque structures on top of C, then
this does nothing to improve portability and may be worse in the long
run.
In this way, much as people could choose from a library selection,
they could choose from extensions with standardised semantics and
say "We need basic C plus the list, set, and graph containers plus
the extension for coroutines" or whatever.

The library part of this suggestion is harmless enough and I really
think it could be beneficial in the long run.
The standardised extension part is something that should be discussed
in earnest. Maybe it would be even a good idea to review C99 under
this point of view: "_Complex, _Bool -> extension", "designated
initializers, VLAs, variable macro argument lists, compound literals,
inline -> base language", "tgmath, fenv, iso646, -> library extension",
.... I did not think much about this, so a debate about this on-the-fly
classification list is not helpful just now.

And yes, maybe a third newsgroup, comp.whatever.c .something, may be
in order as a place for the community to produce input for such
things.
Cheers
Michael
--
E-Mail: Mine is an /at/ gmx /dot/ de address.
May 1 '06 #105
Richard Bos a écrit :
Operator overloading... yeurgh. What does random_struct_x *=
random_union_y + random_integer_ z; _do_ in the first place?
int128 operator*=(int1 28 a,int128 b);

Well that should multiply a*b and assign the result to a, returning a,
I suppose. What is so weird about that?
References... yikes! When I want my object to change behind my back
without me even being aware of it, I'll use first-generation FORTRAN and
change the value of 3, thank you very much.
References precisely do NOT change at all. They always point to the same
object! It is NOW That pointers can be changed behind your back to point
to something else. References avoid that!

References in the lcc-win32 implementation are exactly equivalent to
pointers with two restrictions:
1) they can't be NULL
2) They are assigned immediately after their definition and point always
to the same object.
3) When using them, they are always immediately dereferenced.

MYSTRUCT Lstruct // a global structure

void fn(void)
{
MSTRUCT &a = Lstruct;

Now, "a" is a pointer that will always point to Lstruct and always
be dereferenced when it is used:

a.one_field = 23;

instead of
a->one_field = 23; // Not needed since "a" is
// always dereferenced.

Not very difficult to understand. Besides those two properties they are
exactly like any other pointer and keep the advantage of passing things
around with a pointer and not by value.
STL... bah. When I want to use a linked list, I want to use _this_
linked list which is tailored to _this_ application, not some Extruded
Datatype Product which may be "good enough" for most applications and
has precisely the wrong properties for mine.

Well, then GO ON USING _that_ list tailored to _that_ application.

Other people that recognize that a single linked list will be always a
single linked list in all cases will be HAPPY TO LEAVE THAT CODING to
some library function that is portable across all implementations .
C is simple, clean and efficient. Let's keep it that way.


Nobody is changing that, as I have stressed over and over. But it is
impossible to define new numeric types and new kind of arrays in C, so,
sorry, this hole should be closed, that is all.

We need length prefixed strings, and the ability to define new numeric
types and operations for them.
May 1 '06 #106
jacob navia <ja***@jacob.re mcomp.fr> wrote:
Richard Bos a écrit :
Operator overloading... yeurgh. What does random_struct_x *=
random_union_y + random_integer_ z; _do_ in the first place?
int128 operator*=(int1 28 a,int128 b);

Well that should multiply a*b and assign the result to a, returning a,
I suppose. What is so weird about that?


That's not overloading. In a real C compiler, those would be int_128t's,
a normal integer type, and the normal C arithmetic operations would
apply to them.

Now answer my actual question: if you have objects of several random
types, how, except by digging deep into YASTL, do you know how
operations are overloaded for this particular combination?
References... yikes! When I want my object to change behind my back
without me even being aware of it, I'll use first-generation FORTRAN and
change the value of 3, thank you very much.


References precisely do NOT change at all. They always point to the same
object! It is NOW That pointers can be changed behind your back to point
to something else. References avoid that!


Learn to read.

Functions which take a reference can change _my_ object behind my back,
and the only way I'd know about it is if I dug up the prototype. You
cannot tell from a single call. With pointers, the difference is always
clear. To illustrate:

With or without references, you know that
function1(*obje ct);
might well change object, because it takes a pointer.
Without references, you can rest assured that
function2(objec t);
will never change object, because it does not take a pointer.
_With_ references, though, you always have to assume that
function3(objec t);
could change object, because you just cannot tell from that call whether
it takes a normal parameter or a reference.
References in the lcc-win32 implementation are exactly equivalent to
pointers with two restrictions:
1) they can't be NULL
2) They are assigned immediately after their definition and point always
to the same object.
3) When using them, they are always immediately dereferenced.
Three restrictions. And bright red uniforms. But those are not
references as it is generally understood. They're also mostly useless. I
cannot imagine wanting such a type when I already have normal pointers.
OTOH, they're also - being toothless - not harmful, the way a real
reference is.

For enlightenment on what is generally meant by "reference" in
programming, see the C++ Standard.
STL... bah. When I want to use a linked list, I want to use _this_
linked list which is tailored to _this_ application, not some Extruded
Datatype Product which may be "good enough" for most applications and
has precisely the wrong properties for mine.


Well, then GO ON USING _that_ list tailored to _that_ application.


So I do - but if my implementation had to come with a shitload of
baggage, and I would have to understand all that shitload just to read
other people's code - instead of just understanding _that_ code - it
would make that implementation a chore to use.
Other people that recognize that a single linked list will be always a
single linked list
....are idiots, much as the people who recognise that an apple will
always be an apple (and happily bite an unripe one).
C is simple, clean and efficient. Let's keep it that way.


Nobody is changing that, as I have stressed over and over.


Yet you want to add three metric tonnes of baggage to this language. How
is that simple, clean and efficient?
We need length prefixed strings,


....like we need a hole in the head.

Richard
May 1 '06 #107
Richard Bos a écrit :
[snip]
Functions which take a reference can change _my_ object behind my back,
and the only way I'd know about it is if I dug up the prototype. You
cannot tell from a single call. With pointers, the difference is always
clear. To illustrate:

With or without references, you know that
function1(*obje ct);
might well change object, because it takes a pointer.
Without references, you can rest assured that
function2(objec t);
will never change object, because it does not take a pointer.
_With_ references, though, you always have to assume that
function3(objec t);
could change object, because you just cannot tell from that call whether
it takes a normal parameter or a reference.

This could be a valid concern Richard of course. But at least in
lcc-win32's implementation this does NOT apply.

If a function takes a structure by value as argument and you pass it a
reference, the reference will be COPIED into the stack and if you change
that it will change the COPY and not the original object as it should
be. Maybe this is not what C++ does, I do not know.

To allow passing references as a pointer you have to write
function3(TYPE &object);

In that case the object can be changed.
References in the lcc-win32 implementation are exactly equivalent to
pointers with two restrictions:
1) they can't be NULL
2) They are assigned immediately after their definition and point always
to the same object.
3) When using them, they are always immediately dereferenced.

Three restrictions. And bright red uniforms. But those are not
references as it is generally understood. They're also mostly useless. I
cannot imagine wanting such a type when I already have normal pointers.
OTOH, they're also - being toothless - not harmful, the way a real
reference is.

For enlightenment on what is generally meant by "reference" in
programming, see the C++ Standard.


I do not really care, I am not trying to copy C++. The only advantage of
references is that they are never NULL in my implementation, and they
are (maybe) not as powerful as the C++ ones.

Why?

Avoiding changing objects behind the back of the programmer.

STL... bah. When I want to use a linked list, I want to use _this_
linked list which is tailored to _this_ application, not some Extruded
Datatype Product which may be "good enough" for most applications and
has precisely the wrong properties for mine.

Well, then GO ON USING _that_ list tailored to _that_ application.

So I do - but if my implementation had to come with a shitload of
baggage, and I would have to understand all that shitload just to read
other people's code - instead of just understanding _that_ code - it
would make that implementation a chore to use.


Excuse me but this arguments AGAINST having to learn over and over again
the zig different list implementations you see? There would be only one!
Other people that recognize that a single linked list will be always a
single linked list

...are idiots, much as the people who recognise that an apple will
always be an apple (and happily bite an unripe one).


C'mon Richard :-)
C is simple, clean and efficient. Let's keep it that way.


Nobody is changing that, as I have stressed over and over.

Yet you want to add three metric tonnes of baggage to this language. How
is that simple, clean and efficient?

We need length prefixed strings,

...like we need a hole in the head.


What is wrong with length prefixed strings Richard?

Can you put forward your *arguments* instead of just sending polemic to
the discussion?

WHY are length prefixed strings wrong?

I am waiting for an argument Richard.

jacob
May 1 '06 #108
Richard Bos wrote:
jacob navia <ja***@jacob.re mcomp.fr> wrote:

It is a pity. Most people in this forum, for instance, that I thought
it would be suchg a group, refuse to discuss about any evolution
and seem nostalgic of some mythical past: they endorse the C89
standard (full 17 years ago) and will start getting VERY upset
if any improvement is proposed. Most of them think, as one of them
said:

"C++ is the future, we are just waiting that C programmers die out."

Tisdale is a known idiot, and you are a known liar.

_This group_ discusses ISO C. It does not discuss any of the gazillions
extensions to it that are out there. In particular it does not discuss
toy compiler suites crufted together by someone who hasn't even read the
Standard properly. It is understandable that this gets up your tits, but
you'll just have to learn to live with being marginal.

Richard


I wrote:

"... start getting VERY upset if any improvement is proposed".

You wrote:

"Liar, marginal, haven't read the standard properly..."

:-)

jacob
May 1 '06 #109
Michael Mair wrote:
.... snip ...
In this way, much as people could choose from a library selection,
they could choose from extensions with standardised semantics and
say "We need basic C plus the list, set, and graph containers plus
the extension for coroutines" or whatever.


Many things are already available from various participants here.
In my case you can find at least strlcpy, ggets, hashlib library
modules on:

<http://cbfalconer.home .att.net/download/>

--
"If you want to post a followup via groups.google.c om, don't use
the broken "Reply" link at the bottom of the article. Click on
"show options" at the top of the article, then click on the
"Reply" at the bottom of the article headers." - Keith Thompson
More details at: <http://cfaj.freeshell. org/google/>
Also see <http://www.safalra.com/special/googlegroupsrep ly/>

May 1 '06 #110

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

65
5406
by: perseus | last post by:
I think that everyone who told me that my question is irrelevant, in particular Mr. David White, is being absolutely ridiculous. Obviously, most of you up here behave like the owners of the C++ language. A C++ interface installation IS ABOUT THE C++ LANGUAGE! The language does not possess the ability to handle even simple file directory manipulation. Those wise people that created it did not take care of it. So, BOOST is a portable...
205
10760
by: Jeremy Siek | last post by:
CALL FOR PAPERS/PARTICIPATION C++, Boost, and the Future of C++ Libraries Workshop at OOPSLA October 24-28, 2004 Vancouver, British Columbia, Canada http://tinyurl.com/4n5pf Submissions
17
1902
by: Howard Gardner | last post by:
/* If I am using boost, then how should I write this program? As it sits, this program is using SFINAE to determine whether or not a type supports particular syntax. I suspect that there is functionality in boost to do this. I have found mpl::has_xxx, which I suspect of being part of the solution. I've also found type_traits::has_nothrow_constructor
2
6636
by: smith4894 | last post by:
{ not sure you're aware of that but there are the newsgroups for all major operating systems. you might want to try asking in the forum 'comp.os.linux.development.apps', since memory-mapped files are not a language-supported structure, they are platform-specific. -mod } I'm trying to use boost serialization to serialize/deserialize data to and from a mmap'd file. I have my own ostream/istream classes that essentially read/write bytes...
5
2400
by: linyanhung | last post by:
I used a boost multi thread in VS 2005 on a Duo Core PC, and made a two thread process. The code is something like this: #include <boost/thread/thread.hpp> void fun1() { //do something
8
6214
by: Matt England | last post by:
My team currently using Boost Threads, but we are considering switching to ZThreads. (We seek cross-platform, C++ multithreading capabilities in an external library.) ZThread(s): http://zthread.sourceforge.net/ http://www.inf.uni-konstanz.de/dbis/members/vinnik/zsim/doc/ Can anyone share their ZThreads experience, either good, bad, or
2
2417
by: ironpingwin | last post by:
Hi! I'd like to make few threads which will run in the same time in C++. I try to use boost library v 1.34.1 (it can't be newest, because I compile on remote machine, which is not administrated by me). In this version there isn't detach() function. How to run functions from two different class in the same time?
13
4541
by: brad | last post by:
Still learning C++. I'm writing some regex using boost. It works great. Only thing is... this code seems slow to me compared to equivelent Perl and Python. I'm sure I'm doing something incorrect. Any tips? #include <boost/regex.hpp> #include <iostream> // g++ numbers.cpp -o numbers -I/usr/local/include/boost-1_35 /usr/local/lib/libboost_regex-gcc41-mt-s.a // g++ numbers.cpp -o numbers.exe
5
3596
by: ameyav | last post by:
Hi All, I am converting some C code into C++ code. The objective is to improve throughput. I have some code written in C which serially parses through a list of files, opens each one of them, processes the data and closes the file. All the files are processed one by one. The obvious performance bottleneck that i could think of is the wasted cpu cycles for file i/o. *My solution* was to spawn multiple threads to do the file i/o. For...
0
9855
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main usage, and What is the difference between ONU and Router. Let’s take a closer look ! Part I. Meaning of...
0
10585
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that captivates audiences and drives business growth. The Art of Business Website Design Your website is...
1
10647
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
0
10292
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the choice of these technologies. I'm particularly interested in Zigbee because I've heard it does some...
0
9426
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own.... Now, this would greatly impact the work of software developers. The idea...
0
5682
by: TSSRALBI | last post by:
Hello I'm a network technician in training and I need your help. I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs. The last exercise I practiced was to create a LAN-to-LAN VPN between two Pfsense firewalls, by using IPSEC protocols. I succeeded, with both firewalls in the same network. But I'm wondering if it's possible to do the same thing, with 2 Pfsense firewalls...
1
4482
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
2
4064
muto222
by: muto222 | last post by:
How can i add a mobile payment intergratation into php mysql website.
3
3132
bsmnconsultancy
by: bsmnconsultancy | last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating effective websites that not only look great but also perform exceptionally well. In this comprehensive...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.