#3 ... no se... pero lo he estado mirando y ahora no tengo tiempo, pero me da la impresion que lo que hace es lo hacia JAVA: no te dejo tener punteros nulos, pero de strangis.
Pero esto solo digo porque C es mi amor de adolescencia... cuando creci me econie con C++, ... y termine casado con JAVA.
#10 Perdona #4 . No había leído el mandamiento 7: Uso de Bibliotecas: Debes estudiar y utilizar las bibliotecas existentes en lugar de reinventarlas sin motivo.
En rust sería así:
use std::collections::LinkedList;
fn main() {
let mut lista = LinkedList::new();
#4 Y tu me puedes decir como cambiar una bañera por un plato de ducha?
Mandamiento numero 1. Ves haciendo un curso de fontaneria.
El futuro esta en ser fontanero, aun veo muy lejos que un terminator suba a tu casa a cambiarte la cisterna, pero programacion, sysadmin y demas hierbas, vamos a quedar cuatro gatos con la IA, donde antes habian 10, quedaran uno o dos.
#23 cualquier informatico puede aprender a cambiar un plato de ducha pero muy pocos fontaneros pueden aprender a programar. Tranquilo, estais muy a salvo.
#32 Los hombres de verdad usan mariposas. Las liberan y dejan que éstas aleteen delicadamente, creando perturbaciones que acaban modificando los flujos de aire de la atmósfera superior, creando bolsas momentáneas de aire a alta presión, que actúan como lentes que deflectan los rayos cósmicos y los enfocan hacia un disco duro magnético para cambiar los bits deseados.
#24 Entonces me puedo ahorrar el aprendérmelo? Casi parecía como si ahora estar en C++ y no perder el culo en aprender Rust es como uh, adiós trabajo como cuando te lo quita la IA.
#34 Al final eso que dices no deja de ser un lenguaje de alto nivel, aunque sea con mariposas y elementos físicos. Así que ese método está por encima de C.
#42 ¿Y en serio crees que cualquier informático podría cambiar un plato de ducha? No es esa la experiencia que yo tengo con mis compañeros de carrera y de trabajo. Ha llegado un punto en que la mayoría ni cambiar un disco duro.
#45 Lo sé, soy uno de esos profesionales. Y sigo creyendo que no funcionaría. Cuando una persona lleva años haciendo trabajo de oficina es muy complicado que se pueda adaptar a hacer trabajos "sucios". Además con una importante rebaja de sueldo y empezando por abajo. Eso y que el perfil del informático medio es más bien introvertido... No lo veo.
Ni siquiera en mi caso me atrevería a hacer una excepción, y eso que me pasé toda la adolescencia ayudando a mi padre en la obra. Pienso en volver a trabajar asado en verano, helado en invierno, con la piel cuarteada del frio, el calor y el polvo de cemento, rodeado de compañeros prácticamente analfabetos que solo hablan de mujeres y fútbol y me entra ansiedad. Antes solicito un IMV y me pongo a pan y agua.
#50 Pues el código C es fácil de leer a no ser que lo hagas difícil queriendo. La sintaxis de la mayoría de lenguajes está cogida de C y desde luego la obligación de declarar variables justo después de inicio de bloque es un acierto.
#48 En Java todo son variables por referencia aka punteros?
Así que es como Python, que también las variables son por referencia/punteros. Y si no lo sabes, la puedes liar parda y tener comportamientos raros. Es lo que me he encontrado con novatos de programación y al manejar listas les pasaban "cosas raras".
#52 Depende a mi siempre se me hace duro leer el código basado en C. Lo entiendo, pero no sé, tiene algo que no me gusta y hace que me cueste mucho acabar de cogerle el punto y que pueda hacer lo mismo que hago con otros lenguajes de programación.
#56 Ya, yo hablaba en general. Java, PHP o Javascript tampoco me acaban de entrar. Sobre todo Java. PHP lo acabé usando y dominando más o menos.
Supongo que si me pusiera lo podría entender y hacer cosillas. Pero, me cuesta. Y hoy en día no tengo nada que me lleve a aprenderlos.
Y si tuviera que aprender algo relacionado con C, sería C++ que podría tener cierta utilidad práctica para mi en el trabajo.
O si hiciera bibliotecas Python y tuviera que crear código en C para Python. Pero no creo que nunca me haga falta llegar a ese nivel. Y no tengo nivel para hacerlo.
#57 Claro. Pero a lo que tu te refieres es a objetos inmutables, no a variables inmutables.
En tu caso, ni A ni B son inmutables. El objeto 10 y el objeto 8, en cambio, si lo son.
Cuando haces A=10 lo que estás haciendo es cambiar la referencia que había en A (que apuntaba al objeto al objeto 10.
Todo eso suponiendo que el entero 8 y el entero 10 son objetos. Normalmente por eficiencia no es así.
El segundo caso que expones es similar y tu suposición sobre el resultado es errónea. Cuando haces A=[.... estás cambiando la referencia que hay en A, y ya no es la misma referencia que B.
Otra cosa es que cambies el objeto referenciado por A y B.
Espero que se entienda la chapa...
En Java, es igual. Solo cambia el modo de expresarlo ligeramente (java no tiene las listas integradas en el lenguaje)
#43 Cualquiera puede aprender a cambiar un plato de ducha si realmente necesita hacerlo. Pero los que se dedican a cambiar platos de ducha no creo que puedan aprender a programar en condiciones.
Tus compañeros de carrera y trabajo no saben un disco duro porque no lo necesitan y porque pueden pagar a alguien para hacerlo. Tu pagas para que alguien te haga el pan, esso no significa que no puedas aprender a hacerlo en 1 dia.
#60 Cuanto desprecio por el saber hacer ajeno. ¿De verdad crees que mi primer pan saldría igual de rico que el de un panadero que lleva toda la vida haciendo pan? ¿Que mi primer plato de ducha no estaría torcido ni tendría fugas? Y por otra parte, a programar puede aprender cualquiera con un CI por encima de 85 en un par de semanas. A programar bien... Eso es otra historia.
Y aquí no hablamos de poner un plato de ducha como hobby, sino como empleo. Poner un par de docenas de platos de ducha cada semana si uno quiere comer. ¿En serio piensas que los oficinistas que llevamos trabajando sentados toda la vida aguantaríamos ese ritmo? Mucho wishful thinking veo yo ahí.
#62 si es muy facil. Con practica y con un mindset de ingeniero no es que puedas, es que seguro que lo vas a hacer mejor y mas eficientemente que el que lleva toda la vida. En unas semanas puedes estar vendiendo pan y poniendo platos de ducha sin problema (spoiler: los obreros profesionales hacen chapuzas y ponen platos de obra torcidos y con fugas)
Pero ningun albañil o panadero podria escribir un codigo que vaya a producion en semanas. Es totalmente imposible. Solo un pequeño porcentaje podria despues de años de estudio y practica pero para la mayoria seria algo imposible.
#32 Yo he usado tarjetas de cartón y una aguja para perforarlas, pero no para programar, solo para duplicar alguna estropeada. Y no soy un hombre de verdad, solo un yayo mirando meneame.
1. Amarás a C sobre todas las cosas.
2. No tomarás el nombre de una variable en vano.
3. Santificarás las listas.
4. Honrarás a Dennis Ritchie.
5. No matarás procesos zombis.
6. No cometerás actos impuros (violación del segmento).
7. No robarás código sin licencia.
8. No harás falsas declaraciones de variables.
9. No consentirás pensamientos ni deseos impuros. (Programar en otro lenguaje)
10. No codiciarás el código ajeno.
#68 Pues... mas MFC... que eran mejor que programar windos a lo cafre con la API, y mirarte lo de lo de llamar a funciones en win32 a base de poner segmentos de memoria y todo eso....DIOS!!! como difrute esa clase, pero que mal lo pase para hace un puto notepad. Ese bucle de eventos con 50 case dependiento de si habian movido el raton o le habian dado con la poila al teclado!!!!
#48#53 Pero hace 30 anios nos lo vendieron con que "no habia punteros ya"... habia referencias que eran lo mismo, pero no podias modificarles (sumar cosas a punteros o asignarlas).
#28 Es que JAVA nos lo vendieron hace 30 anios con "no hay punteros"... pero luego si los habia.
Igual que lo de es multiplataforma... si, pero no multiversion. La de ostias que habia en los 1999-2005 por esos errores de que no existia le metodo porque lo habian quitado de una version a otra.
Y luego el noclassdeffound de los cojones... que todo el mundo se quedaba a cuadros y es un error del linker. Pero la gente que no habia linkado codigo no sabian de que estabas hablando. A partir de ... alrededor del 2007, habia gente que no sabia que era linkar el codigo y se quedaban anodado/as cuando les explicabas que habia fallado el linker: la definicion estaba ahi, pero la biblioteca no la tenia. En C o C++ era normal, en JAVA no es tan normal, pero cuando pasa es un: " EIHN!!?!?!?!?!?"
#21 Pues JAVA se me ha divorciado hace 2 anios y quiere su distancia (ahora soy SRE) y yo tamben, pero Python y Data Science es mi nuevo amor de senectud. Aunque RUST me esta haciendo morritos, pero su padre es un puto mafioso (Microsoft) que no me da nada de confianza.
#20 Yo aprendi android, ... y ... no se ... a ver que que los moviles son ordenadores muy pequenios... . Estaba muy bien eso de aprender esas gilipolleces, esos frameworks, ... pero ... cualquier persona que quiere que un puto cahcarro que le cabe en la mano, vaya a hacer lo mismo que mi desktop que tiene un huevo de poder, es que es gilipollas.
#73 ¿?
Un puntero y una referencia son exactamente lo mismo. Y claro que puedes modificar tanto la referencia que almacena la variable como el contenido de la información referenciada (salvo las "constantes", claro)
#74Es que JAVA nos lo vendieron hace 30 anios con "no hay punteros"
Pero si en Java todo son punteros. Salvo los tipos básicos todo lo demás, hasta los arrays, son punteros. No es posible pasar argumentos por valor, y no existen los punteros siempre válidos como las referencias en C++ o Pascal. El problema llega hasta tal punto que existen métodos en la librería estándar para validar argumentos en los constructores[1] de lo habitual que es ese boilerplate, porque no hay forma de indicar al lenguaje que no acepte argumentos nulos.
#80 solo si compras un móvil caro, los normales no tanto...
Y como bien dices, un móvil (caro) es como tener un ordenador viejo de cojones.
De todas formas, l la limitación de un móvil no es el hardware desde mi punto de vista, es el software. No puedes meter sistemas operativos a tu antojo, no puedes tener sistemas virtualizados, el control de red es una mierda, la interfaz usuario máquina es incomodísima para crear contenido...
Cómo herramienta de consumo de información y cámara de fotos/video. Genial, eso sí. Yo no podría vivir ya con un móvil tonto sin echar de menos todo lo que puedo consultar y consumir con uno inteligente. Pero a los que nos gusta crear, un móvil se nos queda muy manco sin un sobremesa o portátil de compañero inseparable
#82 Nooooo... el marketing en el 95-97 era que "no habia punteros" ... cuando nos vimos el "null pointer" entonces nos dimos cuenta que que era todo marketing.
Me acuerdo de mi profesor de lenguaje Ensamblador y Fortran:
-Ensamblador de la 370: "no la cagauies, cuando corrais incluso un programa de los de ejercicio de la clase, teneis que poner las instrucciones de cambio de rutina al principio, porque si no el sistema no sabra desde donde os ha llamado y os habeis cargado el maiframe de la universidad." Basicamente guardar el puntero desde donde te iban a llamar a tu programa.
-Fortran: "El ejercicio 7 es sacar la direccion del programa, a partir de una funcion.". Basicamente ire para atras en la pila.
#79 Yo tambien tengo pesadillas.... No se ni donde tengo el codigo de ese clase: Windows Programming... lo que si se es que en el 90-91 por alguna razon, empezaron a traer al kiosco de mi barrio la revista "Microsoft Programmer Journal" que te contaba todo eso, y me sirvio para mi clase de Windows Programming en el 96.
Pero ... Motif... eso si que es para superheroes... Motif es ... para "Real Programmers don't quiche".... . La madre que los pario.
Ps: Es una simple coña/puya.
Pero esto solo digo porque C es mi amor de adolescencia... cuando creci me econie con C++, ... y termine casado con JAVA.
CC #4
use std::cell::RefCell;
use std::rc::Rc;
type Link<T> = Option<Rc<RefCell<Node<T>>>>;
struct Node<T> {
value: T,
prev: Link<T>,
next: Link<T>,
}
struct DoublyLinkedList<T> {
head: Link<T>,
tail: Link<T>,
}
impl<T> DoublyLinkedList<T> {
fn new() -> Self {
DoublyLinkedList { head: None, tail: None }
}
fn append(&mut self, value: T) {
let new_node = Node {
value: value,
prev: None,
next: None,
};
let new_node = Rc::new(RefCell::new(new_node));
match self.tail.take() {
Some(old_tail) => {
old_tail.borrow_mut().next = Some(new_node.clone());
new_node.borrow_mut().prev = Some(old_tail);
self.tail = Some(new_node);
},
None => {
self.head = Some(new_node.clone());
self.tail = Some(new_node);
}
}
}
fn pop_front(&mut self) -> Option<T> {
self.head.take().map(|old_head| {
match old_head.borrow_mut().next.take() {
Some(new_head) => {
new_head.borrow_mut().prev.take();
self.head = Some(new_head);
},
None => {
self.tail.take();
}
}
Rc::try_unwrap(old_head).ok().unwrap().into_inner().value
})
}
}
Uso de Bibliotecas: Debes estudiar y utilizar las bibliotecas existentes en lugar de reinventarlas sin motivo.
En rust sería así:
use std::collections::LinkedList;
fn main() {
let mut lista = LinkedList::new();
Borland C++ es "moderno" para mi.
doc.rust-lang.org/std/collections/struct.LinkedList.html
A doubly-linked list with owned nodes.
Mandamiento numero 1. Ves haciendo un curso de fontaneria.
El futuro esta en ser fontanero, aun veo muy lejos que un terminator suba a tu casa a cambiarte la cisterna, pero programacion, sysadmin y demas hierbas, vamos a quedar cuatro gatos con la IA, donde antes habian 10, quedaran uno o dos.
VesVeOption<Rc<RefCell<Node<T>>>>
Option(Rc(RefCell(Node(T)))))))))))))))))))
Los hombres de verdad usan tarjetas de cartón, aguja y pulso firme.
...y para tí también :)
cc #32
No es más que un C para acojonaos.
Los profesionales de la informatica tienen que lidiar con aprender cosas que no saben hacer todos los putos dias de su vida.
Ni siquiera en mi caso me atrevería a hacer una excepción, y eso que me pasé toda la adolescencia ayudando a mi padre en la obra. Pienso en volver a trabajar asado en verano, helado en invierno, con la piel cuarteada del frio, el calor y el polvo de cemento, rodeado de compañeros prácticamente analfabetos que solo hablan de mujeres y fútbol y me entra ansiedad. Antes solicito un IMV y me pongo a pan y agua.
Así que es como Python, que también las variables son por referencia/punteros. Y si no lo sabes, la puedes liar parda y tener comportamientos raros. Es lo que me he encontrado con novatos de programación y al manejar listas les pasaban "cosas raras".
Si, salvo los tipos primitivos que son completamente innecesarios y existen solo por eficiencia.
El aspecto, me refiero.
A=8
B=A
A=10
Resultado:
A=10
B=8
Per suponiendo que pudieras hacer algo así con arrays (obviamos las declaraciones necesarias)
A= ["a","d"]
B=A
A=["a","C"]
Resultado:
A=["a","C"]
B=["a","C"]
¿verdad? O no podrías hacer esas operaciones en Java de manera tan fácil?
Supongo que si me pusiera lo podría entender y hacer cosillas. Pero, me cuesta. Y hoy en día no tengo nada que me lleve a aprenderlos.
Y si tuviera que aprender algo relacionado con C, sería C++ que podría tener cierta utilidad práctica para mi en el trabajo.
O si hiciera bibliotecas Python y tuviera que crear código en C para Python. Pero no creo que nunca me haga falta llegar a ese nivel. Y no tengo nivel para hacerlo.
En tu caso, ni A ni B son inmutables. El objeto 10 y el objeto 8, en cambio, si lo son.
Cuando haces A=10 lo que estás haciendo es cambiar la referencia que había en A (que apuntaba al objeto al objeto 10.
Todo eso suponiendo que el entero 8 y el entero 10 son objetos. Normalmente por eficiencia no es así.
El segundo caso que expones es similar y tu suposición sobre el resultado es errónea. Cuando haces A=[.... estás cambiando la referencia que hay en A, y ya no es la misma referencia que B.
Otra cosa es que cambies el objeto referenciado por A y B.
Espero que se entienda la chapa...
En Java, es igual. Solo cambia el modo de expresarlo ligeramente (java no tiene las listas integradas en el lenguaje)
Tus compañeros de carrera y trabajo no saben un disco duro porque no lo necesitan y porque pueden pagar a alguien para hacerlo. Tu pagas para que alguien te haga el pan, esso no significa que no puedas aprender a hacerlo en 1 dia.
Y aquí no hablamos de poner un plato de ducha como hobby, sino como empleo. Poner un par de docenas de platos de ducha cada semana si uno quiere comer. ¿En serio piensas que los oficinistas que llevamos trabajando sentados toda la vida aguantaríamos ese ritmo? Mucho wishful thinking veo yo ahí.
Pero ningun albañil o panadero podria escribir un codigo que vaya a producion en semanas. Es totalmente imposible. Solo un pequeño porcentaje podria despues de años de estudio y practica pero para la mayoria seria algo imposible.
En fin, creo que no nos vamos a poner de acuerdo. Que tengas buena tarde.
gustedt.gitlabpages.inria.fr/modern-c/
2. No tomarás el nombre de una variable en vano.
3. Santificarás las listas.
4. Honrarás a Dennis Ritchie.
5. No matarás procesos zombis.
6. No cometerás actos impuros (violación del segmento).
7. No robarás código sin licencia.
8. No harás falsas declaraciones de variables.
9. No consentirás pensamientos ni deseos impuros. (Programar en otro lenguaje)
10. No codiciarás el código ajeno.
Igual que lo de es multiplataforma... si, pero no multiversion. La de ostias que habia en los 1999-2005 por esos errores de que no existia le metodo porque lo habian quitado de una version a otra.
Y luego el noclassdeffound de los cojones... que todo el mundo se quedaba a cuadros y es un error del linker. Pero la gente que no habia linkado codigo no sabian de que estabas hablando. A partir de ... alrededor del 2007, habia gente que no sabia que era linkar el codigo y se quedaban anodado/as cuando les explicabas que habia fallado el linker: la definicion estaba ahi, pero la biblioteca no la tenia. En C o C++ era normal, en JAVA no es tan normal, pero cuando pasa es un: " EIHN!!?!?!?!?!?"
El dia que le tuve que decir a un angloparlante lo que significaba... el tio casi se mea de la risa.
Un puntero y una referencia son exactamente lo mismo. Y claro que puedes modificar tanto la referencia que almacena la variable como el contenido de la información referenciada (salvo las "constantes", claro)
Joer, casi vómito. No me recuerdes eso
Pero si en Java todo son punteros. Salvo los tipos básicos todo lo demás, hasta los arrays, son punteros. No es posible pasar argumentos por valor, y no existen los punteros siempre válidos como las referencias en C++ o Pascal. El problema llega hasta tal punto que existen métodos en la librería estándar para validar argumentos en los constructores[1] de lo habitual que es ese boilerplate, porque no hay forma de indicar al lenguaje que no acepte argumentos nulos.
[1] docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Objects
Y como bien dices, un móvil (caro) es como tener un ordenador viejo de cojones.
De todas formas, l la limitación de un móvil no es el hardware desde mi punto de vista, es el software. No puedes meter sistemas operativos a tu antojo, no puedes tener sistemas virtualizados, el control de red es una mierda, la interfaz usuario máquina es incomodísima para crear contenido...
Cómo herramienta de consumo de información y cámara de fotos/video. Genial, eso sí. Yo no podría vivir ya con un móvil tonto sin echar de menos todo lo que puedo consultar y consumir con uno inteligente. Pero a los que nos gusta crear, un móvil se nos queda muy manco sin un sobremesa o portátil de compañero inseparable
En el resto tienes razón. El problema es el software.
La.UE debería legislar de modo que asegure que nuestros móviles son realmente nuestros.
Me puedes dar alguna recomendación de ese precio?
Los llamaban "referencias".
Me acuerdo de mi profesor de lenguaje Ensamblador y Fortran:
-Ensamblador de la 370: "no la cagauies, cuando corrais incluso un programa de los de ejercicio de la clase, teneis que poner las instrucciones de cambio de rutina al principio, porque si no el sistema no sabra desde donde os ha llamado y os habeis cargado el maiframe de la universidad." Basicamente guardar el puntero desde donde te iban a llamar a tu programa.
-Fortran: "El ejercicio 7 es sacar la direccion del programa, a partir de una funcion.". Basicamente ire para atras en la pila.
Eso eran los punteros a funciones y programas.
Pero ... Motif... eso si que es para superheroes... Motif es ... para "Real Programmers don't quiche".... . La madre que los pario.
Object x=null;
x=new ArrayList();
x=new Ladrillo()
Lo que no puedes hacer es poner "un número" en una referencia. Cosas del tipado fuerte.
Es el assembler de.los GUI
512M de RAM para 20 tíos y una potencia de proceso menor a la de un Pentium (que no existía)
Vaya cipostio. Menos mal que luego con GNome y KDE la cosa no estaba tan mal.