rd4com
rd4com
MModular
Created by Tyler Hillery on 12/4/2024 in #questions
1 Billion nested loop iterations Mojo Implementation - seeking feedback
There is also the Advent of Code in mojo if you'd like to continue šŸ‘ #advent-of-code-2024
67 replies
MModular
Created by Manuel Saelices on 11/28/2024 in #questions
Passing method references to high-order functions
Hello @Manuel Saelices, here is an example with parameters:
@value
struct Foo:
fn myfunc(self) -> Int:
return 42

# Note: capturing [_] for lifetimes/origin !
fn high_order_func[f: fn () capturing [_] -> Int]() -> Int:
return f()

fn main():
foo = Foo()

@parameter
fn foo_myfunc() -> Int:
return foo.myfunc()

#__type_of(foo).__del__(foo^)
print(high_order_func[foo_myfunc]())
@value
struct Foo:
fn myfunc(self) -> Int:
return 42

# Note: capturing [_] for lifetimes/origin !
fn high_order_func[f: fn () capturing [_] -> Int]() -> Int:
return f()

fn main():
foo = Foo()

@parameter
fn foo_myfunc() -> Int:
return foo.myfunc()

#__type_of(foo).__del__(foo^)
print(high_order_func[foo_myfunc]())
8 replies
MModular
Created by christian_drake on 12/4/2024 in #questions
Help I have skill issues
Hello, here is an additional way:
from random import random_ui64, seed
def main():
seed()
for _ in range(10):
var x: UInt8 = random_ui64(0, 255).cast[DType.uint8]()
print(x)
from random import random_ui64, seed
def main():
seed()
for _ in range(10):
var x: UInt8 = random_ui64(0, 255).cast[DType.uint8]()
print(x)
Note: Documentation: random for more functions (rand and randn for different distributions (normal/uniform), for example)
22 replies
MModular
Created by rd4com on 10/18/2024 in #community-showcase
:hatching_chick: mojo-new-web-framework
Yes that's an amazing great idea !
8 replies
MModular
Created by rd4com on 10/18/2024 in #community-showcase
:hatching_chick: mojo-new-web-framework
No description
8 replies
MModular
Created by aurelian on 10/19/2024 in #questions
why is this return a copy?
There is the manual (which is really good ā¤ļøā€šŸ”„): https://docs.modular.com/mojo/manual/values/lifetimes
39 replies
MModular
Created by aurelian on 10/19/2024 in #questions
why is this return a copy?
@aurelian , there is a video that explains this: https://www.youtube.com/watch?v=9ag0fPMmYPQ&ab_channel=Modular
39 replies
MModular
Created by rd4com on 10/18/2024 in #community-showcase
:hatching_chick: mojo-new-web-framework
The idea is: "The back-end and the front-end in the same structs!" It works with websockets, a Dict is on the server for visitors states, that way, less complixity šŸ‘ Doing it that way removes the need for creating rest API, events are sent trough websockets, which is the session, and server send a dom-tree as json then the browser just render it.
8 replies
MModular
Created by jmky on 10/7/2024 in #questions
Is there a disdain for Rust from the Mojo team?
It would not make sense to move lifetimes out of the parameter world, because things can be parametrized on lifetime, and lifetimes can be parametrized. As a superset of python, mojo have theses [] for generics(parametrization), that's all there is to it really šŸ‘
23 replies
MModular
Created by jmky on 10/7/2024 in #questions
Is there a disdain for Rust from the Mojo team?
# print
def main():
print("hello world")

# create variable (not learned types yet)
def main2():
a = "hello world"
b = 1
print(a, b)

# print trough function
def printer(a):
print(a)
def main3():
a = "hello world"
printer(a)

# modify variables
def add_one(inout a: Int):
a+=1
def main4():
a = 0
add_one(a)
print(a)

# here there is another gradual step (currently worked on)
# (create auto dereferenced reference and not learned lifetime yet)

# create safe reference (not learned lifetime yet)
def main5():
a = 0
b = Pointer.address_of(a)
a+=1
print(b[])

# return auto dereference (not learned lifetime yet)
def return_ref(arg: List[Int])->ref[arg]List[Int]:
return arg

def main6():
a = List(1,2,3)
a.append(4)
print(return_ref(a)[3])

# return mutable auto dereference (not learned lifetime yet)
def return_mut_ref(inout arg: List[Int])->ref[arg]List[Int]:
return arg

def main7():
a = List(1,2,3)
return_mut_ref(a).append(4)
print(len(a))


# return inferred mutability auto dereference (not learned lifetime yet)
def return_inferred_mut_ref(ref[_]arg: List[Int])->ref[arg]List[Int]:
return arg

def main8():
a = List(1,2,3)
return_mut_ref(a).append(4)
print(len(a))

# return immutable auto dereference
def return_immutable_ref[L:ImmutableLifetime](ref[L]arg: List[Int])->ref[L]List[Int]:
return arg

def main9():
a = List(1,2,3)
a.append(4)
print(return_immutable_ref(a)[4])
print(len(a))


# return mutable reference
def return_mutable_ref2[L:MutableLifetime](ref[L]arg: List[Int])->Pointer[List[Int],L]:
return Pointer.address_of(arg)

def main10():
a = List(1,2,3)
b = return_mutable_ref2(a)
c = b
c[].append(4)
print(len(a))
# print
def main():
print("hello world")

# create variable (not learned types yet)
def main2():
a = "hello world"
b = 1
print(a, b)

# print trough function
def printer(a):
print(a)
def main3():
a = "hello world"
printer(a)

# modify variables
def add_one(inout a: Int):
a+=1
def main4():
a = 0
add_one(a)
print(a)

# here there is another gradual step (currently worked on)
# (create auto dereferenced reference and not learned lifetime yet)

# create safe reference (not learned lifetime yet)
def main5():
a = 0
b = Pointer.address_of(a)
a+=1
print(b[])

# return auto dereference (not learned lifetime yet)
def return_ref(arg: List[Int])->ref[arg]List[Int]:
return arg

def main6():
a = List(1,2,3)
a.append(4)
print(return_ref(a)[3])

# return mutable auto dereference (not learned lifetime yet)
def return_mut_ref(inout arg: List[Int])->ref[arg]List[Int]:
return arg

def main7():
a = List(1,2,3)
return_mut_ref(a).append(4)
print(len(a))


# return inferred mutability auto dereference (not learned lifetime yet)
def return_inferred_mut_ref(ref[_]arg: List[Int])->ref[arg]List[Int]:
return arg

def main8():
a = List(1,2,3)
return_mut_ref(a).append(4)
print(len(a))

# return immutable auto dereference
def return_immutable_ref[L:ImmutableLifetime](ref[L]arg: List[Int])->ref[L]List[Int]:
return arg

def main9():
a = List(1,2,3)
a.append(4)
print(return_immutable_ref(a)[4])
print(len(a))


# return mutable reference
def return_mutable_ref2[L:MutableLifetime](ref[L]arg: List[Int])->Pointer[List[Int],L]:
return Pointer.address_of(arg)

def main10():
a = List(1,2,3)
b = return_mutable_ref2(a)
c = b
c[].append(4)
print(len(a))
23 replies
MModular
Created by jmky on 10/7/2024 in #questions
Is there a disdain for Rust from the Mojo team?
It is just about parameters (you'll see as you read). There is also that thing called progressive exposure to complexity, i like that there is a progressive way of learning as you build/create, and it requires consistent choices that makes sense: (note how lifetimes are parameters, and how lifetimes can also be parametrized on mutability)
23 replies
MModular
Created by Jack Clayton on 5/11/2024 in #community-showcase
Lightbug HTTP: Mojo web framework
šŸ„³ here is the commit: https://github.com/saviorand/lightbug_http/pull/54 (send receive upgrade)
80 replies
MModular
Created by Jack Clayton on 5/11/2024 in #community-showcase
Lightbug HTTP: Mojo web framework
Working on it šŸ”„ ! already have the connection upgrade to websocket and the ability to receive messages of all sizes ! It is quite difficult to implement all the features (fragments) and many things could raise. Let's focus on an example that can do receive and send. We might need to get on an audio conference and adapt it to lightbug šŸ‘ Documentation: https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_servers#the_websocket_handshake
Would you mind if i PR a websocket.mojo to lightbug in a work_in_progress folder? (That way you can scavage the example and integrate to lightbug)
80 replies
MModular
Created by Jack Clayton on 5/11/2024 in #community-showcase
Lightbug HTTP: Mojo web framework
There is a great test suite to test websocket implementations: https://github.com/crossbario/autobahn-testsuite/ The list of projects and users that used it is impressive šŸ‘ (ping to @a2svior)
80 replies
MModular
Created by Helehex on 8/5/2024 in #community-showcase
Thermo
+1 for undefined behaviours of globals, chased a bug: .value() on empty optional
60 replies
MModular
Created by Jack Clayton on 5/11/2024 in #community-showcase
mojo-ui-html: UI, HTML, CSS
āœ… Add imports, small fixes and MutableLifetime to various widgets šŸ‘ mojo nightly 2024.8.1517 :mojonightly:
4 replies
MModular
Created by rd4com on 8/2/2024 in #community-showcase
šŸ”„šŸŽØšŸŽ› mojo_neovim_theme_app
āœ… Add imports to reflect mojo nightly mojo 2024.8.1517
3 replies
MModular
Created by Jack Clayton on 5/11/2024 in #community-showcase
Lightbug HTTP: Mojo web framework
Hello, SSE(server sent event) can be an easy to use alternative to websockets until it gets implemented with async await: https://www.pubnub.com/guides/server-sent-events/ It basically upgrade an http get request into a single-way stream. The server first set the header to "text/event-stream.", then the socket is stored into an array. Whenever the server need to send data, it just write to the socket šŸ‘ On the browser-side, a simple js callback is set for whenever an event is received. This is particularly useful for 2D games in the browser, but also for your AI ui's ! The advantage is that it has way less complexity than websockets. If there are 10 visitors, it is as easy as looping an array and sending data (usually json). Because the socket stays open, it can be used as an session too. (ping to @a2svior)
80 replies
MModular
Created by PavanMV on 7/29/2024 in #questions
Working LinkedList using pointers
It could be a good idea to sort of do it again (re put-together the parts), and each time before adding the next feature/part, make sure that the tests passes šŸ‘ That way you'll catch and fix the 'bugs' as they come and it is easier to think.
4 replies
MModular
Created by PavanMV on 7/29/2024 in #questions
Working LinkedList using pointers
Hello @PavanMV , the current __moveinit__ implementation does not free existing.data yet (remember, you move what is in some place, to another place, have to free the previous space)
#current implementation
fn __moveinit__(inout self, owned existing:Self):
self = Self()
self.data = self.data.alloc(1)
move_pointee(src=existing.data, dst=self.data)
self.next_ptr = existing.next_ptr
self.prev_ptr = existing.prev_ptr
#need to free existing.data
#current implementation
fn __moveinit__(inout self, owned existing:Self):
self = Self()
self.data = self.data.alloc(1)
move_pointee(src=existing.data, dst=self.data)
self.next_ptr = existing.next_ptr
self.prev_ptr = existing.prev_ptr
#need to free existing.data
4 replies